Núcleos são unidades físicas de computação. Você não pode obter desempenho além da capacidade física de um núcleo. Um processo em termos simples é uma unidade lógica de trabalho. Um thread em termos simples é a pilha de instruções que compartilha o espaço de endereço com outros threads em um único processo e é uma unidade de agendamento para o SO. A maioria dos sistemas operacionais modernos é multithreaded, portanto você pode pensar em thread como uma unidade de programação para fins de paralelismo e não se preocupar com processos.
Você pode definir o número de trabalhos paralelos usando vários switches de configuração e o GNU Parallel executará esses muitos trabalhos em paralelo, independentemente do número de núcleos. Isso não é ideal, pois resultará em sobrecarga de comutadores de thread e de contexto, devido ao agendamento de mais trabalho do que recursos físicos. Em casos extremos, isso pode resultar no que é chamado de thrashing
, em que o sistema gasta mais recursos em agendamento e preparação para o trabalho e menos em realmente realizar o trabalho. A menos que a CPU seja hyperthreaded, deve-se executar um thread por cpu para um desempenho otimizado.
Citação de Relavant do manual do usuário do GNU Parallel:
--use-cpus-instead-of-cores Count the number of physical CPUs instead of CPU cores. When computing how many jobs to run simultaneously relative to the number of CPU cores you can ask GNU parallel to instead look at the number of physical CPUs. This will make sense for computers that have hyperthreading as two jobs running on one CPU with hyperthreading will run slower than two jobs running on two physical CPUs. Some multi-core CPUs can run faster if only one thread is running per physical CPU. Most users will not need this option.
Espero que isso ajude. Para explorar mais, você pode facilmente brincar alterando os valores de paralelo e analisando o desempenho do sistema via top
e / ou w
.
Espero que isso ajude.