\chapter{Processamento Paralelo: Sua Difusão e Uso}
\label{PPSDU}
\cutname{progparaleladifusaoeuso.html}

% O objetivo central deste capítulo é levantar os aspectos gerais que  tem estimulado o uso do processamento paralelo, bem como aqueles que tem restringido seu emprego. O foco são as implicações da tecnologia nos mercados produtor e consumidor.

Um problema central em computação paralela, segundo SKILLICORN \cite{SKI94}, é o desencontro entre as necessidades do software paralelo e as propriedades das arquiteturas paralelas sobre as quais eles serão executados. Este distanciamento entre o hardware e o software paralelo oscila com rapidez, isto porque o tempo de vida de uma arquitetura paralela é, via de regra, medido em anos, enquanto que o tempo de vida desejável para qualquer software de grande porte é medido em décadas. Dentro de uma visão tradicional, o procedimento é, no espaço de alguns anos, reescrever o software à medida que uma nova tecnologia de arquitetura paralela é disponibilizada no mercado. A reescrita de código, dentre outros problemas, introduz custos e prazos elevados.

Isso hoje é causado principalmente por causa da evolução rápida desta área da computação. Apesar da área de pesquisa já ser antiga, a sua aplicação em ambientes corporativos é recente e vem evoluindo muito rapidamente.

\section{Aspectos para a Adoção do Processamento Paralelo}
\label{AFAPP}

Nesta seção serão tratados aspectos que podem ser vistos como estímulos para adoção do processamento paralelo, seja a partir do ponto de vista da exaustão das arquiteturas seqüenciais em função dos limites impostos pela tecnologia atual, seja considerando as necessidades dos diferentes segmentos usuários.


\subsection{Barreiras ao Crescimento da Freqüência de Operação dos Processadores}

Como regra geral, quanto maior a freqüência de operação do processador (\textit{clock}), maior desempenho terá o computador. Porém é importante ter presente que, uma vez mantidos aspectos como conjunto de instruções, arquitetura, etc., o desempenho efetivo (registrado pelos \textit{benchmarks} tradicionais, tais como MIPS, MFLOPS, SPECmarks) não irá crescer na mesma razão do \textit{clock}. Outros aspectos precisariam acompanhar o crescimento do \textit{clock}, como por exemplo a eficiência (largura de banda) de acesso à memória. Independente desta posição não otimista para a relação desempenho/\textit{clock}, considerando o nível em que se encontra atualmente a velocidade de operação dos processadores, a mesma já enfrenta entraves tecnológicos para seu aumento de performance.

Destacam-se os seguintes aspectos como limitadores para o crescimento do \textit{clock} (HWANG \cite{HWA93}): \textbf{O consumo de energia e a conseqüente dissipação térmica}- os componentes projetados para \textit{clocks} elevados (tais como SRAM ou ECL) apresentam índices de consumo e dissipação térmica bem mais elevados que os similares (DRAM, CMOS) para \textit{clocks} mais modestos. \textbf{A dimensão do processador e seus componentes acessórios}- limitados pela velocidade da luz, os elétrons podem percorrer distâncias menores à medida que a duração do pulso de \textit{clock} diminui. Um \textit{clock} de 1 GHz (1000 MHz) limita a distância máxima de deslocamento dos elétrons à grandeza de centímetros (o valor exato depende das características do substrato semicondutor). Deste modo, para operar nesta velocidade se fazem necessários componentes eletrônicos altamente densos, bem como cuidados extremos com o comprimento dos condutores que os interligam. Esta elevada densidade de integração e a restrição nas dimensões globais dificulta o fluxo do elemento resfriador (ar, água, etc.), o que, por sua vez, introduz severas dificuldades no processo de dissipação térmica. Além disto, é preciso considerar o fato que em freqüências elevadas ficam potencializados os fenômenos de capacitâncias e indutâncias parasitas, os quais dificultam sobremaneira os níveis de integração dos semicondutores.

Estes dois aspectos independentes se interrelacionam no equilíbrio entre desempenho e possibilidade de operação estável e confiável. As arquiteturas de alto desempenho são utilizadas, quase sempre, em missões críticas e pelo seu custo não é usual mais do que uma unidade em cada instalação.

\subsection{Largura de Banda no Acesso à Memória}

O aproveitamento do crescente poder computacional dos modernos processadores esbarra no de fato que o fluxo de dados possível entre os mesmos e a memória não cresce na mesma proporção. Este comportamento foi denominado \textit{Gargalo de }\textit{Von}\textit{ }\textit{Neumann}, e caracteriza que o poder de processamento disponibilizado para computação de um problema é limitado em função da taxa de transferência de dados e instruções entre a memória e o processador.

O uso de vários processadores na solução do problema faculta, com a soma de suas taxas de transferência individuais, a superação do \textit{Gargalo de }\textit{Von}\textit{ }\textit{Neumann}. Existem diferentes formas de interligar diversas memórias a vários processadores na definição de uma máquina paralela.

Cada estratégia de interconexão (vide item \ref{redesinter}) tem implicações diretas em aspectos operacionais, tais como: emprego genérico (possibilidade de uso com desempenho desta máquina paralela a um número maior de naturezas de problemas), na sua escalabilidade e no seu custo, dentre outros (CULLER \cite{CUL99}).


\subsection{Paralelismo Intrínseco do Mundo Real}

Os fenômenos naturais são inerentemente paralelos. Deste modo, seria natural e direto expressar as computações pertinentes ao mundo real de forma paralela, ou ao menos de uma forma que não impeça o paralelismo. Escrever programas seqüenciais, via de regra, implica impor uma ordem as ações que são independentes e que poderiam ser executadas concorrentemente.

Na programação seqüencial, é inevitável arbitrar uma particular ordem na qual as ações são colocadas. Isto pode tornar o computador um empecilho para a percepção de novos conceitos. Some-se a isto o fato que situações nas quais a ordem de execução das ações é importante para o melhor entendimento do problema real, são difíceis de diferenciar daquelas nas quais a ordem de execução praticamente não importa (SKILLICORN \cite{SKI98}).


\subsection{A Relação Custo-Benefício dos Processadores de Última Geração}

Mesmo que a recente tendência histórica de crescimento da velocidade dos processadores se mantenha, a computação paralela possibilita para muitas aplicações uma relação custo/benefício melhor do que a conseguida ao utilizar equipamentos com um só processador de última geração. Isto ocorre, em grande parte, devido aos custos de projeto e fabricação de cada nova geração de processadores.

A cada novo processador mais poderoso, o preço da geração anterior cai consideravelmente; deste modo, agrupar em um equipamento paralelo, processadores mais antigos provê um alternativa computacional de custo competitivo. Tendo em vista que cada nova geração introduz um acréscimo de desempenho com magnitude da ordem de décimos, mesmo modestos agrupamentos de processadores não tão atuais, são viáveis no que diz respeito ao desempenho global. Este aspecto se potencializa ainda mais se a escolha tecnológica do hardware para interligação não apresentar custo elevado.

Esta tendência é, em parte, responsável pela popularidade das estações de trabalho em rede de alta velocidade (100 Mbps no mínimo) como alternativa de equipamento para processamento paralelo (CULLER \cite{CUL99}). E ainda mais reforçada com as quedas de preços das interfaces de comunicação Gigabit e seus componentes como switches.


\subsection{Aplicações Extremamente Complexas}

Existem aplicações que demandam elevadíssimo poder computacional. Por mais poderoso que possa ser determinado processador, dentro do atual estado tecnológico, a combinação de vários destes em uma arquitetura para processamento paralelo torna disponível maior capacidade de processamento que a possível com um único processador.

Como exemplo de aplicações que atualmente demandam grandes recursos computacionais destacam-se:

\begin{itemize}
	\item inteligência artificial, incluindo redes neurais, robótica e reconhecimento de padrões;
	\item análise de elementos finitos, onde aparecem diversos tipos de equações diferenciais aplicadas a mecânica estática, eletromagnetismo, e dinâmica dos fluidos;
	\item simulação, onde se sobressaem as técnicas de Monte Carlo;
	\item processamento de sinais, envolvendo FFT (\textit{Fast Fourier Transformation}) sobre grandes volumes de dados, processamento de imagens e processamento sísmico;
	\item algoritmos básicos em ciência da computação: classificação, busca e processamento de árvores e grafos;
	\item grandes bancos de dados com resposta em tempo real (OLTP  \textit{On Line Transaction Processing});
 \end{itemize}


Freqüentemente é sugerido que os equipamentos paralelos, sobretudo os de grande porte, são comprometidos com propósitos especiais. A idéia inerente a esta afirmação é que somente um pequeno conjunto de aplicações poderia ser executado eficientemente em um hardware paralelo. A lista de aplicações acima indica exatamente o contrário; a ineficiência do processamento paralelo tem muito mais relação com as ``dimensões do problema"~ do que com as particularidades de um domínio específico do conhecimento humano. Nos últimos dez anos os computadores paralelos tem sido programados com eficiência tanto para aplicações do mundo comercial como para o da pesquisa e desenvolvimento (MORSE \cite{MOR94}).

\subsection{Suporte à Tolerância a Falhas}

Muitas aplicações críticas (controle de tráfego aéreo, sistemas de controle industriais, automações bancárias, etc.) exigem um regime de operação sem interrupções. A existência de redundância de hardware, inerente às arquiteturas paralelas, oferece um suporte natural às técnicas de tolerância a falhas. Alguns processadores podem monitorar e registrar a operação do sistema, no momento que for detectado alguma disfunção, as partes envolvidas podem ter suas funções continuadas por outras. Deste modo, no caso de falhas, o equipamento paralelo pode manter a computação corrente, possivelmente ocorrendo tão somente uma diminuição no desempenho na prestação dos serviços (HWANG \cite{HWA93}).


\subsection{Crescimento Modular}

Esta característica diferencia fortemente as arquiteturas paralelas e distribuídas dos equipamentos de grande porte (\textit{mainframes}) tradicionais. Nas arquiteturas com um único processador, o usuário no momento do crescimento da plataforma, precisa prever sua demanda no mínimo a médio prazo. Isto leva a um crescimento feito aos saltos. Logo após a expansão, é comum a instalação como um todo apresentar uma relação custo/benefício ruim. Essa relação pode ser vista na figura \ref{custo-beneficio-escalabilidade} que mostra a escalada dos custos ao longo do tempo para as duas plataformas (alta plataforma (\textit{mainframe}) e baixa plataforma (cluster e máquinas padrões de mercado)) em relação a capacidade de carga do sistema. Pode-se ver nessa figura claramente os saltos dados, pelo excesso de capacidade de processamento. O arco cinza escuro na figura \ref{custo-beneficio-escalabilidade} mostra a demanda de processamento ao longo do tempo, a linha vermelha mostra a linha de crescimento de custos (C1) para o ambiente em baixa plataforma e por último os degrais cinza claro (C2)  mostram o crescimento de custos para a plataforma alta.

\begin{figure}[!htb]
	\centering
	\insimg{0.8}{imagens/escalabilidade-custo.png}
% escalabilidade-custo.png: 72dpi, width=29.70cm, height=20.99cm, bb=0 0 842 595
	\label{custo-beneficio-escalabilidade}
	\caption{Relação Carga X Custo de investimento, para plataforma Baixa X Alta}
\end{figure}


Tanto para o fornecedor quanto para o usuário, é muito oportuno que a arquitetura possa ser expandida gradualmente através da adição de módulos. Esta possibilidade permite uma melhor adequação da curva investimentos \& produtividade, uma vez que o equipamento poderá crescer dentro de uma determinada faixa, tendo como regulador a demanda de serviço real (MORSE \cite{MOR94}).

% \section{Aspectos Desfavoráveis à Adoção do Processamento Paralelo}
% 
% O processamento paralelo está comercialmente presente há aproximadamente 20 anos, com a fabricação dos equipamentos CDC6600 e IBM360/91. Tem sido utilizado com sucesso em ciência e engenharia, ou até mesmo em áreas novas como inteligência artificial e simulação financeira. A computação paralela, porém está longe de ser uma metodologia central em ciência da computação e a venda de hardware/software paralelo representa uma pequena parcela dos negócios de equipamentos para computação. Esta seção objetiva identificar os principais aspectos que contribuem para esta situação.


\subsection{Disponibilidade de Software Aplicativo}
\label{DSA}

É exatamente a disponibilidade de software de terceiros com qualidade (um número típico para as diferentes marcas seria 1500 aplicações) que tem potencializado o mercado das estações de trabalho de elevado desempenho. Por sua vez, a ausência de aplicações disponíveis no mercado tem sido um dos fatores a restringir a adoção de equipamentos paralelos por parte das empresas em geral. Poucas empresas, à exceção das instituições de pesquisa e ensino, não se intimidam ante os esforços para portar e/ou desenvolver software para exploração do paralelismo. Este aspecto acaba sendo significativo no momento de decidir pela não adoção de um equipamento paralelo.
Tentando traçar um perfil, é possível dizer que no binômio ``fazer \& comprar", o software paralelo que uma empresa poderia necessitar, ainda está muito polarizado no fazer.

Do ponto de vista de uma empresa que desenvolve e comercializa software, a decisão de investir no mercado de processamento paralelo ou em outras frentes (por exemplo, melhoramentos em produtos já amplamente utilizados) é influenciada por alguns fatores (MORSE \cite{MOR94}):
	
\begin{itemize}
	\item \textbf{pequena base instalada}: o mercado de equipamentos paralelos é pequeno, independente do referencial que for utilizado. Os equipamentos maiores estão nos laboratórios governamentais, os quais, via de regra, tem sua própria equipe de desenvolvimento. Outro grupo de equipamentos está em universidades, utilizados principalmente para pesquisa e ensino. Por sua vez, as empresas que fazem desenvolvimento tecnológico de seus produtos com o suporte de computadores paralelos (empresas químicas, automóveis, aviões), por questões de propriedade intelectual, também tem seu próprio grupo de programação.

	\item \textbf{elevado custo de conversão}: atualmente, para uma empresa migrar seu produto de software de uma arquitetura tradicional para uma plataforma paralela, terá de ter uma equipe de desenvolvimento conhecedora do hardware paralelo utilizado. Em função deste hardware, poderão ser necessárias modificações no \textit{layout} de dados, no fluxo de controle, e até mesmo nos algoritmos básicos utilizados. O ganho de desempenho, principal razão de ser da adoção do hardware paralelo, poderá ser prejudicado com a não observância criteriosa destas modificações quase sempre indispensáveis.

% 	\item \textbf{ausência de padrões}: as linguagens para desenvolvimento de aplicações, bem como o hardware paralelo, variam de fornecedor para fornecedor, e na maioria das vezes mesmo mantido o fornecedor, de equipamento para equipamento. Além disso, mesmo que uma linguagem seja adotada como padrão, a necessidade de otimizar os algoritmos empregados ao novo hardware paralelo em questão, normalmente irá exigir um esforço de recodificação significativo.

	\item \textbf{validação}: testar o quão correto está o porte de um software para uma máquina paralela pode se mostrar uma tarefa bastante complexa, até mesmo porque os resultados das implementações seqüencial e paralela podem apresentar diferenças. Isto se potencializa para códigos numéricos, nos quais a convergência, a precisão e o erro acumulado, são fortemente influenciados pelo tamanho do problema. A decisão por uma arquitetura paralela, normalmente contempla problemas com dimensões bem maiores que aquelas possíveis de serem computadas em equipamentos com um só processador. Apesar dos matemáticos garantirem que o resultado de uma soma de números não depende da ordem de sua realização (propriedade associativa da soma), o hardware de ponto flutuante pode apenas se aproximar desta abstração. Considerações similares a esta fazem da validação do software paralelo uma atividade complexa e tratada com muita cautela pelos desenvolvedores de software, até mesmo porque incorreções na versão paralela podem lançar dúvidas sobre a qualidade da versão seqüencial já disponível.

% 	\item \textbf{instabilidade no fornecimento}: a perspectiva de portar software para um equipamento paralelo, com toda complexidade que lhe é inerente, que breve poderá desaparecer é fortemente desistimulante. No item \ref{IFor} são apresentadas algumas razões para a mortalidade precoce de fornecedores de hardware paralelo. Por outro lado, mesmo que a empresa permaneça no mercado, a busca pelo maior desempenho possível faz com que, em alguns casos, nem mesmo o conjunto de instruções se mantenha de uma geração do equipamento para outra. Como conseqüência, os códigos aplicativos desenvolvidos para uma geração precisam ser descartados, ou substancialmente modificados, quando a próxima geração do hardware é introduzida no mercado.
\end{itemize}




% \subsection{Padronização}
% \label{padron}
% 
% Alguns fornecedores de software disponibilizam bibliotecas e ambientes que processam em várias plataformas paralelas. Destacam-se o Express da ParaSoft, Linda da SCA e PVM do Oak Ridge Labs.
% 
% 
% A proposta é que uma aplicação escrita utilizando um destes pacotes, poderá ser processada em qualquer um dos equipamentos que os suportarem. Inclusive neste caso se enquadram as redes de estações de trabalho. Esta compatibilidade é porém muitas vezes severamente inviabilizada pelas diferenças operacionais, existentes mesmo entre os hardwares semelhantes, as quais influenciam fortemente em aspectos inerentes as tarefas paralelas  (mapeamento, avaliação de granulosidade razoável, dentre outros).
% 
% 
% A tabela \ref{tab:arq_paralela} apresenta a diversidade entre as arquiteturas, tendo por base três aspectos importantes das mesmas: o nodo processador, a topologia da rede de interconexão e o paradigma de controle.
% 
% 
% \begin{flushleft}
% \begin{table}[!htb]
% \begin{tabular}{m{95.65pt}m{105.45pt}m{85.05pt}m{106.35pt}}
% \hline
% 	\multicolumn{1}{|m{95.65pt}|}{
% 	\begin{minipage}{95.65pt}
% 	\begin{flushleft}
% 		\textbf{Equipamento}
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{105.45pt}|}{
% 	\begin{minipage}{105.45pt}
% 		\begin{flushleft}
% 			\textbf{Nodo}\textbf{ Processador}
% 		\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{85.05pt}|}{
% 	\begin{minipage}{85.05pt}
% 	\begin{flushleft}
% 		\textbf{Interconexão}
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{106.35pt}|}{
% 	\begin{minipage}{106.35pt}
% 		\begin{flushleft}
% 			\textbf{Controle}
% 		\end{flushleft}
% 	\end{minipage}
% 	}
% \\\hline
% 	\multicolumn{1}{|m{95.65pt}|}{
% 	\begin{minipage}{95.65pt}
% 		\begin{flushleft}
% 			Thinking Machine CM-2
% 		\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{105.45pt}|}{
% 	\begin{minipage}{105.45pt}
% 		\begin{flushleft}
% 			Bit Serial e Ponto Flutuante
% 		\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{85.05pt}|}{
% 	\begin{minipage}{85.05pt}
% 		\begin{flushleft}
% 			Hipercubo Multiplexado
% 		\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{106.35pt}|}{
% 	\begin{minipage}{106.35pt}
% 		\begin{flushleft}
% 			SIMD
% 		\end{flushleft}
% 	\end{minipage}
% 	}
% \\\hline
% 	\multicolumn{1}{|m{95.65pt}|}{
% 	\begin{minipage}{95.65pt}
% 	\begin{flushleft}
% 		Intel Paragon
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{105.45pt}|}{
% 	\begin{minipage}{105.45pt}
% 	\begin{flushleft}
% 	i860
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{85.05pt}|}{
% 	\begin{minipage}{85.05pt}
% 	\begin{flushleft}
% 	Malha 2-D
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{106.35pt}|}{
% 	\begin{minipage}{106.35pt}
% 	\begin{flushleft}
% 	MIMD (Troca de Mensagens)
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% \\\hline
% 	\multicolumn{1}{|m{95.65pt}|}{
% 	\begin{minipage}{95.65pt}
% 	\begin{flushleft}
% 	Kendall Square KS-1
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{105.45pt}|}{
% 	\begin{minipage}{105.45pt}
% 	\begin{flushleft}
% 	Configurável
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{85.05pt}|}{
% 	\begin{minipage}{85.05pt}
% 	\begin{flushleft}
% 	Hierarquia de Anéis
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{106.35pt}|}{
% 	\begin{minipage}{106.35pt}
% 	\begin{flushleft}
% 	MIMD (Memória Compartilhada com Cache Local)
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% \\\hline
% 	\multicolumn{1}{|m{95.65pt}|}{
% 	\begin{minipage}{95.65pt}
% 	\begin{flushleft}
% 	Ncube 2
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{105.45pt}|}{
% 	\begin{minipage}{105.45pt}
% 	\begin{flushleft}
% 	Configurável
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{85.05pt}|}{
% 	\begin{minipage}{85.05pt}
% 	\begin{flushleft}
% 	Hipercubo
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{106.35pt}|}{
% 	\begin{minipage}{106.35pt}
% 	\begin{flushleft}
% 	MIMD (Troca de Mensagens)
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% \\\hline
% 	\multicolumn{1}{|m{95.65pt}|}{
% 	\begin{minipage}{95.65pt}
% 	\begin{flushleft}
% 	Thinking Machine CM-5
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{105.45pt}|}{
% 	\begin{minipage}{105.45pt}
% 	\begin{flushleft}
% 	SPARC e Unidades Vetoriais
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{85.05pt}|}{
% 	\begin{minipage}{85.05pt}
% 	\begin{flushleft}
% 	Árvore
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{106.35pt}|}{
% 	\begin{minipage}{106.35pt}
% 	\begin{flushleft}
% 	MIMD sincronizado
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% \\\hline
% 	\multicolumn{1}{|m{95.65pt}|}{
% 	\begin{minipage}{95.65pt}
% 	\begin{flushleft}
% 	Mas Par MP-1
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{105.45pt}|}{
% 	\begin{minipage}{105.45pt}
% 	\begin{flushleft}
% 	4 bits configurável e Ponto Flutuante
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{85.05pt}|}{
% 	\begin{minipage}{85.05pt}
% 	\begin{flushleft}
% 	Malha 2-D e Roteador
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{106.35pt}|}{
% 	\begin{minipage}{106.35pt}
% 	\begin{flushleft}
% 	SIMD
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% \\\hline
% 	\multicolumn{1}{|m{95.65pt}|}{
% 	\begin{minipage}{95.65pt}
% 	\begin{flushleft}
% 	Cray  T-3D
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{105.45pt}|}{
% 	\begin{minipage}{105.45pt}
% 	\begin{flushleft}
% 	DEC Alpha
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{85.05pt}|}{
% 	\begin{minipage}{85.05pt}
% 	\begin{flushleft}
% 	Malha 3-D
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% 	&
% 	\multicolumn{1}{|m{106.35pt}|}{
% 	\begin{minipage}{106.35pt}
% 	\begin{flushleft}
% 	MIMD (Troca de Mensagens)
% 	\end{flushleft}
% 	\end{minipage}
% 	}
% \\\hline
% 
% \end{tabular}
% \caption{Diversidade das arquiteturas paralelas}
% \label{tab:arq_paralela}
% 
% \end{table}
% \end{flushleft}
% 
% 
% 
% Considerando que, para efeito de máximo desempenho, o software precisa estar fortemente sintonizado com a arquitetura, surgem inevitáveis particularizações nos algoritmos utilizados, na organização dos dados, etc. Isto dificulta sobremaneira o desenvolvimento e o porte de software para as diversas arquiteturas existentes.


\subsection{Relação entre a Teoria e a Tecnologia}
A teoria para o processamento paralelo foi desenvolvida após a tecnologia e ainda se encontra imatura em muitos aspectos. Deste modo, a teoria historicamente não vem sugerindo caminhos ou até mesmo limites para exploração tecnológica. Como resultado, ainda não estão disponíveis na abrangência necessária, representações abstratas da computação paralela, lógicas para avaliação da mesma, ou até mesmo algoritmos paralelos que sejam comprovadamente eficientes nas diversas arquiteturas reais (SKILLICORN \cite{SKI98}).


% \subsection{Instabilidade dos Fornecedores}
% \label{IFor}
% A indústria de equipamentos paralelos tem apresentado uma taxa de mortalidade bastante elevada. Nos últimos anos empresas como Alliant, BBNTC2000, Multiflow, WaveTracer, Ametek, BiiN e Myrias, todas atuantes no ramo do processamento paralelo encerraram atividades. Precisar todas as razões para esta situação de fracasso é uma tarefa bastante complexa. Alguns aspectos se destacam (\cite{MOR94}):
% \begin{itemize}
% 	\item historicamente, os fornecedores de hardware paralelo assumiram a área científica de alto desempenho e a computação numérica intensiva como seus mercados, ao invés do muito mais amplo mercado comercial de processamento de alta eficiência;
% 	\item o mercado de alto desempenho tem se mantido reduzido e voltado para uso militar e de pesquisa. A tendência internacional de criação de centros de excelência em pesquisa e desenvolvimento, imprime a este mercado uma taxa de crescimento reduzida, com conseqüências diretas na possibilidade de rendimento de seus fornecedores;
% 	\item o pequeno mercado para a computação paralela faz com que os computadores paralelos tenham custo elevado, uma vez que poucos equipamentos são comercializados. Este pequeno mercado traz, tanto para os atuais usuários de processamento seqüencial como para fornecedores em geral, pouco entusiasmo quanto a um uso intenso da computação paralela em um futuro próximo.
% \end{itemize}
