使用CUDA构建自动并行计算库

时间:2011-01-18 20:18:08

标签: compiler-construction cuda

对于我的最后一年项目,我选择构建一个开发人员可以使用CUDA进行GPGPU计算的库,而不必理解CUDA API的不同内核实现背后的机制(换句话说,就是CUDA包装器)。该库可能类似于openMP库。对于那些不熟悉openMP的人来说,它是一个支持C语言的多平台共享内存多处理编程的API,其中数据布局和分解由指令自动处理。例如,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);

就我而言,我想在GPU上实现CUDA并行计算的相同功能。因此,我需要构建一组影响运行时行为的编译器指令,库例程和环境变量。必须向程序员隐藏CUDA中的每个调用。

由于CUDA是一种SIMD架构,我知道有许多因素需要考虑,尤其是迭代之间的依赖性。但是现在我认为程序员知道GPGPU计算的局限性。

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

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

2 个答案:

答案 0 :(得分:1)

这有点主观,但这听起来像是一个非常具有挑战性的项目。需要花费大量的思考和计划才能很好地构建一个问题,以便从主机到gpu的数据传输得到回报,并且只对一部分问题有意义。

对于执行类似操作的现有项目,有一些简单的包装器,如PyCUDAPyOpenCL,它们包含一些GPU功能,如矩阵数学。可能最接近的是theano,它专注于相当数学计算,但它可以很好地抽象掉GPU组件。

答案 1 :(得分:1)

这不是编写库而是重写编译器的一部分。 GCC和Visual Studio都不允许你定义自己的pragma,一方面,你需要很好地使用内置的优化器。

老实说,在我看来,实际的GPGPU部分很容易。

如果您想了解他们如何在GCC中使用OpenMP,我建议您查看GOMP project历史记录。