首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CUDA -复制整个托管内存类的性能损失有多大

CUDA -复制整个托管内存类的性能损失有多大
EN

Stack Overflow用户
提问于 2017-12-13 21:14:28
回答 1查看 132关注 0票数 0

我有一些从托管内存分配器派生的类,例如:

/* -托管来自https://devtalk.nvidia.com/default/topic/987577/-thrust-is-there-a-managed_vector-with-unified-memory-do-we-still-only-have-device_vector-cuda-thrust-managed-vectors-/

-它覆盖了新运算符,执行cudaMallocManaged,然后强制转换*/

代码语言:javascript
复制
class Cell : public Managed {
    int a;float b;char c; // say ~50 fields
} 

现在,假设我有一个包含100,000个Cell对象的数组,并且想要发送到某个全局函数,该函数只使用一小部分字段(比如5-10个)来执行一些计算。

最简单的方法是发送整个单元对象数组。然而,它确实复制了大量未使用的数据。

一种更紧凑的方法是只分配所需的5-10个字段的设备数组,复制值并将其发送到全局函数。这有点烦人,因为如果全局函数体需要来自cell类的其他字段,则必须重写其签名以接受新的数组。

我的问题是--一般来说,使用最简单的方法会有多糟糕的性能损失?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-12-15 05:16:19

托管内存是如何在depends on the compute capability of you device中处理的。Pascal (6.x)和更高版本将只在那些被访问的页面中请求分页。

计算能力较低的设备通常会传输整个托管内存集,而不管它被访问了多少,甚至根本不会被访问。但是,您可以使用explicitly declare the memory regions to transfer on a per-stream basis using cudaStreamAttachMemAsync()。这使您可以限制传输的数据量,而无需更改分配或数据结构。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47793939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档