CUDA线程是时间切片。这是什么意思?

时间:2012-03-28 04:26:14

标签: cuda

CUDA编程指南 4.1节说明:

  

[...]设备完全占用的时钟周期数   执行线程,[不同于]时钟周期数   设备实际上花了执行线程指令。前号   大于后者[...]

据我所知,第一个是完成线程执行的挂钟时间。第二次是第一次减去线程空闲的时间。当线程的指令需要等待先前指令(指令依赖性)的结果,或等待内存中的操作数值或在同步点等待时,线程将处于空闲状态。

然后指南继续说:

  

前者的数量大于后者,因为线程是时间   切片。

在此上下文中时间切片的含义是什么?说线程是时间切片是什么意思?

请注意,此术语不会出现在指南中的任何其他位置。 (请原谅我,如果我在这里缺少明显的背景,我不是母语为英语的人。)

3 个答案:

答案 0 :(得分:1)

此上下文中的时间切片指的是多个warp在多处理器(SM)上运行的事实,并且SM在warp之间切换,因为执行继续以隐藏延迟。这与传统CPU线程中的抢占不同;也不像流水线一样。

如果你有这样的代码:

if (threadIdx.x == 0 && blockIdx.x == 0) x = clock();

// other work done by all threads

if (threadIdx.x == 0 && blockIdx.x == 0) y = clock();

如果SM上运行了多个warp,则y-x的值将大于在线程0中执行的实际时间(== warp 0)。这不仅仅是因为线程0必须等待指令或内存访问的结果,这也是由于执行其他warp所花费的时间。

编程指南中的这一陈述的要点是使用clock()进行绝对定时或延迟测量是很棘手的。

答案 1 :(得分:0)

当多个线程正在运行并且它们必须共享一个处理单元时,通常处理的方式是每个线程都有一个固定的最大运行时间段(你的时间片),然后它被抢占,另一个线程获得跑了一段时间。因此,如果您的线程无法在一个时间片内完成其工作,那么它可能必须等到它再次轮到它。这需要多长时间取决于并行线程的数量,它们正在做什么,如何实现调度程序以及哪些处理资源可用。

答案 2 :(得分:-1)

时间切片在此上下文中也意味着preemption

您可以将时间片视为总可用执行时间的一定百分比。

有效地,您的线程计划运行一段时间,但是如果需要执行其他线程,则调度程序可能只给您一个较小的时间片。