Qual é o termo * correto * para um programa que faz uso de vários núcleos de processador de hardware?

5

Eu quero dizer que meu programa é capaz de dividir algum trabalho entre vários núcleos de CPU em um único sistema. Qual é o termo simples para isso? Não é multi-threaded, porque isso não implica automaticamente que os threads sejam executados em paralelo. Não é multi-processo, porque o multiprocessamento parece ser uma propriedade de um sistema de computador, não um programa. "capaz de operação paralela" parece muito prolixo, e com toda a confusão da terminologia, eu nem tenho certeza se é preciso.

Então, há um termo simples para isso?

Edit: A estrutura de paralelização usada pelo meu programa implementa o paralelismo, forçando vários processos e comunicando entre eles.

Editar 2: Encontrei o seguinte no artigo da Wikipédia sobre Concorrência : "A programação simultânea é geralmente considerado mais genérico que a programação paralela ... "Baseado nisso, tanto" concorrente "quanto" paralelo "são descrições adequadas do meu programa, com o" paralelo "sendo o mais preciso.

No entanto, percebo que a Wikipédia, como qualquer enciclopédia, é apropriada para obter uma visão geral de um assunto, mas pode não ser a melhor fonte para resolver tais sutilezas. Então eu agradeceria se alguém pudesse citar uma fonte mais autoritária demonstrando a diferença entre esses dois, ou se realmente há uma diferença.

    
por Ryan Thompson 01.07.2011 / 02:32
fonte

6 respostas

8

Existem duas coisas diferentes, mas relacionadas aqui:

  • Se o seu programa executar um único thread, subprocesso de fibra ou qualquer outro mecanismo de sequenciamento de instruções, ele será single-threaded , independentemente de ser executado sempre da mesma forma núcleo (afinidade) ou circula através de diferentes núcleos. Se, pelo contrário, o seu programa executa vários threads, sub-processos de fibras, etc., então é multi-threaded , novamente, independentemente de fazê-lo no mesmo núcleo ou em diferentes.

  • Se o seu programa for multiencadeado, e somente nesse caso, ele poderá executar vários encadeamentos, fibras, subprocessos, etc. simultaneouosly . Neste caso, é chamado de programa paralelo .

Observe que um programa paralelo é sempre multi-threaded, mas você pode ter programas multi-threaded que não são paralelos.

    
por 01.07.2011 / 02:39
fonte
4

Acho um pouco difícil responder isso sem mais informações. Como exatamente o trabalho deve ser dividido entre os núcleos?

De qualquer forma, existem duas distinções principais que eu faria:

  • Programas simultâneos . Aqui, diferentes threads de controle estão operando simultaneamente para alcançar diferentes tarefas. Cada thread pode estar em uma posição diferente no programa em qualquer momento. Um bom exemplo disso seria um servidor web que gera threads para processar solicitações. Deadlocks e justiça de agendamento são as principais preocupações aqui.

  • Programas paralelos . Eles estão executando operações paralelas em algum conjunto de dados (grande). Embora isso possa realmente ser implementado usando vários threads, isso não é necessariamente o caso. Em particular, ele pode ser implementado diretamente pela exploração de instruções paralelas especiais da CPU (pense nas extensões MMX / SSE e similares, ou na programação da GPU). Mapear / Reduzir programação de estilo é um ajuste natural nesta categoria. O paralelo de Scala para loop é outro bom exemplo disso.

Essa distinção é geralmente chamada de paralelismo de tarefas m versus paralelismo de dados .

    
por 01.07.2011 / 08:26
fonte
4

Concorrente

In computer science, concurrency is a property of systems in which several computations are executing simultaneously, and potentially interacting with each other. The computations may be executing on multiple cores in the same chip, preemptively time-shared threads on the same processor, or executed on physically separated processors. A number of mathematical models have been developed for general concurrent computation including Petri nets, process calculi, the Parallel Random Access Machine model and the Actor model

.

    
por 01.07.2011 / 02:51
fonte
0

Você pode usar o termo "programa paralelo / concorrente". Os dois termos são ligeiramente diferentes, pois o paralelismo implica ter mais de um núcleo físico de CPU, enquanto a simultaneidade envolve mais de um thread, independentemente do número de núcleos.

    
por 01.07.2011 / 02:44
fonte
-3

Multi-core aware

A resposta de todos os outros até agora parece ter uma ressalva sobre o que descreve. Por que não ir direto ao cerne da questão?

    
por 01.07.2011 / 03:48
fonte
-5

Talvez você possa dizer que seu programa é assíncrono ou que executa seu trabalho de forma assíncrona. Não tenho certeza sobre o seu programa / método em particular.

    
por 01.07.2011 / 02:40
fonte