文档章节

cuda之内存共享案例

断桥残雪断桥残雪
 断桥残雪断桥残雪
发布于 2016/02/29 17:29
字数 255
阅读 111
收藏 1

1.代码

#include<iostream>
#include<cstdlib>
using namespace std;
#define N 64

__global__ void inverseArray(int *arr,int n) {
	__shared__ int s[N];  /* 共享数组变量 */
	int ind = threadIdx.x;
	int tr = n-ind-1;
	s[ind] = arr[ind];
	__syncthreads();  /* 同步所有线程 */
	arr[ind] = s[tr];
}

void initializeArray(int *arr) {
	for(int i=0;i<N;i++)
		arr[i] = i;
}

int main() {
	int *a,*dev_a;
	int *r;
	r = (int *)malloc(sizeof(int)*N);
	a = (int *)malloc(sizeof(int)*N);
	initializeArray(a);
	for(int i=0;i<N;i++)
		cout<<a[i]<<" ";
	cout<<endl;
	cudaMalloc((void **)&dev_a,sizeof(int)*N);
	cudaMemcpy(dev_a,a,N*sizeof(int),cudaMemcpyHostToDevice);
	inverseArray<<<1,N>>>(dev_a,N);
	cudaMemcpy(r,dev_a,N*sizeof(int),cudaMemcpyDeviceToHost);
	for(int i=0;i<N;i++)
		cout<<r[i]<<" ";
	cout<<endl;
	return 0;
}



2.描述

上面代码中,__shared__为一个block内所有线程的共享内存,其生命周期即该block的生命周期,其只能被该block内的线程所访问。

__syncthreads()像是一个壁垒,它会迫使一个block内的所有线程等待执行,等到所有线程都被阻塞之后再开始执行。

© 著作权归作者所有

断桥残雪断桥残雪
粉丝 52
博文 139
码字总数 94909
作品 0
广州
程序员
私信 提问
NVIDIA免费在线研讨会 | CUDA开发基础 - 矩阵乘法以及共享内存

NVIDIA 开发者社区将于6月11号晚间举办在线研讨会。本次在线研讨会给开发者小伙伴们带来的主题是 CUDA开发基础-矩阵乘法以及共享内存。 CUDA 编程方法是目前广泛使用的并行化程序编程方法,在...

NVEvent02
05/31
3
0
CUDA学习(六十一)

编程接口: CUDA C / C ++参考: 本节介绍对用于支持动态并行性的CUDA C / C ++语言扩展的更改和补充。 使用CUDA C / C ++ for Dynamic Parallelism(称为设备运行时)的CUDA内核可用的语言界...

night李
2018/02/22
0
0
Google在线深度学习神器Colab

Colab是google最近推出的一项Python在线编程的免费服务, 有了它,不学Python编程的理由又少了一个 Colab环境已经集成了流行的深度学习框架Tensorflow,并附赠了一个虚拟机(硬盘+ CPU+内存),如果...

zhaoolee
2018/02/07
0
0
多线程安全(synchronized、三大特性、Java内存模型)

线程安全问题? 什么是线程安全问题?简单的说,当多个线程在共享同一个变量,做读写的时候,会由于其他线程的干扰,导致数据误差,就会出现线程安全问题。 比如说,多个窗口同时卖票这个案例...

天王盖地虎626
06/19
29
0
并行编程——Lesson2:GPU硬件和并行通信模式

前言 《并行编程》系列是学习《Intro to Parallel Programming》过程中所做的笔记记录以及个人一些所思所想。 并行通信 并行计算需要解决的一个问题就是,如何解决线程之间的协同工作(Worki...

叶俊贤
2017/06/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
16
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部