Использование подпрограммы ScaLAPACK из программы MPI C - PullRequest
2 голосов
/ 03 июня 2011

В настоящее время у меня есть программа MPI, написанная на C, и я хочу использовать подпрограмму из ScaLAPACK. Я работаю над параллельной версией LDA, и один шаг - инвертирование матрицы. Я нашел подпрограмму в ScaLAPACK, которая решает этот pdgetri.f (она написана на фортране, я не уверен, что подпрограмма c существует), но я не уверен, как настроить ее для работы. Я использую Windows и двухъядерный ноутбук Intel. Цель более дидактична, чем для исполнения.

1 Ответ

1 голос
/ 03 июня 2011

SCALAPACK использует BLACS , чтобы обеспечить абстракцию для любой используемой системы передачи сообщений. Если в вашем коде установлен существующий коммуникатор MPI, вы можете использовать blacs_gridmap для инициализации контекста BLACS, который отображается на вашем коммуникаторе. Затем этот контекст можно использовать для создания распределенных массивов SCALAPACK, а затем эти массивы передаются подпрограммам SCALPACK, которые затем будут работать с ними.

То, как вы решите проблему взаимодействия с C-Fortran, будет во многом зависеть от того, какой компилятор (ы) вы используете. Если у вас есть «современный» компилятор, который поддерживает функции Fortran 2003, вы можете использовать функции языка взаимодействия C, чтобы написать интерфейсную оболочку для нужных вам функций, а затем вызывать их напрямую. В системах в стиле UNIX / LINUX, интерфейс в стиле F2C был дефактным способом вызова Fortran из C, хотя некоторые детали, как правило, зависят от компилятора. Я вообще не пользуюсь Windows, поэтому могу реально помочь вам, если вы не можете использовать совместимость с Fortran 2003.

...