Fortran dll库跨越不同的fortran编译器

时间:2017-01-06 18:25:57

标签: cuda fortran

我可以通过PGI编译器编译包含CUDA内核的fortran子程序作为DLL,然后在其他fortran编译器(Fortran Powerstation)编译的fortran程序中使用它们吗?

我无法在PGI上编译旧的fortran程序,因为它需要Fortran Powerstation提供的MSFLIB,PGI提供的DFLIB不能执行我需要的一些功能。

我尝试了它并没有像下面看到的那样起作用。 obj1.lib使用PGI fortran编译器进行编译,并且在Fortran Powerstation上编译prog.f(失败尝试)。 https://i.stack.imgur.com/YLIjx.png

2 个答案:

答案 0 :(得分:1)

没有

Fortran不是交叉编译器可调用的。

可能可能是通过Fortran 2003+ C绑定功能公开您的PGI-CUDA-Fortran代码。但是你不能以这种方式使用Fortran特定的调用约定(假设形状数组,派生数据类型等)。

我没有使用PGI编译器,因此无法对此进行更多评论。

答案 1 :(得分:1)

我会说可能可能,但不容易。

我已经将PGI构建的OpenACC代码(尽管它是C代码)添加到DLL中,该DLL可以从其他编译器构建的二进制文件中调用。因此,CUDA Fortran也可能。关键是在没有运行时动态编译(-Mcuda = nordc)的情况下进行编译,这需要将二进制文件与pgfortran链接。但是,如果没有RDC,您将无法使用在外部模块中声明的模块设备数据或调用" device"外部模块中的例程。换句话说,您的设备代码需要包含在一个模块中。

皮埃尔是正确的,通常你不能混合不同Fortran编译器编译的对象。但是,如果您的接口使用F77或C调用约定以及不在DLL中执行I / O,则可能是。