Primeiro baixe a versão 4.3.1 do gcc com o MinGW. A versão do gcc que roda com o MinGW oficial atual é a 3.5.0. Somente a partir da versão 4.2.0, o gcc dá suporte a biblioteca OpenMP.
Link para a versão não oficial do MinGW com Gcc 4.3.1: http://downloads.sourceforge.net/tdm-gcc/tdm-mingw-1.808.3-f2.exe
Após baixar e instalar, vá até a pasta C:\MinGW\lib\gcc\mingw32\4.3.2 e procure pelo arquivo libgomp.spec, abra-o com o bloco de notas ou notepad++. Na última linha do arquivo acrescente o seguinte parâmetro: -lpthreadGCE2 (Esse parâmetro manda o compilador linkar a biblioteca libpthreadGCE2.a que tem as funções para o funcionamento do paralelismo). A última linha do arquivo deverá ficar assim:
*link_gomp: -lgomp %{static: -lpthread } -lpthreadGCE2
Agora clique com o botão direito em Meu Computador ou vá em Painel de controle -> Sistema, vá na aba "Avançado", depois clique no botão "Variáveis de ambiente" lá em baixo, em "Variáveis do Sistema" clique em PATH e clique em "Editar". Em "Valor da variável" coloque no final C:\MinGW\bin, depois do ;. Clique em "OK", "OK" e "OK".
Para informar onde seu código deve ser paralelizado é necessário informar ao compilador onde isso deve ser feito. Utiliza-se a diretiva #pragma. Então antes de iniciar a operação que quer paralelizar, coloque #pragma omp parallel, e logo abaixo, insira chaves para delimitar o blogo de código que será paralelizado.
Abaixo das chaves inseridas, antes do primeiro for, insira a diretiva #pragma omp for private(i, j, k), não coloque as chaves dessa vez. As letras i, j e k indicam que ele deverá paralelizar os laços de repetição que possuem essas variáveis de controle.
Exemplo de código:
#pragma omp parallel
{
#pragma omp for private(i, j, k)
for (i=0;i<ordem;i++) {
for (j=0;j<ordem;j++) {
result[i][j] = 0;
for (k=0;k<ordem;k++) {
result[i][j] += matriz1[i][k] * matriz2[k][i];
}
}
}
}Por fim, Vá em Iniciar -> Executar.. e digite cmd. Navegue até a pasta que tem o seu código fonte (Para mudar de pasta no cmd utilize o comando cd \caminho\). Então é a hora de compilar:
código normal:
gcc codigoFonte.c -o arquivoDeSaida.exe
código paralelizado:
gcc codigoFonte.c -o arquivoDeSaida.exe -fopenmp
Essa é uma forma simples de paralelisar seu código utilizando o compilador GCC e a biblioteca OpenMP.
Nenhum comentário:
Postar um comentário