cuda相关内容

CUDA 或 FPGA 用于特殊用途的 3D 图形计算?

我正在开发一种具有大量 3D 图形计算的产品,在很大程度上是最近点和范围搜索.一些硬件优化会很有用.虽然我对此知之甚少,但我的老板(没有软件经验)提倡 FPGA(因为它可以定制),而我们的初级开发人员则提倡 GPGPU 和 CUDA,因为它便宜、热门和开放.虽然我觉得我在这个问题上缺乏判断力,但我相信 CUDA 是要走的路,也是因为我担心灵活性,我们的产品仍在强劲开发中. 那么,换个说法,是 ..
发布时间:2022-01-10 16:11:07 其他开发

我应该如何以及何时将倾斜指针与 cuda API 一起使用?

我对如何使用 cudaMalloc() 和 cudaMemcpy() 分配和复制线性内存非常了解.但是,当我想使用 CUDA 函数来分配和复制 2D 或 3D 矩阵时,我经常被各种参数弄糊涂,尤其是在处理 2D/3D 数组时总是存在的倾斜指针.该文档很好地提供了一些关于如何使用它们的示例,但它假设我熟悉填充和间距的概念,而我并不熟悉. 我通常最终会调整我在文档或网络上其他地方找到的各种示例, ..
发布时间:2022-01-10 16:11:00 C/C++开发

Cuda 编程直方图

我想运行一个 cuda 程序,但我是初学者.我必须为直方图编写一个程序.但是有桶.根据 maxValue(示例中的 40),该数字将被添加到相应的存储桶中.如果我们有 4 个桶: 历史:|1 |10 |30 |39 |32 |2 |4 |5 |1 | 0-9(第一个桶) 10-19(第二桶) 20-29(第三桶) 30-39(第四桶) 我的 GPU 具有 Com ..
发布时间:2022-01-10 16:10:34 其他开发

多个线程写入 cuda 内核中的顺序数组

我正在编写一个 cuda 内核,它需要我在设备上分配一个对齐的 struct 数组.我从我的计算中得到了正确的结果,我需要从索引 0 开始将值写入这个数组. 当我尝试写入此数组并将结果显示回主机端时,一些答案显示为零. 显然,我并没有按照我的要求增加索引.我尝试使用我使用 atomicAdd() 增加的计数器,但是我仍然得到一些值为零. 确切地说,我可以在我的内核中使用 1000 ..
发布时间:2022-01-10 16:10:28 其他开发

cuda9 + 推力 sort_by_key 覆盖 H2D 副本(使用流)

我想将推力::sort_by_key 操作与主机到设备的副本重叠.尽管将 cudaStream_t 作为参数,但我的实验似乎表明,thrust::sort_by_key 是一个阻塞操作.下面我附上一个完整的代码示例,首先我测量复制数据的时间(从固定内存),然后测量执行 sort_by_key 的时间.最后,我尝试重叠这两个操作.我希望看到 sort_by_key 操作隐藏的复制时间.相反,我发现叠 ..
发布时间:2022-01-10 16:10:10 C/C++开发

CUDA 分析器报告全局内存访问效率低下

我有一个简单的 CUDA 内核,我认为它可以有效地访问全局内存.然而,Nvidia 分析器报告说我正在执行低效的全局内存访问.我的内核代码是: __global__ void update_particles_kernel(浮动4 *位置,浮动4 *vel,浮动4 *acc,浮动dt,int numParticles){整数索引 = threadIdx.x + blockIdx.x * bloc ..
发布时间:2022-01-10 16:10:04 其他开发

标识符“__shfl_down"对于 cuda-7.5 未定义

在 ubuntu 14.04(相当旧的配置)上使用 gcc 4.8.4 在 cuda 7.5 上编译程序时,我收到此错误 错误:标识符“__shfl_down"未定义在“T gmx_shfl_down_sync(unsigned int, T, unsigned int, int) [with T=float]"的实例化过程中检测到 哪个指向 模板静态 __force ..
发布时间:2022-01-10 16:09:49 其他开发

CUDA 上纹理内存中的结构

我有一个包含两个元素结构的数组,我将其发送到全局内存中的 CUDA,然后从全局内存中读取值. 当我阅读一些书籍和帖子时,并且我只是从结构中读取值,我认为如果可以将我的数组存储在纹理内存中,我会很有趣.我在内核之外使用了以下代码: 纹理纹理节点; 以及main()中的以下几行 gpuErrchk(cudaMemcpy(tree_d, tree, n * sizeof(node), cud ..
发布时间:2022-01-10 16:09:43 其他开发

cudaGetCacheConfig 需要 0.5 秒 - 如何/为什么?

我在带有 GTX Titan X (GM 200) 的基于 Xeon 的系统上使用 CUDA 8.0.它工作得很好,但是 - 与我在家中较弱的 GTX 600 系列卡相比,我的开销很长.具体来说,当我发现对 cudaGetCacheConfig() 的调用始终使 CUDA 运行时 API 花费了令人难以置信的时间:530-560 毫秒,或超过 0.5 秒.这一点,而其他电话并不需要那么多.例如,c ..
发布时间:2022-01-10 16:09:35 其他开发

具有函数指针和可变参数模板的 CUDA 内核

我正在尝试设计一个 cuda 框架,该框架将接受用户函数并通过设备函数指针将它们转发到内核.CUDA 可以与可变参数模板 (-stc=c++11) 一起使用,到目前为止一切正常. 但是,当内核调用设备函数指针时,我遇到了问题.显然内核运行没有问题,但 GPU 使用率为 0%.如果我只是用实际函数替换回调指针,那么 GPU 使用率为 99%.这里的代码非常简单,大循环范围只是为了让事情变得可衡 ..
发布时间:2022-01-10 16:09:27 C/C++开发

使用 nvcc CUDA 编译器时,有哪些可能导致分段错误的原因?

我有一个 CUDA 类,我们称它为 A,在头文件中定义.我已经编写了一个测试内核,它创建了一个类 A 的实例,它可以很好地编译并产生预期的结果. 此外,我有我的主 CUDA 内核,它也可以很好地编译并产生预期的结果.但是,当我将代码添加到主内核以实例化类 A 的实例时,nvcc 编译器会因分段错误而失败. 更新: 为了澄清,分段错误发生在编译期间,而不是在运行内核时.我用来编译的 ..
发布时间:2022-01-10 16:09:19 其他开发

如何使用 optirun 命令在 nsight 中启动项目的调试版本?

我一直在编写一些简单的 cuda 程序(我是学生,所以我需要练习),问题是我可以从终端使用 nvcc 编译它(使用 Kubuntu 12.04LTS),然后使用 optirun 执行它./a.out (hardver 是 dell inspiron 上的 geforce gt 525m),一切正常.主要问题是我无法从 Nsight 做任何事情.当我尝试启动代码的调试版本时,消息是“启动失败!找不到 ..
发布时间:2022-01-10 16:09:02 其他开发

CUDA 4.2.工具箱VS2010

我正在尝试编译 Cuda SDK 示例,但我收到“MSB3721 错误",因为“nvcc"是“以代码 1 退出".完整输出: "C:\Program 文件(x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA4.2.targets(361,9): error MSB3721: The command ""C:\Program Fil ..
发布时间:2022-01-10 16:08:53 其他开发

CUDA:CUtil 计时器 - 经过时间的混淆

当我评估我的程序时,我发现在某些时候我会出现长达 100 毫秒的时间间隔.我已经搜索了每个操作,但单独没有操作花费这个时间.然后我注意到无论我在哪里进行 cudaThreadSynchronize 调用,第一次调用都需要 100 毫秒.然后我在下面写了这样一个例子.在第一行调用 cudaThreadSynchronize 时,发现最后经过的时间值小于 1 毫秒.但如果不调用它,则平均需要 110 ..
发布时间:2022-01-10 16:08:44 其他开发

在 CMakeLists 中结合 C++ 和 CUDA 时将 CXX-standard 设置为 c++17

根据 CMake 的文档我只需要写 project(${PROJECT_NAME} 语言 CUDA CXX) 当我想在一个项目中结合 CUDA 文件和本机 C++ 文件时.然后我不必再调用 cuda_add_executable(),而是调用 add_executable,CMake 应该自己解决所有问题.这很好用,除非我想为 C++ 代码指定一个标准(通过使用 set(CMAKE_CXX_S ..
发布时间:2022-01-10 16:08:26 C/C++开发

如何填充二维线程块以进行 warp 调度?

我了解对于具有 31 个线程的 1D 线程块,它将被填充到 32 个线程以执行 warp.具有 31*31 线程的 2D 块呢?warp scheduler 会为每个维度额外填充 1 个线程(即总共会填充 31 个),或者这个 2D 块线程将被连接起来,只填充最后一个线程(31*31=961; 961%32=1)? 解决方案 只有一个warp(最后一个)被填充.线程按 x、y、z 的顺序分 ..
发布时间:2022-01-10 16:08:15 其他开发

CUDA:二维网格中的线程 ID 分配

假设我有一个带有 2D 网格的内核调用,如下所示: dim3 dimGrid(x, y);//实际值是什么并不重要dim3 dimBlock(blockSize, blockSize);我的内核>>(); 现在我读到多维网格只是为了简化编程——底层硬件只会使用一维线性缓存内存(除非你使用纹理内存,但这与这里无关). 我的问题是:在 warp 调度期间,线程将按什么 ..
发布时间:2022-01-10 16:08:09 C/C++开发

推力::序列 - 如何在每个 N 个元素之后增加步长

我正在使用 thrust::sequence(myvector.begin(), myvector.end(), 0, 1) 并获得良好的有序列表,例如: 0, 1, 2, 3, 4 我的问题是如何实现下面的这样一个列表(最好的方法?) 0, 0, 0, 1, 1, 1, 2, 2 ,2, 3, 3, 3 我知道怎么用函子来做,所以请不要试图用函子来回答.我想了解在 Thrust 中是 ..
发布时间:2022-01-10 16:08:02 其他开发

在 CUDA 中对矩阵的行求和(以行优先或列优先顺序存储)

我正在解决在 CUDA 中对矩阵的行求和的问题.我给出下面的例子. 假设有如下20 * 4数组: 1 2 3 44 1 2 33 4 1 2.1 2 3 4........2 1 3 4 将二维数组展平为一维数组(以行优先或列优先顺序)后,我需要将每个线程分配到不同的行并计算该行的成本. 例如 - 线程 1 应计算 1 2 3 4 的成本- 线程 2 应该计算 4 1 2 3 ..
发布时间:2022-01-10 16:07:31 其他开发