我在实验室工作,编写多线程计算程序,在C++ 11上使用std::thread
。现在我有机会在多CPU服务器上运行我的程序。如何利用C++中的多CPU?
服务器:
- 运行Ubuntu的服务器
- 有40个英特尔CPU的
我一无所知多CPU的编程。第一个想法,我想到运行40个应用程序,然后将他们的结果粘合在一起。这是可能的,但我想更多地了解我的机会。
- 如果我通过它的gcc编译器在服务器上编译我的代码,那么结果应用程序会利用多CPU吗?
- 如果#1答案取决于,我该如何检查它?
谢谢!
我在实验室工作,编写多线程计算程序,在C++ 11上使用std::thread
。现在我有机会在多CPU服务器上运行我的程序。如何利用C++中的多CPU?
服务器:
我一无所知多CPU的编程。第一个想法,我想到运行40个应用程序,然后将他们的结果粘合在一起。这是可能的,但我想更多地了解我的机会。
谢谢!
你的问题不仅是关于多线程,而是关于多CPU。
基本上操作系统会自动将线程分散到核上。你不需要做任何事情。
一旦您使用C++ 11,您可以调用std::thread::get_id()
,并确定不同的线程,但无法识别您正在使用的核心。直接使用pthreads
+“cpu亲和力”。
你可以谷歌的“CPU亲和力”获得更多关于如何控制它的细节。如果你想要这种精度。您可以识别核心以及选择核心...您可以从此开始:http://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html
如果您的程序运行多线程,则操作系统应自动处理它使用可用的CPU。
确保将您必须做的工作分配给大约相同数量的线程,您可以使用CPU。确保它不仅仅是一个工作线程,其他线程只是等待这个线程的终止。
如果您的程序已经有多个线程,那么操作系统会自动在不同的CPU上安排这些线程。你将受到线程数量的限制。如果您创建10个线程,那么您的程序将被限制为最多10个CPU。 –
如果每个“结果”完全独立于其他所有其他应用程序,我实际上会编写一个单独的线程应用程序,然后通过'parallel'执行它(请参阅'sudo apt-get install parallel; man parallel') – v010dya
要求非现场资源不在SO上。我已经删除了关于图书馆和其他资源的子问题,因为问题的其余部分是可回收的。 – Puppy