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

How to take advantage of multi-cpu in c++?

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

服务器:

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

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

谢谢!

你问的不仅仅是多线程,而是多cpu.

  1. 基本上操作系统会自动将线程分散到核心上。您无需执行任何操作。

  2. 使用 C++11 后,您可以调用 std::thread::get_id() 并识别不同的线程,但无法识别您正在使用的内核。为此直接使用pthreads+"cpu affinity"

您可以 google for "CPU affinity" 了解有关如何控制它的更多详细信息。如果你想要这种精度。你可以识别核心,也可以选择核心……你可以从这个开始:http://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html

如果您的程序运行多线程,您的 OS 应该自动注意它使用可用的 CPU。

确保将您必须执行的工作分配给与您可以使用的 CPU 数量大致相同的线程。确保不是只有一个线程在工作,其他线程只是在等待该线程的终止。