Data-Parallel C++
kelvin 发布于 2021-06-06

Data-Parallel C++(DPC++)是一个基于C++的开源编译器项目。它包括便携式行业标准,如Khronos集团的SYCL标准,以及来自社区的支持扩展。更简单地说,DPC++是为数据并行编程设计的高级语言。其目的是为开发人员提供一种比openclcdoe和其他语言更高级的语言。

DPC++使用标准的C++语法。尽管重点是并行编程,但新的关键字和pragma还没有添加到语言中。而是所有的并行性特征都是通过使用C++类来完成的。DPC++使用了诸如buffer和queue之类的类。

语言的类和特性使您可以利用常见的加速器硬件,如SIMD、屏障和本地内存。使用DPC++,应用程序可以在多个设备上同时并行运行。DC++可以用于CP、GPU、FPGA、加速器等的异构计算。

您可以在GitHub.com/intel/llvm上找到DPC++编译器。作为英特尔oneAPI工具的一部分,您可以找到DPC++编译器的捆绑版本。在这里,您可以找到各种DPC++的开源扩展。

DPC++特性

重申一下,使用DPC++的一些价值在于,它允许您通过一段代码以cpu和加速器为目标,而不需要删除执行自定义调优的功能。它支持C++ 18和SyCL,对C++ 20有初始支持,支持变量模板和lambda表达式等。

如果您使用的是Windows,编译器将与Visual Studio 2017和2019集成,前提是您使用的是Community Edition或更高版本。您可以将速成版用于命令行生成。您也可以在Linux上使用DPC++。

 

下面的列表是基于一个从书本数据并行C++中得到的,它在Kindle上是免费的。下面给出了DPC++的一个实例:

#include <CL/sycl.hpp>
#include 
using namespace sycl;
const  std::string secret {
  "Ifmmp-!xpsme\"!J(n!tpssz-!Ebwf/!J”
  " (n!bgsbje!J!dbo(u!ep!uibu/!.!IBM" };
const auto sz = secret.size();
int main() {
  queue Q;
  char*result = malloc_shared(sz, Q);
  std::memcpy(result,secret.data(),sz);
  Q.parallel_for(sz,[-](auto&i) {
    Result[i] == 1;
    }).wait();
  std.cout << result << “\n”;
  return 0;
}

在这段代码中,诸如建立一个队列和为共享数据分配一个区域之类的任务会发生。然后,将要完成的工作通过parallel_for()方法排队到工作设备,该方法将处理推送到内核。代码的结果是一个有趣的helloworld消息。正如你所看到的,列表比简单的C++ Hello World程序更复杂;然而,它比许多并行代码的例子要简单。当您希望构建更复杂的并行化代码时,DPC++的目的之一是帮助简化工作并将其保持在更高的级别。

sycl2020最终规范中包含的DPC++的其他特性包括:对HPC或高性能计算的加速并行编程的支持。机器学习和人工智能嵌入式编程和开发XPU架构中的资源密集型应用程序和软件,包括CPU、GPU和FPGA等等。

简而言之,如果您希望能够访问多个并行资源,同时避免锁定到特定的计算设备,那么DPC++提供了一个解决方案,可以使用从gpu、cpu到fpga等设备的任何组合。

翻译:What is Data Parallel C++? 

作者: Brad Jones

 

kelvin
关注 私信
文章
92
关注
0
粉丝
0