gpt4 book ai didi

performance - 优化 GPU 利用率处理离散图像的技术

转载 作者:行者123 更新时间:2023-12-04 03:20:47 25 4
gpt4 key购买 nike

我有一台服务器正在对图像应用滤镜(作为 OpenGL 着色器实现)。它们主要是直接颜色映射,但偶尔也有模糊和其他卷积。

源图像是各种尺寸的 PNG 和 JPG,例如100x100 像素到 16,384x16,384(我的 GPU 的纹理大小)。

管道是:

Decode image to RGBA (CPU)
|
V
Load texture to GPU
|
V
Apply shader (GPU)
|
V
Unload to CPU memory
|
V
Encode to PNG (CPU)

平均 GPU 时间约为 0.75 毫秒加载,1.5 毫秒卸载和 1.5 毫秒处理纹理。

我有多个 CPU 线程解码 PNG 和 JPG 以向 GPU 提供连续的工作流。

挑战在于 watch -n 0.1 nvidia-smi 报告 GPU 利用率主要在 0% - 1% 左右,周期性地飙升至 18%。

我真的很想从 GPU 中获得更多值(value),即我希望它的负载至少达到 50% 左右。我的问题:

  • nvidia-smi 是否合理表示了 GPU 的繁忙程度?例如,它是否包括加载和卸载纹理的时间?如果没有,是否有我可以使用的更好的指标。

  • 假设是这样,并且 GPU 无所事事,是否有任何易于理解的架构来提高吞吐量?我考虑过将多个图像平铺成一个大纹理,但感觉它会耗尽 CPU 使用率而不是 GPU。

  • 有什么办法可以在 GPU 处理上一张图像时将下一张图像加载到 GPU 纹理内存?

最佳答案

采样 nvidia-smi 是一种非常糟糕的计算利用率的方法。使用 Nvidia Visual Profiler (我发现这最容易使用)或 Nvidia Nsight以真实了解您的性能和瓶颈。

如果没有看到您的代码并且没有更好地理解瓶颈是什么,很难说如何提高性能。

  • 你说你有多个 CPU 线程,但你有多个 CUDA streams 吗?所以你可以隐藏数据传输的延迟?这允许您在 GPU 处理时将数据加载到 GPU。
  • 你确定你有线程而不是进程吗?线程可能会减少开销。
  • 在 GPU 上应用单个着色器几乎不需要时间,因此您的管道最终可能会受到硬盘驱动器速度或总线速度的限制。您是否查看过此规范、测量图像大小并找到最大处理能力的理论值?您的 GPU 可能会花费大量时间处于空闲状态,除非您在其上进行大量复杂的数学运算。

关于performance - 优化 GPU 利用率处理离散图像的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58739943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com