用户在C ++中定义的CUDA代码

时间:2011-11-12 19:58:42

标签: c++ cuda

我正在编写一个研究应用程序,它将使用C ++和CUDA来利用GPGPU。我希望允许应用程序的用户能够通过编写将在GPU上执行的内核代码来定制程序。

到目前为止,我唯一的想法是将用户代码输出到.cu文件中,然后调用平台编译器来创建动态库,然后可以由主机应用程序在运行时加载。这可行吗?即使这是我非常担心这样做会使我的程序不稳定并成为跨平台的噩梦。

非常感谢任何想法/替代或评论。

2 个答案:

答案 0 :(得分:1)

理论上有可能。我会建议使用OpenCL而不是Cuda。它不像Nvidia平台上的Cuda那样优化,但旨在支持运行时编译(每个OpenCl运行时驱动程序都包含一个编译器,作为执行内核的第一步,编译它)。

另一个优势是OpenCL比Cuda更便携,因为OpenCL也在ATI(GPU和CPU)和英特尔上运行。

答案 1 :(得分:1)

你可以做到,它是可行的,但IMO你需要有一个非常好的理由允许用户编辑CUDA内核。我不确定您对用户界面的想法是什么,以及用户在CUDA内核中运行的代码将如何与外部世界交互,但这可能会变得棘手。如果预先实现一组CUDA内核并允许用户为每个内核提供一组已知参数,那可能会更好。

你看过pycuda了吗?它基本上实现了一个类似的想法,允许python用户在python应用程序中编写C ++ CUDA内核。 Pycuda提供的功能可以帮助用户将他们的python代码与他们编写的内核集成在一起,这样当他们运行python脚本时,内核就会编译并作为其中的一部分运行。 我没有看过pycuda的内部工作原理,但我认为它的核心是做一些类似于你想要实现的东西。查看pycuda可能会让您了解编写自己的实现所需的内容。