首页 > 系统相关 >内存管理

内存管理

时间:2023-01-30 17:46:46浏览次数:37  
标签:__ 管理 读写 host 线程 内存 data

内存以及优化方法

内存读写速度

线程寄存器读写:1个时钟周期延迟

线程本地内存读写:非常慢

块的共享内存读写:1个时钟周期延迟,但是可能冲突

网格全局内存读写:500个时钟周期延迟,联合访问时会有隐含延迟。

网格的常量内存和纹理内存读取:500个时钟周期延迟。但是有缓存

 

内存模型

寄存器

修饰符:核函数中声明,没有修饰符。

共享范围:线程私有

速度:块。一个时钟周期延迟。当R/W依赖或寄存器内存冲突时会有延迟,但是活动线程数>=192时,可以忽略此延迟。

读取模式:读写。

生命周期:生命周期与线程一致。

优化方法:当每个块的线程数为64倍时,获得最佳效果。

 

本地内存

修饰符:无

范围:线程私有

速度:慢

读取模式:读写。

当寄存器用完时,将需要存储的值放在本地内存中。

 

共享内存

修饰符:__shared__

共享范围:块内所有线程。

速度:快,1个是时钟周期延迟。当组冲突时会有延迟,没有冲突时,会和寄存器一样快。

生命周期:整个线程块。

读取模式:读写。

缺点:有库冲突,半个warp中,多个线程访问相同的库。必须序列化访问才能解决冲突。

 

常量内存

修饰符:__constant__,必须在全局空间内和所有核函数之外声明。

共享范围:网格内,可以从主机访问

速度:速度与芯片上的缓存有关;慢速时,1次缓存未命中,所以从全局内存读取;快速时,都命中缓存。

读取模式:只读。

生命周期:随着应用程序结束而结束。

空间:64KB;

初始化:在host端使用 cudaError_t cudaMemcpyToSymbol(const void* symbol, const void* src,size_t count);初始化

与常量内存进行数据交换,使用案例:

__constant__ float const_data[256];
float data[256];
cudaMemcpyToSymbol(const_data, data, sizeof(data));
cudaMemcpyFromSymbol(data, const_data, sizeof(data));

 

纹理内存

共享范围:网格内,可以从主机访问。

速度与常量内存一致。

读取模式:只读。

生命周期:随着应用程序结束而结束。

 

块共享内存,块内所有线程都可访问,生命周期与块一致。

全局内存,所有线程都可以访问,生命周期随着应用程序结束而结束。

 

全局内存

修饰符:__device__或者在host端使用cudaMalloc函数动态声明。

共享范围:全局。

速度:慢,500个时钟周期。联合访问时会有冲突

读取模式:读写。

生命周期:随着应用程序结束而结束。

初始化:cudaMalloc

 

内存操作函数

将host拷贝到global

cudaMemcpyToSymbol(target,&src,sizeof(src));

将host变量拷贝到device,字节数为源变量的大小,host端变量传递的是地址。

 

将global拷贝到host

cudaMemcpyFromSymbol(&target,src,sizeof(src));

将device变量拷贝到host,字节数为源变量的大小,host端变量传递的是地址。

 

重置关联资源

cudaDeviceReset()

重置当前线程所关联过的当前设备的所有资源

标签:__,管理,读写,host,线程,内存,data
From: https://www.cnblogs.com/RedNoseBo/p/17076786.html

相关文章

  • 使用pyfakefs在内存中创建文件,而非硬盘
    pyfakefs是一个假文件系统,它模拟的是python的文件系统,简单来说,它提供了和python的os模块,Path模块一样的功能,所有的文件操作,例如创建,修改,删除,重命名等操作都是在内存中进行......
  • 【KAWAKO】python查看内存空间占用情况
    目录查看变量的内存占用查看运行内存占用查看变量的内存占用importsysc=1145.114print(sys.getsizeof(c))查看运行内存占用importpsutilmemory=psutil.vir......
  • Kratos 项目实战(模块管理)
    一.创建项目1.1创建项目在Linuxshare/cloud_center/目录下创建module项目kratosnewmodule-rhttps://gitee.com/go-kratos/kratos-layout.git 进入到module删除......
  • 如何测试监测 app 的内存使用、CPU 消耗、流量使用情况?
    adbshelltopAndroid   应用性能测试通常包括:启动时间、内存、CPU、耗电量、流量、流畅度等根据手机的使用应用频度和强度不同,可将应用使用强度分为如下几种状态:1、......
  • 鼎捷ERP二维码整体解决方案 Tiptop GP条码管理系统 鼎捷ERP移动解决方案 鼎捷条码扫描
    本人在ERP实施公司做顾问四五年,参与企业实施ERP十多个项目,非常熟悉企业ERP流程,在实施过程遇到众多问题,提出了不少根据企业具体情况的解决方案。     最近定制开......
  • Linux 硬盘分区管理:fdisk、sfdisk、sgdisk
    fdisk不必多言。sfdisk参考:管理磁盘分区的Linuxsfdisk命令示例sgdisk参考:使用sgdisk管理分区......
  • ITIL知识管理分析及如何实施
    什么是知识管理知识管理是在IT服务台内收集、分析、存储和共享知识的过程。它旨在帮助服务台团队在整个使用寿命期间做出正确的决策通过有效控制和处理信息流来循环和事......
  • vsCode 博客园插件使用:管理本地博客
    前言使用博客园插件在vsCode中管理本地博客。第一次使用,摸索了个教程出来。新建-发布博客第一步:登录、配置本地博客文件夹第二步:新建本地博客方式一:直接在本地博客......
  • 安畅网络云管理服务
     说明:对安畅网络云服务管理的了解一、专业服务云咨询流程:分析客户需求——制定云战略——建立云项目实施计划——短期/长期运维管理策略MSP认证咨询服务云迁移服务1......
  • 2023年,如何利用 OKR 进行绩效管理
    绩效管理,是人力资源理念的一个流程。然而,如何把OKR融入到我们的绩效管理体系里面当中去,是管理者一定要明确的一个点。传统绩效管理特点是什么,移动互联网时代组织的特点是......