1
У меня есть цикл for в следующем коде.Простой для цикла с openMP в C
int min = -1;
int pos;
int array[100];
for(i = 0; i < 100; i++){
if(array[i] < min || min == -1){
min = array[i];
pos = i;
}
}
Я считаю, что следующий код является правильной реализацией с помощью openMP, но он слишком медленный.
int min = -1;
int pos;
int array[100];
#pragma omp parallel for default(none) shared(array, min)
for(i = 0; i < 100; i++){
#pragma omp critical
{
if(array[i] < min || min == -1){
min = array[i];
pos = i;
}
}
}
Я думаю, что это может быть опасностью данных, если я поставил критический участок внутри условия, а не снаружи. Есть разумный способ реализовать его? Некоторые предложения?
'min = -1' не должно быть' min == -1'? –
исправьте эту часть .. if (array [i]
Logicbomb
Вы можете попробовать запустить параллель, сказать 'quicksort', и при каждом сокращении сохранить также исходный индекс элемента min в подсетевой , – Tigran