2017-01-06 3 views
-1

Могу ли я скомпилировать подпрограммы fortran, которые содержат ядра CUDA через компилятор PGI в виде DLL, а затем использовать их в программе fortran, скомпилированной другими компиляторами fortran (Fortran Powerstation)?Библиотеки библиотек Fortran для разных компиляторов fortran

Я не могу скомпилировать мою старую программу fortran на PGI, так как ей нужен MSFLIB, предоставляемый Fortran Powerstation, а DFLIB, доступный PGI, не выполняет некоторые из функций, которые мне нужны.

Я пробовал, и он не работает, как показано ниже. Obj1.lib компилируется с использованием компилятора PGI fortran, а prog.f скомпилирован (неудачная попытка) на Fortran Powerstation. https://i.stack.imgur.com/YLIjx.png

+0

Powerstation - это старая багги ... Просто найдите замену для подпрограмм в MSFLIB, это не стоит осложнений. Увы, это всего лишь 32-бит, и это 2017 год! –

+0

Спасибо за эту информацию. Здесь никто не спрашивает! –

+0

Мне просто нужно быстро спросить, если у меня есть реальная переменная * 8, скомпилированная на PGI с 32-битным и 64-битным pgfortran, какая разница в процессоре Intel с 64-битной способностью? На данный момент я предпочитаю 32bit. –

ответ

1

Номер

Fortran не является кросс-компилятор вызываемым.

Возможно, может предоставить вам код PGI-CUDA-Fortran с помощью возможности Fortran 2003+ C-binding. Но вы не можете использовать специальные соглашения о конфликтах Fortran таким образом (предполагаемые массивы форм, производные типы данных и т. Д.).

Я не использую компилятор PGI, поэтому не могу больше прокомментировать это.

+1

В старой Powerstation нет возможности связывания C++ Fortran 2003+. Он давно заброшен.И если есть какая-то рудиментарная реализация, это будет так же плохо, как и остальные современные функции. –

1

Я бы сказал, что это может быть возможно, но будет непросто.

Я добавил PGI-код OpenACC (хотя это был код C) в DLL, вызываемый из двоичных файлов, созданных другими компиляторами. Следовательно, это возможно и с CUDA Fortran. Ключ заключается в компиляции без динамической компиляции времени выполнения (-Mcuda = nordc), которая требует, чтобы двоичный файл был связан с pgfortran. Однако без RDC вы не сможете использовать данные модуля устройства, объявленные во внешних модулях, или вызывать процедуры «устройства» во внешних модулях. Другими словами, ваш код устройства должен содержаться в одном модуле.

Пьер прав, что вы не можете смешивать объекты, скомпилированные разными компиляторами Fortran. Однако, если ваш интерфейс использует соглашения о вызовах F77 или C, а также не делает ввода-вывода в DLL, это может быть возможно.

Смежные вопросы