Calcular o histograma com o OpenMP
Eu quero paralelizar esse código, obtendo o melhor desempenho. "histograma" armazena um número de aparências de uma determinada cor (existem 10 cores diferentes, portanto o tamanho do histograma é 10). "img" é uma matriz que armazena uma determinada informação de imagem. Em cada índice de img é armazenada uma cor (valor int, intervalo 0..9). Este é o código:
for( i=0; i<N1; i++ ){
for( j=0; j<N2; j++ ){
histogram[ img[i][j] ] = histogram[ img[i][j] ] + 1;
}
}
Eu tentei isso, mas o desempenho é tão ruim (pior que a execução serial):
#pragma omp parallel for schedule(static, N1/nthreads) private(i,j)
for(i=0; i<N1; i++){
for(j=0; j<N2; j++)
{
#pragma omp atomic
histogram[img[i][j]]++;
}
}
Alguma sugestão? Obrigado.