如何在 C++ 中利用 multi-cpu?
How to take advantage of multi-cpu in c++?
我在实验室工作,使用 std::thread
在 C++11 上编写多线程计算程序。现在我有机会 运行 我的程序在多 cpu 服务器上。
服务器:
- 运行 Ubuntu 服务器
- 拥有 40 颗英特尔 CPU 的
我对多cpu编程一无所知。第一个想法,我想到 运行 40 个应用程序,然后将它们的结果粘合在一起。这是可能的,但我想更多地了解我的机会。
- 如果我在服务器上通过它的 gcc 编译器编译我的代码,生成的应用程序是否利用了 multi-cpu?
- 如果 #1 答案取决于,我该如何检查?
谢谢!
你问的不仅仅是多线程,而是多cpu.
基本上操作系统会自动将线程分散到核心上。您无需执行任何操作。
使用 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 数量大致相同的线程。确保不是只有一个线程在工作,其他线程只是在等待该线程的终止。
我在实验室工作,使用 std::thread
在 C++11 上编写多线程计算程序。现在我有机会 运行 我的程序在多 cpu 服务器上。
服务器:
- 运行 Ubuntu 服务器
- 拥有 40 颗英特尔 CPU 的
我对多cpu编程一无所知。第一个想法,我想到 运行 40 个应用程序,然后将它们的结果粘合在一起。这是可能的,但我想更多地了解我的机会。
- 如果我在服务器上通过它的 gcc 编译器编译我的代码,生成的应用程序是否利用了 multi-cpu?
- 如果 #1 答案取决于,我该如何检查?
谢谢!
你问的不仅仅是多线程,而是多cpu.
基本上操作系统会自动将线程分散到核心上。您无需执行任何操作。
使用 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 数量大致相同的线程。确保不是只有一个线程在工作,其他线程只是在等待该线程的终止。