首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不同Fortran编译器之间的fortran dll库

不同Fortran编译器之间的fortran dll库
EN

Stack Overflow用户
提问于 2017-01-07 02:25:57
回答 2查看 256关注 0票数 1

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

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

我试过了,但它不能像人们看到的那样工作。obj1.lib是使用PGI fortran编译器编译的,而在Fortran Powerstation上编译(尝试失败)的是proc.f。https://i.stack.imgur.com/YLIjx.png

EN

回答 2

Stack Overflow用户

发布于 2017-01-07 04:28:34

不是的。

Fortran是不可跨编译器调用的。

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

我没有使用PGI编译器,所以不能对此发表更多评论。

票数 1
EN

Stack Overflow用户

发布于 2017-01-07 07:45:52

我想说这可能是可能的,但并不容易。

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

Pierre是正确的,一般来说,你不能混合不同Fortran编译器编译的对象。但是,如果您的接口使用F77或C调用约定,并且不在动态链接库中执行I/O,则可能会发生这种情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41511958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档