将并行线程块修改为使用并行线程时的矢量相加
2016-01-08 15:49
281 查看
和上篇代码有略微差异
#include <cuda_runtime_api.h> #include <iostream> using namespace std; const int N = 10 ; __global__ void add(int *a , int *b , int *c) { int tid = threadIdx.x ;//通过线程索引来对数据进行索引 if (tid < N) { c[tid] = a[tid] + b[tid] ; } } void main() { int a , b , c ; int *dev_a , *dev_b , *dev_c ; //在GPU上分配内存 cudaMalloc((void**)(&dev_a) , sizeof(int) * N) ; cudaMalloc((void**)(&dev_b) , sizeof(int) * N) ; cudaMalloc((void**)(&dev_c) , sizeof(int) * N) ; for (int i = 0 ; i < N ; i++) { a[i] = i ; b[i] = i * i ; } //将a,b复制到GPU cudaMemcpy(dev_a , a , sizeof(int) * N , cudaMemcpyHostToDevice) ; cudaMemcpy(dev_b , b , sizeof(int) * N , cudaMemcpyHostToDevice) ; cudaMemcpy(dev_c , c , sizeof(int) * N , cudaMemcpyHostToDevice) ; add<<<1 , N>>>(dev_a , dev_b , dev_c) ;//只有一个线程块 //将c从GPU复制到cpu cudaMemcpy(c , dev_c , N * sizeof(int) , cudaMemcpyDeviceToHost) ; for(int i = 0 ; i < N ; i++) { cout<<"a["<<i<<"]"<<" + b["<<i<<"] = "<<c[i]<<"\n"; } cudaFree(dev_a) ; cudaFree(dev_b) ; cudaFree(dev_c) ; return ; }
相关文章推荐
- 解决mac下adb devices命令找不到设备
- CSS3实现动画效果教程详解
- Layout in Rails
- 网格去噪算法(L0 Minimization)
- canal —— 阿里巴巴mysql数据库binlog的增量订阅&消费组件
- 【转】成为Java顶尖程序员 ,看这10本书就够了
- 【Git学习笔记】将代码托管到GitHub上
- spark standalone模式安装和语法
- java.lang.NoClassDefFoundError
- ajax技术如何解决浏览器前进后退按键失效的问题
- codevs 3066 中缀转后缀 ——栈
- play with php
- 0108 点击时 大小图
- 《需求工程》读书笔记2
- 阿里巴巴的fastJson
- python 元组(tuple)
- 浅谈随机数发生器
- PHP文件操作之获取目录下文件与计算相对路径的方法
- 使用Weka进行数据挖掘
- 【POJ】 3268 Silver Cow Party