首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么NVRTC不优化我的整数除法和模运算?

为什么NVRTC不优化我的整数除法和模运算?
EN

Stack Overflow用户
提问于 2017-06-01 06:44:36
回答 1查看 390关注 0票数 3

我在NVRTC中编译了一个内核:

代码语言:javascript
复制
__global__ void kernel_A(/* args */) {
    unsigned short idx = threadIdx.x;
    unsigned char warp_id = idx / 32;
    unsigned char lane_id = idx % 32;
    /* ... */
}

我知道整数除法和模块化是非常昂贵的CUDA图形处理器。然而,我认为这种2的功率除法应该优化为位操作,直到我发现它不是:

代码语言:javascript
复制
__global__ void kernel_B(/* args */) {
    unsigned short idx = threadIdx.x;
    unsigned char warp_id = idx >> 5;
    unsigned char lane_id = idx & 31;
    /* ... */
}

看来kernel_B跑得更快了。当省略内核中的所有其他代码,以1024个大小的块启动时,nvprof显示kernel_A平均运行15.2us,而kernel_B平均运行7.4us。我推测NVRTC没有优化出整数除法和模数。

结果是在一个GeForce 750 Ti,CUDA8.0,平均从100个电话。提供给nvrtcCompileProgram()的编译器选项是-arch compute_50

这是意料之中吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-10 13:37:20

在代码库中做了一个彻底的错误。原来我的应用程序是在DEBUG模式下构建的。这将导致传递给-G-lineinfo的附加标志nvrtcCompileProgram()

来自nvcc手册页:

--device-debug (-G) 为设备代码生成调试信息。关闭所有优化。不要使用分析,而是使用-lineinfo。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44300294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档