找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 50|回复: 2

求一张图片所有像素值的和?

[复制链接]
发表于 2018-9-29 16:55:00 | 显示全部楼层 |阅读模式
ESC4000G3
图片的大小是 4096x2048那么一个 block最多有 1024个线程。
就统计每一个block的像素的和。
是不是 需要 4096*2048/1024 = 4096x2 个blcok。

那么 算出来的数据有 4096x2 这么大。
还是没有办法在用一个block统计出来。
是不是还得在用 4096x2 / 1024 = 8 。
8个block来再求和。
才能计算出来。
回复

使用道具 举报

发表于 2018-10-1 08:32:45 | 显示全部楼层
Jetson TX2
把4096x2个结果写入提前准备的一张同尺寸位图中,回CPU端直接遍历一次得了,反正这么小。
回复 支持 反对

使用道具 举报

发表于 2018-10-8 12:39:31 | 显示全部楼层
Tesla P100
这种小规模的计算(只是对所有的像素的值求和,假设你是一张灰度的图片), 其实不太建议使用GPU的。

只有一种情况才应当考虑GPU: 也就是此图片的数据已经在GPU上了(显存里)。

否则这种操作基本上运算量太低,哪怕在CPU上也不过是读取完一遍图片的时间成本(计算量对CPU来说也太低,计算过程被完全掩盖在CPU的一次内存读取中)。

所以,实际上使用GPU完全不能加速这个过程(实际上,往往会减速)。因为你有从内存传输到显存的跨PCI-E传输的时间,CPU足够完成这个任务了。

但如果你真的需要在GPU上这样做的话,我建议你:
(1)全局设定一个总统计值,初始为0.
(2)每个block计算出来每个block局部的统计值后,就地在全局值上原子累加求和即可。
(3)请注意数据类型别溢出了(例如特别是在你使用整数类型的时候)。
(4)在你学会如何进行单kernel全局规约求和的情况下(其实手册上就有例子,我们之前的系列Sisiy文章中有过说明),一定要坚持2步操作,这是对新人最友好,最不容易出错的方式了。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表