Хорошо. Я изучил эту проблему в течение нескольких дней, поэтому позвольте мне перейти то, что я знаю до сих пор, что заставляет меня думать, что это может быть проблемой с драйвером NVidia, а не с моим кодом.
В основном моя игра начинает заикаться после запуска нескольких секунд (случайные кадры занимают 70 мс вместо 16 мс, на регулярной основе). Это ТОЛЬКО случается, если на панели управления Nvidia (последние версии драйверов, окна 10) включен параметр "Резьбовая оптимизация". К сожалению, этот параметр включен по умолчанию, и мне бы не хотелось, чтобы люди настраивали свои настройки, чтобы получить приятный опыт.
-
В игре нет интенсивного процессора или GPU (2 мс без использования vsync). Он не вызывает какие-либо функции openGL, которые должны синхронизировать данные, а также не передавать потоки каких-либо буферов или считывать данные с графического процессора или чего-либо еще. О простейшем возможном рендерере.
-
Проблема всегда заключалась в том, что она только начинала становиться заметной, когда я добавлял в fmod для аудио. fmod не является причиной этого (более поздний пост)
-
Попытка отладить проблему с NVidia Nsight заставила проблему уйти. "Начать сбор данных" мгновенно заставляет заикаться. Здесь нет кубиков.
-
В профилировщике много времени процессора затрачивается на "nvoglv32.dll". Этот процесс запускается только в том случае, если включена оптимизация потоков. Я подозреваю, что это проблема синхронизации, поэтому я отлаживаю визуальную студию Concurrency Viewer.
-
Исследуя эти блоки времени процессора в потоке nvidia, самая ранняя именованная функция, которую я могу получить в своем стеке, - " CreateToolhelp32Snapshot" за которым следует много времени, проведенного в Thread32Next. Я заметил Thread32Next в профилировщике, когда смотрел на процессор раньше, так что это похоже на то, что я на правильном пути.
-
Итак, похоже, что периодически драйвер nvidia захватывает моментальный снимок всего процесса по какой-то причине? Что может быть причиной, почему она это делает, и как мне ее остановить?
-
Также это объясняет, почему проблема стала заметной, когда я добавил в fmod, потому что ее захватывающая информация для всех потоков процессов, а fmod порождает много потоков.
-
Любая помощь? Это просто ошибка в драйвере nvidia или есть что-то, что я могу сделать, чтобы исправить это, говоря другим людям, чтобы отключить Threaded "Оптимизация"?
edit 1: та же проблема возникает и с текущими драйверами nvidia на моем ноутбуке. Так что я не сумасшедший
edit 2: эта же проблема возникает в версии 362 (предыдущая основная версия) драйвера nvidia