1

我正在尝试在 4 个内核上运行总共 8 个线程。

我通过设置亲和力将线程以 2 个为一组绑定到每个内核。

0,1 -> core A
2,3 -> core B
4,5 -> core C
6,7 -> core D

我可以轮询线程以检查它们是否正在运行。我还能够准确地收集它(s)开始的时间、(e)nd 和(p)性能事件的收集时间。我知道集合中的两个线程中的哪一个已经死了(死了,我的意思是,执行时间已经结束)。可能存在线程 0 或线程 1 比另一个长的情况。

在任何一种情况下,即当线程 0 或线程 1 较长时,我想重复较短的线程,直到较大的线程结束。

以前,当我在整个系统上每个核心只有两个线程时。我曾经做过手动检查,比如……如果其中一个线程死了……继续运行它,直到另一个线程也死了。

但这会带来很多冗余和效率损失(因为我使用的是 IF 语句)

如果我想将它扩展到两个线程/每个核心超过两个线程,当每个核心有两个/两个以上时。我们怎么能这样?

I need ideas so that we can discuss on that.

这就是我得到的:作为一个例子,以“ted”和“talks”作为核心 A 上的两个线程。假设 ted 是两个线程中较短的一个。我们拥有的数据:它开始、结束的时间和数据收集时间。我们可以计算线程 ted 的 end-start 和线程 talk 之间的时间差。

TED_TIME_DIFF = 100ms

但是线程对话的时间段不断增加(从收集时间的计算中检查(c))。假设收集时间是 1 毫秒,例如它可以TALKS_TIME_DIFF = 110ms下一个毫秒,它是 111 毫秒 .. 等等。

我们可以继续重申 ted,直到会谈时间差异停滞不前。

Scripting language: Python 2.7
OS: Linux
Kernel:2.6.xx
using SPEC CPU BENCHMARK threads - if that is any importance

如果你能帮助我,我会很高兴。

4

1 回答 1

1

我正在尝试在 4 个内核上运行总共 8 个线程。*

除非您 (a) 生成多个进程(不是线程)或 (b) 使用没有Global Interpreter Lock的备用解释器,否则您永远不会使用 Python 在超过 1 个内核上运行。

标准 Python 不会同时在多个线程中运行 Python 代码。

于 2013-01-22T01:01:21.470 回答