CUDA入门——环境搭建,hello world cuda(1)

原创 2013年12月02日 16:50:56

环境搭建

一般而言,CUDA程序的基本模式是:
分配内存空间和显存空间
初始化内存空间
将要计算的数据从内存上复制到显存上
执行kernel计算
将计算后显存上的数据复制到内存上
处理复制到内存上的数据

hello world cuda

// This is the REAL "hello world" for CUDA!
// It takes the string "Hello ", prints it, then passes it to CUDA with an array
// of offsets. Then the offsets are added in parallel to produce the string "World!"
// By Ingemar Ragnemalm 2010

#include <stdio.h>
 
const int N = 16; 
const int blocksize = 16; 
 
__global__  void hello(char *a, int *b) 
{
	a[threadIdx.x] += b[threadIdx.x];
}
 
int main()
{
	char a[N] = "Hello \0\0\0\0\0\0";
	int b[N] = {15, 10, 6, 0, -11, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
	char *ad;
	int *bd;
	const int csize = N*sizeof(char);
	const int isize = N*sizeof(int);
 
	printf("%s", a);
 
	cudaMalloc( (void**)&ad, csize ); 
	cudaMalloc( (void**)&bd, isize ); 
	cudaMemcpy( ad, a, csize, cudaMemcpyHostToDevice ); 
	cudaMemcpy( bd, b, isize, cudaMemcpyHostToDevice ); 
	
	dim3 dimBlock( blocksize, 1 );
	dim3 dimGrid( 1, 1 );
	hello<<<dimGrid, dimBlock>>>(ad, bd);
	cudaMemcpy( a, ad, csize, cudaMemcpyDeviceToHost ); 
	cudaFree( ad );
	cudaFree( bd );
	
	printf("%s\n", a);
	return EXIT_SUCCESS;
}
注释:

函数类型限定符,用来确定函数是在CPU还是在GPU上执行,以及这个函数是从CPU调用还是从GPU调用。

__device__,__device__表示从GPU上调用,在GPU上执行;


__global__,__global__表示在CPU上调用,在GPU上执行,也就是所谓的内核(kernel)函数;内核主要用来执行多线程调用。


__host__,__host__表明在CPU上调用,在CPU上执行,这是默认时的情况,也就是传统的C函数。CUDA支持__host__和__device__的联用,表示同时为主机和设备编译。此时这个函数不能出现多线程语句。



变量类型限定符,用来规定变量存储什么位置上。在传统的CPU程序上,这个任务由编译器承担。在CUDA中,不仅要使用主机端的内存,还要使用设备端的显存和GPU片上的寄存器、共享存储器和缓存。在CUDA存储器模型中,一共抽象出来了8种不同的存储器。复杂的存储器模型使得必须要使用限定符要说明变量的存储位置。

__device__,__device__表明声明的数据存放在显存中,所有的线程都可以访问,而且主机也可以通过运行时库访问;


__shared__,__shared__表示数据存放在共享存储器在,只有在所在的块内的线程可以访问,其它块内的线程不能访问;


__constant__,__constant__表明数据存放在常量存储器中,可以被所有的线程访问,也可以被主机通过运行时库访问;



执行配置运算符<<< >>>,用来传递内核函数的执行参数。执行配置有四个参数,第一个参数声明网格的大小,第二个参数声明块的大小,第三个参数声明动态分配的共享存储器大小,默认为0,最后一个参数声明执行的流,默认为0。


五个内建变量,用于在运行时获得网格和块的尺寸及线程索引等信息

gridDim, gridDim是一个包含三个元素x,y,z的结构体,分别表示网格在x,y,z三个方向上的尺寸,虽然其有三维,但是目前只能使用二维;


blockDim, blockDim也是一个包含三个元素x,y,z的结构体,分别表示块在x,y,z三个方向上的尺寸,对应于执行配置中的第一个参数,对应于执行配置的第二个参数;


blockIdx, blockIdx也是一个包含三个元素x,y,z的结构体,分别表示当前线程所在块在网格中x,y,z三个方向上的索引;


threadIdx, threadIdx也是一个包含三个元素x,y,z的结构体,分别表示当前线程在其所在块中x,y,z三个方向上的索引;


warpSize,warpSize表明warp的尺寸,在计算能力为1.0的设备中,这个值是24,在1.0以上的设备中,这个值是32。


cuda:在linux下安装配置cuda

基于目前网上介绍的安装cuda的版本比较老旧,写一份比较新的,涉及到一些问题,正好可以方便大家,当然,肯定也有些问题没有涉及到,希望大家谅解。...
  • u012839187
  • u012839187
  • 2015年05月08日 15:52
  • 5630

CUDA之Hello World

1.  Cuda 编程环境的搭建:    网上针对不同的操作系统和cuda版本有很多详细的安装说明,推荐使用安装Cuda VS Wizard,下载地址http://sourceforge.net/pr...
  • Augusdi
  • Augusdi
  • 2013年09月30日 19:10
  • 2755

CUDA_HelloWorld篇

在上一篇文章中搭建好了CUDA环境,现在还是CUDA的第一个经典程序——Helloword。 打开VS2010,选择文件->新建->项目,弹出如下对话框,选择NVIDIA->CUDA->CUDA 7...
  • xiao_lxl
  • xiao_lxl
  • 2016年02月18日 16:27
  • 1451

CUDA从入门到精通

CUDA从入门到精通(零):写在前面 在老板的要求下,本博主从2012年上高性能计算课程开始接触CUDA编程,随后将该技术应用到了实际项目中,使处理程序加速超过1K,可见基于图形显示器的并行计算对于追...
  • Augusdi
  • Augusdi
  • 2013年10月17日 11:22
  • 132418

基于CUDA的OpenCL开发环境搭建与入门程序示例

参考资料:《详细程序注解学OpenCL一 环境配置和入门程序》、《VS2010 NVIDIA OpenCL 开发环境配置》 一、搭建开发环境 1. 下载和安装CUDA SDK   下载路径:...
  • gfvvz1
  • gfvvz1
  • 2014年02月12日 09:31
  • 3015

并行计算之路<1>——Hello, CUDA.

you will say goodbye to girls if you are saying “hello world”. 第一个CUDA程序 修改后的代码 代码分析 CUDA提供的demo 代码 ...
  • xx116213
  • xx116213
  • 2016年02月14日 17:28
  • 971

24种编程语言的Hello World程序

这篇文章主要介绍了 24 种编程语言的 Hello World 程序,包括熟知的 Java、C 语言、C++、C#、Ruby、Python、PHP 等编程语言,需要的朋友可以参考下。 Hello...
  • yilovexing
  • yilovexing
  • 2016年11月21日 10:14
  • 2602

CUDA从入门到精通(二):第一个CUDA程序

书接上回,我们既然直接运行例程成功了,接下来就是了解如何实现例程中的每个环节。当然,我们先从简单的做起,一般编程语言都会找个helloworld例子,而我们的显卡是不会说话的,只能做一些简单的加减乘除...
  • kkk584520
  • kkk584520
  • 2013年07月22日 22:50
  • 10235

R语言入门之Hello world

R语言入门之Hello world 作者:雨水/家辉,日期:2016-12-20,CSDN博客:http://blog.csdn.net/gobitan 摘要:R语言被称为统计语言。在数据分析上用...
  • gobitan
  • gobitan
  • 2016年12月20日 18:31
  • 2176

cuda:在linux下安装配置cuda

基于目前网上介绍的安装cuda的版本比较老旧,写一份比较新的,涉及到一些问题,正好可以方便大家,当然,肯定也有些问题没有涉及到,希望大家谅解。...
  • u012839187
  • u012839187
  • 2015年05月08日 15:52
  • 5630
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CUDA入门——环境搭建,hello world cuda(1)
举报原因:
原因补充:

(最多只允许输入30个字)