异构编程框架对比

时至今日,GPU并行程序开发已经得到全面发展,形成了有机的软件生态系统。构成GPU软件生态系统的成分包括编译器、编程模型、数学函数库、性能分析工具、程序调试工具、代码实例(SDK)、管理软件、应用软件和完整的文档等

编译器主要有NVIDIA CUDA Compiler(NVCC)、PGI CUDAFortran Compiler、ptxas(PTX汇编工具)、cuobjdump(CUDA目标文件转储工具)。此外,还有些自动化并行编译器(源到源的转换工具),比如,可将Fortran和C转换成CUDA C的PGI编译器和CAPS HMPP,可将C转换为CUDA C代码的Goose编译器,将Fortran转换为CUDA C的NOAA F2C编译器。

GPU编程模型主要有CUDA、OpenCL、OpenACC,其中CUDA已支持诸多编程语言,最常用的是CUDA C(NVCC),其他的还包括CUDAFortran(PGI、FLAGON支持、ArrayFire GPU library)、CUDA Python(PyCUDA、ArrayFire GPU library)、CUDA Java(jCUDA、JaCUDA)、CUDA.NET、CUDA C++(Thrust、CuPP、Libra、ArrayFire GPU library)、CUDA F#。

面向GPU的数学函数库种类相当丰富,比如线性代数库CUBLAS、稀疏矩阵运算CUSPARSE、快速傅里叶变换CUFFT、深度学习CUDNN、AMGX、NPP、FFmpeg、CHOLMOD、CULA Tools、MAGMA、IMSLFortran数值库、CUSOLVER、ArrayFire、CURAND、Thrust、.NVBIO、NVIDIA VIDEO CODEC SDK、HiPLAR、OpenCV、GPP(GeometryPerformance Primatives))、Paralution、Triton Ocean SDK等。

 

为了提高算法速度,基于openmp的多核编程已无法满足要求,最近调研了异构的方法。调研的目标是选择在windows平台上visual studio上使用,采用c和c++语言。调研的框架有openmp,openacc,cuda,thrust,amp c++,dpc++,sycl,opencl,arrayfire。尽管不情愿,但最终选择了cuda。

因为(1)openmp的gpu编程对openmp的版本要求很高,visual studio只支持openmp3.0,不支持gpu

(2)openacc的思路和openmp类似,可以在原来cpu编程的基础上添加指令来支持gpu,但是openaac不支持windows平台。

(3) cuda的资料很多,但采用了C语言的方式,而不是c++,看起来很丑,尽量不选,最后没有更好的,还是选择了它。

(4)thrust是c++版的cuda,使用起来很方便,但是在Windows平台上不行。

(5)amp c++是微软提出的异构编程框架,基本被淘汰了,在visual studio2022中已经被标记为过时。

(6)dpc++是intel提出的异构编程框架,集成在了oneapi上,满足sycl的标准,又增加了新的东西,成了sycl2020的标准,可以很好地在Windows上用,与visual studio 整合很好,但是不支持cuda,支持Intel gpu和amd

(7)sycl最早由codeplay公司实现,他们开发的computecpp是最早开发符合sycl标准的编译器。看到2022年6月的报道,这个公司很快要被intel收购了。

(8)opencl是低层次的异构框架,使用起来很复杂,相关的资料少,对cuda的支持也不好。

(9)arrayfire是高层次首相的异构框架,做了更多的封装,不够灵活。

最终无奈的选择了cuda。

 

posted @ 2022-08-19 17:14  Oliver2022  阅读(761)  评论(0编辑  收藏  举报