vb.net中的GPU处理

时间:2012-10-08 14:32:13

标签: vb.net gpgpu gpu-programming

我有一个大约需要24小时才能运行的程序。它全部用VB.net编写,大约有2000行。它已经是多线程的,这很有效(经过一些汗水和眼泪)。我通常使用10个线程运行进程,但是我想增加它以减少处理时间,这就是使用GPU的时间。我搜索谷歌的所有相关内容,我可以想到找到一些信息,但没有运气。

我希望的是一个vb.net项目的基本示例,它执行一些常规操作,然后将一些线程发送到GPU进行处理。理想情况下,我不想为此付出代价。如下所示:

'Do some initial processing eg.
dim x as integer
dim y as integer
dim z as integer
x=int(textbox1.text)
y=int(textbox2.text)
z=x*y
'Do some multi-threaded operations on the gpu eg.
'show some output to the user once this has finished.

非常感谢任何帮助或链接。我用c ++和其他语言阅读了很多关于它的文章,但我很难理解其他语言!

全部谢谢!

弗雷泽

1 个答案:

答案 0 :(得分:2)

VB.NET编译器无法编译到GPU上,它编译为中间语言(IL),然后在运行时对目标体系结构进行即时编译(JITed)。目前仅支持x86,x64和ARM目标。 CUDAfy(见下文)获取IL并将其转换为CUDA C代码。反过来,这是使用NVCC编译的,以生成GPU可以执行的代码。请注意,这意味着您仅限于NVidia GPU,因为AMD不支持CUDA。

还有其他一些采用相同方法的项目,例如Copperhead中的Python到CUDA翻译器。

CUDAfy - CUDA API之上的包装器,带有额外的FFT库等。还有一个commercial version。这确实是

  

CUDAfy翻译   使用SharpDevelop的反编译器ILSpy作为基础,翻译器将.NET代码转换为CUDA C.

还有其他项目允许您使用.NET语言的GPU。例如:

NMath - 一组数学库,可以在.NET中使用并启用GPU。

可能还有其他人,但这些似乎是主要的。如果您决定使用CUDAfy,那么您仍然需要花一些时间来了解足够的CUDA以及GPU如何工作以移植算法以适应GPU数据并行模型。除非它是可以用一个数学库开箱即用的东西。

重要的是要意识到从.NET语言访问GPU仍然会有性能损失。您必须支付将数据从.NET托管运行时移动(封送)到本机运行时的成本。这里的开销在很大程度上不仅取决于大小,还取决于数据的类型以及是否可以在没有转换的情况下进行封送。这是将数据从CPU移动到GPU等的成本。