CUDA 中的广义霍夫变换 - 如何加快分箱过程?

2024-04-19

正如标题所示,我正在对并行计算机视觉技术进行一些个人研究。使用 CUDA,我尝试实现 GPGPU 版本的霍夫变换。我遇到的唯一问题是在投票过程中。我调用atomicAdd() 来防止多个同时写入操作,但我似乎没有获得太多的性能效率。我在网上搜索过,但没有找到任何方法可以显着提高投票过程的性能。

如果您能提供有关投票过程的任何帮助,我们将不胜感激。


我不熟悉霍夫变换,因此发布一些伪代码可能会有所帮助。但如果您对投票感兴趣,您可以考虑使用 CUDA 投票内在指令来加速这一过程。

请注意,这需要 2.0 或更高版本的计算能力(Fermi 或更高版本)。

如果您想计算一个线程中的线程数block对于特定条件成立的情况,您可以使用__syncthreads_count().

bool condition = ...; // compute the condition
int blockCount = __syncthreads_count(condition); // must be in non-divergent code

如果您想计算一个线程中的线程数grid对于条件为 true 的情况,您可以执行以下操作atomicAdd

bool condition = ...; // compute the condition
int blockCount = __syncthreads_count(condition); // must be in non-divergent code
atomicAdd(totalCount, blockCount);

如果需要计算小于条件为 true 的块的组中的线程数,可以使用__ballot() and __popc()(人口统计)。

// get the count of threads within each warp for which the condition is true
bool condition = ...; // compute the condition in each thread
int warpCount = __popc(__ballot()); // see the CUDA programming guide for details

希望这可以帮助。

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

CUDA 中的广义霍夫变换 - 如何加快分箱过程? 的相关文章

  • Tensorflow:如何在模型训练过程中实时监控 GPU 性能?

    我是 Ubuntu 和 GPU 新手 最近在我们的实验室中使用了一台配备 Ubuntu 16 04 和 4 个 NVIDIA 1080ti GPU 的新 PC 该机还拥有i7 16核处理器 我有一些基本问题 为 GPU 安装 Tensorf
  • 如何将CUDA时钟周期转换为毫秒?

    我想用一些代码来测量时间within我的内核需要 我已经关注了这个问题 https stackoverflow com questions 11209228 timing different sections in cuda kernel连
  • “计算能力”是什么意思? CUDA?

    我是CUDA编程新手 对此了解不多 您能告诉我 CUDA 计算能力 是什么意思吗 当我在大学服务器上使用以下代码时 它向我显示了以下结果 for device 0 device lt deviceCount device cudaDevic
  • OpenCV GPU Farneback 光流在多线程中表现不佳

    我的应用程序使用 Opencv GPU 类gpu FarnebackOpticalFlow计算输入视频的一对连续帧之间的光流 为了加速该过程 我利用 OpenCV 的 TBB 支持在多线程中运行该方法 然而 多线程性能并不像单线程那样 为了
  • 使用 Python (OpenCV) 中的霍夫线变换从模拟时钟读取时间

    我一直在尝试编写一个程序 在图片上找到钟面 然后继续从中读取时间 定位效果相当好 但阅读时间 不是那么多 cv2 HoughLines 函数返回线条所在的角度 从图像顶部开始测量 以及它们与图像左上角的距离 经过一些调整后 我成功地说服我的
  • 多个进程可以共享一个 CUDA 上下文吗?

    这个问题是 Jason R 的后续问题comment https stackoverflow com questions 29964392 multiple cuda contexts for one device any sense co
  • cuda cpu功能-gpu内核重叠

    我在尝试开发以练习 CUDA 的 CUDA 应用程序时遇到并发问题 我想通过使用 cudaMemecpyAsync 和 CUDA 内核的异步行为来共享 GPU 和 CPU 之间的工作 但我无法成功重叠 CPU 执行和 GPU 执行 它与主机
  • 使用 OpenCL 或其他 GPGPU 框架在现代 x86 硬件上的 CPU 和 GPU 之间共享数据

    AMD Kaveri 的 hUMA 异构统一内存访问 和 Intel 第四代 CPU 证明了 CPU 和 GPU 硬件的不断统一 应该允许 CPU 和 GPU 之间进行无副本的数据共享 我想知道 最新的 OpenCL 或其他 GPGPU 框
  • MPI+CUDA 与纯 MPI 相比有何优势?

    加速应用程序的常用方法是使用 MPI 或更高级别的库 例如在幕后使用 MPI 的 PETSc 并行化应用程序 然而 现在每个人似乎都对使用 CUDA 来并行化他们的应用程序或使用 MPI 和 CUDA 的混合来解决更雄心勃勃 更大的问题感兴
  • 如何确定完整的 CUDA 版本 + 颠覆版本?

    Linux 上的 CUDA 发行版曾经有一个名为version txt例如 CUDA Version 10 2 89 这非常有用 但是 从 CUDA 11 1 开始 该文件不再存在 我如何在 Linux 上通过命令行确定并检查 path t
  • CUDA Visual Studio 2010 Express 构建错误

    我正在尝试在 64 位 Windows 7 上使用 Visual Studio 2010 Express 在 Windows 上开始 CUDA 编程 我花了一段时间来设置环境 然后我刚刚编写了我的第一个程序 helloWorld cu 目前
  • CUDA 估计 2D 网格数据的每块线程数和块数

    首先我要说的是 我已经仔细阅读了所有类似的问题 确定每个块的线程和每个网格的块 https stackoverflow com questions 4391162 cuda determining threads per block blo
  • Nvcc 的版本与 CUDA 不同

    我安装了 cuda 7 但是当我点击 nvcc version 时 它打印出 6 5 我想在 GTX 960 卡上安装 Theano 库 但它需要 nvcc 7 0 我尝试重新安装cuda 但它没有更新nvcc 当我运行 apt get i
  • 如何在 CUDA 中执行多个矩阵乘法?

    我有一个方阵数组int M 10 以便M i 定位第一个元素i th 矩阵 我想将所有矩阵相乘M i 通过另一个矩阵N 这样我就收到了方阵数组int P 10 作为输出 我看到有不同的可能性 分配不同元素的计算M i 到不同的线程 例如 我
  • Yocto for Nvidia Jetson 由于 GCC 7 而失败 - 无法计算目标文件的后缀

    我正在尝试将 Yocto 与 meta tegra 一起使用 https github com madisongh meta tegra https github com madisongh meta tegra 为 Nvidia Jets
  • 加速Cuda程序

    要更改哪一部分来加速此代码 代码到底在做什么 global void mat Matrix a Matrix b int tempData new int 2 tempData 0 threadIdx x tempData 1 blockI
  • “分页文件太小,无法完成此操作”尝试训练 YOLOv5 对象检测模型时出错

    我有大约 50000 个图像和注释文件用于训练 YOLOv5 对象检测模型 我在另一台计算机上仅使用 CPU 训练模型没有问题 但需要太长时间 因此我需要 GPU 训练 我的问题是 当我尝试使用 GPU 进行训练时 我不断收到此错误 OSE
  • 使用 CUDA 进行逐元素向量乘法

    我已经在 CUDA 中构建了一个基本内核来执行逐元素两个复向量的向量 向量乘法 内核代码插入如下 multiplyElementwise 它工作正常 但由于我注意到其他看似简单的操作 如缩放向量 在 CUBLAS 或 CULA 等库中进行了
  • NV_path_rendering替代方案[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我刚刚观看了 Siggraph 2012 的一个非常令人印象深刻的演示 http nvidia fullviewmedia com sig
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知

随机推荐