gpt4 book ai didi

c++ - 在将对象传递给内核之前防止复制构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 02:18:12 25 4
gpt4 key购买 nike

据我所知,当我将一个结构或类传递给内核时,复制构造函数在主机端被调用,然后复制的对象通过 memcpy 发送到设备.这是一个例子:

class Foo {
Foo(const Foo&) {std::cout << "Called before kernel execution";}
};

__global__ void kernel(Foo foo) { }

我能否以某种方式阻止复制构造函数被调用,并使 CUDA memcpy 直接成为设备内存的对象?通过引用传递 foo 是行不通的,因为它会混淆设备和主机内存。

最佳答案

看看托管内存,例如 these 2013 年 session 的幻灯片。本质上,如果您编写类来扩展 CUDA Managed 类,并使用正确的内存分配,您可以通过引用传递,CUDA 将负责内存管理。

关于c++ - 在将对象传递给内核之前防止复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34769999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com