This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM67A:使用 Vulkan API 和 GLSL 提供 GPU 缓冲器传输的优化模式?

Guru**** 2448780 points
Other Parts Discussed in Thread: BEAGLEY-AI

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1543795/am67a-optimized-mode-for-gpu-buffer-transfer-available-using-vulkan-api-and-glsl

器件型号:AM67A
Thread 中讨论的其他器件:BeagleY-AI

工具/软件:

您好: 

我们打算使用 GPU 着色器程序来减轻处理器中的图像处理例程负载。 
但是、我们观察到在提供 GPU 输入数据和检索 GPU 计算结果时、传输时间相对较高。
下面是我在第一次尝试用工作包填充渲染管道时使用的 Vulkan API 代码指令。 
这是在 GPU 上提供主机端存储器(然后在 GPU 上进行处理)的标准过程
使用着色器程序:

Vulkan_device_memory< uint32_t >* interleaved_rgb_input_image;

Vulkan_device_memory< uint32_t >* interleaved_rgb_internal_image;

vk::CommandBuffer command_puffer;

vk::BufferCopy region(

 0、

 0、

 interleaved_rgb_input_image->get_number_of_elements ()* sizeof ( uint32_t ));

//发出命令将主机端存储器传输到 GPU 可访问的存储器区域

command_buffer.copyBuffer(

 Interleaved_rgb_input_image->get_buffer()、

 Interleaved_RGB_INTERNAL_image->get_buffer()、

 1、

 区域 (&R);

 

//…  发出更多命令、调用着色器程序等

// 触发 GPU 上的编程命令序列

command_pBuffer.dispatch ( group_count_x、group_count_y、1 );


我不希望通用 API 调用导致使用 DMA 机制。
您能否提供一个示例、说明需要哪些命令
使用适用于 DMA 的存储器区域?


提前感谢和问候
Richard Arndt
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:  

    感谢您提供的所有详细信息。 您能先告诉我您使用的是什么 HLOS 和 SDK 版本吗?

    此致、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我们使用 Debian 12(“Bookworm")“)作为基于 TI 内核 (v6.12.33) 的高级操作系统。 SDK 的版本号为 11.00。

    你好

    Richard Arndt  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Richard:

    您使用的是 TI EVM 还是定制电路板?

    BR、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我们使用的是 BeagleY-AI 板。

    你好

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Richard:  

    我不太熟悉 debian 平台上的这个问题、但我将与我的开发团队讨论、并在接下来的 1-2 天内为您收集和更新。

    谢谢、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Richard:  

    您看到的转账时间是什么数字? 我还想知道您与什么基准进行比较。 我目前正在努力了解我们是否有类似的用例、我们可以 在 CTS(一致性测试套件)中罕见。  

    谢谢、
    Sarabesh S.  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Sarabesh:

    对于 800 万像素图像(总大小为 8MB)、我们将输入图像传输到 GPU 并将结果从 GPU 返回到主机的开销为~ 10 毫秒。 是否有办法分配 GPU 和 CPU 域之间共享的存储器以消除这种额外的延迟?

    你好

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Richard:  

    感谢您提供的信息。 是的、GPU 和 CPU 属于相同的统一存储器架构。 有几种方法可以将零复制与 EGL/OpenGLES、OpenCL 或 Vulkan 一起使用。 我确信实现细节、但 它们是 Khronos 标准 API 和扩展、因此请参考相应的文档。  

    谢谢您、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sarabesh:

    感谢您提供有关统一内存架构的提示和说明。 在对 VK::MemoryPropertyFlags 和 VK::BufferUsageFlags 进行深入检查后,我设法解决了这个问题。 我现在观察到了~ 0.6 毫秒的恒定传输延迟、与输入和输出数据大小无关。 这就是我所期望的。

    你好

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很高兴听到 Richard 的讲话。 我会把它关闭。

    谢谢、
    Sarabesh S.