使用逻辑线程运行程序

Posted

技术标签:

【中文标题】使用逻辑线程运行程序【英文标题】:Running the program with logical threads 【发布时间】:2015-08-13 09:49:59 【问题描述】:

我有一个启用了超线程的多核。 每个物理核心有两个逻辑核心。现在我可以用 1 个核心及其逻辑核心运行我的程序吗?表示我们的程序使用这一核心的 2 个逻辑核心运行,但其他核心处于空闲状态。

【问题讨论】:

从应用程序的角度来看,逻辑核心只是一个核心,一个线程就是一个线程。线程如何分配给内核取决于操作系统。如果你想让一个线程在一个特定的核心上,你必须set its affinity。 【参考方案1】:

现在我可以用 1 个内核及其逻辑内核运行我的程序吗?

是的,但是要使用多于 1 个的内核,您必须在多个线程中执行您的应用。 IE。如果您使用的是 pthreads,则使用 pthread_setaffinity_np 指定您的线程应在哪个内核上执行。

如果您想让您的算法并行运行,请考虑使用 OpenMP 或 TBB(线程构建块)。这些库可以很容易地将顺序执行的应用程序转换为并行应用程序。 IE。而不是使用for,而是使用parallel_for。此外,您的代码将自动使用所有可用(或配置)数量的内核 - 无论 CPU 有 2 个内核还是其中的 16 个。

【讨论】:

您还可以找到 Ulrich Drepper 关于可扩展并行化的讨论,价值:youtube.com/watch?v=jfimI7UC9Pg

以上是关于使用逻辑线程运行程序的主要内容,如果未能解决你的问题,请参考以下文章

关于线程池运行过程中,业务逻辑出现未知异常导致线程中断问题反思

1.进程与线程之进程

多核并行编程技术

多线程可以加速内存分配吗?

C#使用线程窗口调试多线程程序

如何关闭在不同线程上运行多个窗口的 WPF 应用程序?