Рассчитать гистограмму с помощью OpenMP
Я хочу распараллелить этот код для получения максимальной производительности. «Гистограмма» хранит количество вещей определенного цвета (существует 10 разных цветов, поэтому размер гистограммы равен 10). «img» - это массив, в котором хранится определенная информация об изображении. В каждом индексе img хранится цвет (значение int, диапазон 0..9). Это код:
for( i=0; i<N1; i++ ){
for( j=0; j<N2; j++ ){
histogram[ img[i][j] ] = histogram[ img[i][j] ] + 1;
}
}
Я пробовал это, но производительность настолько плоха (хуже, чем последовательное исполнение):
#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]]++;
}
}
Какие-либо предложения? Спасибо.