Dlaczego programiści definiują modele programowania, aby zastąpić C / POSIX dla równoległości?

10

Dostawcy nowych architektur komputerowych regularnie próbują wprowadzać nowe modele programowania, np. Ostatnio CUDA / OpenCL dla GPGPU, i zastępują C / POSIX jako interfejs sterowania równoległością platformy. (Poss & Koening, AM3: Ku sprzętowemu akceleratorowi Unix dla wielu rdzeni, 2015)

Dlaczego projektanci architektury starają się projektować nowe modele programowania, aby wyprzeć C / POSIX do obliczeń równoległych? Czy C / POSIX nie jest dobrze dostosowany do wieloprocesorów, czy też pierwotni autorzy C / POSIX nie mieli na myśli potrzeby obliczeń równoległych w czasie projektowania C / POSIX? A może programiści potrzebują więcej możliwości niż C / POSIX może dostarczyć, uciekając się w ten sposób do nowych projektów, np. CUDA / OpenCL itp.?

codezombie
źródło
7
Pamiętaj, że oprogramowanie to abstrakcja sprzętu. Jeśli sprzęt zmienia się za bardzo, abstrakcja oprogramowania może już nie być dobra. Uważam, że jest to z pewnością prawda przy rozważaniu użycia wątków POSIX dla GPU, ale zostawię to komuś innemu, aby wyjaśnił pełniej w odpowiedzi.

Odpowiedzi:

10

Porównaj na przykład wątki POSIX i Grand Central Dispatch. Mam kod, który wysyła do czterech wątków w ośmiu wierszach kodu. Z POSIX to byłby absolutny koszmar.

Z drugiej strony, CUDA / OpenCL wcale nie dotyczą wielowątkowości, ale wykorzystania ogromnych zdolności wektorowych. (Mogą również wykonywać wielowątkowość, ale wektoryzacja jest ważna).

gnasher729
źródło
9

Istnieje rozróżnienie między programowaniem równoległym SIMD a bardziej tradycyjnym modelem programowania równoległego używanym przez POSIX.

SIMD to model używany przez CUDA, OpenCL itp. Istnieje jeden zestaw instrukcji wykonywanych jednocześnie przez wiele wątków, z których każdy działa na własnej puli danych. Jest to bardzo przydatne w przypadku grafiki trójwymiarowej, w której te same transformacje są stosowane do dużej liczby punktów.

Model POSIX zakłada, że ​​każdy wątek działa asynchronicznie, a każdy wątek może potencjalnie wykonać zupełnie inny kod.

Oba modele mają swoje mocne i słabe strony - dlatego są różne. POSIX jest znacznie bardziej elastyczny, ale CUDA / OpenCL / itp. może skorzystać ze specjalistycznego sprzętu, uruchamiając jednocześnie tysiące (zwykle prostszych) wątków.

Mike Harris
źródło