3
运行时
精华
推荐
在Fortran程序中使用HIPFORT
2022-11-10 21:08:49
161

、P目前不支持Fortran,使用Fortran开发的程序需要自己开发相关接口,目前HIPFORT可提供内存拷贝和数学库调用等功能,但是kernel部分仍需要采用HIP来写。HIPFORT网站的地址为:

https://github.com/ROCmSoftwarePlatform/hipfort

目前支持的接口包括:

l HIP

l hipBLAS

l hipFFT

l hipRAND

l hipSOLVER

l hipSPARSE

l rocBLAS

l rocFFT

l rocRAND

l rocSOLVER

l rocSPARSE

在实际使用中,网站会提供一个hipfc的工具辅助编译,相对比较麻烦。为了使用方便也可以将HIPFORT和自己的代码一起编译。Hipfort源码中/hipfort/lib/hipfort下的.f文件存放着接口源码,每一个.f文件是一个Module,每个module下定义hip接口。可以将这些源码单独编译成库文件来使用。

( 1 )将接口文件编译为静态链接库

假设将hipfort源码文件存放src目录中,编写相应的CMakeLists.txt可以实现使用cmake来编译。在附件中我们提供了示例文件。

可按照如下方式编译,src目录下接口文件编译生成的.mod文件存放在build/include/amdgcn中,链接生成的静态库libhipfort-amdgcn.a储存在/build中。

attachmentId-image.png

(2) 在 Fortran 中使用 hip 接口调用 DCU

在示例/test1/hipfft中展示了如何在Fortran中调用rocfft库进行计算。在编译时需要指定头文件以及静态链接库路径,编译细节在make.sh中,在使用不同数学库的函数时,编译时需要链接上相应数学库,如-lrocfft。输出PASSED说明运行正常且结果正确。

attachmentId-image.png

在Fortran中使用hipfort接口调用hip api的方法如下:

attachmentId-image.png

(3) 在 Fortran 中使用自定义 kernel

部分情况下我们需要在C++中编写DCU kernel,在示例2 test2中展示了Fortran与C++混编的编译方法。hip_implementation.cpp为DCU kernel,在main.f03中调用这一kernel进行计算。

main.f03中对c++函数的接口如下:

attachmentId-image.png

分别编译fortran和c++文件为.o文件,然后使用hipcc进行链接。

输出如下,说明运行正常且结果正确

attachmentId-image.png

全部评论(0)
只看楼主
暂无数据
--
楼主
Level.1
0 帖子
楼主热帖
暂无数据