小编jde*_*uan的帖子

在 CUDA 中管理占用

早上好。

我开始学习 cuda 编程,我正在学习性能。我在 CUDA 网站上读到,要获得良好的性能,我们应该考虑四件事:

http://docs.nvidia.com/gameworks/content/developertools/desktop/analysis/report/cudaexperiments/kernellevel/achievedoccupancy.htm

-每个 SM 的扭曲(系统多处理器) -每个 SM 的块数 -每个 SM 的注册 -每个 SM 的共享内存

所以我要重温第一件事,并且根据 GPU,我根据每个 SM 的最大扭曲和每个 SM 的块定义了内核的尺寸。我的任务是执行一亿次求和来衡量哪种方法更好。

我所做的是一个 for 循环,在该循环中,我在每次迭代时启动一个内核,以最大化占用率。例如,对于 NVidia 1080 GPU,我读到:

int max_blocks = 32; //maximum number of active blocks per SM int max_threads_per_Block = 64; //maximum number of active threads per SM int max_threads = 2048;

这为每个 SM 提供总共 2048 个线程并保证最大占用率。这个 GPU 可以有 64 个活动扭曲,每个扭曲有 32 个线程。在这个 GPU 中,一个活动块有 2 个扭曲,这意味着每个块一次可以有 64 个活动线程。有了这个,我按如下方式启动内核:

dim3 threadsPerBlock(max_threads_per_Block); dim3 numBlocks(max_blocks); VecAdd<<<numBlocks, threadsPerBlock>>>(d_A, …

c++ performance cuda gpu nvidia

1
推荐指数
1
解决办法
2544
查看次数

标签 统计

c++ ×1

cuda ×1

gpu ×1

nvidia ×1

performance ×1