1

我试图围绕并行循环如何工作的想法来思考,这对我来说都是新的,并且已经阅读了这个 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 什么也不做的线程也会在那段时间执行它们的命令吗?

如果有人可以帮助我,那将极大地帮助我。

4

0 回答 0