Por que os programadores definem modelos de programação para substituir o C / POSIX pelo paralelismo?


10

Os fornecedores de novas arquiteturas de computadores regularmente tentam introduzir novos modelos de programação, por exemplo, recentemente CUDA / OpenCL para GPGPUs, e substituem o C / POSIX como a interface de controle do paralelismo da plataforma. (Poss & Koening, AM3: Rumo a um acelerador Unix de hardware para muitos núcleos, 2015)

Por que os designers de arquitetura tentam criar novos modelos de programação para substituir o C / POSIX na computação paralela? O C / POSIX não é adequado para multiprocessadores ou os autores originais do C / POSIX não tinham a necessidade de computação paralela em mente no tempo de design do C / POSIX? Ou será que os programadores precisam de mais recursos do que o C / POSIX pode oferecer, recorrendo a novos projetos, por exemplo, CUDA / OpenCL, etc.?


7
Lembre-se, o software é uma abstração de hardware. Se o hardware mudar muito, a abstração do software pode não ser mais boa. Acredito que isso certamente seja verdade quando considerar o uso de threads POSIX para uma GPU, mas deixarei para outra pessoa explicar mais detalhadamente em uma resposta.

Respostas:


10

Compare threads POSIX e Grand Central Dispatch, por exemplo. Eu tenho código que despacha para quatro threads em oito linhas de código. Com o POSIX, tudo isso seria um pesadelo absoluto.

Por outro lado, o CUDA / OpenCL não trata de multithreading, mas de usar habilidades vetoriais maciças. (Eles também podem executar multithreading, mas vetorizar é o mais importante).


9

Há uma distinção entre a programação paralela SIMD e o modelo de programação paralela mais tradicional usado pelo POSIX.

SIMD é o modelo que CUDA, OpenCL, etc. usam. Há um único conjunto de instruções que são executadas simultaneamente por muitos encadeamentos, cada um operando em seu próprio conjunto de dados. Isso é muito útil para gráficos 3D, onde as mesmas transformações são aplicadas a um grande número de pontos.

O modelo POSIX pressupõe que cada thread seja executado de forma assíncrona e cada thread pode executar código totalmente diferente.

Ambos os modelos têm seus pontos fortes e fracos - é por isso que são diferentes. O POSIX é muito mais flexível, mas o CUDA / OpenCL / etc. pode tirar proveito de hardware especializado, executando milhares de threads (geralmente mais simples) por vez.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.