2015-09-04 11 views
7

Lavoro in laboratorio e ho scritto un programma di calcolo multithread in C++ 11 usando std::thread. Ora ho l'opportunità di eseguire il mio programma su server multi-cpu.Come sfruttare la multi-cpu in C++?

Server:

  • in esecuzione il server di Ubuntu
  • Ha di 40 CPU Intel

so nulla di programmazione multi-CPU. Prima idea, mi viene in mente di eseguire 40 applicazioni e quindi incollare i risultati insieme. È possibile, ma voglio sapere di più sulle mie opportunità.

  1. Se compilo il mio codice sul server tramite il suo compilatore gcc, l'applicazione risultante sfrutta la multi-cpu?
  2. Se la risposta n. 1 dipende, come posso verificarlo?

Grazie!

+1

Se il programma ha già più thread, il sistema operativo programmerà automaticamente tali thread su diverse CPU. Sarai limitato dal numero di thread. Se crei 10 thread, il tuo programma sarà limitato a un massimo di 10 CPU. –

+1

Se ogni "risultato" è completamente indipendente da tutti gli altri, in realtà scriverei un'applicazione a thread singolo, quindi eseguirla tramite 'parallelo' (vedere' sudo apt-get install parallel; man parallel') – v010dya

+0

Chiedere fuori sede le risorse sono fuori tema su SO. Ho rimosso le tue sottoquestioni su librerie e altre risorse, poiché il resto della domanda è recuperabile. – Puppy

risposta

0

La tua domanda non riguarda solo il multi-thread, ma la multi-cpu.

  1. Fondamentalmente il sistema operativo distribuisce automaticamente i fili sui nuclei. Non devi fare nulla.

  2. Una volta che si utilizza C++ 11, si ha std::thread::get_id() che è possibile chiamare e identificare il thread differente, ma NON È POSSIBILE identificare il core che si sta utilizzando. Utilizzare pthreads direttamente + "affinità cpu" per questo.

Puoi google per "Affinità CPU" per maggiori dettagli su come ottenere il controllo su di esso. Se vuoi questo tipo di precisione. È possibile identificare il nucleo e scegliere il nucleo ... È possibile iniziare con questo: http://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html

+3

Questa risposta sembra non avere nulla a che fare con la domanda. L'interlocutore non ha alcuna necessità apparente di affinità core o thread, che è fondamentalmente tutto ciò che si discute. – Puppy

+0

Ah, il cucciolo mi ha picchiato. OP sta chiedendo come multithread, non come legare i thread ai core. Nella maggior parte delle app orientate al throughput, non ti interessa dove sono in esecuzione i thread. – Mysticial

+0

Non sta solo chiedendo informazioni su multi-thread, ma anche su multi-cpu. è un po 'diverso ... e vuole controllarlo. Significa che ha bisogno di un codice di livello inferiore per verificare la multi-CPU. –

5

Se il programma viene eseguito con multithreading, il sistema operativo deve prestare attenzione automaticamente che utilizza le CPU disponibili.

Assicurati di distribuire il lavoro che devi fare a circa lo stesso numero di thread ci sono CPU che puoi usare. Assicurati che non sia solo un thread che fa il lavoro e gli altri thread attendono solo la conclusione di questo thread.