Я пытаюсь распараллелить алгоритм Floyd-Warshall, используя OpenMP (в основном редактирование 2D-массива на месте), но я сомневаюсь, что делаю это наилучшим образом, вот что у меня есть до сих пор:
#pragma omp parallel for private(i, j, k) shared(g)
for ( i = 0; i < n; i++ ) {
for ( j = 0; j < n; j++ ) {
for ( k = 0; k < n; k++ ) {
g->A[j][k] = imin( g->A[j][k], g->A[j][i] + g->A[i][k] );
}
}
}
Любые идеи, как я могу лучше использовать OpenMP? На данный момент это вдвое сокращает время выполнения, и это, безусловно, можно улучшить.
Также, если у кого-нибудь есть какие-либо предложения по другим технологиям, которые будут использоваться для распараллеливания, я внимательно слушаю. Я думал о MPI, но мне нужно было бы сделать всю мою функцию main
параллельной, верно?
Спасибо.
ИЗМЕНИТЬ
Приведенный выше код не работает, ответы ниже показывают, почему.