Если вы пишете какой-то SIMD-код, который будет выполняться другой программой, всегда ли выгодно избавиться от ветвления для повышения производительности? Я слышал, что даже выполнение дополнительных операций только для того, чтобы избежать операторов if/else
и т. д., все равно намного быстрее.
Я спрашиваю об этом, потому что у меня есть несколько ответвлений, которые я делаю в основном так:
// axis; x=0, y=1, z=2
float p, q;
if (axis == 0)
{
p = point.y;
q = point.z;
}
else if (axis == 1)
{
p = point.x;
q = point.z;
}
else if (axis == 2)
{
p = point.x;
q = point.y;
}
Могу ли я избежать такого ветвления с помощью какого-нибудь хитрого трюка?
axis
выглядит случайным, то стоит их оптимизировать. Если вы можете встроить его в код, который устанавливаетaxis
, тогда это не будет иметь значения, поскольку вы все равно не получите ветки. - person David Schwartz   schedule 18.01.2012axis
. Встроенная оболочка должна исключить ветвь и вызвать правильную функцию без ветвей. - person David Schwartz   schedule 18.01.2012