【问题标题】:GPU Processing in vb.netvb.net 中的 GPU 处理
【发布时间】:2012-09-28 19:54:39
【问题描述】:

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

谢谢大家!

弗雷泽

【问题讨论】:

  • 等等,你有一台 10 核的计算机?我不信。只有当你有足够的处理器时,更多的线程才有意义。
  • Konrad:您的 10 个线程不是最佳数量。我猜对我来说大约是 7 或 8 个。但从组织的角度来看,分批 10 个让我的生活更轻松。关于使用 GPU 的任何想法?
  • 这可能会让你的生活更轻松,但也会让代码变得更慢(!!!)。关于使用 GPU:我怀疑 VB 是否有解决方案。 Mono 在其核心库中有一些 SIMD 模块,但没有用于通用 GPU 编程,因为加载实现 GPU 逻辑的 C++ 库通常更容易。在 VB 中进行原生 GPU 编程并不能为您带来任何好处,而且 GPU 的抽象与 .NET 框架设计不能很好地融合。
  • 其他“支持”使用 GPU 的语言需要特殊的编译器。例如,C++ 实际上并不支持 GPGPU 编程。如果你想使用 CUDA 在 C++ 中进行 GPGPU 编程,你实际上是在使用不同的编译器 (nvcc) 来编译你的 GPU 代码。
  • 嗯,nvcc 编译器显然需要知道如何解析源语言,并且它期望(有限的)C++ 子集作为源语言。

标签: vb.net gpgpu gpu


【解决方案1】:

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 等的成本。

【讨论】:

  • 哇。你回答了差不多一年前的一个问题。您所建议的是我已经完成的,并且正如您所提到的,与 gpu 之间的数据传输非常重要 - 以至于它变得比以前的代码慢。感谢您的回答!
猜你喜欢
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 2010-09-30
  • 2016-07-18
  • 1970-01-01
相关资源
最近更新 更多