像饿了码的网站建站有吗蚌埠企业做网站
2026/3/21 0:55:03 网站建设 项目流程
像饿了码的网站建站有吗,蚌埠企业做网站,深圳小程序推广,专业团队图片黑人抬棺一、统一内存 在前面的分析中#xff0c;对CUDA中的内存进行了整体的说明和分项的说明。但随着硬件和软件技术的不断进步#xff0c;新的CUDA会跟随着GPU不同的架构会不断的演进。新功能的不断添加#xff0c;在为开发者提供了更方便快捷且更强大的功能外#xff0c;也提供…一、统一内存在前面的分析中对CUDA中的内存进行了整体的说明和分项的说明。但随着硬件和软件技术的不断进步新的CUDA会跟随着GPU不同的架构会不断的演进。新功能的不断添加在为开发者提供了更方便快捷且更强大的功能外也提供了复杂的编程差异度。为了方便开发者进行程序和算法的移植保证不同版本下的CUDA开发尽量保持一致CUDA6.0提供了一个重要功能——统一内存Unified MemoryUM。它支持GPU硬件Kepler GPU架构及以后的迭代版本。统一内存的的功能和编程范式都在不断的推进在不同的版本中可能不尽相同目前最新的为官网上的CUDA13.1版本。二、统一内存的特点和分析统一内存看名字就比较容易理解统一的不再区分什么主机和设备CPU和GPU的单独内存管理。也就是说在它们眼中这片内存是都可以直接操作并管理的。这就大大的减轻了不同内存空间复制操作的复杂度并因此产生了一些新的技术应用如数据预取等。它包含以下几个重点特点所有CPU、GPU使用同一内存空间降低开发复杂度并消除它们之间的数据复制高性能减少CPU和GPU间的数据复制将数据预取或移动到操作频率高的处理器减少内存整体的使用数量提高数据访问速度从而在整体提高性能容量扩展有点类似于虚拟内存的意思使得GPU可以突破自身的内存大小来操作数据在CUDA编程中获取统一内存的方法有两种系统分配内存使用系统API在主机上分配的内存堆栈变量、全局/文件作用域变量、malloc/mmap、线程本地变量等。显式分配统一内存的CUDA API如cudaAllocManaged函数其分配的内存在更多系统上可用其可能优于系统分配内存需要注意的是数据的移动并不会因为统一内存的存在而完全消除只是会减少。另外此处需要说明一下托管内存上面提到的cudaAllocManaged函数可以提供托管内存的分配。统一内存提供托管内存用来桥接主机和设备内存空间。托管内存可以从系统中的所有CPU和GPU访问作为具有公共地址空间的单个连续内存映像。托管内存实现了设备内存的扩展并通过消除主机和设备间显式镜像数据的过程极大简化了应用程序移植的复杂度。托管内存仅用于堆数据而不是栈/静态数据。如果想了解当前境对统一内存的支持程度可以通过下面的方法进行查询使用cudaDeviceGetAttribute函数完全支持统一内存pageableMemoryAccess设置为1如果支持硬件加速还会把hostNativeAtomicSupported, pageableMemoryAccessUsesHostPageTables, directManagedMemAccessFromHost也设置为1CUDA托管内存完全支持concurrentManagedAccess设置为1而pageableMemoryAccess设置为0CUDA托管内存不完全支持managedMemory设置为1而concurrentManagedAccess设置为0不支持managedMemory设置为0在硬件和系统支持上统一内存的要求都比较严格比如在Linux平台上对内核的版本、显卡的计算力等等都需要开发者去进行确定不能盲目的使用相关的特点导致引入一些莫名的问题。在最新的CUDA文档说明中对其进行了更抽象的说明有兴趣的可以自行查阅并进行相关的比较学习。三、CUDA中的应用CUDA中提供了以下几种统一内存开发的接口系统API在完全支持统一内存的系统上通过过主机进程系统分配的相关API都可以支持统一内存的操作。如malloc,new,mmap等CUDA托管内存API比如通过cudaMallocManaged函数即获取相关的统一内存地址CUDA中的托管变量即在CUDA中使用/__managed__声明的变量等通过上面的方式方法就可以在CUDA编程中创建和使用统一内存并进行相关的功能应用比如后面分析的数据预取。CUDA的托管内存在GPU Pascal架构开始就不再直接分配物理内存了而是在首次应用的基础上分配内存和COW有点意思啊。GPU和CPU在分配内存时略有不同如果CPU先进行分配则分配映射到CPUGPU先进行分配则分配到GPU的页表。那么就会出现一个问题如果CPU分配了内存但GPU使用则会出现页面错误内存会进行重新的复制即从CPU内存中复制到GPU内存。由此产生的成本是相当高的。那既然存在这种问题就会有解决问题的方法。在CUDA中有两种方法第一种是使用warp优化统一内存另外一个是使用数据预取。warp优化统一内存Per-page warp即尽量让同一个warp的线程访问同一个内存页的数据。目的就是将代价巨大的页面迁移次数尽量降低数据预取Data Prefetching就是提前把数据加载到指定的处理器处理器相关位置。在后面的文章中会进行详细的分析说明。通过上面的说明大家就对统一内存的应用有一个初步的印象然后在此基础上就可以不断的进行实践编程进一步掌握相关的技术知识。四、例程根据上面的说明看一下例程//system malloc//no support__global__voidwrite_value(int*ptr,intv){*ptrv;}intmain(){int*d_ptrnullptr;// Does not require any unified memory supportcudaMalloc(d_ptr,sizeof(int));write_value1,1(d_ptr,1);inth_value;// Copy memory back to the host and synchronizecudaMemcpy(h_value,d_ptr,sizeof(int),cudaMemcpyDefault);printf(value %d\n,h_value);cudaFree(d_ptr);return0;}//malloc__global__voidwrite_value(int*ptr,intv){*ptrv;}intmain(){// Requires System-Allocated Memory supportint*ptr(int*)malloc(sizeof(int));write_value1,1(ptr,1);// Synchronize required// (before, cudaMemcpy was synchronizing)cudaDeviceSynchronize();printf(value %d\n,*ptr);free(ptr);return0;}//Requires System-Allocated Memory support__global__voidwrite_value(int*ptr,intv){*ptrv;}intmain(){// Requires System-Allocated Memory supportintvalue;write_value1,1(value,1);// Synchronize required// (before, cudaMemcpy was synchronizing)cudaDeviceSynchronize();printf(value %d\n,value);return0;}//managed Memory__global__voidwrite_value(int*ptr,intv){*ptrv;}intmain(){int*ptrnullptr;// Requires CUDA Managed Memory supportcudaMallocManaged(ptr,sizeof(int));write_value1,1(ptr,1);// Synchronize required// (before, cudaMemcpy was synchronizing)cudaDeviceSynchronize();printf(value %d\n,*ptr);cudaFree(ptr);return0;}//managed var__global__voidwrite_value(int*ptr,intv){*ptrv;}// Requires CUDA Managed Memory support__managed__intvalue;intmain(){write_value1,1(value,1);// Synchronize required// (before, cudaMemcpy was synchronizing)cudaDeviceSynchronize();printf(value %d\n,value);return0;}代码来自官方文档大家可以根据文档的相关内容展开更多的代码实例测试。上面的代码首先是一个不需要统一内存支持的标准的代码然后是两个在完全支持统一内存环境下的malloc和栈变量的代码最后是托管接口和托管变量的代码。五、总结统一内存作为一种正在不断演进的技术或功能需要开发者注意其应用的软硬件环境特别是在不同的平台上不同的细节功能把握不要在这些细节上犯一些低级的错误。也可以这样理解统一内存的应用与环境紧密相关不能脱离开进行专门的讨论。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询