<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Low Latency on Abhyuday Pundir</title><link>https://abhyuday-fr.github.io/low-latency/</link><description>Recent content in Low Latency on Abhyuday Pundir</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 09 Sep 2026 10:58:15 +0530</lastBuildDate><atom:link href="https://abhyuday-fr.github.io/low-latency/index.xml" rel="self" type="application/rss+xml"/><item><title>Branchless &amp; Cache friendly programming</title><link>https://abhyuday-fr.github.io/low-latency/branchless_n_cache_frndly/</link><pubDate>Wed, 09 Sep 2026 10:58:15 +0530</pubDate><guid>https://abhyuday-fr.github.io/low-latency/branchless_n_cache_frndly/</guid><description>&lt;p&gt;&lt;a href="https://www.sciencedirect.com/topics/computer-science/branch-prediction"&gt;branch prediction&lt;/a&gt; and &lt;a href="https://www.sciencedirect.com/topics/computer-science/spatial-locality"&gt;spacial locality&lt;/a&gt; deserve a post of their own but I don&amp;rsquo;t intend to explain &amp;ldquo;what&amp;rdquo; they are in details so you can refer the links later to understand about them in details.&lt;/p&gt;&#10;&lt;h2 id="branchless-programming"&gt;Branchless Programming&lt;/h2&gt;&#10;&lt;h3 id="1-the-boolean-arithmetic-trick"&gt;1. The Boolean Arithmetic Trick&lt;/h3&gt;&#10;&lt;p&gt;In C++, a boolean expression evaluates to exactly 1 (true) or 0 (false). You can use this to do math without ever writing an if statement.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;The branching way (bad for prediction)&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>Strictly Align Memory Address</title><link>https://abhyuday-fr.github.io/low-latency/align-mem-address/</link><pubDate>Mon, 07 Sep 2026 11:11:55 +0530</pubDate><guid>https://abhyuday-fr.github.io/low-latency/align-mem-address/</guid><description>&lt;h2 id="main-idea"&gt;Main Idea&lt;/h2&gt;&#10;&lt;p&gt;This is a very common technique in systems programming and memory allocators.&#10;Consider these macros below&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#define ALIGN(sizeof(void*))&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#define ALIGN_UP_POW2(x, align) (((x) + (align) - 1) &amp;amp; ~((align) - 1)) &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;hellip; further somewhere in program we have a custom allocator (like arena, free-list memory pools, etc.).&#10;Let&amp;rsquo;s just take a simple variable &lt;code&gt;x&lt;/code&gt; and see what happens to it.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;uint64_t&lt;/span&gt; x &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ALIGN_UP_POW2&lt;/span&gt;(x, ALIGN);&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Maybe you&amp;rsquo;ve seen all this for the first time and&lt;/p&gt;</description></item><item><title>Packing &amp; Unpacking two integers in one</title><link>https://abhyuday-fr.github.io/low-latency/packing-n-unpacking/</link><pubDate>Sat, 29 Aug 2026 09:37:17 +0530</pubDate><guid>https://abhyuday-fr.github.io/low-latency/packing-n-unpacking/</guid><description>&lt;h2 id="simple-example"&gt;Simple Example&lt;/h2&gt;&#10;&lt;p&gt;We will look at simple example of&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;cstdint&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;cstdlib&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;uint16_t&lt;/span&gt; first{};&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;uint16_t&lt;/span&gt; second{};&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; std&lt;span style="color:#f92672"&gt;::&lt;/span&gt;cout &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;enter first and second values of unsigned integers &amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;respectively (max is &amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; UINT16_MAX &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;)&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; std&lt;span style="color:#f92672"&gt;::&lt;/span&gt;cin &lt;span style="color:#f92672"&gt;&amp;gt;&amp;gt;&lt;/span&gt; first &lt;span style="color:#f92672"&gt;&amp;gt;&amp;gt;&lt;/span&gt; second;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;uint32_t&lt;/span&gt; data{};&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; data &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ((&lt;span style="color:#66d9ef"&gt;uint16_t&lt;/span&gt;)first &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;) &lt;span style="color:#f92672"&gt;|&lt;/span&gt; ((&lt;span style="color:#66d9ef"&gt;uint16_t&lt;/span&gt;)second);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; std&lt;span style="color:#f92672"&gt;::&lt;/span&gt;cout &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;First value is &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; (data &lt;span style="color:#f92672"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;) &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; std&lt;span style="color:#f92672"&gt;::&lt;/span&gt;cout &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Second value is &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; (data &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0xFFFF&lt;/span&gt;) &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; EXIT_SUCCESS;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="packing"&gt;Packing&lt;/h2&gt;&#10;&lt;p&gt;consider this line&amp;hellip;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;uint32_t&lt;/span&gt; data &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ((&lt;span style="color:#66d9ef"&gt;uint16_t&lt;/span&gt;)first &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;) &lt;span style="color:#f92672"&gt;|&lt;/span&gt; ((&lt;span style="color:#66d9ef"&gt;uint16_t&lt;/span&gt;)second);&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To get a big picture of what&amp;rsquo;s happening, let&amp;rsquo;s take an example&lt;/p&gt;</description></item><item><title>Intrusive Data Type</title><link>https://abhyuday-fr.github.io/low-latency/intrusive-data/</link><pubDate>Mon, 17 Aug 2026 10:49:05 +0530</pubDate><guid>https://abhyuday-fr.github.io/low-latency/intrusive-data/</guid><description>&lt;h2 id="what-is-an-intrusive-data-type"&gt;What is an Intrusive Data Type?&lt;/h2&gt;&#10;&lt;p&gt;Embedding “dataless” structures into the data type is called intrusive data structures, because you need to modify your data type to use it.&#10;Now that the data structure is free of data, to get the data back, just offset the address of the struct.&lt;/p&gt;&#10;&lt;p&gt;A normal linked list of the data would look like this&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ┌──┐ ┌──┐&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; │ ▼ │ ▼&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;┌Node──┐ │ ┌Node──┐ │ ┌Node──┐&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│┌────┐│ │ │┌────┐│ │ │┌────┐│&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;││next├┼─┘ ││next├┼─┘ ││next├┼──▶ …&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│├────┤│ │├────┤│ │├────┤│&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;││ptr ││ ││ptr ││ ││ptr ││&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│└─┬──┘│ │└─┬──┘│ │└─┬──┘│&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└──┼───┘ └──┼───┘ └──┼───┘&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ▼ ▼ ▼&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ┌────┐ ┌────┐ ┌────┐&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; │data│ │data│ │data│&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └────┘ └────┘ └────┘&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;but an intrusive linked list of all the data would look like&lt;/p&gt;</description></item><item><title>Type Punning</title><link>https://abhyuday-fr.github.io/low-latency/type-punning/</link><pubDate>Sun, 09 Aug 2026 21:53:36 +0530</pubDate><guid>https://abhyuday-fr.github.io/low-latency/type-punning/</guid><description>&lt;h2 id="what-is-type-punning"&gt;What is Type Punning?&lt;/h2&gt;&#10;&lt;p&gt;Type punning is a low-level programming technique in C and C++ that subverts the type system to reinterpret the bit representation of an object of one type as a different, incompatible type.&#10;This allows developers to access the underlying binary data directly, bypassing standard type-safe conversions, which is commonly used for performance optimization, serialization, deserialization, and hardware interaction.&lt;/p&gt;&#10;&lt;h2 id="look-at-this-simple-example"&gt;Look at this simple example&lt;/h2&gt;&#10;&lt;p&gt;I&amp;rsquo;ll just explain with the example directly, look at this example&lt;/p&gt;</description></item></channel></rss>