如何进行硬件独立并行编程?

Phi*_*hil 11 parallel-processing cpu graphics scala

目前,并行编程有两个主要的硬件环境,一个是多线程CPU,另一个是可以对数据阵列进行并行操作的图形卡.

问题是,鉴于有两种不同的硬件环境,我如何编写一个并行但独立于这两种不同硬件环境的程序.我的意思是我想编写一个程序,无论我有显卡还是多线程CPU或两者兼而有之,系统都应自动选择执行它的方式,显卡和/或多线程CPU中的一个或两个.

是否有允许这样的软件库/语言结构?

我知道有一些方法可以直接定位显卡以运行代码,但我的问题是我们如何在不知道任何硬件知识的情况下编写并行代码,软件系统应该将其安排到显卡或CPU.

如果您要求我对平台/语言更具体,我希望答案是关于C++或Scala或Java.

谢谢

小智 5

在几年后,程序将在运行时从头开始重写(嘿,为什么不呢?)...

......就目前而言(据我所知),只有具有给定范例的相关并行系统才能实现,而GPU("令人尴尬的并行")与"传统"CPU 明显不同(2-8) "线程")与20k处理器超级计算机明显不同.

实际上有并行运行时/库/协议,如Charm ++MPI(想想"Actors")可以扩展 - 使用专门设计的算法来解决某些问题 - 从单CPU到数万个处理器,所以上面是有点夸张.然而,GPU(甚至是Cell微处理器)和更通用的处理器之间存在着巨大的根本区别.

有时方形钉不适合圆孔.

使用nofit

快乐的编码.


Jör*_*tag 5

EPO的马丁奥德斯基研究小组最近刚收到数百万欧元的欧洲研究基金,以回答这个问题.(该文章包含几个链接到论文的详细信息.)

  • 因此,如果在Scala空间中进行编程,最好从Actors(AKKA)和并行集合开始,那么请等待它们来计算显卡的细节?假设他们将在2年后完成它. (2认同)