我有一个带有 a 的内核,#pragma unroll 80
我正在使用 NVIDIA GT 285、计算能力 1.3、网格架构运行它:dim3 thread_block( 16, 16 )
并且dim3 grid( 40 , 30 )
它运行良好。
当我尝试使用 NVIDIA GT 580、计算能力 2.0 和上述网格架构运行它时,它运行良好。
当我将 GT 580 上的网格架构更改为
dim3 thread_block( 32 , 32 )
并且dim3 grid( 20 , 15 )
,因此产生与上述相同数量的线程,我得到不正确的结果。
如果我在 GT 580 中删除#pragma unroll 80
或替换它,它工作正常。#pragma unroll 1
如果我不这样做,那么内核就会崩溃。
有谁知道为什么会这样?先感谢您
编辑:检查两个设备上的内核错误,我得到“无效参数”。当我搜索此错误的原因时,我发现当网格和块的尺寸超出其限制时会发生这种情况。但对我来说情况并非如此,因为我每个块使用 16x16=256 个线程和 40x30=1200 个总块。据我所知,这些值位于 GPU 网格的边界内,计算能力为 1.3。我想知道这是否与我遇到的循环展开问题有关。