▶ 简单的直方图,强调原子操作的使用

● 代码

 #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 简单的直方图的更多相关文章

  1. OpenACC 简单的原子操作

    ▶ OpenACC 的原子操作,用到了 C++ 的一个高精度计时器 ● 代码,直接的原子操作 #include <iostream> #include <cstdlib> #i ...

  2. 简单爬虫,突破IP访问限制和复杂验证码,小总结

    简单爬虫,突破复杂验证码和IP访问限制 文章地址:http://www.cnblogs.com/likeli/p/4730709.html   好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有 ...

  3. OpenCV成长之路(4):图像直方图

    一.图像直方图的概念 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比. 图 ...

  4. OpenCV成长之路:图像直方图

    http://ronny.blog.51cto.com/8801997/1394115 2014-04-11 13:47:27 标签:opencv 直方图 统计表 原创作品,允许转载,转载时请务必以超 ...

  5. 直方图与bin

    1.bin的含义 直方图中bin的含义:计算颜色直方图需要将颜色空间划分为若干小的颜色区间,即直方图的bin,通过计算颜色在每个小区间内德像素得到颜色直方图,bin越多,直方图对颜色的分辨率越强,但增 ...

  6. opencv2 直方图之calchist函数使用(转)

    OpenCV提供了calcHist函数来计算图像直方图. 其中C++的函数原型如下:void calcHist(const Mat* arrays, int narrays, const int* c ...

  7. 【计算机视觉】OpenCV中直方图处理函数简述

    计算直方图calcHist 直方图是对数据集合的统计 ,并将统计结果分布于一系列提前定义的bins中.这里的数据不只指的是灰度值 ,统计数据可能是不论什么能有效描写叙述图像的特征. 如果有一个矩阵包括 ...

  8. Opencv中直方图函数calcHist

    calcHist函数在Opencv中是极难理解的一个函数,一方面是参数说明晦涩难懂,另一方面,说明书给出的实例也不足以令人完全搞清楚该函数的使用方式.最难理解的是第6,7,8个参数dims.histS ...

  9. 图像增强 | CLAHE 限制对比度自适应直方图均衡化

    1 基本概述 CLAHE是一个比较有意思的图像增强的方法,主要用在医学图像上面.之前的比赛中,用到了这个,但是对其算法原理不甚了解.在这里做一个复盘. CLAHE起到的作用简单来说就是增强图像的对比度 ...

随机推荐

  1. Codeup1085: 阶乘的和

    题目描述 有些数可以表示成若干个不同阶乘的和.例如,9=1!+2!+3!.小明对这些数很感兴趣,所以他给你一个正整数n,想让你告诉他这个数是否可以表示成若干个不同阶乘的和. 输入 输入包含多组测试数据 ...

  2. 10款PHP开源网店系统

    在当今经济危机的大环境下,网上购物越来越来吃香,网上开店成本低,快捷方便,出名的电子商务网站有淘宝,拍拍,Ebay或是最新的百度有啊,这些网站都提供开店的机会,如果是想自己搭建购物平台,可以从下面选择 ...

  3. Linux修改开机启动logo

    默认开机LOGO会在液晶屏的左上脚显示一只小企鹅,分辨率为80*80,具体在kernel/drivers/video/logo下会有logo_linux_clut224.ppm这幅图像,程序会根据这幅 ...

  4. graphql elasticsearch 集成试用

    graphql 是很方便的api 查询语言,elasticsearch 可以方便的进行全文检索的应用开发 有一个方便的npm 包graphql-compose-elasticsearch 可以进行es ...

  5. DD_belatedPNG解决IE6下PNG不透明问题

    使用方法: 首先下载JS文件:http://dillerdesign.com/experiment/DD_belatedPNG/ 之后在页面中引用代码: <!--[if IE 6]>< ...

  6. 用户态监控网络接口up、down事件

    网上搜索(https://blog.csdn.net/qq123386926/article/details/50695725)可以直接使用netlink现成的接口实现: #include <s ...

  7. 用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题

    用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 提示找不到表,我去看了一下,丢失了很多个表: 问题: 直接拷贝data下的数据库数据进行备份 , 发现部分数据表不见了. ...

  8. FP-growth算法发现频繁项集(二)——发现频繁项集

    上篇介绍了如何构建FP树,FP树的每条路径都满足最小支持度,我们需要做的是在一条路径上寻找到更多的关联关系. 抽取条件模式基 首先从FP树头指针表中的单个频繁元素项开始.对于每一个元素项,获得其对应的 ...

  9. Spring Cloud 入门 之 Hystrix 篇(四)

    原文地址:Spring Cloud 入门 之 Hystrix 篇(四) 博客地址:http://www.extlight.com 一.前言 在微服务应用中,服务存在一定的依赖关系,如果某个目标服务调用 ...

  10. IONIC 页面之间传递参数

    HomePage 定义goToMyPage方法,传递id和name MyPage接收参数