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 parallel
causou 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.