我正在尝试在 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
如果你能帮助我,我会很高兴。