OpenCL - 将树复制到设备内存

2024-02-22

我用 C 代码实现了二叉搜索树。我的每个树节点如下所示:

typedef struct treeNode {
    int key;
    struct treeNode *right;
    struct treeNode *left;
} treeNode_t;

宿主建造的树。设备对树进行的查询。

现在,假设我已经在主机内存中构建了树。 我想将树的根复制到设备的内存中。

复制树的根本身是不够的。因为右\左子节点不在设备内存中。这是个问题。

所以,我的问题是将整个树复制到设备内存的最简单方法是什么?


最简单(也可能也是最好)的方法是更改​​结构以使用节点索引而不是指针。指针的问题在于设备具有不同的指针,即使您单独复制所有节点,它仍然无法工作,因为指针还需要更新为设备指针。不幸的是,OpenCL 1.2 甚至不能保证设备指针的有效时间长于单个内核调用的时间。因此,至少在设备上您必须使用索引而不是指针。

像这样修改你的结构:

typedef struct treeNode {
   int key;
   int left;
   int right;
} treeNode_t;

在构建树之前,您需要分配一大树节点数组,该数组足够大以容纳所有节点。

treeNode_t nodes[MAX_NODES]; // or dynamic allocation
int first_free_node=0;

每次通常分配一个新节点时,现在都使用节点[first_free_node]来存储数据并递增first_free_node计数器。完成树的构建后,您只需使用单个 clEnqueueCopyBuffer 调用即可将所有节点复制到设备。您只需将 first_free_node*sizeof(treeNode_t) 字节从节点数组的开头复制到设备。如果您无法更改主机树构建代码,则可以使用树的简单递归深度优先遍历来计算节点数,并将节点从基于指针的格式转换为基于索引的格式。

在某些设备上,如果将树的结构从结构数组转换为数组结构,您可能会获得更高的性能。将结构填充到每个节点 16 字节也可能有所帮助。

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

OpenCL - 将树复制到设备内存 的相关文章

  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • 在 C# 中按元素相乘数组具有意想不到的性能

    我想找到按元素相乘两个数组的最佳方法 这是更广泛项目的一部分 其中性能而不是唯一的考虑因素 我今天开始用 C Linqpad 编写一些函数 因此它还没有以任何方式进行优化 下面代码的输出如下 Environment ProcessorCou
  • 为什么在创建矩阵类时使用向量不好?

    对于我的矩阵类 我做了 template
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • VS 程序在调试模式下崩溃,但在发布模式下不崩溃?

    我正在 VS 2012 中运行以下程序来尝试 Thrust 函数查找 include cuda runtime h include device launch parameters h include
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 如何从文本文件读取整数到数组

    这就是我想做的 我对此有些不满 但我希望你能容忍我 这对我来说是一个非常新的概念 1 在我的程序中 我希望创建一个包含 50 个整数的数组来保存来自文件的数据 我的程序必须获取用户的文档文件夹的路径 2 文件的名称为 grades txt
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行

随机推荐

  • 通过参数推导多参数模板中的第一个模板参数

    首先是我的问题 然后解释我正在尝试做什么 因为我可能会错误地处理问题 是否可以在指定其他参数的同时从参数中推导出多参数模板中的第一个模板参数 例子 template
  • 在自定义模块中使用时,Import-Pssession 不会导入 cmdlet

    我有一个 PowerShell 脚本 函数 当我在 PowerShell 配置文件中使用它或在 PowerShell 窗口中手动复制 粘贴该函数时 效果非常好 我正在尝试使该功能作为模块可供团队的其他成员访问 我希望将模块存储在一个中心位置
  • 对 C# 中 UDP 协议的套接字感到困惑

    我刚刚开始通过各种 Google 搜索学习套接字 但在弄清楚如何在 C 中正确使用套接字时遇到一些问题 我需要一些帮助 我有一个测试应用程序 Windows 窗体 和一个不同的类 实际上在它自己的 dll 中 但这无关紧要 我有我的套接字代
  • 从深度缓冲区读取深度值的有效方法

    对于我的算法 我需要能够访问深度缓冲区 我使用 glReadPixels 执行此操作完全没有问题 但读取 800x600 窗口的速度非常慢 从 300 fps 到 20 fps 我读了很多关于这方面的内容 我认为将深度缓冲区转储到纹理会更快
  • 在 Jenkins 上构建 Android Studio 项目? android.compileSdkVersion 丢失

    我正在尝试建立我的第一个 Android 项目来构建在 Jenkins 上 我正在运行 Jenkins 1 6 2 和 Gradle 插件版本 1 24 在 Windows 7 Professional SP1 上运行 我已经在我的构建机器
  • C# 中的 Base64 对象反序列化

    我有这样的课程 Serializable public class ExternalAccount public string Name get set 我已将其转换为 JSON 如下所示 Name XYZ 然后我对 JSON 字符串进行了
  • Dagger 生成改造拦截器的多个实例

    我是 Dagger 和 Retrofit 的新手 我遇到的问题是 尽管在 dagger 模块中声明了单例 但仍生成了多个改造自定义拦截器实例 我只需要一个实例 匕首模块 Module public class ApiModule priva
  • 如何根据内容调整 DIV 宽度

    我有一个带有附加样式的 div 元素 mypost border 1px solid Peru font family arial margin auto min width 700px width 700px 我正在 DIV 块内显示 W
  • Xamarin Forms:如何更改 Android 中的工具栏高度?

    我有一个使用 Toolbar 的 XF 应用程序 它已添加到我的 ContentPage 中 如下所示 public HomePage InitializeComponent var toolbarItem new ToolbarItem
  • 在 VB.NET 中使用模块是否被认为是不好的做法?

    在设计新应用程序期间 我想知道使用具有属性的模块是否被认为是一种不好的做法 一些示例代码 Module modSettings public property Setting1 as string public property Datab
  • Flask 应用程序在 Heroku 上失败:没有名为 app 的模块

    我有一个 Flask 应用程序已部署到 Heroku 但出现错误 2018 08 27T12 39 32 197715 00 00 heroku router at error code H10 desc App crashed metho
  • strtotime(PHP日期函数)的算法如何工作?

    我想知道怎么做斯特托时间 php 日期函数 工作吗 如何解析字符串像 2012 年 9 月 15 日 到时间戳 有没有更好的算法 我的目的是改变波斯语的这个功能 您可以浏览PHP的源代码 https github com php php s
  • 客户端-服务器代码应该写在一个还是两个“项目”中? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我已经开始开发客户端 服务器应用程序 起初 我自然地在 Eclipse 中创建了两个项目 两个源代码控制存储库等 但我很快发现两者之间有一些共享
  • iPhone SDK 4 中针对多个平台

    我有一个 iPhone SDK 项目 该项目应该为模拟器和 ARM 处理器构建一个静态库 然后将两者组合成一个通用库 到目前为止 我使用的是 iPhone SDK 3 并通过为每个模拟器和一个 ARM 创建一个单独的目标 然后使用 shel
  • $广播到当前范围

    作为前言 我有一个 Ionic 应用程序通过 websocket 连接到 Node 服务器 而 Node 服务器通过 TCP 套接字连接到 C 应用程序 我有这项服务连接并提供套接字服务 但也监视nack响应 以便它可以发出警报 通知用户错
  • 从 RGB 格式的文件加载位图(无 Alpha)

    我只想加载 BMP 文件并获取 24 位 RGB 格式 或 32 位 RGB 格式 的位图对象 我尝试的所有方法都返回 PixelFormat Format32bppArgb 的位图 图像对象 当然 即使 BMP 没有 alpha new
  • 如何通过 SSH 运行 php 脚本? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个相当长的 php 脚本 每当我的互联网连接中断一秒钟时 浏览器似乎就会停止该脚本 我不能等待 8 个小时来运行我的脚本 所以我想我可以通过 s
  • “dispatch()”是什么意思/做什么,为什么当我们有 .then() 和 .catch() 时使用它

    我是 ES6 和高级 javascript 新手 我见过使用 axios http 客户端的代码示例 如下所示 axios xxx then res gt dispatch success res err gt dispatch error
  • 哪个函数在堆栈使用效率和时间方面最好

    我编写了 3 个函数来计算元素在列表中出现的次数 我尝试了各种输入并对其进行了分析 但我仍然不知道哪个函数在堆栈使用效率和时间效率方面是最好的 请帮帮我 Using an accumulator defn count instances1
  • OpenCL - 将树复制到设备内存

    我用 C 代码实现了二叉搜索树 我的每个树节点如下所示 typedef struct treeNode int key struct treeNode right struct treeNode left treeNode t 宿主建造的树