Я пытаюсь использовать OpenMP 2.0
для parallel for
для 2 for
циклов. Я нашел несколько примеров, как я могу использовать parallel for
, и выбрал какой-то вариант.
Вот почему я пытаюсь пойти по этому пути:
#pragma omp parallel
for(int i=1; i<n; i++) {
#pragma omp for nowait
for(int j=0; j<n; j++) {
//some code here..
}
}
Хорошо. Но я новичок в OpenMP world
, и я понял, что если у меня есть какое-то сужение, такое как: if {...}
, мне нужно найти другие варианты для распараллеливания моих циклов и принять во внимание мой if constructions
.
Можете ли вы помочь мне найти правильный способ распараллеливания моей функции с помощью OpenMP
? Спасибо.
string readTextFromImage(Mat image) {
string result = "";
int red;
int green;
int blue;
int ascii;
char ch;
#pragma omp parallel for
for (int i = 0; i < 100; i++)
{
#pragma omp for nowait
for (int j = 0; j < 100; j++)
{
if (i == 0 && j < 3)
{
continue;
}
red = (image.at<Vec3b>(i, j)[2] + 1 - 1) % 10;
green = (image.at<Vec3b>(i, j)[1] + 1 - 1) % 10;
blue = (image.at<Vec3b>(i, j)[0] + 1 - 1) % 10;
if (red == 0 && green == 0 && blue == 0)
{
return result;
}
ascii = red * 100 + green * 10 + blue;
ch = ascii;
result += ch;
}
}
return result;
}
В качестве моих результатов используется код выше. У меня ошибка, мой код даже не компилируется:
C1001 Произошла внутренняя ошибка в компиляторе.
Но если я использую код без if
конструкции, у меня есть скомпилированный код.