Использование openMP для параллельного получения индекса минимального элемента
Я пытался написать этот код
float* theArray; // the array to find the minimum value
int index, i;
float thisValue, min;
index = 0;
min = theArray[0];
#pragma omp parallel for reduction(min:min_dist)
for (i=1; i<size; i++) {
thisValue = theArray[i];
if (thisValue < min)
{ /* find the min and its array index */
min = thisValue;
index = i;
}
}
return(index);
Однако этот не выводит правильных ответов. Кажется, что мин в порядке, но правильный индекс был уничтожен потоками.
Я также попробовал некоторые способы, предоставленные в Интернете и здесь (с использованием параллельного для внешнего цикла и критического для окончательного сравнения), но это вызывает скорее снижение скорости, чем ускорение.
Что я должен сделать, чтобы оба значения min и его индекс были правильными? Спасибо!