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

Mar*_*ark 16 clr f# jvm scala clojure

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

像F#,Scala和Clojure这样的函数式语言也越来越受欢迎,其中一个共同的吸引力是这些语言中并发编程的容易程度.

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

看起来好像虚拟机是目前针对高性能计算的瓶颈,与SIMD和GPU的访问获得授权的第三方库和后期编译器(tidepowered.net,OpenTK,ScalaCL,梵天,等等,等等)

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

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

编辑:

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

小智 5

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

  • @Mark :虽然 JavaCL 确实包装了 OpenCL,但 ScalaCL 完全将 OpenCL 隐藏在程序员之外:它不是检查字节码(Aparapi 的方式),而是在编译期间检查 Scala AST,这提供了更多有用的信息(并且是很多更容易做),并将 Scala 代码直接转换为 OpenCL 代码。负担消失了;-) (3认同)

Joh*_*mer 4

mono 运行时已经支持一些 SIMD 指令 - 请参阅http://docs.go-mono.com/index.aspx?link=N%3aMono.Simd

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

  • 我认为虚拟机自动使用 GPU 不会发生,原因有几个。1. 与GPU来回传输数据速度慢。2. GPU 上不支持 int/bool 3. 线程组需要以相同的方式进行所有分支。使用 SIMD 的可能性更大,但您会遇到问题,即 SIMD 指令对于小数据可能不会更快 - 请参阅 http://git.661346.n2.nabble.com/PATCH-git-gc-Speed-it-up- by-18-via-faster-hash-comparisons-td6311454.html 作为一个真实的例子,我们放弃了 SIMD,使 git gc 速度提高了 20%。我认为对齐问题也可能会出现 (3认同)