{"id":3870,"date":"2026-03-01T03:46:52","date_gmt":"2026-03-01T03:46:52","guid":{"rendered":"https:\/\/blogs.qub.ac.uk\/dipsa\/?p=3870"},"modified":"2026-05-01T05:13:43","modified_gmt":"2026-05-01T04:13:43","slug":"introducing-urja","status":"publish","type":"post","link":"https:\/\/blogs.qub.ac.uk\/dipsa\/introducing-urja\/","title":{"rendered":"Introducing URJA"},"content":{"rendered":"\n<p>In the world of high-performance computing, we often prioritise speed above all else. But as our applications grow more complex, they consume massive amounts of power\u2014often more than they actually need. To bridge the gap between peak performance and energy efficiency, I\u2019ve developed <strong>URJA<\/strong>: The Unified Runtime Job Analyser<strong>.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What is URJA?<\/h3>\n\n\n\n<p>At its core, URJA is a lightweight &#8220;observer&#8221; for your software. Imagine a fitness tracker for your code; it monitors how hard your CPU is working and how much &#8220;fuel&#8221; (energy) it\u2019s burning in real-time. What makes URJA special is that it requires <strong>zero code changes<\/strong>. You don\u2019t have to rewrite your application or dive into complex APIs; you simply run your program alongside URJA, and it handles the rest.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How It Works<\/h3>\n\n\n\n<p>URJA uses a technique called <code>LD_PRELOAD<\/code> to &#8220;hook&#8221; into your program as it starts. Once active, it tracks two vital metrics:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Hardware Performance:<\/strong> It measures low-level events like L3 cache misses\u2014essentially checking if the processor is waiting around for data.<\/li>\n\n\n\n<li><strong>Energy Consumption:<\/strong> It reads power usage directly from the hardware (via Intel RAPL), giving you a clear picture of your energy footprint.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Smart Power Management<\/h3>\n\n\n\n<p>Monitoring is only half the story. URJA includes built-in &#8220;Controllers&#8221; that act like an automated thermostat for your CPU.<\/p>\n\n\n\n<p>If URJA detects that your program is bottlenecked by memory (meaning a high frequency won&#8217;t actually speed things up), it automatically lowers the CPU&#8217;s clock speed. This reduces power consumption and heat without significantly impacting performance. We offer two modes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Naive:<\/strong> A simple high\/low switch based on a single performance threshold.<\/li>\n\n\n\n<li><strong>Trident:<\/strong> A more sophisticated three-tier system (Min, Mid, Max) for finer control.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Why It Matters<\/h3>\n\n\n\n<p>Whether you are a researcher looking to profile multithreaded apps or a developer aiming to make your software more sustainable, URJA provides the data and the automation to make it happen. It\u2019s about being smarter with our resources\u2014ensuring that every watt consumed translates into meaningful work.<\/p>\n\n\n\n<p>Ready to make your code greener? URJA is built for Linux and ready to optimise.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button has-custom-width wp-block-button__width-50\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/github.com\/DIPSA-QUB\/URJA\">Find URJA on Github<\/a><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In the world of high-performance computing, we often prioritise speed above all else. But as our applications grow more complex, they consume massive amounts of power\u2014often more than they actually need. To bridge the gap between peak performance and energy efficiency, I\u2019ve developed URJA: The Unified Runtime Job Analyser. What is URJA? At its core, [&hellip;]<\/p>\n","protected":false},"author":1149,"featured_media":3856,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[152],"tags":[],"class_list":{"0":"post-3870","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-kelvin-living-lab","8":"czr-hentry"},"jetpack_featured_media_url":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/12\/PXL_20241210_082602436-scaled.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts\/3870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/users\/1149"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/comments?post=3870"}],"version-history":[{"count":1,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts\/3870\/revisions"}],"predecessor-version":[{"id":3872,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts\/3870\/revisions\/3872"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/media\/3856"}],"wp:attachment":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/media?parent=3870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/categories?post=3870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/tags?post=3870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}