这里先说明下一些基本概念:

释放GPU中的内存cudaFree()

CUDA函数的定义:

__global__:定义在GPU上,可以在CPU上调用的函数;

__device__:定义在GPU上,由GPU调用函数;

__host__:在CPU上定义的函数,一般与__device__一起用

在GPU上开辟空间:cudaMalloc(**devPtr, byte_size)

如:

int *gpu_int;
cudaMalloc((void**)&gpu_int, sizeof(int))

GPU上数组的初始化cudaMemset(*devptr, value, byte_size)

GPU、CPU参数传递cudaMemcpy(*dst, *src, byte_size, 类型)

其中这个类型包括:

CPU2CPU:cudaMemcpyHostToHost

CPU2GPU:cudaMemcpyHostToDevice

GPU2CPU:cudaMemcpyDeviceToHost

GPU2GPU:cudaMemcpyDeviceToDevice

源码如下:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>using namespace std;__device__ int add_one(int a) {return a + 1;
}__global__ void show(int *a) {for (int i = 0; i < 10; i++) {//a[i] = add_one(a[i]);printf(" %d", a[i]);}printf("\n");
}__global__ void changeValue(int *a) {for (int i = 0; i < 10; i++) {a[i] = 100;}
}int main() {int cpu_int[10] = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10};int *gpu_int;//在GPU上分配空间cudaMalloc((void**)&gpu_int, 10 * sizeof(int));show << <1, 1 >> > (gpu_int);//初始化其值cudaMemset(gpu_int, 0, 10 * sizeof(int));show<< <1, 1 >> > (gpu_int);//将cpu_int赋值给gpu_intcudaMemcpy(gpu_int, cpu_int, 10 * sizeof(int), cudaMemcpyHostToDevice);show << <1, 1 >> > (gpu_int);//改变gpu_int的值changeValue << <1, 1 >> >(gpu_int);show << <1, 1 >> > (gpu_int);//将gpu_int的值赋值到cpu_intcudaMemcpy(cpu_int, gpu_int, 10 * sizeof(int), cudaMemcpyDeviceToHost);printf("----------华丽的分割线----------\n");for (int i = 0; i < 10; i++) {printf(" %d", cpu_int[i]);}//释放gpu_int的空间cudaFree(gpu_int);getchar();return 0;
}

程序运行截图如下:

源码打包地址如下:

https://github.com/fengfanchen/CAndCPP/tree/master/HelloCuda

cuda笔记-第一个cuda程序相关推荐

  1. mybatis学习笔记-02-第一个mybatis程序

    该视频为狂神说java视频配套笔记(博主自己手打223,日后做个参考223),b站连接:Mybatis最新完整教程IDEA版[通俗易懂]-02-第一个mybatis程序) 文章目录 2.第一个myba ...

  2. python的GUI编程和tkinter学习笔记——第一个GUI程序

    一.第一个GUI程序 from tkinter import * from tkinter import messagebox# 创建窗口 root = Tk()btn01 = Button(root ...

  3. EJB3.0学习笔记---MDB--第一个MDBBean程序:

    第一个MDBBean程序: P2P方式传递消息: 1.创建EJB项目:EJBTestP2P_05 2.在com.credream.ejb包下: MyQueueMDBBean.java package ...

  4. EJB3.0学习笔记---第一个EJB程序:

    第一个EJB程序: 开发服务端程序: 1.新建一个EJB project:EJBTest_01 2.在src下建包:com.credream.ejb 3.写接口:FirstEjb.java   pac ...

  5. EJB3.0学习笔记--第一个EJB程序:

    第一个EJB程序: 开发服务端程序: 1.新建一个EJB project:EJBTest_01 2.在src下建包:com.credream.ejb 3.写接口:FirstEjb.java   pac ...

  6. python程序设计简明教程知识点_[转载]看完《python简明教程》笔记及第一个python程序...

    主要是摘抄了一些书上需要注意的地方: 1.Python 是一门解释性语言. 在计算机内部, Python 解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行. 2.版 ...

  7. OpenCV学习笔记--第一个OpenCV程序:图片读写显示

    配置使用OpenCV库 在上节中我们已经生成了可用于VS2015或者QT5 with MinGW开发的OpenCV库,接下来我们写一个简单的程序测试一下. 因为我电脑上装了QT而没有装VS2015,所 ...

  8. Python学习笔记-第一个Python程序

    上代码前先上个东西: 直接输入 >>>'11111111' 与输入 >>>print('11111111') 有何不同? 没错,直接输入是将结果及类型打印到屏幕上, ...

  9. java applet类开始博饼_java学习笔记---第一个applet程序以及一个小问题的解决

    继续学习! 在D:\majava\文件夹下建立了一个helloworld_app.java,写入以下内容: import java.awt.*; import java.applet.*; publi ...

最新文章

  1. 用Java创建JMeter变量 - 终极指南
  2. docker安装启动nginx详细步骤
  3. .Net FrameWork中的網絡操作
  4. 笔试面试收获(持续更新中)
  5. [2019.05.09]Linux 学习笔记(3)
  6. 解析接口中的JSON数据
  7. 前端解决浏览器直接打开图片URL,下载问题
  8. CASS方格网法土石方量计算
  9. 文件删除终结者 v1.2 免费
  10. ROS2教程(入门级):创建ROS2工作空间
  11. web导出excel文件的几种方法
  12. 2021-09-15小记西数3T蓝盘翻车
  13. Wincc经典版下载
  14. 查看Windows凭据和普通凭据的密码(查看Windows中存储的密码)——mimikatz
  15. LeetCode栈和队列练习
  16. “机器学习就是现代统计学”
  17. 原生 js 实现无缝滚动轮播
  18. Div高度自适应内容高度之最简处理
  19. 火鸟数据库 linux,firebird数据库
  20. 关于解决错误apt --fix-broken install

热门文章

  1. 【BZOJ3524】 [Poi2014]Couriers
  2. Haproxy 实现Apache的负载均衡
  3. F问题3-7:以太网使用载波监听多点接入碰撞检测协议CSMA/CD。频分复用FDM才使用载波。以太网有没有使用频分复用?...
  4. 顺着 IT 的潮流,C语言再次迎来了春天!学好了C语言能做什么?
  5. pl/sql developer快速输入select * from
  6. 乐乐茶签约帆软软件,打造新式茶饮数字化管理新标杆
  7. 大神把可视化放进数据地图里,原来不敲代码一样能做
  8. BlueCatTools 批量查询网站的百度收录量,快照和外链的工具
  9. 对于内向、不善于社交的人来说,如何建立人脉?
  10. 【飞秋】一起学Windows Phone7开发(十三.四 基本控件)