Я недавно играл с вычислительными шейдерами, и я пытаюсь определить наиболее оптимальный способ настройки моих [numthreads (x, y, z)] и диспетчерских вызовов. Мое демо-окно - 800x600, и я запускаю 1 поток на пиксель. Я выполняю 2D текстурные модификации - ничего слишком тяжелого.DirectCompute оптимальная установка numthreads
Моя первая попытка была указать
[numthreads(32,32,1)]
My Dispatch() звонки всегда
Dispatch(ceil(screenWidth/numThreads.x),ceil(screenHeight/numThreads.y),1)
Таким образом, для первого экземпляра, который будет
Dispatch(25,19,1)
Это побежал на 25 -26 кадров в секунду. Затем я уменьшился до [numthreads (4,4,1)], который работал со скоростью 16 кадров в секунду. Увеличение этого до [numthreads (16,16,1)] привело к хорошим результатам около 30 кадров в секунду. Играя с номером группы нитей Y [numthreads (16,8,1)], удалось нажать ее до 32 кадров в секунду.
Мой вопрос в том, есть ли оптимальный способ определить номер потока, чтобы я мог эффективно использовать GPU или это просто хорошая пробная версия и ошибка?
Какие параметры компиляции я должен установить для того, чтобы получить выход сборки FXC? Я попробовал/Fc, но ничего в выведенном файле не дает мне информацию, которую вы описали. Я использую http://msdn.microsoft.com/en-us/library/windows/desktop/bb509709(v=vs.85).aspx для справки. – Valentin
Я просто скомпилирую его только с профилем (/ T), вы можете увидеть код сборки. dcl_temps сообщает вам, что счетчик регистров и операторы dcl_tgsm_ * сообщают вам размер общей памяти. – Lucas