gpgpu - cudamalloc 比 cudamemcpy 慢吗?

标签 gpgpu cuda

我正在处理一个需要时间效率的代码,因此为此目的使用 Cufft,但是当我尝试并行计算非常大数据的 fft 时,它比 cpu fftw 慢,这是我在找到每个的时间后发现的原因使用高精度计时代码的代码行是 cudamalloc 大约需要 0.983 秒,而其余代码行的时间约为 0.00xx 秒,这是预期的......

我已经浏览了一些相关的帖子,但根据他们

the main delay with GPUs is due to memory transfer not memory allocation



而且在其中一篇文章中写道

The very first call to any of the cuda library functions launches an initialisation subroutine



这种延迟的实际原因是什么......或者在代码执行中出现这种延迟是不正常的???

提前致谢

最佳答案

您看到的大延迟(接近 1 秒)是否可能是由于驱动程序初始化造成的? cudaMalloc 似乎相当长。还要检查您的驱动程序是否是最新的。

第一次内核启动的延迟可能是由于多种因素造成的:

  • 驱动初始化
  • PTX编译
  • 上下文创建

  • 第一个仅适用于您在没有 X 的 Linux 系统上运行的情况。在这种情况下,驱动程序仅在需要时加载,然后卸载。运行 nvidia-smi -pm 1由于 root 将以持久模式运行驱动程序以避免此类延迟,请查看 man nvidia-smi有关详细信息,请记住将其添加到 init 脚本中,因为它不会在重新启动后持续存在。

    第二个延迟是为系统中的特定设备架构编译 PTX。通过将您的设备架构(或架构,如果您想在不编译 PTX 的情况下支持多个架构)的二进制文件嵌入到可执行文件中,可以轻松避免这种情况。有关更多信息,请参阅 CUDA C 编程指南(可在 NVIDIA website 上获得),第 3.1.1.2 节讨论了 JIT 编译。

    第三点是上下文创建,这是不可避免的,但 NVIDIA 已竭尽全力降低成本。上下文创建涉及将可执行代码复制到设备、复制任何数据对象、设置内存系统等。

    关于gpgpu - cudamalloc 比 cudamemcpy 慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6684918/

    相关文章:

    c++ - GPU编程策略

    linux - __ldg 在某些情况下会导致执行时间变慢

    linux - 分析任意 CUDA 应用程序

    cuda - 具有映射内存、统一虚拟寻址和统一内存的 GPU 内存超额订阅

    assembly - PTX "bit bucket"寄存器

    ios - 是否可以通过 iOS 纹理缓存 API 从 OpenGL ES 帧缓冲区读取 float ?

    c++ - 从 CPU 到设备的结构 vector 的深度复制

    c - 将 3d 数组发送到 CUDA 内核

    CUDA 固定内存从设备刷新

    c++ - CUDA C++ : Expected an expression in kernel. cu 文件