Compiler construction 用CUDA构建自动并行计算库

Compiler construction 用CUDA构建自动并行计算库,compiler-construction,cuda,Compiler Construction,Cuda,在我最后一年的项目中,我选择构建一个库,开发人员可以使用该库使用CUDA进行GPGPU计算,而无需了解CUDA API(换句话说,CUDA包装器)的不同内核实现背后的机制。此库可能类似于openMP库。对于那些不熟悉openMP的人来说,它是一个API,支持C语言中的多平台共享内存多处理编程,其中数据布局和分解由指令自动处理。例如,API将每个代码块并行化: long sum = 0, loc_sum = 0; /*forks off the threads and starts the w

在我最后一年的项目中,我选择构建一个库,开发人员可以使用该库使用CUDA进行GPGPU计算,而无需了解CUDA API(换句话说,CUDA包装器)的不同内核实现背后的机制。此库可能类似于openMP库。对于那些不熟悉openMP的人来说,它是一个API,支持C语言中的多平台共享内存多处理编程,其中数据布局和分解由指令自动处理。例如,API将每个代码块并行化:

 long sum = 0, loc_sum = 0;
 /*forks off the threads and starts the work-sharing construct*/
 #pragma omp parallel for private(w,loc_sum) schedule(static,1) 
 {
   for(i = 0; i < N; i++)
     {
       w = i*i;
       loc_sum = loc_sum + w*a[i];
     }
   #pragma omp critical
   sum = sum + loc_sum;
 }
 printf("\n %li",sum);
long sum=0,loc_sum=0;
/*分叉线程并启动工作共享构造*/
#pragma omp并行专用(w,loc_sum)计划表(静态,1)
{
对于(i=0;i
在我的例子中,我希望在GPU上为CUDA并行计算实现相同的功能。因此,我需要构建一组影响运行时行为的编译器指令、库例程和环境变量。CUDA中的每个调用都必须对程序员隐藏

由于CUDA是一种SIMD体系结构,我知道有很多因素需要考虑,特别是迭代之间的依赖性。但现在我认为程序员知道GPU计算的局限性

现在,我需要你的帮助。有谁能给我一些关于从哪里开始建立这样一个图书馆的建议吗?还有,有谁有好的教程可以帮助我处理编译器指令或环境变量吗?或者,是否有人知道有任何其他库可以执行类似的任务,并且我可以从中获得良好的文档


最重要的是,你认为这是一个可以在1200小时内完成的项目吗?我对GPGPU和CUDA已经有点熟悉了,但是构建这样一个库对我来说是新的。

这有点主观,但这听起来像是一个非常具有挑战性的项目。要将问题组织得足够好,以使从主机到gpu的数据传输获得回报,需要相当多的思考和计划,而且只对问题的一个子集有意义


对于做类似事情的现有项目,有一些简单的包装器,如和,包装一些GPU功能,如matrix math。也许最接近的是,它专注于相当数学的计算,但它很好地抽象了GPU组件。

与其说是编写库,不如说是重写编译器的一部分。首先,GCC和visualstudio都不允许您定义自己的pragma,您需要很好地使用内置优化器

老实说,在我看来,实际的GPGPU部分是最简单的部分


如果您想了解他们是如何在GCC中实现OpenMP的,我建议您查看历史记录。

谢谢。今天早上我和一位同事进行了同样的讨论。在定义新的pragma时,似乎没有简单的方法。因此,我决定编写一个python脚本,该脚本将在编译之前执行,以生成cuda代码。我想我不会用#pragma,而是用@cuda.谢谢你的快速回答。我知道这个项目很有挑战性,这就是为什么我想从一个幼稚的一代做起。我会看看你给我的不同包装纸来帮助我。OpenACC怎么了?