Интересует два вопроса:
1. Как измерить скорость выполнения GLSL кода и особенно отдельной команды аппаратными средствами типа каких то встроенных команд, чтобы узнать за сколько тактов/циклов они выполняются? Какие есть способы?
2. Где можно посмотреть данные о скоростях GLSL инструкций на разных gpu ?
Я нашел только это: http://www.fractalforums.com/programming/shader-function-or-instruction-cost-(performance)/
Phisix
> Какие есть способы?
GPU ShaderAnalyzer
> Где можно посмотреть данные о скоростях GLSL инструкций на разных gpu ?
Нигде. Сильно зависит как от gpu, так и от драйверов, т.к. GLSL компилируется в LLVM подобный код, который потом еще транслируется в инструкции. На обоих этапах есть оптимизации, которые могут меняться даже от версии драйверов.
MrShoor
Спасибо!
Может все-таки есть какие то данные от производителей gpu? Вот, к прирему, тут указаны следующие данные ( https://www.khronos.org/assets/uploads/developers/library/2015-gt… GTC_Mar15.pdf ):
32 basic math units (aka cuda cores)
mad, mul, add, mov, min, max, abs, sub, neg, slt, sge, etc.
Cost: 1 cycle per instruction
8 special function units
sin, cos, 1/x, sqrt, pow, log, exp, etc.
Cost: 4 cycles per instruction
Вот это кол-во циклов на выполнение одной команды разве зависит от драйверов?
Phisix
> 2. Где можно посмотреть данные о скоростях GLSL инструкций на разных gpu ?
GLSL нету инструкций
> Вот это кол-во циклов на выполнение одной команды разве зависит от драйверов?
Драйвер может перегруппировать код и выполнятся шейдер будет уже за иное число клоков
Phisix
> Вот это кол-во циклов на выполнение одной команды разве зависит от драйверов?
Может зависеть от железа, ну и драйвер может сделать оптимизацию, что этих инструкций вообще не появится.
Понятно.
Тема в архиве.