Как я могу убедиться, что 3 фрагмента кода выполняются одновременно с OpenMP? В следующей игрушечной задаче секции A и B генерируют некоторые данные, а секция C опрашивает данные и воздействует на них.
int main(int argc, char* argv[])
{
int G = -1,S = -1;
#pragma omp parallel sections default(none) shared(G,S,cout)
{
// Section A
#pragma omp section
{
for(;;)
{
G = G_Generator();
if(G == 0) break;
}
}
// Section B
#pragma omp section
{
for(;;)
{
S = S_Generator();
if(S == 0) break;
}
}
// Section C
#pragma omp section
{
for(;;)
{
if(G == 1 || S == 1) Do_1();
if(G == 2 || S == 2) Do_2();
if(G == 0 || S == 0) break;
}
}
}
return 0;
}
Это не работает, и я не могу отладить его. Возможно ли, что секция опроса C может «пропустить» значение G
или S
, равное 1 или 2? Кажется, код просто не дает желаемых результатов - это правильный путь для кодирования в OpenMP? Раньше я только распараллеливал циклы.