3

我有一个需要大约 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++ 和其他语言阅读了很多关于它的文章,但我在理解其他语言方面很垃圾!

谢谢大家!

弗雷泽

4

1 回答 1

4

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 等的附加库。还有一个商业版本。这实际上确实

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

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

NMath - 一组可从 .NET 使用且支持 GPU 的数学库。

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

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

于 2013-09-08T00:31:31.340 回答