cudaMemcpy 到主机来获取设备分配的内存仍然不可能吗?

2023-12-14

我有一个带有指针的数据结构(想想链表)。在启动读取输入数据的内核之前无法确定其大小。因此,我在输入处理期间在设备上分配数据。
但是,尝试将该数据复制回主机失败。据我所知,这是因为 CUDA 存在限制,不允许运行时 API 访问设备分配的内存。然而,该信息适用于 CUDA 4“修复即将推出”。有谁知道修复或解决方法是否出现过?我似乎找不到任何有关此的最新信息。

这是一个可重现的示例:

#include <cstdio>

__device__ int *devData;

__global__ void initKernel()
{
    devData = new int[6];
    devData[0] = 0;
    devData[1] = 1;
    devData[2] = 2;
    devData[3] = 3;
    devData[4] = 4;
    devData[5] = 5;
}

__global__ void printKernel()
{
    printf("Testing device: %d\n", devData[3]);
}

int main()
{
    initKernel<<<1,1>>>();
    cudaDeviceSynchronize();

    printKernel<<<1,1>>>();
    cudaDeviceSynchronize();

    int *devAddr;
    cudaGetSymbolAddress((void **)&devAddr, devData);

    int *hostData = new int[6];
    cudaMemcpy(hostData, devAddr, 6*sizeof(int), cudaMemcpyDeviceToHost)); //cudaErrorInvalidValue (invalid argument)
    //same error with: cudaMemcpyFromSymbol(hostData, devData, 6*sizeof(int));

    printf("Testing host: %d\n", testHost[3]);

    return 0;
}

这会抛出一个cuda错误无效值对于 cudaMemcpy(与 cudaMemcpyFromSymbol 相同)。当我使用时这不会引发错误__device__ int devData[6];代替__device__ int *devData;并按预期打印 3。


这仍然是不可能的。

这记录在编程指南.

此外,设备 malloc() 内存不能在任何运行时或驱动程序 API 调用(即 cudaMemcpy、cudaMemset 等)中使用。

如果您的分配中有由内核创建的数据malloc()如果您希望传输到主机,则需要先将该数据传输到设备内存分配(或托管分配),然后再复制到主机或在主机代码中使用。

内核中的相同注释和使用的所有方面malloc同样适用于内核中new以及内核中的cudaMalloc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cudaMemcpy 到主机来获取设备分配的内存仍然不可能吗? 的相关文章

  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 为什么在 CUDA 中启动 32 倍数的线程?

    我参加了 CUDA 并行编程课程 并且看到了许多 CUDA 线程配置的示例 其中通常将所需的线程数四舍五入到最接近的 32 倍数 我知道线程被分组为 warp 并且如果您启动 1000 个线程 GPU 无论如何都会将其四舍五入到 1024
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 使用 C# 读取 Soap 消息

  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData

随机推荐

  • 输入采用“同一实例”泛型的函数参数

    我有一些非常相似的东西这种类型的事件发射器并想要创建一个保留类型的辅助函数 我将我的尝试放在 TS 播放示例中 转载如下 在我的示例中 我只得到一个通用的eventName string and callback e any gt void
  • 我是否总是必须在 -viewDidLoad 方法中调用 [super viewDidLoad] ?

    在Apple的scrollView示例中 他们没有这样称呼 我一直以为那是一个must 无论如何我为什么要这么称呼呢 如果您要重写该方法 您仍然应该在 super 中调用该方法 即使超类今天没有使用它做任何事情 Apple 也可能有一天会更
  • 嵌套权重对我的 XML 代码的性能不利[重复]

    这个问题在这里已经有答案了 我想显示一个有组织的网格 所以我使用 LinearLayout 和 Layout Weight 选项 一切都很完美 但我不明白如何避免按钮 A 和按钮 C 中的此警告 Nested weights are bad
  • 为什么 `go test -run NotExist` 通过了?

    如果我运行以下命令 go test run NotExist 响应为 通过 鉴于我的测试文件不包含名为的测试TestNotExist我希望上面的命令返回 FAIL 如果没有 run option go test运行所有测试 您使用 run选
  • geom_abline(...) 是否多次绘制数据?

    是否使用geom abline 也geom vline and geom hline 导致 天真 使用时同一行多次过度绘制 例如 假设我们对以下多面散点图感兴趣 library ggplot2 library dplyr k lt 4 da
  • java使用BODMAS吗?

    目前 我正在尝试使用java编程语言制作一个计算器 但是 我需要知道java是否使用BODMAS 以便我知道是否制作一个实现BODMAS的算法或继续制作计算器 java使用BODMAS吗 这是 BODMAS 而不是 BOMDAS 除法在乘法
  • 文档图像二值化[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在尝试寻找有效的文档图像二值化技术 我目前已经实现了 niblack 和 sauvo
  • 在 ASP.NET MVC 中构建自定义授权

    In the DB i have Role and User具有一对多关系的实体 我想做的是构建自定义授权过滤器 我见过的所有教程都是使用默认的ASP NET会员资格 我只知道我需要继承AuthorizationAttribute但不知道我
  • 如何使用 React Router v6 导航到上一页,同时将当前页面的状态传递给它?

    我知道我可以使用navigate 1 来自useNavigate 钩子 导航到上一页 但使用navigate 1 state state 似乎不起作用 因为当我转到上一页时我得到一个空值 The navigate函数有两个函数签名 一个需要
  • 在 PHP 中通过正确的身份验证确保安全登录

    如何在 PHP 中编写 组合安全登录 这网站开发者指南说我不应该自己动手 所以参考通过谷歌提供的示例是没有用的 高手们是如何做到的呢 假设您正在 Rails 中构建一个世界级的应用程序 相同的库 技术可以在这里使用吗 Thanks 在 Ra
  • 无法连接到 StreamSocketListener

    我正在尝试连接到 Windows 10 应用程序中的 StreamSocketListener 如果客户端套接字位于同一应用程序内 则此方法有效 但如果我尝试从另一个应用程序 例如 Putty 连接 它就不起作用 几秒钟后 腻子显示 网络错
  • 在java中使用super.paintComponent(g)或getGraphics()

    我对几件事有点困惑 示例代码 显示了我的问题 这是不可编译的 image private BufferedImage image private Graphics2D graphic private changeImage thread l
  • 有没有办法调用被重写的对象的基类方法? (C++)

    我知道有些语言允许这样做 在C 中可以吗 Yes include
  • 围绕角色旋转图像(JAVA)

    是的 我确实知道您可以使用 AffineTransformation 但是我希望我的剑图像围绕我制作的角色 图形中绘制的黑色块 明显旋转 360 度 而不是仅旋转一圈 基本上我想要一个像泰拉瑞亚那样的旋转系统 我知道如何获取角色的 x 和
  • 返回类型不同的方法的类型擦除

    我想知道是否存在某种形式的类型擦除来处理具有相同名称和参数但返回不同值的方法 如下面的示例所示 begin and end 我并不打算在任何地方实际使用它 我只是想知道它是否可能 如果可能的话 将如何完成 我所知道的类型擦除的唯一形式是拥有
  • HTML 和字符编码与 HTML 实体

    在编写 HTML 文档时 是否可以使用直接的特殊字符 例如大写字母 C 下面有一个变音符 作为常规文本 或使用HTML 实体名称这个角色的 Ccedil 我已经看到这两种方法都在实践中被使用 但肯定有一些规则来管理它的适当使用 以及一种方法
  • 如何获取 ul 标签中特定 li 的位置?

    我想要获得一号li我悬停在上面jQuery 这是我的代码 ul li li li li li li I want hover on this element li li li li ul 我希望当鼠标悬停在顶部代码中的某些元素上时获取所有元
  • 使用索引列表访问 pandas 数据框中的条目

    我面临的问题是 我只需要分布在不同行和列上的原始数据帧的子集 例如 My Original dataframe import pandas as pd dfTest pd DataFrame 1 2 3 4 5 6 7 8 9 Output
  • WSL - 当 linux 二进制文件在 Bash 中不可用时如何回退到 exe

    我需要做的是编写既可以在常规 Unix 系统上工作 也可以在 WSL 上工作的脚本 并在 linux 系统未安装 未安装在 PATH 中时尝试使用 EXE 版本的命令 这是我正在使用的当前代码 但我想知道是否可以使用更简单 更简洁的方法 i
  • cudaMemcpy 到主机来获取设备分配的内存仍然不可能吗?

    我有一个带有指针的数据结构 想想链表 在启动读取输入数据的内核之前无法确定其大小 因此 我在输入处理期间在设备上分配数据 但是 尝试将该数据复制回主机失败 据我所知 这是因为 CUDA 存在限制 不允许运行时 API 访问设备分配的内存 然