如果我有一台支持CC 3.0的设备,则表示每个多处理器的最大活动线程数等于2048。如果将CC设置为2.0(compute_20,sm_20),是否意味着每个多处理器的最大活动线程数仅为1536,或者计算能力对此没有影响?
或者它对共享内存大小有影响吗?
答案 0 :(得分:0)
我希望真正了解这些事情的人会回答,但我现在就尽力而为。
CUDA旨在实现可扩展性;内核将扩展为使用它可以使用的所有资源。所以编译内核并不重要;它会填满所有可用的线程,除非你做了一些阻止它这样做的东西,比如用每块768个线程启动它。
现在,GPU线程不像CPU内核;如果你没有使用所有的线程,你就不会失去做计算的能力。计算能力3.0的设备上的流式多处理器(SM)可以同时管理2048个线程,但每个tick只能执行256个指令。还有其他限制;例如如果您正在进行32位浮点加法,则每个tick只能执行192次浮点运算。在32位整数上做左移?每个刻度只有64个。
拥有更多线程的目的是出于延迟的原因 - 当一个线程由于某种原因被阻塞时,例如等待从内存中获取值或获取算术指令的结果,SM将运行不同的线程代替。使用更多线程的关键在于它为您提供了更多隐藏此延迟的机会:当某些指令被阻止时,有更多机会可以执行独立工作,等待数据。