Я работаю над распараллеливанием программного обеспечения, которое имитирует процесс транспортировки и потока в зоне ненасыщенной почвы.Программное обеспечение состоит из пользовательского интерфейса VB.NET и ядра библиотеки FORTRAN DLL для выполнения расчетов.Я распараллелил программное обеспечение, используя пакет MPI.NET в части VB.NET.Когда программа запускается с несколькими процессами, все они, кроме главного процесса, переходят в функцию ожидания, в то время как главный процесс заботится о взаимодействии программного обеспечения с пользователем.Когда все данные, необходимые для моделирования, введены, главный процесс входит в библиотеку DLL FORTRAN и вызывает другие процессы.Они переходят к начальной точке функции в DLL, и вместе все процессы решают линейную систему уравнений примерно в 10-20 раз (исходное уравнение в частных производных является нелинейным, поэтому эти итерации позволяют повысить точность решения).Когда решение вычислено, все процессы возвращаются в VB.NET. Это делается для всех временных шагов моделирования.Когда все шаги вычислены, главный процесс продолжает взаимодействие с пользователем, в то время как другие процессы возвращаются в функцию ожидания, пока главный процесс не вызовет их снова.Дело в том, что эта программа работает намного медленнее, чем оригинальная, последовательная версия.Теперь может быть несколько причин для этого.Я использовал библиотеку PETSc в DLL-библиотеке FORTRAN для решения системы уравнений, и я думаю, что настроил ее достаточно хорошо.Мой вопрос заключается в том, что в какой-то момент в описанной мной архитектуре может быть одна или две точки, которые могут привести к значительному замедлению, если не будут правильно обработаны.Я не уверен, что последующие вызовы функции DLL могут стоить много времени.Моя система представляет собой процессор Intel Xeon 3470 с 8 ГБ ОЗУ.Системы, которые я пытался решить, имели до 120 000 неизвестных, которые, как я знаю, находятся на самой нижней границе того, что должно рассчитываться параллельно, но по крайней мере с матрицей в 120 000 я ожидал бы лучшую производительность, чем измерял.
Заранее спасибо за мысли, Мартин