Мне дали 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 устарела благодаря, я полагаю, автоматической векторизации.
Возможно, это лучше всего подходит для отдельного вопроса, но как работает авто-векторизация? Может ли компилятор обнаружить, что в цикле используются только чистые функции или подпрограммы?