Как работает зажим в glsl и opencl?он использует создание веток?и я должен избегать его использования? - PullRequest
0 голосов
/ 09 октября 2018

И GLSL, и OpenCL имеют функцию зажима, которая фиксирует число к вставленной верхней или нижней границе, если значение превышает границы.Если бы я попытался реализовать что-то подобное в C ++, это выглядело бы как следующий код:

if(i < min){
     i=min;
}else if(i > max){
     i=max;
}

Однако это имеет несколько путей ветвления, которые, как я понимаю, могут немного замедлить GPU, как и большинство других.из них придется выполнять все ветви.

Так как же работает зажим GLSL / OpenCL и если он использует ветви, вы порекомендуете избегать его, если это возможно?

1 Ответ

0 голосов
/ 09 октября 2018

Если вы посмотрите соответствующую документацию по архитектурам набора команд графического процессора, например, здесь и здесь , вы обнаружите, что графические процессоры обычно имеют встроенную поддержку команд min и max.Например, условные обозначения для графических процессоров NVIDIA, даже если их не было, основаны на предикатном выполнении.Любой разумный компилятор превратит ваш пример выше в условные присваивания, а не в полноценную ветвь ( пример здесь ). Даже на процессоре…

...