5.2 CUDA Histogram直方图
什么是Histogramming
Histogramming是一种从大的数据集中提取典型特征和模式的方式.
在统计学中,直方图(英语:Histogram)是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。
图像直方图(英语:Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。可以借助观察该直方图了解需要如何调整亮度分布。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。因此,一张较暗图片的图像直方图中的数据多集中于左侧和中间部分;而整体明亮、只有少量阴影的图像则相反。
很多数码相机提供图像直方图功能,拍摄者可以通过观察图像直方图了解到当前图像是否过分曝光或者曝光不足。
计算机视觉领域常借助图像直方图来实现图像的二值化。
颜色直方图
在图像处理和摄影领域中,颜色直方图(英语:Color Histogram)指图像中颜色分布的图形表示。数字图像的颜色直方图覆盖该图像的整个色彩空间,标绘各个颜色区间中的像素数。
颜色直方图本身可以针对任意色彩空间使用,但这一术语通常只用在诸如 RGB 和 HSV 的三维色彩空间,而针对灰度图像时常使用亮度直方图(英语:Intensity Histogram)这一术语。
直方图例子
比如一个句子"Programming Massively Parallel Processors",我们构建一个字母出现频率的直方图.
A(4次), C(1), E(1), G(1), ...
Host端我们做统计的话,就会构建26大小的数组来表示a-z,然后遍历这个句子,碰到不同的case进行累加操作.
Device端并行化: 把这个sentense 划分成多个block,每个block统计自己的情况,同意保存到一个数组里面.
但是当两个thread同事在对A做+1的动作后,最后的结果是1,而正确的结果是2才对,这时候需要使用原子加操作:
unsigned int atomicAdd(unsigned int* address, unsigned int val);
其实在CUDA的device中执行计数的功能都需要使用原子操作才行.
优化histor kernel代码:
不使用shared memory的情况下,执行原子操作,无论有多少个thread,在这个例子中最多同时执行的只有256,其他的都因为原子操作需要等待, 所以这里每个thread block使用一个 shared memory, 统计每个thread block,然后最后一起copy 给 histo
__global__ void histo_kernel(unsigned char *buffer, long size, unsigned int *histo)
{
__shared__ unsigned int histo_private[];
if(threadId.x < ) //初始化shared histo
histo_private[threadIdx.x] = ;
__syncthread(); int i = threadIdx.x + blockIdx.x * blockDim.x;
// 步长是所有threads的数目
int stride = blockDim.x * gridDim.x;
while(i < size) {
atomicAdd(&(private_histo[buffer[i]]), );
i + = stride;
} //等待所有线程执行完
__syncthreads(); if(threadIdx.x < ){
atomicAdd(&(histo[threadIdx.x]), private_histo[threadIdx.x]);
}
}
5.2 CUDA Histogram直方图的更多相关文章
- [LeetCode] Largest Rectangle in Histogram 直方图中最大的矩形
Given n non-negative integers representing the histogram's bar height where the width of each bar is ...
- LeetCode: Largest Rectangle in Histogram(直方图最大面积)
http://blog.csdn.net/abcbc/article/details/8943485 具体的题目描述为: Given n non-negative integers represent ...
- Elasticsearch聚合 之 Histogram 直方图聚合
Elasticsearch支持最直方图聚合,它在数字字段自动创建桶,并会扫描全部文档,把文档放入相应的桶中.这个数字字段既可以是文档中的某个字段,也可以通过脚本创建得出的. 桶的筛选规则 举个例子,有 ...
- [leetcode]84. Largest Rectangle in Histogram直方图中的最大矩形
Given n non-negative integers representing the histogram's bar height where the width of each bar is ...
- [LeetCode] 84. Largest Rectangle in Histogram 直方图中最大的矩形
Given n non-negative integers representing the histogram's bar height where the width of each bar is ...
- LeetCode 84. Largest Rectangle in Histogram 直方图里的最大长方形
原题 Given n non-negative integers representing the histogram's bar height where the width of each bar ...
- 【LeetCode】84. Largest Rectangle in Histogram——直方图最大面积
Given n non-negative integers representing the histogram's bar height where the width of each bar is ...
- CUDA 进阶学习
CUDA基本概念 CUDA网格限制 1.2CPU和GPU的设计区别 2.1CUDA-Thread 2.2CUDA-Memory(存储)和bank-conflict 2.3CUDA矩阵乘法 3.1 全局 ...
- matplotlib 直方图
一.特点 数据必须是原始数据不能经过处理,数据连续型,显示一组或多组分布数据 histogram 直方图 normed 定额 二.核心 hist(x, bins=None, normed=None) ...
随机推荐
- javascript中跨源资源共享
来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(十) 通过XHR实现Ajax通信的一个主要限制,来源于跨域安全策略.默认情况下,XHR对 ...
- The 9th Zhejiang Provincial Collegiate Programming Contest->Problem A:A - Taxi Fare
Problem A: Taxi Fare Time Limit: 2 Seconds Memory Limit: 65536 KB Last September, Hangzhou raised th ...
- uva 10986
ford 超时 使用优先队列的Dijkstra 算法 //#include <cstdio> //#include <cstring> //#include <algo ...
- Akka官方文档翻译:Cluster Specification
参加了CSDN的一个翻译项目,翻译Akka的文档.CSDN提供的翻译系统不好使,故先排版一下放在博客上. 5.1 集群规范 注意:本文档介绍了集群的设计理念.它分成两部分,第一部分描述了当前已经实现的 ...
- POJ 1061 青蛙的约会(扩展欧几里德)
点我看题目 题意 : 中文题不详述. 思路 : 设经过s步后两青蛙相遇,则必满足(x+m*s)-(y+n*s) = K*L(k = 0,1,2....) 变形得:(n-m)*s+K*L = x-y ; ...
- linux 5.5 开xmanager远程
http://bbs.cqsztech.com/dv_rss.asp?s=xhtml&boardid=3&id=11&page=9 linux 5.5 开xmanager远程 ...
- Android:@id和@+id
@id代表引用已有的id,而@+id是新增加一个id 如果使用@+id/name形式,当R.java中存在名为name变量时,则该组件会使用该变量的值作为标识.如果不存在该变量,则添加一个新的变量,并 ...
- Android 自绘TextView解决提前换行问题,支持图文混排
先看下效果图: 上面是MTextView,下面是默认的TextView. 一.原因 用最简单的全英文句子为例,如果有一个很长的单词,这一行剩余的空间显示不下了,那么规则就是不打断单词,而是把整个单词丢 ...
- Compiler options do not specify -mv64+, but configuration is for C64x+
2013-06-20 10:02:47 错误报告: "pin_connect_cfg.s62", ERROR! at line 365: [ ***** USER ERROR ...
- 去掉php框架CI默认url中的index.php
CI默认的rewrite url中是类似这样的 例如你的CI根目录是在/CodeIgniter/下,你的下面的二级url就类似这样 http://localhost/CodeIgniter/index ...