{"id":6,"date":"2008-09-15T12:26:00","date_gmt":"2008-09-15T02:26:00","guid":{"rendered":"http:\/\/brnz.org\/hbr\/?p=6"},"modified":"2009-05-22T14:35:37","modified_gmt":"2009-05-22T04:35:37","slug":"a-little-bit-of-__attribute__always_inline-goes-a-long-way","status":"publish","type":"post","link":"https:\/\/brnz.org\/hbr\/?p=6","title":{"rendered":"A little bit of __attribute__((always_inline)) goes a long way"},"content":{"rendered":"<p>Previously, with my SPU programs, I&#8217;ve been relying on heavy, gratuitous use of the param option to set various inlining thresholds absurdly high &#8211; the result being large programs that take a long time to compile, but run quite fast.<\/p>\n<p>The alternative is a little bit more precision &#8211; working out where the compiler isn&#8217;t inlining something that would be beneficial to be inlined (i.e. handling sw cache hits) and forcing it to do so using always_inline.<\/p>\n<p>The result?  Faster compilation, smaller programs and (so far) programs that are as fast or faster &#8211; the compiler generally knows what it&#8217;s doing when it comes to inlining, there&#8217;s just some silly little, very hot, cache routines that it doesn&#8217;t handle well.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Previously, with my SPU programs, I&#8217;ve been relying on heavy, gratuitous use of the param option to set various inlining thresholds absurdly high &#8211; the result being large programs that take a long time to compile, but run quite fast. The alternative is a little bit more precision &#8211; working out where the compiler isn&#8217;t &hellip; <a href=\"https:\/\/brnz.org\/hbr\/?p=6\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;A little bit of __attribute__((always_inline)) goes a long way&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/posts\/6"}],"collection":[{"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6"}],"version-history":[{"count":2,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/posts\/6\/revisions"}],"predecessor-version":[{"id":130,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/posts\/6\/revisions\/130"}],"wp:attachment":[{"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}