CUDA Mandelbrot 设置有效带宽和优化

计算科学 并行计算 显卡 库达
2021-12-13 04:37:04

我正在阅读这篇文章(非常好的文章和优秀的博客顺便说一句),以便在我的(非常简单的)Mandelbrot Set 实现中进行一些测量。

我使用的是 Quadro 2000D 卡,其理论带宽约为 20 GB/s(= 1304 MHz * 128 位总线)。

Mandelbrot 图像具有 700x700 像素(uchar = 每像素 1 个字节)。使用网格(44,44)和块(16,16)启动内核,计算它所用的时间是 1.00026 毫秒。

现在,如果我的计算很好,那么我有以下

(490000 bytes)(109 GB)  /  (1.00026)(103 s)=0.4898 GB/s

我应该如何解释这个结果?我只使用了大约 2.5% 的带宽,这很糟糕,但是由于算法只对每个像素进行一次写入,所以没有办法改善这一点,是吗?有什么我没有考虑到的吗?

更新

我做了三种类型的内核来查看发生了什么并将图像的大小减小到 250x250。

首先非常幼稚,1 个线程完成所有工作:125 毫秒 + 3.1% 全局效率存储 + 2% 占用率。这是不好的。

二、每行一个线程:0.20 ms + 97.7% 全局存储效率 + 16% 占用率。好多了。

第三,每个元素一个线程:0.25 毫秒,50% 全局存储效率 + 55% 占用率。比上一个差。

那么,从这里我可以做些什么来改进呢?有办法吗?在第三种类型中,我唯一想到的是在内核内部写入共享内存,然后进行同步,然后所有线程都写入全局内存,以便进行合并访问。

0个回答
没有发现任何回复~