我试图围绕并行循环如何工作的想法来思考,这对我来说都是新的,并且已经阅读了这个 stackoverflow 线程,在这里找到了span 和 parallel loop,并发现那里的最佳答案真的很有帮助。
我想知道的是,如果我有一个内部有一个parallel-for-lop的parallel-for-lop,它们是否会以以下方式运行(为方便起见,我将让n = 5并且'to'表示向上包括(<=)):
这是我脑海中的代码:
parallel for j=1 to n{
parallel for i=1 to j-1{
Do-something
}
}
这是我倾向于的线程的行为,但希望有人确认是否正确:
Time Action
0 Thread0 creates Thread1
1 Thread0 creates Thread2, T1 -> T3
2 T0 -> T4, T1 -> T5
好的,外观的所有线程都已创建。现在是内在。这里 subXY 表示线程 x 的线程编号 y:
time Action
3 T0 -> SubT0t0, T1 -> subT1t0, T2-> SubT2t0....
//All threads have created a subthread t0 so 5 more threads created.
4 T0 -> subT1t1, subT0t0 -> subT2t1, T1->subT2t2, subT1t0->subT3t1...
//All the subthreads created more threads AND the 'Older' threads
//created subthreads under other 'Older' threads. 11 more created.
5 T0 -> subT5t2, subT0t0 -> subT5t3, T1 -> subT5t4, subT5t5
//All threads have been created.
6 Execute command Do-something
我知道这可能不是对我所想的最好的描述,但它是我能想到的最好的。
这个对吗?或者外循环线程只会使线程连接到他自己?例如 T1 只会制作 subT1XX 线程?
在时间 5 什么也不做的线程也会在那段时间执行它们的命令吗?
如果有人可以帮助我,那将极大地帮助我。