GPU和SIMD是否可能在.NET / Java VM中实现?

时间:2011-09-06 09:01:25

标签: scala f# clojure jvm clr

一段时间以来,主流计算硬件都采用了SIMD指令(MMX,SSE,3D-Now等),最近我们看到AMD将480个流的GPU带入与CPU相同的芯片中。

F#,Scala和Clojure等功能语言也越来越受欢迎,其中一个共同的吸引力就是这些语言中并发编程的容易程度。

是否有计划让Java VM或.NET CLR开始提供对并行计算硬件资源的访问,以便功能语言可以成熟以利用硬件?

似乎似乎好像虚拟机目前是高性能计算的瓶颈,SIMD和GPU访问被委派给第三方库和后编译器(tidepowered.net,OpenTK,ScalaCL,Brahma)等等。)

有没有人知道微软/甲骨文/开源社区的任何计划/路线图是他们的虚拟机与新硬件和编程范例的最新版本?

有没有充分的理由说明供应商在采用方面如此迟钝?

编辑:

到目前为止,为了解决反馈问题,GPU编程确实很复杂,并且做错了,会降低性能。但众所周知并行性是计算的未来 - 所以这个问题的关键在于,如果应用程序和硬件之间的运行时不支持它,那么硬件和编程语言无法采用并行范例...为什么我们不在VM供应商的雷达/路线图上看到这个?

4 个答案:

答案 0 :(得分:4)

单声道运行时已包含对某些SIMD指令的支持 - 请参阅http://docs.go-mono.com/index.aspx?link=N%3aMono.Simd

对于Microsoft的CLR实现,您可以使用允许运行着色器等的XNA或提供运行GPGPU计算的接口的加速器库https://research.microsoft.com/en-us/projects/accelerator/

答案 1 :(得分:4)

你的意思是JavaCL和ScalaCL?他们都试图将CUDA / GPU编程迁移到javavm

答案 2 :(得分:2)

Java在并行主义领域已经取得了一段时间的进展,首先是java.util.concurrent包,现在是fork / join框架。希望将来,像Clojure和Scala这样的语言将提供很好的高级抽象来利用fork-join。

GPGPU编程仅为非常专业的问题提供显着的性能提升。 .Net和Java是通用编程语言。另外,谁想用Java这样的语言进行CUDA式编程?

答案 3 :(得分:0)

Zach Tellman的Penumbra框架支持Clojure中的GPU编程(用于图形和通用编程)。

这有点实验性,但我认为理论上的动机非常合理:

  • 利用GPU /专用SIMD指令进行大数据集的严重数字处理
  • 使用在元编程/ DSL定义方面非常强大的语言(例如Clojure)来协调整体级别的操作,并在需要时生成适当的低级代码(例如,大量使用宏扩展)