Я пытаюсь распараллелить алгоритм 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
параллельной, верно?
Спасибо.
EDIT
Код выше не работает, ответы ниже показывают, почему.