如何在c ++中利用multi-cpu?

Doc*_*sha 7 c++ cpu multithreading cpu-usage c++11

我在实验室工作并编写了多线程计算程序,在C++ 11上使用std::thread.现在我有机会在多CPU服务器上运行我的程序.

服务器:

  • 运行Ubuntu服务器
  • 拥有40个Intel CPU

我对多CPU编程一无所知.第一个想法,我想到了运行40个应用程序然后将它们的结果粘合在一起.这是可能的,但我想更多地了解我的机会.

  1. 如果我通过它的gcc编译器在服务器上编译我的代码,结果应用程序是否利用了多CPU?
  2. 如果#1答案取决于,我该如何检查?

谢谢!

Mat*_*mer 5

如果您的程序运行多线程,则操作系统应自动关注它使用可用的CPU.

确保将您必须完成的工作分配给可以使用的CPU数量相同的线程.确保它不仅仅是一个执行工作的线程,而其他线程只是在等待此线程的终止.


Wag*_*ota 0

你的问题不仅是关于多线程,而且是关于多CPU。

  1. 基本上,操作系统会自动将线程分布在核心上。你不需要做任何事情。

  2. 一旦你使用C++11,你就std::thread::get_id()可以调用和识别不同的线程,但你无法识别你正在使用的核心。为此直接使用pthreads+“cpuaffinity”。

您可以在 google 上搜索“CPU 亲和力”,了解有关如何控制它的更多详细信息。如果你想要这种精度。您可以识别核心并选择核心...您可以从以下开始:http ://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html

  • 这个答案似乎与问题无关。提问者对核心或线程亲和力没有明显的需求,这基本上就是您讨论的所有内容。 (3认同)