Branchless Programming: Difference between revisions

 
(4 intermediate revisions by the same user not shown)
Line 57: Line 57:
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
x = x + (20 * (age > 10) - 10);
x = x + (20 * (age > 10) - 10);
# or
// or
y = age > 10;
y = age > 10;
x = x + 10 * y - 10 * (1-y);
x = x + 10 * y - 10 * !y;
</syntaxhighlight>
</syntaxhighlight>


Line 68: Line 68:
}
}
</syntaxhighlight>
</syntaxhighlight>
you can just write <code>x += age>10</code>.
you can just write <code>x += age>10;</code>.


These are micro optimizations but they could be useful for speeding up GPU shaders in some cases.
These are micro optimizations but they could be useful for speeding up GPU shaders in some cases.
Not that in high-level programming languages, these tricks can actually slow down your code.
In high-level programming languages such as Python, these tricks can actually slow down your code<ref name="branchless-slower-python">https://stackoverflow.com/questions/72118249/why-are-the-branchless-and-built-in-functions-slower-in-python</ref>.


==Resources==
==Resources==
* [https://francescocirillo.com/pages/anti-if-campaign Anti If Campaign]
* [https://francescocirillo.com/pages/anti-if-campaign Anti If Campaign]
* [https://code.joejag.com/2016/anti-if-the-missing-patterns.html Anti-If: The missing pattersn]
* [https://code.joejag.com/2016/anti-if-the-missing-patterns.html Anti-If: The missing patterns]
 
==References==
<references />