现有的编程语言,fortran适合大规模矩阵运算,而cuda非常有利于并行计算。原有的代码很多是基于Fortran写的。想要利用GPU提高计算效目前有两种实现思路。
1Fortran直接调用GPU:该方法需要安装PGI编译器,麻烦之处在于PGI社区版只能免费体验一年,每一年都要重装一次编译器。好处在于基于PGI的Fortran,GPU实现语法相对于C语言更加简洁。
2Fortran和NVCC混合编程:该方法可以最小化的减少代码重写,在保持原有Fortran代码框架不变的前提下,用C语言将并行部分重写成子程序,用NVCC和gfortran分别编译相应代码,最后用gfortran连接.o目标文件实现混合编程。同样的思路也适用与fortran和C或C++混合编程。
在链接过程中可能会遇到一些问题,解决问题的相应连接如下:
https://bbs.csdn.net/topics/390798173?list=2488782
https://devtalk.nvidia.com/default/topic/453141/cuda-programming-and-performance/cuda-c-in-fortran-program/
Fortran 和 c++混合编程时需要用extern “C” void subfunction_(float* datain, int &n, int &m) 进行声明
Fortran 和 c混合编程时需要用void subfunction_(float* datain, int *n, int *m) 进行声明
需要注意
1Fortran和C是通过地址传递数据的
2Fortran子程序结尾会默认添加下划线,编译的时候添加-fno-underscoring可去掉下划线