프로그래머가 병렬 처리를 위해 C / POSIX를 대체하기 위해 프로그래밍 모델을 정의하는 이유는 무엇입니까?


10

새로운 컴퓨터 아키텍처 제공 업체는 정기적으로 새로운 프로그래밍 모델 (예 : 최근 GPGPU 용 CUDA / OpenCL)을 도입하려고 시도하고 플랫폼 병렬 처리의 제어 인터페이스로 C / POSIX를 대체합니다. (Poss & Koening, AM3 : 2015 년 많은 코어를위한 하드웨어 유닉스 가속기로)

아키텍처 설계자가 병렬 컴퓨팅을위한 C / POSIX를 대체하기 위해 새로운 프로그래밍 모델을 설계하려고하는 이유는 무엇입니까? C / POSIX가 멀티 프로세서에 적합하지 않거나 C / POSIX의 원래 작성자가 C / POSIX 디자인 타임에 병렬 컴퓨팅을 염두에 두지 않았습니까? 아니면 프로그래머가 C / POSIX가 제공 할 수있는 것보다 더 많은 기능을 필요로 하는가? CUDA / OpenCL 등과 같은 새로운 디자인에 의지 하는가?


7
소프트웨어는 하드웨어의 추상화입니다. 하드웨어가 너무 많이 변경되면 소프트웨어 추상화가 더 이상 좋지 않을 수 있습니다. GPU에 POSIX 스레드 사용을 고려할 때 이것이 사실이라고 생각하지만 대답을 더 자세히 설명하기 위해 다른 사람에게 맡길 것입니다.

답변:


10

예를 들어 POSIX 스레드와 Grand Central Dispatch를 비교하십시오. 8 줄의 코드로 4 개의 스레드로 디스패치하는 코드가 있습니다. POSIX를 사용하면이 모든 것이 절대 악몽 일 것입니다.

반면에 CUDA / OpenCL은 멀티 스레딩이 아니라 대규모 벡터 기능을 사용하는 것입니다. (멀티 스레딩도 가능하지만 벡터화가 중요합니다).


9

구별이 SIMD의 병렬 프로그래밍 및 POSIX를 사용하는 전통적인 병렬 프로그래밍 모델은.

SIMD는 CUDA, OpenCL 등이 사용하는 모델입니다. 여러 스레드에서 동시에 실행되는 단일 명령 집합이 있으며 각 명령은 자체 데이터 풀에서 작동합니다. 이것은 동일한 변환이 많은 수의 점에 적용되는 3D 그래픽과 같은 경우에 매우 유용합니다.

POSIX 모델은 각 스레드가 비동기 적으로 실행되고 각 스레드가 완전히 다른 코드를 실행할 수 있다고 가정합니다.

두 모델 모두 장단점이 있으므로 서로 다릅니다. POSIX는 훨씬 더 유연하지만 CUDA / OpenCL 등입니다. 특수 하드웨어를 활용하여 한 번에 수천 개의 (보통 단순한) 스레드를 실행할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.