Existem pelo menos três técnicas para explorar vários processadores em um programa projetado para usar um único núcleo. A mais direta dessas técnicas é usar bibliotecas e código de sistema que usa múltiplos 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 paralelizado e pode ser possível fazer em paralelo com a execução do aplicativo. Mesmo sem o gerenciamento automático de memória, há algum potencial para o 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 da memória como disponível.
Uma segunda técnica é a tradução binária. Embora isso possa ser considerado "reescrevendo o aplicativo", isso é feito por software e sem acesso ao código-fonte. Produzir paralelismo em nível de thread parece não ter sido o principal objetivo da maioria das pesquisas e desenvolvimento usando tradução binária (que geralmente diz respeito à execução de código legado em um ISA diferente, explorando extensões ISA ou otimizando uma microarquitetura em particular e usando informações dinâmicas para fornecer maior otimização guiado por perfil de qualidade), mas o potencial é óbvio.
Uma terceira técnica é o multithreading especulativo. Atualmente, nenhum processador (que conheço) 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 envolveria 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 de comunicação entre os encadeamentos e os segmentos de desova), pelo paralelismo limitado que eles podem explorar e pelo retorno limitado sobre o investimento (aplicações importantes que podem ser beneficamente paralelizados e provavelmente serão reescritos, muitas aplicações beneficiariam relativamente pouco de tais técnicas (especialmente com limites de energia / térmicas permitindo que um único núcleo funcione em uma freqüência mais alta do que múltiplos núcleos), e os custos de desenvolvimento são significativos ). No entanto, essas técnicas do existem e é teoricamente possível usar vários núcleos com um aplicativo projetado para usar um único núcleo.