首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectCompute最优数值线程设置

DirectCompute最优数值线程设置
EN

Stack Overflow用户
提问于 2013-10-24 07:53:55
回答 2查看 3.7K关注 0票数 6

最近,我一直在玩计算机着色器,我试图确定最理想的方法来设置我的num线程(x,y,z)和分派调用。我的演示窗口是800x600,我正在启动每个像素一个线程。我正在执行2D纹理修改-没有太重。

我的第一次尝试是指定

代码语言:javascript
复制
[numthreads(32,32,1)]

我的调度()调用总是

代码语言:javascript
复制
Dispatch(ceil(screenWidth/numThreads.x),ceil(screenHeight/numThreads.y),1)

所以对于第一个实例来说

代码语言:javascript
复制
Dispatch(25,19,1)

这个速度是25到26 fps。然后,我减少到num线程(4,4,1),它以16 fps的速度运行。增加到数字线程(16,16,1)开始在大约30 fps的良好结果。玩弄Y线程组编号num线程(16,8,1),设法将其推送到32 fps。

我的问题是,是否有一种确定线程号的最佳方法,这样我才能最有效地利用GPU,还是只是好的尝试和错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-24 09:07:26

这是非常特定的GPU,但如果你是在NVIDIA硬件,你可以尝试使用库达占用率计算器

我知道您正在使用DirectCompute,但是它们映射到相同的底层硬件。如果查看FXC的输出,可以看到程序集中每个线程的共享内存大小和寄存器。此外,您还可以推导出计算能力,从哪张卡你有。计算能力是cs_4_0、cs_4_1、cs_5_0等配置文件的CUDA等价物。

目标是增加“占用”,或者换句话说,占用== 100%空闲-由于HW-开销。

票数 4
EN

Stack Overflow用户

发布于 2013-10-24 19:50:48

分析是在特定硬件上保证最大性能的唯一方法。但是,通常情况下,只要您将活动寄存器计数保持在低(16或更低),并且不使用大量共享内存,那么只有256个线程的线程组应该能够满足大多数计算硬件的要求(假设您至少分配了8个组)。

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

https://stackoverflow.com/questions/19560094

复制
相关文章

相似问题

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