Uso do processador e uso do núcleo

3

Eu quero brincar com o threading e o paralelismo. Eu sei que meu processador tem vários núcleos, mas não sabe como ver o que está acontecendo em cada um deles. Qual é o caminho certo para acessar essas informações?

Mais concretamente, estou planejando o seguinte: Imagino escrever um pequeno programa que lance vários segmentos, esses segmentos devem ser distribuídos pelos núcleos e se comunicar uns com os outros quando necessário. Gostaria de poder observar onde está o encadeamento, alguma dica?

Eu sou completamente novo em tentar esse tipo de coisa (eu também ficaria muito feliz com qualquer informação relacionada a isso que não abordasse diretamente essa questão).

Melhor Bart

(googling só me levou a "cat / proc / cpuinfo", o que parece me dizer que eu tenho 7 processadores. Este não é um fato verdadeiro, o que me diz que eu não sei como ler esta saída.)

    
por kasterma 04.10.2010 / 22:49

2 respostas

2

Número de processadores: Por favor, note que a numeração começa em 0, então se eu tiver o processador 1, eu tenho pelo menos 2 deles

Bounding to threads Threads não serão vinculados a CPU's (a menos que você faça truques usando cpulimit & co. - na maioria dos casos você não deve). Assumindo que você configurou o kernel com 1000Hz e não há E / S, a troca de contexto é feita 1000 vezes por segundo. Agora, na minha configuração de 2 processadores tenho cerca de 300 threads em execução neste momento, o que significa que 6 (6) slots serão alocados por processo. É seguro assumir que em qualquer segundo cada processo ocupará o núcleo.

Dado o algoritmo de escadaria, o I / O não é necessário verdadeiro, mas cada thread de um segundo pode estar em ambos os núcleos - assim como não roda em nenhum lugar enquanto espera (portanto, não é limitado a nenhum núcleo). / p>

Hyperthreading Eu acho que você tem 4 núcleos Intel iX com hyperthreading (a menos que você tenha máquina com processador dual). O Hyperthreading funciona emulando um núcleo separado. Portanto, se o processo estiver aguardando um núcleo por E / S, ele poderá alternar para executar outro - o que, é claro, complicará ainda mais a questão.

    
por 04.10.2010 / 23:06
3

Cada núcleo recebe sua própria entrada em /proc/cpuinfo , portanto, há muitas informações redundantes aqui.

Para obter uma visão geral de quantos processadores e / ou núcleos você tem, faça algo assim:

# egrep 'processor|core id|physical id' /proc/cpuinfo
processor   : 0
physical id : 0
core id     : 0
processor   : 1
physical id : 0
core id     : 1

Isso é executado no meu computador de chip único e núcleo duplo. Então eu tenho dois núcleos, numerados 0 e 1, mas ambos pertencem à CPU física 0.

Os caras do computador gostam de contar a partir de 0, lembre-se.

Aqui está a saída de um sistema dual-cpu, single-core:

$ egrep 'processor|core id|physical id' /proc/cpuinfo
processor       : 0
processor       : 1

Então eu tenho dois processadores, mas como nenhum núcleo é especificado, eu sei que cada chip do processador tem um único núcleo.

Algo um pouco mais interessante:

$ egrep 'processor|core id|physical id' /proc/cpuinfo
processor       : 0
physical id     : 0
core id         : 0
processor       : 1
physical id     : 0
core id         : 1
processor       : 2
physical id     : 1
core id         : 0
processor       : 3
physical id     : 1
core id         : 1

Aqui está o meu sistema dual-core dual-cpu. Eu tenho "processadores" 0-3, e cada um vive no processador 0 ou 1, como núcleo 0 ou 1.

Você tem a ideia.

Tudo o que disse, eu suspeito que você tenha um sistema quad-core de duas CPUs, com processadores de 0 a 7.

    
por 04.10.2010 / 23:04