gpt4 book ai didi

c++ - glFinish() 与 glFenceSync() + glClientWaitSync()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:23 26 4
gpt4 key购买 nike

运行有区别吗

glFinish()

正在运行

glFenceSync(...)
glClientWaitSync(...)

超时时间长吗?

我正在尝试做的事情:我运行一个 OpenGL 命令管道,我想计算每个命令需要多长时间。如果没有上述任何命令,所有内容都将被流水线化/缓冲,看起来好像最后一条命令占用了所有处理时间。

timer start

Run Opengl part 1

sync / glFinish
timer measure

Run Opengl part 2

sync / glFinish
timer measure

...

所以我想弄清楚如何最好地衡量各个部分的“速度”,同时又不会对整体运行时间产生太大影响。

最佳答案

您提到的所有选项都会影响应用程序的性能,因为它们会使管道停止。在 OpenGL 中测量时间的现代方法是使用计时器查询:您告诉 OpenGL 它应该在 GPU 上执行查询时保存时间戳,因此不需要 GPU 和 CPU 之间的同步。例如,代码可能如下所示:

GLuint64 startTime, stopTime;
unsigned int queryID[2];

// generate two queries
glGenQueries(2, queryID);
...
// issue the first query
// Records the time only after all previous
// commands have been completed
glQueryCounter(queryID[0], GL_TIMESTAMP);

// call a sequence of OpenGL commands
...
// issue the second query
// records the time when the sequence of OpenGL
// commands has been fully executed
glQueryCounter(queryID[1], GL_TIMESTAMP);
...

// get query results
// (automatically blocks until results are available)
glGetQueryObjectui64v(queryID[0], GL_QUERY_RESULT, &startTime);
glGetQueryObjectui64v(queryID[1], GL_QUERY_RESULT, &stopTime);

printf("Time spent on the GPU: %f ms\n", (stopTime - startTime) / 1000000.0);

(代码取自 Lighthouse3d.com )。

另一种选择是将 glBeginQueryGL_TIME_ELAPSED 参数一起使用,链接文章中也对此进行了描述。

关于c++ - glFinish() 与 glFenceSync() + glClientWaitSync(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34265366/

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