【发布时间】:2010-03-08 17:33:51
【问题描述】:
我实际上在我的项目上使用 SMP 编译器,并且想使用 pthreads 进行编码,并且听说了许多并行的东西打开 mpi 等等,所以从调用 pthread 时如何将这个线程分配给核心开始,有没有如何通过 pthread 将线程分配给不同的内核?
【问题讨论】:
标签: compiler-construction concurrency pthreads smp
我实际上在我的项目上使用 SMP 编译器,并且想使用 pthreads 进行编码,并且听说了许多并行的东西打开 mpi 等等,所以从调用 pthread 时如何将这个线程分配给核心开始,有没有如何通过 pthread 将线程分配给不同的内核?
【问题讨论】:
标签: compiler-construction concurrency pthreads smp
查看 pthreads 教程,例如 this。但总的来说,我建议使用比 pthreads 更高级别的库,因为使用它们会更简单/更系统。例如,Boost::Threads 或 Intel TBB。
【讨论】:
系统会将线程分配给可用内核,并在其他地方有空闲资源时移动它们。
操作系统在分配资源方面通常比我做得更好,但如果您真的愿意,大多数操作系统都有一种方法可以将线程分配/限制到特定的核心/处理器。在 linux 上,使用sched_setaffinity
【讨论】:
最简单的答案是肯定的——通常不同的线程可能会在不同的内核上自动运行,而无需指定线程运行的位置。
在深入研究特定的线程库/思维方式之前,您似乎需要了解多线程编程的一般介绍/入门知识。在做任何其他事情之前,请阅读上面 Amit 的“What is a thread”部分,然后开始查看 POSIX 线程、Windows 线程、TBB、Boost 线程或任何其他你觉得有趣的库/包装器的细节。
【讨论】: