OpenMP
Reavaliar as hipóteses vigentes é sempre interessante quando você já possui alguma experiência; um retorno à "infância" do aprendizado, talvez, a uma época em que a sua sensação de segurança era mínima.
Acrescentar uma anotação tão singela quanto:
#pragma omp parallelcausou um desastre tremendo em um loop pequenininho dentro de pixman-mmx.c nesse fim de semana, experimentando com o André um novo caminho de otimização.
Se o seu compilador implementa OpenMP a diretiva acima transforma o bloco do loop seguinte de modo a despachar iterações individuais a um time de threads de trabalho.
Quando a hipótese de que uma iteração será seguida de outra some dependências entre acessos a dados surgem: enquanto uma iteração lê um endereço outra iteração escreve nesse enredeço, boom. Experimentamos muitos SIGSEGV com este loop. Eventualmente a implementação foi transformada de modo a eliminar essas dependências.
É interessante que se você não tem em mente essa questão não se dará ao trabalho e seus loops não terão iterações independentes. Porém, mesmo sem OpenMP, o GCC 4.3 produziu uma melhoria impressionante na execução deste código; certamente porque seus otimizadores aproveitaram novas oportunidades oferecidas por iterações livres de side effects observáveis.

0 comentários:
Postar um comentário