CUDA 例程
scalar add #include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <iostream>
__global__ void add(int *a, int *b,int *c)
{
c[blockIdx.x]=a[blockIdx.x]+b[blockIdx.x];
}
int main(void)
{ // H has storage for 4 integers
int a,b,c;
int *da,*db,*dc;
int size=*sizeof(int); //scalar;
cudaMalloc((void**)&da,size);
cudaMalloc((void**)&db,size);
cudaMalloc((void**)&dc,size); a=;
b=;
cudaMemcpy(da,&a,size,cudaMemcpyHostToDevice);
cudaMemcpy(db,&b,size,cudaMemcpyHostToDevice); add<<<,>>>(da,db,dc);
cudaMemcpy(&c,dc,size,cudaMemcpyDeviceToHost );
std::cout<<c<<std::endl; cudaFree(da);
cudaFree(db);
cudaFree(dc); std::cout<<"hell";
thrust::host_vector<int> H();
// initialize individual elements
H[] = ; H[] = ; H[] = ; H[] = ;
// H.size() returns the size of vector H
std::cout << "H has size " << H.size() << std::endl;
// print contents of H
for(int i = ; i < H.size(); i++) std::cout << "H[" << i << "] = " << H[i] << std::endl;
// resize H
H.resize();
std::cout << "H now has size " << H.size() << std::endl;
// Copy host_vector H to device_vector D
thrust::device_vector<int> D = H;
// elements of D can be modified
D[] = ; D[] = ; // print contents of D
for(int i = ; i < D.size(); i++) std::cout << "D[" << i << "] = " << D[i] << std::endl;
// H and D are automatically deleted when the function returns
return ; }
block or thread #include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <iostream> const int N=;
__global__ void add(int *a, int *b,int *c)
{
c[blockIdx.x]=a[blockIdx.x]+b[blockIdx.x]; //c[threadIdx.x]=a[threadIdx.x]+b[threadIdx.x];
}
int main(void)
{ // H has storage for 4 integers
int *a,*b,*c;
int *da,*db,*dc;
int size=N*sizeof(int); //scalar; cudaMalloc((void**)&da,size);
cudaMalloc((void**)&db,size);
cudaMalloc((void**)&dc,size); a=(int *) malloc(size);
memset(a,,N*sizeof(int));//rand_ints(a,N); a[]=;
a[]=;
b=(int *) malloc(size); memset(b,, N*sizeof(int));// rand_ints(b,N);
b[]=;
b[]=; c=(int *) malloc(size); //rand_ints(c,N);
memset(c,, N*sizeof(int)); cudaMemcpy(da,a,size,cudaMemcpyHostToDevice);
cudaMemcpy(db,b,size,cudaMemcpyHostToDevice); add<<<N,>>>(da,db,dc); //N blocks add<<<1,N>>>(da,db,dc); N threads
cudaMemcpy(c,dc,size,cudaMemcpyDeviceToHost ); for (int i=; i<;i++) std::cout<<c[i]<<std::endl; //_syncthreads(); //useless cudaDeviceSynchronize(); free(a); free(b); free(c); cudaFree(da); cudaFree(db); cudaFree(dc); return ; }
block+thread
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <iostream> /*
#define N (2048*2048)
#define M 512 // THREADS_PER_BLOCK
…
add<<<N/M, M>>>(d_a, d_b, d_c);
N /M blocks used
M threads / block
*/ const int N=*;
const int M=;
__global__ void add(int *a, int *b,int *c,int n)
{
int index=threadIdx.x+blockIdx.x*blockDim.x;
c[index]=a[index]+b[index];
if (index<n)
c[index]=a[index]+b[index];
//c[threadIdx.x]=a[threadIdx.x]+b[threadIdx.x];
}
int main(void)
{ // H has storage for 4 integers
int *a,*b,*c;
int *da,*db,*dc;
int size=N*sizeof(int); //scalar; cudaMalloc((void**)&da,size);
cudaMalloc((void**)&db,size);
cudaMalloc((void**)&dc,size); a=(int *) malloc(size);
memset(a,,N*sizeof(int));//rand_ints(a,N); a[]=;
a[]=;
b=(int *) malloc(size); memset(b,, N*sizeof(int));// rand_ints(b,N);
b[]=;
b[]=; c=(int *) malloc(size); //rand_ints(c,N);
memset(c,, N*sizeof(int)); cudaMemcpy(da,a,size,cudaMemcpyHostToDevice);
cudaMemcpy(db,b,size,cudaMemcpyHostToDevice); add<<<(N+M-)/M,M>>>(da,db,dc,N);
cudaMemcpy(c,dc,size,cudaMemcpyDeviceToHost );
for (int i=; i<;i++)
std::cout<<c[i]<<std::endl; //_syncthreads(); //useless
cudaDeviceSynchronize(); free(a);
free(b);
free(c);
cudaFree(da);
cudaFree(db);
cudaFree(dc); return ; }
CUDA 例程的更多相关文章
- 【ARM-Linux开发】【CUDA开发】NVIDIA Jetson TX2 进阶:Nsight Eclipse Edition
嵌入式平台:NVIDIA Jetson TX2 嵌入式系统:Ubuntu16.04 虚拟机系统:Ubuntu14.04 一.NSight简介 Jetpack开发工具为人工智能提供了一整套软件架构,包括 ...
- Ubuntu16.04+GTX2070+Driver418.43+CUDA10.1+cuDNN7.6
最近需要用到一台服务器的GPU跑实验,其间 COLMAP 编译过程出错,提示 cuda 版本不支持,cmake虽然通过了,但其实没有找到支持的CUDA架构. cv@cv:~/mvs_project/c ...
- CUDA从入门到精通
http://blog.csdn.net/augusdi/article/details/12833235 CUDA从入门到精通(零):写在前面 在老板的要求下.本博主从2012年上高性能计算课程開始 ...
- cuda编程(一)
环境安装和例程运行 显卡主要有两家,ATI.NVIDIA,简称A卡和N卡.随着GPU计算能力的上升,采用GPU并行计算来加速的应用越来越多. Nvidia创立人之一,黄仁勋(Jen-Hsun Huan ...
- 显存充足,但是却出现CUDA error:out of memory错误
之前一开始以为是cuda和cudnn安装错误导致的,所以重装了,但是后来发现重装也出错了. 后来重装后的用了一会也出现了问题.确定其实是Tensorflow和pytorch冲突导致的,因为我发现当我同 ...
- pytorch官网上两个例程
caffe用起来太笨重了,最近转到pytorch,用起来实在不要太方便,上手也非常快,这里贴一下pytorch官网上的两个小例程,掌握一下它的用法: 例程一:利用nn 这个module构建网络,实现 ...
- CUDA从入门到精通 - Augusdi的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/augusdi/article/details/12833235 CUDA从入门到精通 - Augusdi的专栏 - 博客频道 - CSDN.NET CUDA ...
- CUDA编程接口:异步并发执行的概念和API
1.主机和设备间异步执行 为了易于使用主机和设备间的异步执行,一些函数是异步的:在设备完全完成任务前,控制已经返回给主机线程了.它们是: 内核发射; 设备间数据拷贝函数; 主机和设备内拷贝小于64KB ...
- CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第八节
原文链接 第八节:利用CUDA函数库 Rob Farber 是西北太平洋国家实验室(Pacific Northwest National Laboratory)的高级科研人员.他在多个国家级的实验室进 ...
随机推荐
- 小程序 showModal content换行
wx.showModal({ title: '提示', content: '1.该拼团仅支持到指定取货地址自提\r\n2.拼团支付价格为拼团原价,当到达指定阶梯,拼团差价将在3个工作日内退回您的微信账 ...
- Java 基础 IO
一,前言 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据 ...
- 大牛推荐的30本经典编程书籍,从Python到前端全系列。
注:为了方便阅读与收藏,我们也制作了30本书籍完整清单的Markdown.PDF版以及思维导图版,大家可以在实验楼公众号后台回复关键字"书籍推荐"获取. Python 系列(10本 ...
- JS函数预解析(小记)
一,预解析:寻找var function 形参 a=undefined fn = function fn(){ alert(); } 二,逐行解读代码: 1.表达式 2. ...
- bash vim等常用命令
生成的txt一不小心带了./,用vim: :%s/\.\/single/single #%s/xxx/yyy/g是全文本替换,这里用\将特殊字符.和/转换成普通字符 结果还不错: ---------- ...
- 记录在tiny6410平台上采用4GSD卡来启动uboot和烧写nand flash uboot
下面这种方法是从网上转的 没有验证 环境:ubuntu 13.04一.首先制作sd启动盘: 插入SD卡 sudo dd iflag=dsync oflag=dsync if=tiny210v2- ...
- Node + Redis 实现分布式Session方案(转载)
Session是什么? Session 是面向连接的状态信息,是对 Http 无状态协议的补充. Session 怎么工作? Session 数据保留在服务端,而为了标识具体 Session 信息指向 ...
- Template模板
目标 模板介绍 模板变量 常用标签 常用过滤器 自定义过滤器 模板结构 加载静态文件 一 模板介绍 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中其实很少这样用,因为实际的页面大多是带 ...
- 【数据使用】3k水稻数据库现成SNP的使用
---恢复内容开始--- 我们经常说幻想着使用已有数据发表高分文章,的确,这样的童话故事每天都在发生,但如何走出第一步我们很多小伙伴不清楚,那么我们就从水稻SNP数据库的使用来讲起. http://s ...
- ansible的高级应用-roles
在之前我们知道了playbook,类似于shell的脚本,playbook适用于一些不太麻烦的部署任务,比如说使用playbook安装mysql,那么我们直接写一个playbook文件即可.可是如果我 ...