编写软件以便在当今的异构计算体系结构上高效运行是一个持续的挑战,而越来越多的处理器和加速器的选择使这一挑战变得越来越困难。帮助减轻这一挑战的一个努力是由Khronos行业协会开发的高级编程模型SYCL。SYCL构建在OpenCL(开放计算语言)之上,并且“允许使用完全标准的c++以单源代码风格编写异构处理器的代码”。
例如,英特尔在将软件移植到即将推出的Xe gpu生产线上的OneAPI计划上,就严重依赖SYCL[I]。到目前为止,SYCL对Nvidia gpu的支持有点麻烦。周一,Codeplay发布了Intel SYCL实现的开源早期版本,DPC++,它对NVIDIA gpu提供了更强大的支持。
Codeplay首席软件工程师雷耶斯(Ruyman Reyes)在博客中描述了这一服务。这里的一个摘录:
“去年,我们非常兴奋地获悉,英特尔在SYCL背后投入了巨大的努力,并一直在为其cpu、gpu和fpga开发包含DPC++ (SYCL的扩展实现)的oneAPI。有了Xilinx、Renesas和Imagination技术对SYCL的额外支持,软件开发人员现在能够使用SYCL瞄准各种各样的设备。
“虽然ComputeCpp提供实验支持Nvidia gpu使用OpenCL和Nvidia PTX DPC + +(英特尔SYCL实现)提供了一个机会来添加完全支持Nvidia gpu集成到LLVM编译器没有经历OpenCL,今天我们很高兴开源最初的实验阶段,我们的实现,使SYCL Nvidia gpu开发人员的目标。
这个实现的代码库位于主LLVM编译器项目和DPC++分支的独立分支中,这意味着现在您需要使用这个项目来尝试使用SYCL支持Nvidia gpu。我们的目标是与Intel合作,将Nvidia的GPU支持添加到Intel/LLVM的上游编译器中。
“这是一个早期的,不完整的,发布和进一步的工作正在进行中,以集成更多的功能和改进性能。”
该博客有更多关于试验新的dpc++功能的细节。书中还描述了哪些是有效的,哪些是无效的。例如,“目前,编译后的SYCL应用程序只能针对CUDA或OpenCL,不能同时针对两者。为了为CUDA后端构建SYCL应用程序,需要使用nvptx64-nvidia-cuda-sycldevice标志。
[i]针对OpenCL的c++单源异构编程
SYCL是一个免版权费的、跨平台的抽象层,它建立在OpenCL的底层概念、可移植性和效率之上,OpenCL允许使用完全标准的c++以“单源代码”风格编写异构处理器的代码。SYCL单源编程使应用程序的主机和内核代码以一种类型安全的方式包含在同一个源文件中,并且具有跨平台异步任务图的简单性。SYCL包含模板和泛型lambda函数,以使更高级的应用程序软件能够干净地编码,并在OpenCL 1.2实现的广泛范围内对内核代码进行优化加速。开发人员在比OpenCL C或c++更高的级别上进行编程,但是始终可以通过与OpenCL、C/ c++库和OpenCV或OpenMP等框架的无缝集成来访问底层代码。