CUDA编程:向量加法
来源:互联网 发布:阿里云域名怎么备案 编辑:程序博客网 时间:2024/05/20 19:16
Hello World:
- #include<iostream>
- using namespace std;
- __global__ void kernel(void)
- {
- }
- int main()
- {
- kernel<<<1,1>>>;
- cout<<"Hello World"<<endl;
- return 0;
- }
【注意】
1. 运行在GPU上的程序称为kernel函数,表示设备代码,括号里面的参数是函数参数。
内核函数必须通过__global__函数类型定义,它是用来告诉编译器函数应该编译为设备上而不是主机上运行。
2. <<<Dg, Db, Ns, S>>>各个参数含义:
1) Dg:用于定义整个grid的维度和尺寸,为dim3类型。Dim3 Dg(Dg.x, Dg.y, 1)中每行有Dg.x个block,每列有Dg.y个block, 第三维恒为1,整个grid中一共有Dg.x * Dg.y个block。(最多65535*65535)
2)Db:用于定义每个block的维度和尺寸,dim3类型。Dim3 Db(Db.x, Db.y, Db.z)分别为行、列、高,相乘即为每个block中的 线程数。
3)Ns:可选参数,用于设置每个block除了静态分配的shared memory以外,最多能动态分配的shared memory的大小,单位 为Byte。如果不需要动态分配时,这个值可以写为0或者省略不写。
4)S:是cudaStream_t类型的可选参数,初始值为0,如果用到Stream的类型时需要填上,默认为0号流。
【向量相加代码】
- #include<stdio.h>
- #include<cuda_runtime.h>
- __global__ void VecAdd(float *A, float *B, float *C)
- {
- int i = threadIdx.x;
- C[i] = A[i] + B[i];
- }
- int main(void)
- {
- int host_A[512], host_B[512], host_C[512]; //申请主机内存,并进行初始化
- for(int i=0; i<512; i++)
- {
- host_A[i] = i;
- host_B[i]<<1;
- }
- cudaError_t err = cudaSuccess; //定义cudaError,默认为cudaSuccess(0)
- float *A, *B, *C;
- err = cudaMalloc( (void**)&A, sizeof(float)*512); //在GPU上申请内存
- err = cudaMalloc( (void**)&B, sizeof(float)*512);
- err = cudaMalloc( (void**)&C, sizeof(float)*512);
- if(err != cudaSuccess)
- {
- printf("the cudaMalloc on GPU is failed");
- return 1;
- }
- printf("SUCCESS");
- cudaMemcpy(A, host_A, sizeof(host_A), cudaMemcpyHostToDevice);
- cudaMemcpy(B, host_B, sizeof(host_B), cudaMemcpyHostToDevice);
- VecAdd<<<1,512>>>(A, B, C);
- cudaMemcpy(&host_C, C, sizeof(host_C), cudaMemcpyDeviceToHost);
- for(int i=0; i<512; i++)
- pritnf("A[%d] + B[%d] = %d + %d = %d\n", i, i, host_A[i], host_B[i], host_C[i]);
- cudaFree(A);
- cudaFree(B);
- cudaFree(C);
- return 0;
- }
0 0
- CUDA编程:向量加法
- cuda向量加法时间
- CUDA编程入门:向量加法和矩阵乘法
- CUDA编程之树状加法
- GPU/CUDA程序初体验 向量加法(1)
- CUDA编程(八)树状加法
- CUDA编程(八)树状加法
- CUDA计算向量内积的程序(源自CUDA范例编程)
- 偶写的第一个CUDA程序——向量加法
- 【CUDA并行编程之五】计算向量的欧式距离
- 【CUDA并行编程之五】计算向量的欧式距离
- cuda编程入门示例1---两个向量对应元素相乘
- CUDA二维矩阵加法
- CUDA矩阵加法
- 平面向量加法(10)
- 平面向量加法
- OpenCL向量加法
- OpenCL向量加法
- app Extension的证书问题
- 第二步:BIOS设置电脑为U盘启动
- 安装MYSQL遇到的问题后来无意发现是卸载的时候没有卸载完全导致,下面给出完整的卸载MySQL 5.1的卸载方法: 1、控制面板里的增加删除程序内进行删除 2、删除MySQL文件夹下的
- echarts学习文档
- Android Camera API2.0下全新的Camera FW/HAL架构简述
- CUDA编程:向量加法
- Android 图片选择器 进阶版
- 安装Centos7后的一些设置
- EOF 键盘输入end of file
- 生成csv格式文件并导出至页面的前后台实现
- CSS学习笔记-块状元素-行间元素
- python下结巴分词(jieba)学习笔记
- NVIDIA DIGITS 5.1-dev学习笔记之安装过程记录:Windows10 x64位系统 、 MicroSoft Caffe Master、CUDA 8.0 、Python 2.7
- Android Service演义