、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中。

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

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

(3) 在 Fortran 中使用自定义 kernel
部分情况下我们需要在C++中编写DCU kernel,在示例2 test2中展示了Fortran与C++混编的编译方法。hip_implementation.cpp为DCU kernel,在main.f03中调用这一kernel进行计算。
main.f03中对c++函数的接口如下:

分别编译fortran和c++文件为.o文件,然后使用hipcc进行链接。
输出如下,说明运行正常且结果正确

暂无数据
暂无数据