Thadeu Penna wrote:
Marcos Vinicius Lazarini wrote:
On Mon, 1 Aug 2005, Maicon wrote:
Boas tardes,
Alguém já utilizou o Intel C++ Compiler? Estou buscando uma
ferramenta para recompilar meus códigos e rodalos em um cluster
BeoWulf. Alguém sabe se esta ferramenta (Intel C++ Compiler) pode
fazer essa conversão dos meus códigos sem eu ter que refazer o meu
programa? Como faço isso? Ou alguém conhece alguma outra feramenta
que faça isso para mim?
Olha, eu nao conheco esse compilador nem nunca tive que fazer isso; mas,
se me lembro bem das aulas na faculdade, se vc achar um compilador que
faca isso que voce quer (paralelizar automaticamente), avise o Bill
Gates,
Linus Torvalds, SUN, BSD, etc etc etc!
:-)
Sim. Existe não só um compilador, como uma linguagem: FORTRAN 90.
Você soma duas matrizes (A=B+C) em paralelo. Eu uso o icc mas não acho
que faça o mesmo. Por outro lado, você deve procurar pelas bibliotecas
do MPI para paralelizar seu código.
Nada comparado quando vc dá uma mãozinha pro compilador. Vamos dar uns
exemplos entao; esse eu peguei da página da ibm sobre os PowerPC (não é bem
de paralelização, mas enfim):
-------------------------
int
rolled_sum(char bytes[16]) {
int i;
int sum = 0;
for (i = 0; i < 16; ++i) {
sum += bytes[i];
}
return sum;
}
int
unrolled_sum(char bytes[16]) {
int i;
int sum[4] = 0;
for (i = 0; i < 16; i += 4) {
sum[0] += bytes[i + 0];
sum[1] += bytes[i + 1];
sum[2] += bytes[i + 2];
sum[3] += bytes[i + 3];
}
return sum[0] + sum[1] + sum[2] + sum[3];
}
Both versions of this function add 16 values to sum. However, the second
does so in a way that makes it easy to see that there are four similar
operations happening in a row. This might make it easier for a compiler --
or a programmer -- to see the opportunity to vectorize/optimize the code.
--------------------------------------
Em outras palavras, se vc escrever seu código com alguns detalhes em mente
(como a máquina funciona, a arquitetura, registradores, etc etc), voce
poderá ter um código muuuuito mais rápido (e até menor) do que usando apenas
otimizações do compilador.
Por exemplo do GCC, a otimização
-fdelayed-branch
If supported for the target machine, attempt to reorder instructions
to exploit instruction slots available after delayed branch
instructions.
é uma maravilha da tecnologia em processadores com pipeline - mas vcs nao
imaginam como é complicado pro compilador meio que adivinhar quando dá pra
fazer isso; sem contar que as vezes dá pau.
Outro exemplo muito clássico é o de acesso a uma matriz, que normalmente é
armazenada linearizada na memória em suas linhas ou colunas.
Se voce trocar o índice da linha e coluna em relação ao que o compilador usa
e fizer um acesso 'sequencial', na realidade ele não será 'sequencial' na
prática (o que é péssimo, pois cache e outras coisas funcionam muito bem
quando as coisas estão próximas umas das outras - o famoso princípio da
localidade).
Não há compilador no mundo capaz de corrigir coisas assim.
Com computação paralela, o problema é o mesmo (se não pior, pois é muito
mais dicífil debugar um programa distribuido/paralelo). Por isso, as coisas
caminham muito devagar na área.
Links pra galera:
A boa e velha Wikipedia, muito bom artigo:
http://en.wikipedia.org/wiki/Compiler_optimization
'A dificuldade do trabalho cooperativo pode ser demonstrado por:
Se uma pessoa demora 60 segundos para fazer uma atividade, então 60
pessoas podem fazê-la em 1 segundo.
Na prática, o aumento linear (com o número de pessoas, no caso) é muito
dificil de atingir. Isso ocorre pois muitos algoritmos são lineares por
natureza.'
http://en.wikipedia.org/wiki/Parallel_computing
Aqui tem o exemplo clássico de saques simultâneos no caixa eletronico:
http://en.wikipedia.org/wiki/Parallel_programming
Options That Control Optimization
http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Optimize-Options.html
Writing Parallel Code
http://www.daugerresearch.com/pooch/writingparallel.html
[depois de 2 min, ela se redireciona pra outro lugar]
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]