gpt4 book ai didi

c++ - 减少 GPU 和 CPU 之间的带宽(发送原始数据或先进行预计算)

转载 作者:搜寻专家 更新时间:2023-10-31 00:43:29 25 4
gpt4 key购买 nike

好的,所以我只是想找出减少 GPU 和 CPU 之间带宽的最佳方法。

粒子系统。

我是否应该在 CPU 上预先计算大部分内容并将其发送到 GPU,这包括位置、旋转、速度、alpha 和随机数等的计算。

或者我应该尽可能多地使用着色器并尽可能多地使用几何着色器。

我的问题是,我编写的这类应用程序必须将大量变量发送到着色器,例如,用户在运行时将选择发射器位置和速度以及更多。我不确定如何解决的事情是“如果用户想要一个随机速度并给出一个最小值和最大值以从中选择随机值,这个随机值是否应该在 CPU 上计算并发送作为 GPU 的单个值,还是应该将最小值和最大值都发送到 GPU 并让 GPU 中的随机函数生成器来执行?非常感谢任何关于减少带宽和优化的评论。

最佳答案

Should I be pre calculating most things on the CPU and sending it to the GPU this is includes stuff like positions, rotations, velocity, calculations for alpha and random numbers ect.

Or should I be doing as much as i can in the shaders and using the geometry shader as much as possible.

无法回答。花费过多的 CPU 时间和性能会下降。花费过多的 GPU 时间,性能也会下降。传输太多数据,性能会下降。所以,不要试图猜测(我不知道你在写什么应用程序,你的目标硬件是什么等等。见鬼,你甚至没有指定你的目标 api 和平台)测量/配置文件并选择最佳方法。 PROFILE 而不是试图猜测性能。有 AQTime 7 标准、gprof 和 NVPerfKit为此(加上许多其他工具)。

您的应用程序是否确实存在性能问题?如果您没有任何性能问题,则不要执行任何操作。你有没有实时每帧一千万个粒子?如果不是,则无需担心,因为 7 年前 600mhz 的 cpu 能够轻松处理数千个。另一方面,如果您拥有动态 3d 环境,并且粒子必须与其交互(反弹),那么在 GPU 上完成所有这些将会困难得多。

无论如何,对我来说,听起来您不必优化任何东西,也没有实际需要优化。所以最好的办法是专注于其他事情。

但是,无论如何,请确保您使用正确的方式来传输经常更新的“动态”数据。在 directX 中,这意味着使用 D3DLOCK_DISCARD|D3DLOCK_NOOVERWRITE 的动态只写顶点缓冲区。对于 OpenGL,这可能意味着使用 STREAM or DYNAMIC bufferdata with DRAW access .这应该足以避免重大的性能影响。

关于c++ - 减少 GPU 和 CPU 之间的带宽(发送原始数据或先进行预计算),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10503071/

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