一段时间以来,主流计算硬件都采用了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供应商的雷达/路线图上看到这个?
答案 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编程(用于图形和通用编程)。
这有点实验性,但我认为理论上的动机非常合理: