为何程序员要定义编程模型来代替C / POSIX进行并行处理?


10

新计算机体系结构的提供者经常尝试引入新的编程模型,例如,最近用于GPGPU的CUDA / OpenCL,并取代C / POSIX作为平台并行性的控制接口。(Poss&Koening,AM3:迈向面向多核的硬件Unix加速器,2015年)

为什么架构设计师尝试设计新的编程模型来代替C / POSIX进行并行计算?C / POSIX是不是非常适合多处理器,还是C / POSIX的原始作者在C / POSIX设计时就没有考虑并行计算的需求?还是程序员需要比C / POSIX所提供的功能更多的功能,从而诉诸于CUDA / OpenCL等新设计?


7
请记住,软件是硬件的抽象。如果硬件变化太大,那么软件抽象可能不再是一个好的选择。我认为在考虑将POSIX线程用于GPU时肯定是正确的,但我会将其留给其他人在答案中进行更详细的解释。

Answers:


10

例如,比较POSIX线程和Grand Central Dispatch。我有在八行代码中分派到四个线程的代码。使用POSIX,这绝对是一场噩梦。

另一方面,CUDA / OpenCL根本不是关于多线程的,而是关于使用大量向量功能的。(他们也可以执行多线程,但是向量化很重要)。


9

SIMD并行编程和POSIX使用的更传统的并行编程模型之间有区别。

SIMD是CUDA,OpenCL等使用的模型。一组指令由多个线程同时执行,每个线程都在自己的数据池上运行。这对于3D图形之类的东西非常有用,在3D图形中,相同的变换应用于大量点。

POSIX模型假定每个线程异步运行,并且每个线程都可能执行完全不同的代码。

两种模型都有其优点和缺点-这就是为什么它们不同的原因。POSIX更加灵活,但是CUDA / OpenCL / etc。可以利用专用硬件的优势,一次运行数千个(通常更简单)线程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.