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.?
źródło
Odpowiedzi:
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).
źródło
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.
źródło