CUDA:如何直接在GPU上使用thrust::sort_by_key? [复制]

2024-03-18

Thrust 库可用于对数据进行排序。该调用可能如下所示(带有键和值向量):

thrust::sort_by_key(d_keys.begin(), d_keys.end(), d_values.begin());

在 CPU 上调用,d_keys and d_values位于CPU内存中;大部分执行都发生在 GPU 上。

但是我的数据已经在GPU上了?如何使用 Thrust 库直接在 GPU 上执行高效排序,即调用sort_by_key来自内核的函数?

另外,我的数据由以下键组成unsigned long long int or unsigned int和始终存在的数据unsigned int。我应该如何对这些类型进行推力调用?


正如 Talonmies 链接的问题中所述,您不能从 CUDA 函数调用 Thrust(例如__device__ or __global__)。但是,这并不意味着您不能通过 Thrust 使用设备内存中已有的数据。相反,您可以使用包装原始数据的推力向量从主机调用所需的推力函数。例如

//raw pointer to device memory
unsigned int * raw_data;
unsigned int * raw_keys;
//allocate device memory for data and keys
cudaMalloc((void **) &raw_data, N_data * sizeof(int));
cudaMalloc((void **) &raw_keys, N_keys * sizeof(int));

//populate your device pointers in your kernel 
kernel<<<...>>>(raw_data, raw_keys, ...);

...

//wrap raw pointer with a device_ptr to use with Thrust functions
thrust::device_ptr<unsigned int> dev_data_ptr(raw_data);
thrust::device_ptr<unsigned int> dev_keys_ptr(raw_keys);

//use the device memory with a thrust call
thrust::sort_by_key(d_keys, d_keys + N_keys, dev_data_ptr);

指向的设备内存raw_data and raw_keys当您用以下命令包装它们时,它们仍在设备内存中Thrust::device_ptr,因此当您从主机调用 Thrust 函数时,它不必将任何内存从主机复制到设备,反之亦然。也就是说,您可以使用设备内存直接在 GPU 上进行排序;唯一的开销是启动 Thrust 内核并包装原始设备指针。

当然,如果您之后需要在常规 CUDA 内核中使用它们,您可以取回原始指针:

unsigned int * raw_ptr = thrust::raw_pointer_cast(dev_data_ptr);

至于使用unsigned long long int or unsigned int作为你的钥匙与数据unsigned int,这不是问题,因为 Thrust 是模板化的。也就是说,签名为sort_by_key is

template<typename RandomAccessIterator1 , typename RandomAccessIterator2 >
void thrust::sort_by_key(           
    RandomAccessIterator1   keys_first,
    RandomAccessIterator1   keys_last,
    RandomAccessIterator2   values_first )

这意味着您可以使用不同类型的键和数据。只要给定调用的所有键类型都是同质的,Thrust 就应该能够自动推断类型,并且您无需执行任何特殊操作。希望这是有道理的

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

CUDA:如何直接在GPU上使用thrust::sort_by_key? [复制] 的相关文章

  • 按元素出现的频率对数组元素进行排序

    是否可以在 matlab octave 中使用sort函数根据元素的相对频率对数组进行排序 例如数组 m 4 4 4 10 10 10 4 4 5 应该产生这个数组 5 10 10 10 4 4 4 4 4 5是出现频率较低的元素 位于顶部
  • 列表列表中出现的频率

    我有一个列表列表 其中每个列表都已排序 我想调查的是某个元素在特定位置出现了多少次 例如 pnc 曾两次出现在第二位 一次出现在第三位 我的数据结构如下 dput degree l list c schwab 0 pnc 0 0344827
  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • 如何在条件持续时在Mysql中选择行

    我有这样的事情 Name Value A 10 B 9 C 8 意思是 这些值是按降序排列的 我需要创建一个新表 其中包含占总值 60 的值 所以 这可能是一个伪代码 set Total sum value set counter 0 fo
  • 为什么 cudaGLSetGLDevice 失败,即使它是在 main 函数的第一行中调用的

    我想使用 OpenGL 和 CUDA 之间的互操作性 我知道 正如一些教程所说 第一步是选择设备 但是 当我在主函数的第一行中调用 cudaGLSetGLDevice 0 时 程序退出并显示信息 cudaSafeCall 运行时 API 错
  • 根据键对字典进行排序

    我有一本 C 字典 比如 Dictionary
  • 使用 Cuda 并行读取多个文本文件

    我想使用 CUDA 在多个文件中并行搜索给定字符串 我计划使用 pfac 库来搜索给定的字符串 问题是如何并行访问多个文件 示例 我们有一个包含 1000 个文件的文件夹 需要搜索 这里的问题是我应该如何访问给定文件夹中的多个文件 应该动态
  • 对二进制二维矩阵进行排序?

    我在这里寻找一些指示 因为我不太知道从哪里开始研究这个 我有一个二维矩阵 每个单元格中有 0 或 1 例如 1 2 3 4 A 0 1 1 0 B 1 1 1 0 C 0 1 0 0 D 1 1 0 0 我想对其进行排序 使其尽可能 上三角
  • 如何对“s3cmd ls”的输出进行排序

    Amazon s3cmd ls 的输出如下 2010 02 20 21 01 1458414588 s3 file1 tgz 00 br 2010 02 20 21 10 1458414527 s3 file1 tgz 01 br 2010
  • php按预定义顺序对数组进行排序[重复]

    这个问题在这里已经有答案了 我正在努力尝试通过普通函数对数组进行排序 我确信这需要一个自定义比较函数 但无论如何都会将其丢弃 我有一个数组 里面有 5 个元素 我希望数组能够像这样自行排序 arsort 很接近 但不完全是 4 0 1 2
  • Python:for 循环 - for i in range(0,len(list) 与 for i in list

    这是一个非常简单的Python 力学问题 为什么我不能只说 for i in range original list 而不是 for i in range 0 len original list 人们通常使用范围而不是前者吗 谢谢 If I
  • 基数首先排序最重要的还是最不重要的,哪个更快?

    我一直在研究基数排序实现 到目前为止粘贴在下面的代码 代码是用 Java 编写的 但在 C C 中应该也能正常工作 正如您从实现中看到的 我首先执行最高有效位 即整数的第 31 位 这似乎更快 因为一旦子组完成 就不再需要迭代 例如 打个比
  • 当 docvalues=true 时,小写过滤器工厂不起作用

    我正在尝试使用 Solr 实现不区分大小写的排序并面临这个问题 https stackoverflow com questions 31745713 solr case insensitive sort not working Copied
  • Python带有负数的排序列表[重复]

    这个问题在这里已经有答案了 为了尝试通过练习来学习Python 我正在尝试使用Python来实现和测试快速排序算法 实现本身并不困难 但是排序的结果有点令人费解 当我对列表进行排序时 35 1 2 7 8 3 4 20 6 53 结果给了我
  • 对给定预定义顺序的字符串列表进行排序

    我有一系列颜色 我想按顺序排序 但是 我不想使用它们的 自然 顺序对它们进行排序 而是让它们保持以下顺序 var order white yellow violet blue orange red maroon brown black 例如
  • CUDA 代码会损坏 GPU 吗?

    在测试包含内存错误的 CUDA 时 我的屏幕被冻结了 重新启动后我无法再检测到显卡 我的代码是否有可能物理损坏该卡 这发生在 Ubuntu 14 04 下 我不知道该卡的型号 因为我无法检测到它 但我记得它是一张相当新的卡 感谢所有的评论我
  • javascript中的父子关系排序

    我有以下结构 category id 1 parent category null category id 2 parent category 1 category id 3 parent category 1 category id 4
  • 如何从尖点库矩阵格式获取原始指针

    我需要从尖点库矩阵格式获取原始指针 例如 cusp coo matrix
  • 按常量 id 对自定义类型的向量进行排序

    我需要对自定义类型的向量进行排序std vector
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果

随机推荐

  • android.support.design.widget.TextInputLayout 无法实例化

    我想整合android support design widget TextInputLayout在我的安卓应用程序中 我已经复制了jar文件android support design jar从 sdk 到我的应用程序 lib 文件夹 我
  • 将 UserControl 绑定到其自己的 dependencyProperty 不起作用

    我遇到一个问题 当父级将该对象设置为数据绑定时 我无法创建使用自定义对象的属性的用户控件 尝试解释一下我在这里的意思是代码 自定义对象 public class MyObj public string Text get set public
  • 向 Django 管理添加自定义字段

    我已经用各个领域定义了我的模型 其中一些是自定义字段 我使用应用程序的 fields py 文件来验证信用卡数据 来源是here https github com bryanchow django creditcard fields cla
  • Unicorn 与 Ruby 2.4.1 导致奇怪的崩溃

    我正在从 Ruby 2 3 1 升级到 Ruby 2 4 1 这样做后 Unicorn 似乎与新版本不兼容 我收到以下错误 我正在使用 Unicorn 5 1 0 并尝试了 Unicorn 5 3 1 无济于事 我需要使用不同的库而不是 X
  • 树形视图验证

    树视图有叶节点复选框 我需要验证树视图 如果至少检查了一个节点 并且用户可以选择的节点数量不超过特定 例如 3 个节点 注意 Treeview是asp net树视图 不是ajax树视图 好吧 既然你没有提到你想要什么类型的验证 我将同时进行
  • Google 驱动器 - WSL2 中的虚拟驱动器安装

    有谁知道我是否可以在win10系统中的wsl2中安装Google驱动器 虚拟驱动器 谢谢 sudo mount t drvfs G mnt g 第一次这样做时 运行sudo mkdir mnt g first
  • 等待 QueueUserWorkItem 完成

    如果我将作业添加到线程池中QueueUserWorkItem 在所有工作完成之前 如何阻止我的计划继续进行 我知道我可以添加一些逻辑来阻止应用程序运行 直到所有作业完成 但我想知道是否有类似的东西Thread Join 或者是否有任何方法可
  • .NET Core 中的程序集绑定重定向

    如何在 NET Core 中进行程序集绑定重定向 我发现这个问题被问了几次 但没有提供解决方案 情况微不足道 我有一个引用版本 10 中的程序集 A 的包 我想使用版本 12 中的程序集 A 在标准 NET 中 它可以完美地与此配合使用
  • 在运行时隐藏水晶报表中的列?

    如何在运行时隐藏水晶报表中的列 感谢您的任何建议 选项 1 使用条件抑制逻辑隐藏 显示冗余字段 使用参数字段来驱动所需字段的抑制公式 如果您想消除字段之间的空格 则需要将字段堆叠在一起并适当地抑制它们 在您的示例中 第 2 列将包含 fie
  • 通过 CSS 根据高度设置元素宽度

    我有一组元素 要求它们的最小宽度等于它们的高度 但高度没有明确设置 目前我可以通过设置 css 来实现这一点min width通过 jQuery 属性 document ready function myClass each functio
  • Asp.net 图像大小调整质量

    我有这段代码 用于调整和保存用户发布的文件的大小 问题是 当我调整到 480px 宽度时 图像质量会下降很多 而且大小 以 kb 为单位 仍然很大 例如 当我使用 Paint 之类的软件 手动 将同一图像的大小调整为 480px 时 质量仍
  • 如何在全日历中将事件的背景颜色更改为不同的颜色?

    我正在使用最新版本fullcalendar 我查看了文档如何更改背景颜色事件 但我不知道如何处理不同的事件 我需要带有红色 蓝色 绿色事件的代码示例 如下图所示 我在文档网站上看到了这段代码 但我无法应用两种颜色 calendar full
  • 在 check_box_tag 的 onclick 函数中传递 Rails 变量

    我正在使用 Rails 3 0 在我看来 我试图拥有一个每行都有一个复选框的表 以及一个带有特定参数 rails 变量 的 onclick 事件函数 table tr td gt td tr table 我尝试了很多方法 但没有成功 我知道
  • 使用 slick 3.0.0 流结果和 Postgresql 的正确方法是什么?

    我正在尝试弄清楚如何使用流畅的流媒体 我使用 slick 3 0 0 和 postgres 驱动程序 情况如下 服务器必须向客户端提供按大小 以字节为单位 限制的数据块分割的数据序列 因此 我编写了以下巧妙的查询 val sequences
  • 获取 Jenkins Pipeline 插件中工作区目录的绝对路径

    我目前正在对 Jenkins Pipeline 插件 以前称为 Workflow 插件 进行一些评估 阅读文档我发现我目前无法使用以下命令检索工作区路径env WORKSPACE 目前 以下变量在工作流程脚本中不可用 节点标签 工作空间 S
  • 使用 .NET RegEx 检索第二个“-”之后的字符串部分

    这是我的第一条堆栈消息 希望你能帮忙 我有几个字符串需要分解以供以后使用 这里有几个例子来说明我的意思 fred 064528 NEEDED frederic 84728957 NEEDED sam 028 NEEDED 正如您在上面看到的
  • 有没有办法跨模块使用局部变量?

    我有一个带有模块和用户窗体的 VBA 项目 我想在我的用户表单中使用模块中的一些变量 我是否有必要在全局声明这些变量 我不喜欢全局变量 因为它们在代码执行后保留在内存中 并且我必须在宏开始时一一重置这些变量 我无法使用关键字 End 从内存
  • 电子邮件中的 Message-ID 有什么用?

    据我所知 每个消息 ID 都必须是唯一的 但是如果我们强制标头具有固定值 则可能会创建重复的消息 ID 所以我不明白他们说 Message ID 应该是唯一的有什么意义 但他们很容易创建重复项 如果任何有一点阅读和基本编程知识的人都可以轻松
  • 使用 Keras 加载之前保存的重新训练的 VGG16 模型时出现 ValueError

    我在 Keras 中使用 VGG16 架构 我通过以下方式对其进行了重新训练以满足我的需求 vgg16 model keras applications vgg16 VGG16 model Sequential for layer in v
  • CUDA:如何直接在GPU上使用thrust::sort_by_key? [复制]

    这个问题在这里已经有答案了 Thrust 库可用于对数据进行排序 该调用可能如下所示 带有键和值向量 thrust sort by key d keys begin d keys end d values begin 在 CPU 上调用 d