Como especifico em qual núcleo um pthread é gerado?

4

Estou executando um cluster em que cada nó tem um Intel Xeon E5430. / proc / cpuinfo reporta 8 núcleos. Eu estou usando C / C ++ compilado com gcc ver 5.3.1 em um Ubuntu 16.04LTS.

Distribuir meu trabalho para cada nó foi a parte fácil. Minha pergunta pertence ao processo em execução em cada nó. Como posso criar 8 threads simultâneas e garantir que cada uma delas seja gerada em um núcleo separado?

15 anos atrás, quando eu estava usando um SGI de 32 processadores, o comando fork tomou um argumento inteiro que era o ID do processador físico. Existe uma chamada semelhante em garfo ou segmentação que coloca um encadeamento em um núcleo físico?

    
por Steve S 12.07.2016 / 19:16

1 resposta

3

É seguro assumir que isso acontecerá por padrão, no entanto, é possível definir explicitamente a afinidade de cpu, uma máscara de bits do conjunto de CPUs que você deseja usar, para um processo com sched_setaffinity () ou para pthreads pthread_setaffinity_np () . O comando cli é taskset . Estes são específicos para Linux e GNU.

    
por 12.07.2016 / 19:27