[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Intel C++ Compiler - Automatic Parallelization



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]




Reply to: