GPU数据传输队列选择:简化代码逻辑的合理性问询
GPU数据传输队列适配的代码简化与疑问解答
关于同队列族独立队列的收益假设
你的“同队列族的独立队列无实际收益”假设不完全绝对成立,但在多数普通场景下可以接受:
- 同队列族的独立队列(比如图形队列族下的独立传输队列)共享同一硬件调度资源,极端性能场景下,并行提交传输与图形任务时,独立队列能避免单个队列的任务阻塞,带来微小的性能提升;
- 但对于绝大多数消费级应用,这种收益远不如代码简洁性带来的维护价值,所以你的简化逻辑在多数场景下是合理的。
无专用传输队列时是否选用支持传输的计算队列
建议优先选用支持传输的计算队列:
- 计算队列与图形队列通常对应独立的硬件单元,将传输任务放到计算队列,可让数据传输与图形渲染并行执行,避免占用图形队列资源,在加载资源同时渲染UI等场景下,能带来明显的性能提升;
- 即使计算队列有一定负载,只要硬件支持并行调度,这种分离依然能优化整体资源利用率。
原逻辑与简化逻辑对比
原多分支判断逻辑
if HAS_DEDICATED_TRANSFER_QUEUE_FAMILY code path 1 else if HAS_SEPARATE_TRANSFER_QUEUE_ON_ANOTHER_FAMILY code path 2 else if HAS_SEPARATE_TRANSFER_QUEUE_ON_THE GRAPHICS FAMILY code path 3 else Operate on the assumption that you'll be submitting transfers on the same queue.
简化后的逻辑
if HAS_DEDICATED_TRANSFER_QUEUE_FAMILY code path 1 else Assume you submit transfers on the single graphics queue.
内容的提问来源于stack exchange,提问作者Zebrafish
相关产品推荐
相关产品推荐

