2012-03-28 58 views
2

CUDA编程指南 4.1第B.10解释说:CUDA线程是分时。这是什么意思?

[...]由装置采取完全 执行线程的时钟周期的数目,[不同于]数时钟周期的 设备实际花费执行的线程的指令。前者号码 大于后者[0121]

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

该指南然后继续说:

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

什么是时间在这方面切片意思?说线程是时间片是什么意思?

请注意,此术语不其他地方出现在指南中。 (请原谅我,如果我错过了上下文中显而易见的东西,我不是以英语为母语的人。)

+0

时间切片可能指的是在这种情况下的流水线操作。 – talonmies 2012-03-28 09:35:05

+0

我检查了2007年发布的CUDA编程指南的1.0版本,并且出现了相同的措辞。但他们必须混合条款。我确定他们实际上的意思是上下文切换隐藏延迟,就像你在问题中所说的那样。 – 2012-03-29 02:13:14

回答

0

时间在这种情况下切片也意味着preemption

你可以把一个时间片为总的可用的执行时间一定百分比。

有效地将线按计划将在一段时间内运行,但调度可能只给你一个更小的时间片,如果其他线程需要执行。

+0

您真的建议* CUDA *(所以NVIDIA GPU SM)调度程序包含抢占?你能提供一个链接或来源证实这一点? – talonmies 2012-03-28 09:36:36

+0

我对CUDA的细节并不熟悉,我正在从更一般的目的出发回答。但是,阅读[OpenCL编程指南(PDF)](http://developer.download.nvidia.com/compute/DevZone/docs/html/OpenCL/doc/OpenCL_Programming_Guide.pdf)第3.2.3节,第27页似乎表明所以。 – 2012-03-28 10:32:24

+0

对于CUDA的warp调度程序,在技术上可能并不是正确的字眼,但它是某种任务切换。 – 2012-03-28 10:34:43

0

当多个线程正在运行并且他们必须共享一个处理单元时,通常处理的方式是每个线程都有一个固定的最大时间段来运行(您的时间片),然后它被抢占,另一个线程运行一段时间。所以,如果你的线程不能在一个时间片完成工作,那么它可能不得不等待,直到它再次轮到。多久即依赖于并行线程,他们在做什么,调度是如何实现和处理资源是可用的数量。在此上下文中

1

时间分片是指多个经纱上的多处理器(SM),并且所述经丝SM作为继续执行开关之间以隐藏延迟运行的事实。这与传统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运行,那么y-x值将在线程0(花在执行比实际时间大== warp 0)。这是线程0不必等待结果从指令或内存访问的,只是因为没有,也由于花费的时间执行其它的经线。

编程指南中这句话的要点是使用clock()来做绝对时序或延迟测量是很棘手的。