Um programa de thread único pode ser criado para usar vários núcleos?


12

O título diz tudo: existe uma maneira de obter um programa mais antigo projetado para usar um único núcleo de CPU para usar vários núcleos de CPU?


13
Não, não é possível.
Moab,

5
Se apenas fosse assim tão fácil ..
Brendan Longo

1
E se houvesse um programa que 'emulasse' um processador (como talvez uma vm?), Mas pegasse sua CPU multi-core e emulasse uma CPU single-core com muito mais poder de processamento por thread? Isso é possível?
precisa

Quem gerenciará a sincronização entre vários threads então, porque a ordem é importante.
user36582

Respostas:


16

Infelizmente, um programa legado criado para uma única CPU não pode ser forçado a usar vários núcleos de CPU. O uso de vários núcleos da CPU requer vários encadeamentos, que precisam se comunicar entre si, garantindo que as condições de corrida e outros problemas não ocorram. Um aplicativo mais antigo não pode ser feito para usar mais do que o núcleo da CPU, a menos que seja reescrito para fazê-lo, e somente se a natureza do aplicativo permitir que ele seja paralelo.


19
Também é importante notar que alguns aplicativos simplesmente não podem ser reescritos para levar em conta vários núcleos. Depende principalmente do grau de paralelismo do processo. Um exemplo simples de processo não-paralelizável seria a reprodução humana: uma mulher pode criar um filho em 9 meses. Nove mulheres podem fazer 9 filhos em 9 meses, mas você não pode usar 9 mulheres para fabricar um único filho em um mês.
precisa saber é o seguinte

1
Em princípio, alguém poderia escrever um programa para analisar outro programa e tentar paralelizá-lo. Dito isto, mesmo versões "fáceis" muito limitadas desse problema estão gerando Ph.D. dissertações nas últimas duas gerações e o progresso tem sido lento. O problema completo pode muito bem estar completo com a IA.
dmckee --- ex-moderador gatinho

Grande, obrigado a todos, você me fez Grion com o seu exemplo Mulheres e nascimento, especialmente quando se fala de fabricação: D
Chris

e se um programa tiver várias operações matemáticas independentes que serão usadas posteriormente uma para a outra? talvez um segundo thread possa analisar o programa, hmm, não sei o que estou dizendo. Se um encadeamento puder analisar a montagem .. "faça uma operação cara aqui, faça uma segunda operação cara com isso, a primeira operação cara não toca" ok de volta à linha principal. Suponho que um programa inteiro teria que ser pré-analisado para identificar operações caras independentes.
CausingUnderflowsEverywhere

13

Qual é o seu objetivo com isso? Maior desempenho? Infelizmente, os aplicativos projetados para usar apenas 1 núcleo não farão uso de mais. É disso que se trata essa conversa sobre aplicativos "multiencadeados".


2

Existem pelo menos três técnicas para explorar vários processadores em um programa projetado para usar um único núcleo. A mais simples dessas técnicas é usar bibliotecas e código do sistema que usa vários núcleos ou pode executar pelo menos parcialmente em paralelo com o código do aplicativo. A coleta de lixo é um exemplo de funcionalidade que pode ser paralelizada e pode ser possível paralelamente à execução do aplicativo. Mesmo sem o gerenciamento automático de memória, existe algum potencial de paralelismo nas funções de desalocação de memória, porque o alocador de memória pode ter algum trabalho a fazer além de simplesmente marcar a seção de memória como disponível.

Uma segunda técnica é a tradução binária. Embora isso possa ser considerado "reescrever o aplicativo", isso é feito por software e sem acesso ao código-fonte. A produção de paralelismo em nível de encadeamento parece não ter sido o principal objetivo da maioria das pesquisas e desenvolvimento usando a tradução binária (que geralmente envolve a execução de código legado em um ISA diferente, a exploração de extensões ISA ou a otimização para uma microarquitetura específica e o uso de informações dinâmicas para fornecer maior otimização guiada por perfil de qualidade), mas o potencial é óbvio.

Uma terceira técnica é a multithreading especulativa. Atualmente, nenhum processador (que eu conheça) suporta multithreading especulativo gerenciado por hardware. No entanto, com a introdução da memória transacional de hardware, a implementação de um sistema de tempo de execução torna-se um pouco mais prática, pois o HTM pode ser usado para detectar conflitos no uso da memória. O multithreading especulativo gerenciado por software normalmente envolve alguma tradução binária, mas sua natureza especulativa justifica considerar uma técnica separada.

A praticidade dessas técnicas é limitada pelos custos associados aos sistemas existentes (incluindo o custo da comunicação entre os threads e dos threads de desova), pelo paralelismo limitado que eles podem explorar e pelo retorno limitado do investimento (aplicativos importantes que podem ser benéficos Se em paralelo for provável que seja reescrito, muitos aplicativos se beneficiariam relativamente pouco, se é que utilizam essas técnicas (especialmente com limites de energia / térmica que permitem que um único núcleo seja executado em uma frequência mais alta que vários núcleos) e os custos de desenvolvimento são significativos). No entanto, essas técnicas fazem existir e é teoricamente possível a utilização de múltiplos núcleos com um aplicativo projetado para usar um único núcleo.


0

Não, não pode ser. Um programa é escrito explicitamente para usar vários núcleos. Não é trivial fazer o trabalho em vários núcleos. Requer sincronizações de todos os threads. Como um arremessa a bola, o outro pega, um lustra a bola, um limpa, um verifica a bola se ela tem uma boa quantidade de ar nela. Agora imagine cada personagem executando em um thread independentemente um do outro. Alguém tenta pegar a bola quando ela não é lançada. Ou alguém tenta polir a bola quando está sendo jogada. Ou dois personagens tentando pegar e jogar a bola simultaneamente. Existem muitas maneiras de travar. Portanto, os programadores precisam redesenhar cuidadosamente um aplicativo de núcleo único para que ele possa tirar proveito de vários núcleos.

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.