OpenACC 简单的直方图
▶ 简单的直方图,强调原子操作的使用
● 代码
#include <stdio.h>
#include <stdlib.h>
#include <openacc.h> int main()
{
const int length = , basket = ;
int data[length], histgram[basket]; srand();
for (int i = ; i < basket; histgram[i++] = );
for (int i = ; i < length; data[i++] = rand() % ); #pragma acc parallel loop
for (int i = ; i < length; i++)
{
#pragma acc atomic update
histgram[data[i]]+=;
} for (int i = ; i < basket; i++)
printf("histgram[%d] = %d\n", i, histgram[i]); getchar();
return ;
}
● 输出结果,在 Windows 里是错的,在 WSL 里是对的
D:\Code\OpenACC\OpenACCProject\OpenACCProject>pgcc -acc -Minfo main.c -o main_acc.exe
main:
, Accelerator kernel generated
Generating Tesla code
, #pragma acc loop gang, vector(128) /* blockIdx.x threadIdx.x */
, Generating implicit copyout(histgram[data])
Generating implicit copyin(data[:]) D:\Code\OpenACC\OpenACCProject\OpenACCProject>main_acc.exe
launch CUDA kernel file=D:\Code\OpenACC\OpenACCProject\OpenACCProject\main.c function=main line= device= threadid= num_gangs= num_workers= vector_length= grid= block=
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
cuan@CUAN:/mnt/d/Code/OpenACC/OpenACCProject/OpenACCProject$ pgcc -acc -Minfo main.c -o main_acc_ubuntu.exe
main:
, Accelerator kernel generated
Generating Tesla code
, #pragma acc loop gang, vector(128) /* blockIdx.x threadIdx.x */
, Generating implicit copyout(histgram[data])
Generating implicit copyin(data[:])
cuan@CUAN:/mnt/d/Code/OpenACC/OpenACCProject/OpenACCProject$ ./main_acc_ubuntu.exe
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
histgram[] =
● 添加一个重甲你变量用来存储 data[i],在 Windos 下也正确了
#include <stdio.h>
#include <stdlib.h>
#include <openacc.h> int main()
{
const int length = , basket = ;
int data[length], histgram[basket]; srand();
for (int i = ; i < basket; histgram[i++] = );
for (int i = ; i < length; data[i++] = rand() % ); int temp; // 新定义一个变量
#pragma acc parallel loop
for (int i = ; i < length; i++)
{
temp = data[i]; // 原子操作之前先单独计算下标
#pragma acc atomic update
histgram[temp] += ;// 使用 temp 作为下标
} for (int i = ; i < basket; i++)
printf("histgram[%d] = %d\n", i, histgram[i]); getchar();
return ;
}
OpenACC 简单的直方图的更多相关文章
- OpenACC 简单的原子操作
▶ OpenACC 的原子操作,用到了 C++ 的一个高精度计时器 ● 代码,直接的原子操作 #include <iostream> #include <cstdlib> #i ...
- 简单爬虫,突破IP访问限制和复杂验证码,小总结
简单爬虫,突破复杂验证码和IP访问限制 文章地址:http://www.cnblogs.com/likeli/p/4730709.html 好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有 ...
- OpenCV成长之路(4):图像直方图
一.图像直方图的概念 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比. 图 ...
- OpenCV成长之路:图像直方图
http://ronny.blog.51cto.com/8801997/1394115 2014-04-11 13:47:27 标签:opencv 直方图 统计表 原创作品,允许转载,转载时请务必以超 ...
- 直方图与bin
1.bin的含义 直方图中bin的含义:计算颜色直方图需要将颜色空间划分为若干小的颜色区间,即直方图的bin,通过计算颜色在每个小区间内德像素得到颜色直方图,bin越多,直方图对颜色的分辨率越强,但增 ...
- opencv2 直方图之calchist函数使用(转)
OpenCV提供了calcHist函数来计算图像直方图. 其中C++的函数原型如下:void calcHist(const Mat* arrays, int narrays, const int* c ...
- 【计算机视觉】OpenCV中直方图处理函数简述
计算直方图calcHist 直方图是对数据集合的统计 ,并将统计结果分布于一系列提前定义的bins中.这里的数据不只指的是灰度值 ,统计数据可能是不论什么能有效描写叙述图像的特征. 如果有一个矩阵包括 ...
- Opencv中直方图函数calcHist
calcHist函数在Opencv中是极难理解的一个函数,一方面是参数说明晦涩难懂,另一方面,说明书给出的实例也不足以令人完全搞清楚该函数的使用方式.最难理解的是第6,7,8个参数dims.histS ...
- 图像增强 | CLAHE 限制对比度自适应直方图均衡化
1 基本概述 CLAHE是一个比较有意思的图像增强的方法,主要用在医学图像上面.之前的比赛中,用到了这个,但是对其算法原理不甚了解.在这里做一个复盘. CLAHE起到的作用简单来说就是增强图像的对比度 ...
随机推荐
- 强大的Java Json工具类
转自: https://blog.csdn.net/u014676619/article/details/49624165 import java.io.BufferedReader; import ...
- 使用animate()完成修改图片src切换图片的动画效果
如下所示,在动画效果中的回调函数中进行src的修改和动画的切换 $(".TopImg").animate( {opacity:'toggle'}, "slow" ...
- Python编码——常见的编码设置
1.查看自己电脑的python的编码设置 # -*- coding: utf8 -*- import sys, locale """ locale.getpreferre ...
- ubuntu14.04下安装ffmpeg
ubuntu14.04下安装ffmpeg 一.安装各种依赖包 1.yasm(libx264需要依赖yasm) sudo apt-get install yasm 2.libx264 sudo apt- ...
- V4L2 subdev
除了通过v4l2_subdev_ops结构体暴露kernel API,V4L2 sub-devices也可以被用户空间应用直接控制.v4l-subdevX的设备节点可以在/dev下被创建来直接访问su ...
- commonJS、AMD、es模块化 区别(表格比较)
commonJS.AMD.es6模块化 区别(表格比较): table th:first-of-type { } table th:nth-of-type(3) { width: 150px; } t ...
- gitlab安装教程、gitlab官网、英文文档
gitlab官网 https://about.gitlab.com/ gitlab安装和官网英文文档 https://about.gitlab.com/downloads/ 清华大学tuna镜像源 G ...
- PHP安全之register_globals (转)
一.register_globals = Off 和 register_globals = On的区别 register_globals是php.ini里的一个配置,这个配置影响到php如何接收传递过 ...
- Linq快速入门——扩展方法
Linq为我们提供了许多扩展方法,方便我们对数据源进行操作(Where,Select...).即使你不了解算法,也能使用Linq当回牛人.扩展方法本质并不是什么高深的技术,说白了就是一个Static静 ...
- 如何在eclipse中安装angularjs插件
1,首先,在eclipse中使用angularjs的时候,由于没有相应的提示,导致在开发的时候给我们带来了很多的不便,需要在这上面耗费一些时间.那么这时候我们都在想可不可以让eclipse也和一些前端 ...