cuda学习笔记3——cuda常用内存相关函数及其使用示例

news2024/10/3 0:22:55

cuda学习笔记3——cuda常用内存相关函数及其使用示例

  • 常用的GPU内存函数
    • cudaMalloc()
    • cudaMemcpy()
    • cudaFree()
  • 代码示例

常用的GPU内存函数

cuda程序将系统区分成host和device,二者有各自的memory。kernel可以操作device memory,为了能很好的控制device端内存,CUDA提供了几个内存操作函数:

ccuda
malloccudaMalloc
memcpycudaMemcpy
memsetcudaMemset
freecudaFree

cudaMalloc()

  • (1)函数原型:
 cudaError_t cudaMalloc (void **devPtr, size_t size)
  • (2)函数用处:与C语言中的malloc函数一样,只是此函数在GPU的内存你分配内存。

  • (3)注意事项:
    可以将cudaMalloc()分配的指针传递给在设备上执行的函数;
    可以在设备代码中使用cudaMalloc()分配的指针进行设备内存读写操作;
    可以将cudaMalloc()分配的指针传递给在主机上执行的函数;
    不可以在主机代码中使用cudaMalloc()分配的指针进行主机内存读写操作(即不能进行解引用)。

cudaMemcpy()

(1)函数原型:

cudaError_t cudaMemcpy (void *dst, const void *src, size_t count, cudaMemcpyKind kind)

(2)函数作用:与c语言中的memcpy函数一样,只是此函数可以在主机内存和GPU内存之间互相拷贝数据。
(3)函数参数:cudaMemcpyKind kind表示数据拷贝方向,如果kind赋值为cudaMemcpyDeviceToHost表示数据从设备内存拷贝到主机内存。
(4)与C中的memcpy()一样,以同步方式执行,即当函数返回时,复制操作就已经完成了,并且在输出缓冲区中包含了复制进去的内容。
(5)相应的有个异步方式执行的函数cudaMemcpyAsync(),这个函数详解请看下面的流一节有关内容。

cudaFree()

(1)函数原型:cudaError_t cudaFree ( void* devPtr )。
(2)函数作用:与c语言中的free()函数一样,只是此函数释放的是cudaMalloc()分配的内存。

代码示例

test2_cudaMemcpy.cu

#include <stdio.h>
#include <cuda_runtime.h>

__global__ void add( int a, int b, int *c ) 
{
    *c = a + b;
}
int main( void ) 
{
    int c;
    int *dev_c;
    //cudaMalloc()
    cudaMalloc( (void**)&dev_c, sizeof(int) );
    //核函数执行
    add<<<1,1>>>( 2, 7, dev_c );   
    //cudaMemcpy()
    cudaMemcpy( &c, dev_c, sizeof(int),cudaMemcpyDeviceToHost ) ;
    printf( "2 + 7 = %d\n", c );
    //cudaFree()
    cudaFree( dev_c );

    return 0;
}

编译

nvcc test2_cudaMemcpy.cu -o test2

运行

$ ./test2
2 + 7 = 9

在这里插入图片描述

__global__ void add( int a, int b, int *c ) 

表示定义了一个核函数。必须要以__global__ 声明。

   cudaMemcpy( &c, dev_c, sizeof(int),cudaMemcpyDeviceToHost )

这里表示把cuda运行的结果复制到主机端。

具体核函数可以看:

参考:https://blog.csdn.net/qq_23858785/article/details/96476740

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试人员去外包公司待遇怎么样?外包薪资高吗?

&#x1f4cc; 博客主页&#xff1a; 程序员二黑 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 公号同名&#xff0c;欢迎加入我的测试交流群&#xff0c;我们一起交流学习&#xff01; 可能…

Python基础-画图:matplotlib

Python画图主要用到matplotlib这个库。具体来说是pylab和pyplot这两个子库。这两个库可以满足基本的画图需求。 pylab神器&#xff1a;pylab.rcParams.update(params)。这个函数几乎可以调节图的一切属性&#xff0c;包括但不限于&#xff1a;坐标范围&#xff0c;axes标签字号…

ESP32 OTA

装好Arduino环境后&#xff0c;做了一个遥控小车&#xff1a; 1、uni-app 包装 nipplejs (Nipplejs by yoannmoinet)做了一个简单的摇杆&#xff0c;调用ESP32的WebServer接口&#xff0c;控制小车 2、ESP32 连上路由的WiFI&#xff0c;用WebServer开发了一个接口&#xff0c…

PG::Wpwn

nmap -Pn -p- -T4 --min-rate1000 192.168.225.123 nmap -Pn -p 22,80 -sCV 192.168.225.123 查看80端口的页面 尝试枚举路径 发现了/wordpress路径 使用wpscan扫描 wpscan --url http://192.168.225.123/wordpress/ -e ap 使用exploit-db搜索“social warfare” https:/…

我国原油期货行业趋势:消费量上升及鼓励政策落地 成交额将继续增长

原油期货是最重要的石油期货&#xff0c;世界上重要的原油期货合约有4个&#xff1a;纽约商业交易所&#xff08;NYMEX&#xff09;的轻质低硫原油即“西德克萨斯中质油”期货合约&#xff1b;迪拜商品交易所的高硫原油期货合约&#xff1b;伦敦国际石油交易所&#xff08;ICE&…

【AIOT】蓝牙调研

经典蓝牙模块&#xff08;BT&#xff09;&#xff1a;泛指支持蓝牙协议在4.0以下的模块&#xff0c;一般用于数据量比较大的传输&#xff0c;如&#xff1a;语音、音乐等较高数据量传输。经典蓝牙模块可再细分为&#xff1a;传统蓝牙模块和高速蓝牙模块。传统蓝牙模块在2004年推…

非零基础自学Golang 第8章 包管理 8.1 工作区

非零基础自学Golang 文章目录非零基础自学Golang第8章 包管理8.1 工作区8.1.1 工作区结构8.1.2 GOPATH8.1.3 GOROOT8.1.4 GOBIN第8章 包管理 对于大部分编程语言来说&#xff0c;代码包都是最有效的代码管理方式&#xff0c;Go语言也是使用包来管理代码的。如同其他语言一样&a…

WPF 3D 点光源学习

先画一个平面&#xff0c;物体具有黄色的材质&#xff1b;不添加灯光&#xff0c;显示如下&#xff0c; 加入一个点光源&#xff0c;位置(1,1,1)、颜色白色&#xff0c;如下&#xff0c;照亮了物体&#xff0c;看到物体的材质&#xff1b; 点光源是从斜上方照过来的&#xff0…

SSM框架+Layui框架基础业务逻辑(一)

1.获取验证码以及验证码变换 // 改变验证码图片function chageImg(){document.getElementById("captchaPic").src"/captcha/getCode?time"new Date().getTime()} import cn.hutool.captcha.LineCaptcha; import org.springframework.stereotype.Controll…

HCIP-Cloud+Service+DevOps+Engineer+V2.0第二章持续规划与设计

学习总结&#xff0c;思维导图整理&#xff0c;免费分享。侵权删除 本博文为HCIP-Cloud Service DevOps Engineer V2.0培训系列内容&#xff0c;[完整学习路径](https://education.huaweicloud.com/programs/ff24fd88-c9f3-4045-9ecd-94afb7eac6ba/about)&#xff1b; 想进一…

[附源码]Python计算机毕业设计公立医院绩效考核系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

【Azure 架构师学习笔记】-Azure Logic Apps(1)-简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Logic Apps】系列。 前言 Azure Logic apps的学习也研究源自于最近项目的需要&#xff0c;对于新技术的学习&#xff0c;可以先了解What&#xff0c; why两部分&#xff0c; 也就是这是什么&#xff0c;为什么要用。另…

gin学习

文章目录零、知识补充GOPROXY地址一、准备工作1、安装gin包&#xff08;mod模式&#xff09;2、文档3、测试 hello gin二、GET POST PUT DELETE请求的使用1、修改端口号2、GET 查3、POST 增4、DELETE 删5、PUT 改6、如何取出参数6.1、GET6.2、POST DELETE PUT6.3、URI三、Bind模…

大二《web课程设计》网页制作HTML个人主题青春网站(带psd)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

什么是零拷贝, 从 Java 到 Netty

前言 零拷贝是老生常谈的话题了, 不管是Kafka还是Netty都用到了零拷贝的知识, 本篇着重讲解了什么是零拷贝, 同时在Java和Netty中分别是怎么实现零拷贝的 什么是零拷贝 零拷贝是指计算机在执行IO操作的时候, CPU不需要将数据从一个存储区复制到另一个存储区, 进而减少上下文切…

SDN网络中的转发数据和数据传输

数据驱动的网络 从数据驱动的角度来看网络&#xff0c;会发现一张现实中的网络存在着各种数据。设计和管理一张网络&#xff0c;主要是设计数据&#xff0c;存储数据&#xff0c;管理数据和分析数据。网络数据的规模、复杂度和变化速度&#xff0c;这3方面决定了数据处理的难度…

uni-app+uView实现多图上传功能。

最近使用uni-app开发一个多平台的小项目&#xff0c;项目需要多图上传&#xff0c;uni-app前端UI框架使用了uView UI。结合uView的Upload组件&#xff0c;实现了多图上传功能&#xff0c;多图上传可以限制上传的个数&#xff0c;以及选择设为封面功能。 目录效果图uView Upload…

html简洁漂亮的个人简历,个人主页,个人简介网页版(源码)

文章目录1.设计来源1.1 主界面1.2 基本资料1.3 专业技能1.4 教育经历1.5 工作经验2.效果和源码2.1 动态效果2.2 源代码源码下载作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/128349160 html简洁漂亮的个人简历,个人主页…

[深度学习基础]2.pycharm联合annaconda生成虚拟环境测试yoloV7

“戏过曼巴晃过神”1. 环境说明2. yoloV7的准备和说明2.1 yoloV7源码2.2 权重文件3. anaconda生成配套虚拟环境4. Pycharm联合conda虚拟环境1. 环境说明 承接上一篇&#xff0c;我们的软件如下&#xff08;我拿笔记本跑&#xff09;&#xff1a; python:3.9pycharm: 22.3GPU:…

【C语言进阶】参加面试怎能不会结构体?进来学,手把手教会你结构体的原理与使用

目录 &#x1f929;前言&#x1f929;&#xff1a; &#x1f92f;正文&#xff1a;结构体&#x1f92f;&#xff1a; 1.结构概述&#x1f357;&#xff1a; 2.结构的声明&#x1f354;&#xff1a; 3.特殊声明&#x1f35f;&#xff1a; 4.结构的自引用&#x1f363;&#xf…