推入用户编写的内核

2024-01-13

我是 Thrust 的新手。我看到所有 Thrust 演示文稿和示例仅显示主机代码。

我想知道是否可以将 device_vector 传递给我自己的内核?如何? 如果是,那么内核/设备代码中允许对其进行哪些操作?


正如最初编写的那样,Thrust 纯粹是主机端抽象。它不能在内核内部使用。您可以将封装在设备内存中的thrust::device_vector像这样到你自己的内核:

thrust::device_vector< Foo > fooVector;
// Do something thrust-y with fooVector

Foo* fooArray = thrust::raw_pointer_cast( fooVector.data() );

// Pass raw array and its size to kernel
someKernelCall<<< x, y >>>( fooArray, fooVector.size() );

您还可以通过使用裸cuda设备内存指针实例化thrust::device_ptr,在推力算法中使用未由推力分配的设备内存。

四年半后编辑补充一点,根据 @JackOLantern 的回答,thrust 1.8 添加了顺序执行策略,这意味着您可以在设备上运行推力算法的单线程版本。请注意,仍然无法将推力设备向量直接传递到内核,并且设备向量不能直接在设备代码中使用。

请注意,也可以使用thrust::device在某些情况下,执行策略是由内核作为子网格启动并行推力执行。这需要单独的编译/设备链接和支持动态并行性的硬件。我不确定所有推力算法是否实际上都支持这一点,但肯定适用于某些算法。

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

推入用户编写的内核 的相关文章

  • “计算能力”是什么意思? CUDA?

    我是CUDA编程新手 对此了解不多 您能告诉我 CUDA 计算能力 是什么意思吗 当我在大学服务器上使用以下代码时 它向我显示了以下结果 for device 0 device lt deviceCount device cudaDevic
  • CUDA程序导致nvidia驱动程序崩溃

    当我超过大约 500 次试验和 256 个完整块时 我的 monte carlo pi 计算 CUDA 程序导致我的 nvidia 驱动程序崩溃 这似乎发生在 monteCarlo 内核函数中 任何帮助都会受到赞赏 include
  • 多个进程可以共享一个 CUDA 上下文吗?

    这个问题是 Jason R 的后续问题comment https stackoverflow com questions 29964392 multiple cuda contexts for one device any sense co
  • 传递给 CUDA 的结构中的指针

    我已经搞砸了一段时间了 但似乎无法正确处理 我正在尝试将包含数组的对象复制到 CUDA 设备内存中 然后再复制回来 但当我遇到它时我会跨过那座桥 struct MyData float data int dataLen void copyT
  • MPI+CUDA 与纯 MPI 相比有何优势?

    加速应用程序的常用方法是使用 MPI 或更高级别的库 例如在幕后使用 MPI 的 PETSc 并行化应用程序 然而 现在每个人似乎都对使用 CUDA 来并行化他们的应用程序或使用 MPI 和 CUDA 的混合来解决更雄心勃勃 更大的问题感兴
  • 无法在 CUDA 中执行设备内核

    我正在尝试在全局内核中调用设备内核 我的全局内核是矩阵乘法 我的设备内核正在查找乘积矩阵每列中的最大值和索引 以下是代码 device void MaxFunction float Pd float max int x threadIdx
  • CUDA 常量内存是否应该被均匀地访问?

    我的 CUDA 应用程序的恒定内存小于 8KB 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 如果是 如何确保所有线程同时访问同一地址 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 是的 这缓存本身每
  • 尝试构建我的 CUDA 程序时出现错误 MSB4062

    当我尝试构建我的第一个 GPU 程序时 出现以下错误 有什么建议可能会出什么问题吗 错误 1 错误 MSB4062 Nvda Build CudaTasks SanitizePaths 任务 无法从程序集 C Program 加载 文件 M
  • 使用 CUDA 进行逐元素向量乘法

    我已经在 CUDA 中构建了一个基本内核来执行逐元素两个复向量的向量 向量乘法 内核代码插入如下 multiplyElementwise 它工作正常 但由于我注意到其他看似简单的操作 如缩放向量 在 CUBLAS 或 CULA 等库中进行了
  • CUDA 矩阵加法时序,按行与按行比较按栏目

    我目前正在学习 CUDA 并正在做一些练习 其中之一是实现以 3 种不同方式添加矩阵的内核 每个元素 1 个线程 每行 1 个线程和每列 1 个线程 矩阵是方阵 并被实现为一维向量 我只需用以下命令对其进行索引 A N row col 直觉
  • 从 CUDA 设备写入输出文件

    我是 CUDA 编程的新手 正在将 C 代码重写为并行 CUDA 新代码 有没有一种方法可以直接从设备写入输出数据文件 而无需将数组从设备复制到主机 我假设如果cuPrintf存在 一定有地方可以写一个cuFprintf 抱歉 如果答案已经
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do
  • 有条件减少 CUDA

    我需要总结一下100000值存储在数组中 但带有条件 有没有办法在 CUDA 中做到这一点以快速产生结果 任何人都可以发布一个小代码来做到这一点吗 我认为 要执行条件约简 您可以直接将条件引入为乘法0 假 或1 真 加数 换句话说 假设您希
  • CUDA Thrust 的多 GPU 使用

    我想使用我的两张显卡通过 CUDA Thrust 进行计算 我有两张显卡 在单卡上运行对于两张卡都适用 即使我在 std vector 中存储两个 device vector 也是如此 如果我同时使用两张卡 循环中的第一个周期将起作用并且不
  • Bank 在字长方面存在冲突

    我读过一些关于共享内存的好文章 但我对银行冲突有初步疑问 据说 如果线程 1 和线程 2 从存储体 0 访问字 0 则不存在存储体冲突 但如果他们访问不同的单词 就会出现银行冲突 但我的问题是不同的单词如何可以驻留在一个银行中 由于bank
  • 如何在CUDA应用程序中正确应用线程同步?

    一般来说 我在应用程序中偶尔会使用线程同步 因为我并不经常需要此功能 我并不是真正的高级 C C 程序员 但我也不是初学者 我开始学习 CUDA C 对当今 GPU 与 CPU 的能力相比感到兴奋 我意识到 CUDA 编程主要是关于并行线程
  • C 中的 CUDA:如何使用 cudaMemcpyAsync 修复错误 11

    我目前正在尝试使用 CUDA 运行一个简单的多 GPU 程序 它的基本作用是将一个包含一些虚拟数据的大型数组复制到 GPU GPU 进行一些数学计算 然后将结果数组复制回来 我在 VS2017 的输出中没有收到任何错误 但我设置的一些错误消
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • CUDA 的嵌套循环

    我想将我的 C 代码移植到 CUDA 主要计算部分包含3个for嵌套循环 for int i 0 i lt Nx i for int j 0 j
  • CUDA Thrust 库中counting_iterators 的用途和用法

    我很难理解counting iterator在 CUDA 的推力库中 它的目的是什么以及如何使用 它在其他编程语言 例如 C 中也可用吗 计数迭代器只是一个迭代器 它从每次迭代器递增时前进的序列中返回下一个值 最简单的例子是这样的 incl

随机推荐

  • 无法从其他子表单刷新子表单

    我有一个包含多个子表单的表单 当有人更改其中一个子表单的组合框中的值时 它需要刷新另一个子表单 我正在使用这段代码 但它不起作用 Forms frmDispatchPlanningSheet subfrmExtraDriversForPla
  • Java8 Lambda 和异常

    我想知道是否有人可以向我解释以下奇怪的现象 我正在使用 Java 8 更新 11 鉴于这个方法 private
  • 在运行时获取delphi记录中字段的偏移量

    给定一个记录类型 TItem record UPC string 20 Price Currency Cost Currency end 以及字段的名称作为字符串 如何获取该字段在记录中的偏移量 我需要在运行时执行此操作 要访问的字段的名称
  • 强制 git show 使用 vimdiff 显示 diff

    我该怎么做呢 通过进行更改后git config我可以使用 vimdiff 区分我的分阶段和提交的更改 但是当我这样做时git show我仍然看到旧的普通风格的差异 我该如何让它工作git show还有 尝试使用 git 别名 这是为了gi
  • conf.int 在 3.3 中不再使用 ggplot2、stat_summary

    我正在使用 conf int 在抖动图周围创建框 在将 R 升级到 3 3 之前 这种方法一直有效 是否有已知的修复方法 stat sum df all lt function fun geom crossbar stat summary
  • 如何防止 ckeditor 不在空白 html 标签中添加

    我在 Windows 8 1 操作系统中安装了 Visual Studio 2012 Express 并根据要求在我的项目中使用 CKEditor 我是 CKEditor 的新手 也以正确的方式使用它 但问题是通过在 CKEditor 中的
  • 调用 locale.strxfrm 时 Unicode 字符不在范围内

    我在使用时遇到奇怪的行为locale具有 unicode 输入的库 下面是一个最小的工作示例 gt gt gt x U0010fefd gt gt gt ord x 1113853 gt gt gt ord U0010fefd 0X10fe
  • Created_at 保存时区错误

    我有一个 laravel 应用程序 我正在尝试将用户签入和签出保存到我 的数据库中 我有一个模型Checkins我将其记录为created at和updated at 在我的本地主机上 它保存了我的时区 埃及 的正确时间 我尝试更改app
  • Paypal 地址覆盖不起作用

    我已经设置了一个查询字符串来将信息传递到贝宝 除了地址覆盖功能之外 所有工作都正常 它不会自动使用表格中发布的新地址更新送货地址 我希望能够覆盖现有帐户和新帐户 代码如下 queryString cmd xclick queryString
  • 对于 Windows 有 Win32 API,那么对于 Mac 呢?

    对于 Windows 有 Win32 API 那么对于 Mac 呢 在维基百科上 http en wikipedia org wiki Cocoa API http en wikipedia org wiki Cocoa 28API 29
  • 在 python 中配置根记录器

    我的 Django 设置中有以下日志配置 LOGGING version 1 disable existing loggers False formatters verbose format levelname s asctime s na
  • 无法使用 flutter 中的 SAS 令牌上传到 azure 存储

    我正在尝试使用 SAS 令牌将文件 数据上传到 azure 存储 我使用以下方法成功地在没有 SAS 令牌的情况下实现了这一目标 sendToBlob Uint8List bytes async var storage AzureStora
  • 使 Rails 缓存中的特定模型无效

    我使用 Rails 3 和 Memcached 来缓存一些模型 当模型更改时 我想使该记录的缓存失效 对于视图片段 我只是说expire fragment blah 如何对我的模型执行此操作 我不想说Rails cache clear并失去
  • 计时器错误 java.lang.IllegalStateException

    我试图显示一个标签 说明 JRE 8 中的所有内容仅在 3 秒内正确 因为我无法在 JRE 7 中使用 DatePicker 并且收到此错误 Exception in thread Timer 2 java lang IllegalStat
  • ruby 中 #entries 和 #to_a 之间的区别

    之间的基本区别是什么 entries and to a的方法Enumerableruby 中的模块 两者似乎都返回相同的结果Hash gt gt hash name gt foo age gt 23 gt name gt foo age g
  • 如何更新所使用的quarkus版本

    升级现有应用程序中使用的 quarkus 版本的推荐方法是什么 我查看了我的 pom xml 因为 quarkus 扩展没有指定使用的版本 我假设它们将根据主 quarkus 版本进行更新 与更新相关的属性是 quarkus plugin
  • ExtJS 4 MVC 视图的多个实例和子/子控制器的困难

    我在 ExtJS 4 中遇到了 MVC 模式的问题 至少 我认为我遇到过 在向多个人提出这个问题并在 Sencha 论坛上多次发帖后 我现在转向更广泛的受众 希望得到灯泡或确认 Problem 您的应用程序能够打开许多不同的视图 其中一些视
  • 数据 URI 的慢速页面

    我构建了一个脚本 用数据 URI 替换所有内联图像 以减少 http 请求并增加移动设备上的加载时间 不幸的是我的加载速度较慢 我认为这取决于 html 文件是否更大 大约 100kb 而不是大约 5 kb 或者数据 URI 是否有其他因素
  • 如何找到MySQL临时表存储引擎

    您好 我正在使用临时表 我想知道临时表存储引擎 InnoDB MyISAM 我正在使用以下代码来查找 但它没有向我显示存储引擎 engine SELECT ENGINE FROM information schema TABLES WHER
  • 推入用户编写的内核

    我是 Thrust 的新手 我看到所有 Thrust 演示文稿和示例仅显示主机代码 我想知道是否可以将 device vector 传递给我自己的内核 如何 如果是 那么内核 设备代码中允许对其进行哪些操作 正如最初编写的那样 Thrust