PTX文档中提到here,可以使用bar.sync
和bar.arrive
屏障同步说明,如下所示:
bar.sync a{, b};
bar.arrive a, b;
哪里
源操作数a将逻辑屏障资源指定为立即数或0到15的寄存器。操作数b指定参与屏障的线程数。
它还显示了使用这些说明建立生产者 - 消费者模型的示例:
// Producer code places produced value in shared memory.
st.shared [r0],r1;
bar.arrive 0,64;
...
// Consumer code, reads value from shared memory
bar.sync 0,64;
ld.shared r1,[r0];
...
我在b
中没有达到操作数bar.arrive
的目的。虽然bar.sync
中的此类操作数可用于控制屏障中涉及的线程数并等到线程计数达到,但bar.arrive
对BlogPost
的使用并不清楚。
答案 0 :(得分:2)
当所有线程都到达障碍时会发生两件事:
您可能只考虑1.,这只能在bar.sync
指令处发生。因此很明显,bar.sync
需要知道参与障碍的线程数。但是,屏障也可以在bar.arrive
释放,因此也需要知道参与线程的数量。
话虽如此,如果参与的warp甚至线程对所涉及的线程数不一致,那么它是无证的。这可以被视为一个大胆的好奇心的机会,通过逆向工程找到可能的新(和不支持!)同步结构。