【发布时间】:2014-01-03 20:40:35
【问题描述】:
我在我的程序中遇到了 CUDA 的性能问题。同一任务(对齐 3D 点云)所花费的时间并不稳定,有时可能会高出 30 倍。
我使用 Qt 作为主界面,它用我的工作类初始化一个线程。此类的目的是在我的数据上启动 cuda 计算并发送 Qt 信号,这些信号将被 GUI 捕获以更新 OpenGL 小部件的显示。
我通过在我的 OpenGL 小部件中删除 QBasicTimer 解决了我的性能问题,它的使用方式如下:
void SWGLCloudWidget::initializeGL()
{
// ...
m_oTimer->start(5, this);
}
它根本没有用,但我在重构后忘记删除它。 在 Qt 文档中它说:
QBasicTimer 类为对象提供定时器事件。
这是 Qt 内部使用的快速、轻量级和低级的类。如果您想在应用程序中使用计时器,我们建议使用更高级别的 QTimer 类而不是此类。请注意,此计时器是一个重复计时器,它将发送后续计时器事件>除非调用了 stop() 函数。
出于好奇,我想知道这个低级调用如何导致 CUDA 如此混乱。
【问题讨论】:
-
你超载了
void QObject::timerEvent ( QTimerEvent * event )吗? -
是的,它只包含一个 updateGl 调用。所以我猜刷新率是为了让 cuda 拥有 GPU 的所有权?
-
我对定时器的其他值进行了一些测试,在 20 毫秒以下 cuda 开始不稳定。所以 gl 刷新率是问题所在,谢谢!
-
np,你正在做大部分工作。它是哪个版本的 Qt?如果你保持 5 毫秒但调用
update()会发生什么?? -
我有 4.8 使用 QGLWidget 的遗产。它做同样的事情,更新似乎以相同的刷新率调用 updateGL