问题标签 [cub]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3605 浏览

cuda - 致命错误:cub/cub.cuh:没有这样的文件或目录

我是 CUDA 和 CUB 的新手。我找到了以下代码并尝试编译它,但是我遇到了这个错误:致命错误:cub/cub.cuh:没有这样的文件或目录。

CUDA 的版本是 7.0.27 我该如何解决这个错误?

谢谢!

0 投票
1 回答
562 浏览

cuda - 使用 2D 块网格减少 CUB

我正在尝试使用 CUB 减少方法进行总和。

最大的问题是:我不确定在使用二维网格时如何将每个块的值返回给主机。

发生的情况是,如果 的值GRID_SIZE与 相同BLOCK_SIZE,如上所述。计算是正确的。但是如果我改变 的值GRID_SIZE,结果就会出错。这使我认为错误在此代码中:

这里的想法是返回一个一维数组,其中包含每个块的总和。

我不打算更改BLOCK_SIZE值,但值GRID_SIZE取决于我正在查看的系统,我打算使用大于 32 的值(始终是该值的倍数)。

我寻找了一些使用带有 CUB 的 2D 网格的示例,但没有找到。

我真的是 CUDA 程序的新手,也许我犯了一个错误。

编辑:我把完整的代码。作为比较,当我为串行程序计算这些精确值时,它给了我能量:-297,121

0 投票
1 回答
301 浏览

cuda - 带有 CUDA_CUB 的 dot_product

我已经成功地用 cuda cub 测试了归约和(如上面的代码片段所示),我想根据这段代码执行两个向量的内积。但我对此有一些困惑:

  1. 我们需要两个用于 inner_product 的输入向量,我需要在对得到的新向量进行归约和之前对这两个输入向量进行逐个乘法运算。

  2. 在 cuda cub 的代码示例中,输入向量的维度等于 blocknumber*threadnumber。如果我们有一个非常大的向量怎么办。

0 投票
1 回答
317 浏览

cuda - 带迭代器的 CUB 排序

我想一次性转换值并对其进行排序,如下所示:

但是,SortKeys 需要原始指针而不是迭代器。尽管如此,是否有可能使用迭代器来完成这项工作?我知道这可以通过推力实现,但我想使用 CUB。

感谢您的建议。

0 投票
1 回答
214 浏览

cuda - 我可以使用 CUDA CUB 迭代器而不是推力吗?

是否可以像 Thrust 这样的 CUB 使用迭代器?我想使用 CUB 而不是推力,如下所示:

由于 CUB 比信任更快,我试图用它来减少数组的段。

0 投票
1 回答
199 浏览

cuda - 有没有办法在奇数大小的数据数组上使用 CUB::BlockScan?

所有示例都对大小为 32 的倍数的数组执行扫描。最快的示例使用 256 个或更多线程,每个线程分配 4 个或更多元素。

这意味着,如果我有一个大小为 450 的数组,那么大概我将不得不将它填充到 512 并执行 256 个线程,每个线程分配 2 个元素。

但是,在我的特定情况下,必须填充每个数组是不可行的。

是否有替代解决方案来处理多个奇数大小的数组?有没有办法以某种方式指定宽度?


好的,让我们更清楚。这是一个简化的例子。假设我有 2 个数组,一个数组只是第二个数组的整数偏移列表,其中包含数据。偏移量表示一组单独数据的开始。

两个数组一个作为第二个的偏移量

每组数据的大小都是随机的。我从其他进程中获取数据作为一个块,所以没有简单的方法来填充它们。我想在同一个内核的每个偏移量上运行 BlockScan。

0 投票
0 回答
81 浏览

cuda - 就地减少CUDA(CUB /推力)的总和?

我有一个需要以多种方式转换的设备向量(例如,从中创建 20 个新数组),然后减少所有(总和/累加),将这些总和返回到主向量中。该代码正在使用thrust::transform_reduce,但查看nvvp会产生很多cudaMalloc/cudaFree/cudaMemcpy,从而减慢算法速度。这将在一个循环中运行,所以我的想法是预先分配一些缓存内存并 cudaMemcpy 每次迭代最后一次所有结果。我需要让它工作的是在预分配的内存中就地工作的减少。

cub::DeviceReduce::Sum 几乎做到了,但它似乎在主机内存上有输入,将其复制到设备临时存储并最终将结果复制回主机,我想避免所有这些副本。我的下一个选择是 cub inclusive_scan,但我不需要所有这些部分总和,只需要最后一个,但即使这样它可能会更快,因为不会执行任何 malloc/memcpy。

有什么方法可以通过这些库(CUB/Thrust)就地减少以节省 malloc 和 memcpy 时间?或者方法是为它编写一些自定义内核?

0 投票
1 回答
676 浏览

c++ - 如何用 CUB 库编译 C++?

我正在使用 CUB 设备功能,就像这里的示例 ( https://forums.developer.nvidia.com/t/cub-library/37675/2 )。我能够使用 .cu 编译上述示例中的 .cu 源文件nvcc

但是,我想知道是否可以CUB在 .cpp 源文件中调用设备函数并编译 .cpp 源文件(使用nvccor g++)?我知道它是可能的thrust,因为这里的例子对我有用。

目前我只是将 main 函数移动到一个新的 main.cpp 文件中,并将 cub 头文件包含在 main.cpp 中,但由于相同的错误,我无法使用 nvcc 或 g++ 编译它,部分错误消息:

这是我的源文件:

设备.h

设备.cu

主机.cpp

我尝试分三步编译它们:

第一步进展顺利,但第二步出现上述错误。任何想法表示赞赏。也许我弄乱了一些链接(到 cuda 或 cub)?

0 投票
1 回答
77 浏览

c++ - 在我自己的开源项目中使用修改后的 C++ 仅标头库的常用方法是什么?

我想在自己的开源项目中使用修改后的 C++ 头库,但不确定通常的方法是什么。

例如,要在我的项目中使用原始头库“CUB”,我只需要:

  1. 下载 CUB
  2. 在我的源文件中包含“伞”头文件
  3. 在编译文件中指定我电脑中cub所在位置的路径

但是,我在 cub 中修改了一些源文件(少于五个文件),并想在我的项目中使用修改后的 CUB。当然,我可以简单地将编译文件中的路径更改为本地计算机上修改后的库的位置。但我不知道如何在 GitHub 上将这种更改显示为开源项目。

我能想到的唯一方法是让其他用户同时下载我的项目和修改后的头库,但我觉得这是一种丑陋的方式,尤其是当其他用户已经将原始库下载到他们的计算机中以用于其他用途时。

我是 C++ 新手,因此任何与 C++ 头库和模板库相关的解释都将不胜感激。

0 投票
1 回答
225 浏览

c++ - 如何使用 cub::DeviceReduce::ArgMin()

我对如何使用cub::DeviceReduce::ArgMin()有一些困惑。这里我从 CUB 的文档中复制代码。

问题如下:

  1. 如果d_in是指向某个GPU 内存(设备)的指针,如何初始化d_out的指针?
  2. 如果ArgMin()的操作在设备 (GPU) 中完成,我如何将结果复制到我的 CPU?