У меня есть этот алгоритм, который сканирует изображение и для каждого пикселя p вычисляет гистограмму 256 бинов, в которой сохраняются значения пикселя внутри патча около p .Алгоритм должен быть O (1), поэтому нужно много сложить гистограмму, я бы хотел ускорить алгоритм, распараллеливая сложение гистограммы с OpenMP, поэтому я добавил #pragma omp parallel for
перед каждым для (только те, у которых гистограммадополнения) но на самом деле это делает его в 10 раз медленнее.Я думаю, что мне нужно создать параллельную область снаружи, но я не понимаю, как.
Кроме того, я боюсь, что накладные расходы, генерируемые OpenMP, преодолевают скорость, полученную при распараллеливании 256-для, но яне знаю наверняка
for (int i = 0; i < src.rows; i++) {
for (int j = 0; j < src.cols; j++) {
if (j == 0)
{ ... }
else {
if (j > side/2) { // subtract col
for (int h = 0; h < 256; h++) // THIS ONE
histogram[h] -= colHisto[j - (side/2) - 1][h];
}
if (j < src.cols - side/2) { // add column
if (i > side/2) { // subtract pixel
colHisto[j + side/2][src.at<uchar>(i - side/2 - 1, j + side/2)]--;
}
if (i < src.rows - side/2) { // add pixel
colHisto[j + side/2][src.at<uchar>(i + side/2, j + side/2)]++;
}
for (int h = 0; h < 256; h++) // AND THIS ONE
histogram[h] += colHisto[j + side/2][h];
}
}
}
}