Как я могу гарантировать, что моя конструкция FORRAN FORALL распараллеливается?

Мне дали 2D матрицу, представляющую температурные точки на поверхности металлической пластины. Края матрицы (пластины) поддерживаются постоянными при 20 градусах Цельсия, и в одной предварительно определенной точке имеется источник постоянного тепла в 100 градусов Цельсия. Все остальные точки сетки изначально установлены на 50 градусов С.

Моя цель состоит в том, чтобы взять все внутренние точки сетки и вычислить ее стационарную температуру, итеративно усредняя по окружающим четырем точкам сетки (i + 1, i-1, j +1, j-1), пока я не достигну сходимости (изменение менее 0,02 градуса C между итерациями).

Насколько я знаю, порядок, в котором я выполняю итерации по точкам сетки, не имеет значения.

для меня это звучит как хорошее время для вызова конструкции Fortran FORALL и изучения радостей распараллеливания.

Как я могу убедиться, что код действительно распараллеливается?

Например, Я могу скомпилировать это на своем одноядерном PowerBook G4, и я не ожидаю улучшения скорости из-за распараллеливания. Но если я скомпилирую на двухъядерном AMD Opteron, я бы предположил, что конструкция FORALL может быть использована.

В качестве альтернативы, есть ли способ измерить эффективное распараллеливание программы?

Обновление

В ответ на Вопрос MSB, это с gfortran версии 4.4.0. Поддерживает ли gfortran автоматическую многопоточность?

Примечательно, что конструкция FORALL устарела благодаря, я полагаю, автоматической векторизации.

Возможно, это лучше всего подходит для отдельного вопроса, но как работает авто-векторизация? Может ли компилятор обнаружить, что в цикле используются только чистые функции или подпрограммы?

6
задан EMiller 5 September 2010 в 23:19
поделиться