<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>HPC on Tyler Collins</title>
    <link>https://www.tk11br.ca/tags/hpc/</link>
    <description>Recent content in HPC on Tyler Collins</description>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>2022-2026 Tyler Collins. Content licensed under CC BY-NC 4.0.</copyright>
    <lastBuildDate>Tue, 22 Sep 2026 10:30:00 -0400</lastBuildDate>
    <atom:link href="https://www.tk11br.ca/tags/hpc/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>What Does a GPU-Hour Actually Measure?</title>
      <link>https://www.tk11br.ca/posts/what-does-a-gpu-hour-actually-measure/</link>
      <pubDate>Tue, 22 Sep 2026 10:30:00 -0400</pubDate>
      <guid>https://www.tk11br.ca/posts/what-does-a-gpu-hour-actually-measure/</guid>
      <description>GPU-hours hide differences in GPU models, whole-device allocations, and MIG slices. Research reports need to say what was actually used and how the total was calculated.</description>
      <content:encoded><![CDATA[<p>You&rsquo;ve probably seen a line like this in a paper or grant report:</p>
<blockquote>
<p>We used 10,000 GPU-hours.</p></blockquote>
<p>It looks like a useful answer. There&rsquo;s a number and a unit. Very official.</p>
<p>But what does a GPU-hour actually measure? On its own, pretty much nothing. I can&rsquo;t compare that number with another project until I know what counted as a GPU, whether it was a whole device or a slice, and how the authors calculated the total.</p>
<h2 id="one-gpu-hour-is-not-like-another">One GPU-hour is not like another</h2>
<p>An hour on an NVIDIA A100, H100, or B200 counts as one GPU-hour under the usual calculation. That doesn&rsquo;t make those hours equivalent. These are different generations of hardware with different memory capacities, bandwidth, and compute capabilities. They have tons of different features too.</p>
<p>The workload matters too. A newer GPU might make a huge difference for one model and barely move another. <code>number of GPUs × elapsed time</code> throws all of that information away. It&rsquo;s pretty much the worst collapsing across dimensions you could do.</p>
<p>In the past, research papers have long reported CPU models and architectures because an hour on one processor doesn&rsquo;t automatically compare with an hour on another. Plenty of papers still include that detail, and they should. GPU reporting deserves at least as much care.</p>
<h2 id="device-slicing-makes-it-worse">Device slicing makes it worse</h2>
<p>Multi-Instance GPU, usually called MIG, is device slicing. An administrator can divide one physical NVIDIA GPU into isolated instances, each with a portion of the compute and memory resources. NVIDIA&rsquo;s <a href="https://docs.nvidia.com/datacenter/tesla/mig-user-guide/introduction.html">MIG documentation</a> says supported GPUs can be divided into as many as seven instances.</p>
<p>This is a good thing. Several jobs can share an expensive GPU without fighting over the same resources. Schedulers can present each slice to a job much like a physical GPU. <a href="https://slurm.schedmd.com/gres.html">Slurm can schedule MIG instances as individual GPU resources</a>, for example.</p>
<p>Here&rsquo;s where the reporting gets weird. Say two jobs each run for one hour. One gets an entire H100. The other gets one MIG slice of an H100. If the accounting system calls each allocation one GPU, both jobs used one GPU-hour. Same number. Very different allocation.</p>
<p>Calling these &ldquo;MIG-hours&rdquo; or &ldquo;slice-hours&rdquo; doesn&rsquo;t fix much by itself. MIG profiles assign different amounts of compute and memory. Ten hours on a small slice and ten hours on a large slice still become ten slice-hours when the report leaves out the profile.</p>
<h2 id="show-your-math">Show your math</h2>
<p>Different people need different numbers. A cluster operator may care about how long allocations were occupied. A funding report may care about use of the physical hardware. A researcher needs enough detail to understand or reproduce an experiment. Those are different questions. They don&rsquo;t have to produce the same total.</p>
<p>One report might count every scheduled MIG instance as a GPU. Another might convert slices into fractions of a physical device. It could count allocated time even when the job wasn&rsquo;t keeping the device busy. All of those approaches can make sense for a particular job. Calling every result &ldquo;GPU-hours&rdquo; is the problem. Once the calculation disappears, the reader can&rsquo;t recover what happened.</p>
<p>A universal normalized GPU-hour sounds tempting, but I don&rsquo;t think it fixes this. Converting every device and slice into one equivalent unit requires assumptions about relative performance. Those assumptions change with the workload, software, numerical precision, and bottleneck. It&rsquo;s problematic either way.</p>
<h2 id="at-least-report-this-much">At least report this much</h2>
<p>If you publish GPU usage, include:</p>
<ul>
<li>the GPU manufacturer and model</li>
<li>whether jobs received whole devices or slices</li>
<li>the MIG profile or equivalent partition size when slicing was used</li>
<li>the number of allocations</li>
<li>the elapsed duration</li>
<li>the exact calculation behind any aggregate total</li>
</ul>
<p>A methods section or figure caption could say:</p>
<blockquote>
<p>We used eight allocations of an NVIDIA H100 <code>3g.40gb</code> MIG profile for five hours each, for 40 H100 <code>3g.40gb</code> slice-hours. We calculated slice-hours as the number of allocated instances multiplied by allocation duration.</p></blockquote>
<p>Yes, that&rsquo;s longer than &ldquo;40 GPU-hours.&rdquo; You can also tell what it means. The reader knows these were slices, which hardware they came from, and how the total was produced.</p>
<p>If the work used several device models or MIG profiles, report them separately. Don&rsquo;t add unlike allocations together and slap a precise-looking label on the result.</p>
<h2 id="a-caption-is-allowed-to-do-some-work">A caption is allowed to do some work</h2>
<p>A single GPU-hour total fits nicely on a dashboard. The useful version takes a caption, a definition, or a few lines in a methods section. That&rsquo;s fine. This is what those things are for.</p>
<p>GPU-hours can still work as internal shorthand for one stable pool of identical hardware. Everyone in that context knows what the unit means. The shorthand falls apart as soon as the number leaves that context.</p>
<p>Don&rsquo;t make readers guess. Name the hardware, describe the allocation, and show your math.</p>
<h2 id="related-posts">Related posts</h2>
<ul>
<li><a href="/posts/your-kpis-arent-telling-you-enough/">Your KPIs Aren&rsquo;t Telling You Enough</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Writing More Code with AI Agents</title>
      <link>https://www.tk11br.ca/posts/writing-more-code-with-ai-agents/</link>
      <pubDate>Thu, 27 Aug 2026 12:00:00 -0400</pubDate>
      <guid>https://www.tk11br.ca/posts/writing-more-code-with-ai-agents/</guid>
      <description>A practical way for researchers to use AI coding agents for tests, checks, and diagnostic work without handing over the scientific decisions.</description>
      <content:encoded><![CDATA[<p>I recently gave a SHARCNET General Interest Webinar called &ldquo;Writing More Code with AI Agents.&rdquo; More than 300 people registered. Attendance was excellent, there were lots of questions, and I&rsquo;ve had a decent number of follow-up conversations over email. Pretty happy with how it turned out!</p>
<p>The response also confirmed why I wanted to give the talk. People are constantly asking me agents and what they should be doing with them. They&rsquo;re watching other researchers and developers move very quickly with these tools, and there&rsquo;s a real fear of missing out. They want to try them, but they don&rsquo;t necessarily know where to start or how much of the output they should trust.</p>
<p>My answer is to start with code you already trust, then put some AI slop around it.</p>
<iframe loading="lazy" src="https://www.youtube-nocookie.com/embed/06jylC7Sib0" title="Writing More Code with AI Agents" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>The rest of this post are my thoughts about the various points I bring up during the talk.</p>
<h2 id="the-title-was-a-bit-of-a-lie">The title was a bit of a lie</h2>
<p>The title says you should write more code. This is technically true, but it depends on what we count as code.</p>
<p>Most researchers don&rsquo;t need an agent generating more of the main scientific loop. That is the meat and potatoes of the project. It includes the cleaning rules, statistics, simulations, models, and transformations that can change the result. The researcher needs to understand and own those decisions.</p>
<p>A lot of useful code lives outside that loop:</p>
<ul>
<li>tests and synthetic examples</li>
<li>input validators</li>
<li>diagnostic plots and reports</li>
<li>logging and debugging tools</li>
<li>profiling scripts</li>
<li>build and release automation</li>
<li>documentation</li>
</ul>
<p>People tend to skip this stuff. It takes time, some of it is boring, and it may require programming knowledge that isn&rsquo;t directly related to the research question. It is also exactly the work that can make the main analysis easier to trust.</p>
<p>The title I really wanted was &ldquo;Use AI agents to write slop to verify your code.&rdquo; It probably wouldn&rsquo;t have attracted 300 registrations.</p>
<h2 id="i-asked-claude-to-do-my-stats">I asked Claude to do my stats</h2>
<p>I built a synthetic reaction-time study for the talk. It had 48 participant files and a 2x2 repeated-measures design. Each participant should have completed four conditions with 80 trials in each condition.</p>
<p>Of course, the data wasn&rsquo;t actually that clean. One file duplicated an existing participant under a new acquisition ID. Two participants didn&rsquo;t finish. Some had near-chance accuracy. Others had reaction times that were implausibly fast or slow.</p>
<p>All of these are normal research-data problems. They&rsquo;re also serious enough that letting those files contribute to the final result would be wrong.</p>
<p>I gave the data to Claude three times.</p>
<p>For the first attempt, I used this prompt:</p>
<blockquote>
<p>These CSV files are the results from my experiment. Do my stats for me and make a plot I can use in my paper.</p></blockquote>
<p>This is a terrible prompt on purpose. Claude still produced a polished plot and a significant interaction with a p-value of 0.040. It looked like a finished analysis.</p>
<p>It turns out it had invented an accuracy exclusion, picked its own reaction-time summary, allowed comically large response times, and included incorrect trials. There were decisions all over the place that the researcher didn&rsquo;t make and might not even notice.</p>
<p>The result was blatantly wrong, but it looked nice.</p>
<p>Never do this.</p>
<h2 id="a-better-prompt-still-wasnt-enough">A better prompt still wasn&rsquo;t enough</h2>
<p>For the second attempt, I explained the study design. I described the factors, outcome, repeated-measures analysis, hypothesis, and how incorrect trials should be handled.</p>
<p>The code improved. Claude gave a more conservative p-value of 0.087. It also showed hints that it could produce useful checks around the analysis.</p>
<p>This is probably where a lot of people stop. The response knows the terminology, the figure looks good, and the result feels more defensible because the prompt was detailed.</p>
<p>There were still problems in the data that anyone familiar with the study would want to investigate. More context made the output better, but good prompting did not replace experience or domain knowledge.</p>
<p>This is also why I&rsquo;m not especially interested in advice that boils down to &ldquo;write a huge prompt.&rdquo; Context is useful. It does not prove that the code handled the real files correctly.</p>
<h2 id="own-the-logic-and-delegate-the-annoying-parts">Own the logic and delegate the annoying parts</h2>
<p>For the third attempt, I supplied the core statistical code myself. It came from previous work, and I understood what it was doing. Claude wasn&rsquo;t asked to choose the analysis.</p>
<p>Instead, I asked it to write the surrounding checks. Report any of the missing four conditions. Report files with too few trials, high error rates, or reaction times outside the plausible range. Check participant identities. Show me potential failures.</p>
<p>This found all eight problematic subjects, including the duplicate participant. After reviewing and handling those cases, the analysis used 40 participants and returned the expected interaction with a p-value of 0.037.</p>
<p>The third attempt was better because I owned more of the important code, not because Claude suddenly became more trustworthy. The agent took criteria I supplied and turned them into reports and checks. That gave me things I could inspect before accepting the result.</p>
<p><strong>This is the kind of AI-generated slop I want more of.</strong></p>
<p>If a validator is a bit ugly but catches a duplicate participant, great. If a throwaway plot makes a broken distribution obvious, it did its job. If an alternate implementation disagrees with my main calculation, I now have something worth investigating.</p>
<p>None of that code needs to become permanent infrastructure. Its job is to answer a question or provide evidence.</p>
<h2 id="this-works-outside-toy-statistics">This works outside toy statistics</h2>
<p>The same idea fits notebooks, shared pipelines, and SLURM jobs.</p>
<p>For a notebook, an agent can add data-shape checks, diagnostic cells, caching, or a small script that tests code pulled out of the notebook. For a shared pipeline, it can validate inputs, produce reports, or turn a previously discovered failure into a regression test. For a SLURM workflow, it can add preflight checks, logging, resource summaries, checkpoints, and checks that distinguish a complete output from a partial one.</p>
<p>The stakes change as the work gets larger. A bad notebook cell might waste an afternoon. A bad cluster job might wait in the queue for days, consume a large allocation, and leave partial files that look usable. Catching the same mistake before submission is much cheaper.</p>
<p>There are also obvious limits. Don&rsquo;t upload data unless you&rsquo;re allowed to. Run unfamiliar generated code in a sandbox, container, or virtual machine. Keep a human involved when mistakes can affect results, people, infrastructure, or budgets. You own the problems even when an agent wrote the code.</p>
<h2 id="try-one-check">Try one check</h2>
<p>Don&rsquo;t start by giving an agent a new analysis and hoping it gets everything right.</p>
<p>Take a script, notebook, or pipeline that you&rsquo;ve already used enough to understand. Something battle-tested. Ask the agent to add one check that doesn&rsquo;t touch the meat and potatoes.</p>
<p>You could ask for a synthetic case where you know the answer. Ask it to verify that every participant has the expected conditions. Have it make an exclusion report, plot a suspicious distribution, or write a second version of a calculation so you can compare the outputs.</p>
<p>Review what it writes. Run it. See whether it tells you anything useful about code you already know.</p>
<p>That is a much safer way to learn what agents are good at, and it produces something useful even if the generated code is disposable. The point isn&rsquo;t to trust AI more. The point is to cheaply make more of the stuff that helps you trust the important work.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Serial Farms: Package Options and When to Switch to Farming</title>
      <link>https://www.tk11br.ca/posts/serial-farms/</link>
      <pubDate>Wed, 03 Dec 2025 12:00:00 -0500</pubDate>
      <guid>https://www.tk11br.ca/posts/serial-farms/</guid>
      <description>A practical comparison of job arrays and serial-farming tools for running many small jobs on HPC systems.</description>
      <content:encoded><![CDATA[<p>Submitting a few small jobs one at a time is fine. Submitting hundreds that way is annoying for you and hard on the scheduler.</p>
<p>This webinar compared ways to group lots of serial tasks into manageable jobs. I covered when ordinary submissions stop making sense, how array indexes can drive repeated runs, and when it is time to use a serial farm.</p>
<iframe loading="lazy" src="https://www.youtube-nocookie.com/embed/sMZ13XJQiWo" title="Serial Farms: Package Options and When to Switch to Farming" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h2 id="abstract">Abstract</h2>
<p>Small jobs are convenient to submit individually, but at scale they can overload a scheduler, inflate queue times, and ultimately reduce throughput. This webinar examines practical strategies for consolidating large numbers of short tasks, including job arrays, task-bundling techniques, and wrapper-based aggregation. We will discuss how these approaches differ in overhead, portability, scheduler behavior, and job-failure handling. The session will also provide guidance on recognizing when packaging options no longer yield sufficient throughput and when transitioning to a serial-farming model becomes advantageous. Serial farms can mitigate scheduler pressure, improve wait times on busy clusters, and offer more predictable performance. Examples will be provided throughout the webinar and shared on GitHub for future reference.</p>
<p>The <a href="https://helpwiki.sharcnet.ca/wiki/Online_Seminars">SHARCNET seminar archive</a> has the event listing.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Diagnosing Wasted Resources from User-Facing Portals</title>
      <link>https://www.tk11br.ca/posts/diagnosing-wasted-resources/</link>
      <pubDate>Wed, 14 Aug 2024 12:00:00 -0400</pubDate>
      <guid>https://www.tk11br.ca/posts/diagnosing-wasted-resources/</guid>
      <description>A walkthrough of using national cluster portals to investigate wait times, priority, and wasted CPU, memory, and GPU allocations.</description>
      <content:encoded><![CDATA[<p>A slow job and a slow queue are different problems. This talk was about using the national cluster portals to figure out which one you&rsquo;re dealing with.</p>
<p>I covered job history, account priority, wait times, and resource-use reports. The examples looked at CPU, memory, and GPU requests that did not match the work being done. The point was to check the evidence before changing a job request.</p>
<iframe loading="lazy" src="https://www.youtube-nocookie.com/embed/RQaXX2yrED0" title="Diagnosing Wasted Resources from User-Facing Portals on the National Clusters" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h2 id="abstract">Abstract</h2>
<p>Researchers often leave resources on the table when specifying their job requirements on the national systems. This talk builds on previous sessions and uses the Digital Research Alliance of Canada&rsquo;s User Facing Portals to explore what different types of jobs look like when they waste resources. Demonstrations will include interactive jobs, parallel jobs, GPU workflows, and more. With more accurate job specifications, researchers can expect shorter wait times and more throughput on any general-purpose system.</p>
<p><a href="https://helpwiki.sharcnet.ca/wiki/images/9/9e/DiagnosingWaste.pdf">Download the slides</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Modern Approaches to Profiling in Python with Scalene</title>
      <link>https://www.tk11br.ca/posts/scalene/</link>
      <pubDate>Wed, 03 May 2023 12:00:00 -0400</pubDate>
      <guid>https://www.tk11br.ca/posts/scalene/</guid>
      <description>A practical introduction to profiling Python CPU, memory, and GPU use with Scalene on HPC systems.</description>
      <content:encoded><![CDATA[<p>Before rewriting slow Python or moving it into Cython, it helps to find out what is actually slow.</p>
<p>This Compute Ontario Colloquium was an introduction to <a href="https://github.com/plasma-umass/scalene">Scalene</a>. Scalene separates time spent in Python from time spent in native libraries, and it can also profile memory and GPU use. I ran it on the Alliance systems from a Jupyter notebook, then compared native Python, vectorized code, Cython, and just-in-time compilation.</p>
<iframe loading="lazy" src="https://www.youtube-nocookie.com/embed/Uq60vknROcM" title="Modern Approaches to Profiling in Python with Scalene" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h2 id="abstract">Abstract</h2>
<p>Python is a language developers choose to write in for convenience rather than speed. However, speed can be recovered by offloading calculations to libraries which leverage lower-level languages like NumPy, Cython, and more. Scalene is a high-performance CPU, GPU, and memory profiler which can illustrate where code should be passing calculations to other libraries for significant increases in speed. Scalene also includes support for Jupyter Notebooks, OpenAI suggestions for vectorizing code, as well as a significantly lower overhead and higher accuracy than other profilers. This talk will introduce the concepts required for understanding why external libraries are faster than native Python, interactions with approaches such as Cython and just-in-time compilers, as well as a live demonstration of Scalene on the Alliance systems inside of a Jupyter Notebook. Familiarity with Python, virtual environments, and Jupyter notebooks will be assumed.</p>
<p>The <a href="https://github.com/Andesha/sharcnet-scalene">slides, notebooks, and examples are available on GitHub</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>ViewClust: Early Days</title>
      <link>https://www.tk11br.ca/posts/viewclust1/</link>
      <pubDate>Tue, 22 Mar 2022 13:23:54 -0400</pubDate>
      <guid>https://www.tk11br.ca/posts/viewclust1/</guid>
      <description>Early notes on packaging ViewClust and ViewClust-Vis for cluster metrics and HPC usage analysis.</description>
      <content:encoded><![CDATA[<p>In the early days of working for <a href="https://www.sharcnet.ca/my/front/">SHARCNET</a>, my colleague and I decided to standardize how cluster metrics were computed across our internal data frames. As mentioned in a <a href="/posts/pandas1/">previous post</a>, part of the solution was pandas.</p>
<p>The second part was figuring out how to deploy the package for others to contribute to, as well as install on their own specific HPC clusters. Some quick searching revealed that <a href="https://pypi.org/">PyPI</a> and <a href="https://pip.pypa.io/en/stable/"><code>pip</code></a> were the way to go.</p>
<p>To make a long story short, here are a few references that made it approachable:</p>
<ul>
<li><a href="https://pip.pypa.io/en/latest/cli/pip_install/#cmdoption-e">Editable/interactive mode for pip</a>.</li>
<li><a href="https://cookiecutter.readthedocs.io/en/1.7.2/">Cookiecutter</a>.</li>
<li><a href="https://docs.python.org/3/tutorial/venv.html">Virtual environments</a>.</li>
</ul>
<p>The package is still in use today inside SHARCNET and has also received development support from WestGrid, <a href="https://www.calculquebec.ca/en/">Calcul Québec</a>, and <a href="https://mila.quebec/en/">MILA</a>.</p>
<p>ViewClust can be found on <a href="https://github.com/Andesha/ViewClust">GitHub</a>. Its cousin package, <a href="https://github.com/Andesha/ViewClust-Vis">ViewClust-Vis</a>, implements several summary figures.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Conquering the Scheduler</title>
      <link>https://www.tk11br.ca/posts/conq_sched/</link>
      <pubDate>Tue, 22 Mar 2022 00:50:54 -0400</pubDate>
      <guid>https://www.tk11br.ca/posts/conq_sched/</guid>
      <description>A talk about choosing job configurations and scheduler strategies for responsive HPC workloads.</description>
      <content:encoded><![CDATA[<p>Coming from a slightly different angle this time, I found that researchers were often isolating themselves to fewer resources on HPC systems by not investigating what the node feature mixture looked like.</p>
<p>As such, this talk was created to help direct potentially abstract development efforts toward optimizing for the feature sets that are most available on an HPC cluster.</p>
<p>Below is my abstract for the talk as well as the recording:</p>
<iframe loading="lazy" src="https://www.youtube-nocookie.com/embed/lPsp97ZGoF8" title="Conquering the Scheduler" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>&ldquo;Determining the optimal job configuration for a given workload on HPC systems can be a difficult problem. Researchers often have different job needs, different responsiveness requirements, and different scales. This webinar will discuss these differences and how to investigate making the scheduler as responsive as possible. Topics will include whole node scheduling, by core MPI jobs, GLOST, META, and more. This presentation will assume basic knowledge of job submission, and the Linux environment. Practical examples will be discussed and used as introductions to new tools to maximize performance on the general purpose systems. Open questions will be allowed at the end of the seminar.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Cython: A First Look</title>
      <link>https://www.tk11br.ca/posts/cython/</link>
      <pubDate>Sun, 20 Mar 2022 14:40:38 -0400</pubDate>
      <guid>https://www.tk11br.ca/posts/cython/</guid>
      <description>A first look at using Cython to recover performance when Python code needs to run faster.</description>
      <content:encoded><![CDATA[<p>Back when I first got hired at SHARCNET, I used a lot of Python. I mean a lot. This meant I quickly became the lightning rod for all Python-related questions and commentary.</p>
<p>During a fun Friday chat, a colleague remarked that Python was, on average, 40x slower than C++. I defended my current language of choice, saying it was better than that, surely. To make a long story short, I was wrong. It really is about 40x slower depending on the problem. Determined to prove myself capable, and my language of choice a bit more defensible, I decided to look into ways to make Python faster.</p>
<p>I eventually landed on Cython. It turns out the best way to make Python faster was to use as much C++ as possible.</p>
<p>Below is my abstract for the talk as well as the recording:</p>
<iframe loading="lazy" src="https://www.youtube-nocookie.com/embed/y6bKDKFavPA" title="Cython: A First Look" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>&ldquo;Often we write programs in Python for convenience, not for speed. When work becomes elevated to High Performance Computing (HPC) environments, speed once again becomes a concern. Cython is an extension of Python which allows functions to be compiled as C (or C++) and recover the significant performance trade-offs of Python. Cython achieves this by supporting calling C functions, declaring of type information, as well as providing access to C++ STL functionality. Popular packages and libraries that take advantage of Cython include: TensorFlow, OpenCV, NumPy, Pandas, and more. This webinar will cover a basic introduction to Cython, a demo translating vanilla Python into Cython, followed by a short demo of how to run Cython in our own Compute Canada HPC environments. Experience with Python will be expected, while familiarity with C/C++ and Jupyter notebooks will be helpful. Webinar material and code will be made available on GitHub for reference.&rdquo;</p>
<h2 id="related-posts">Related posts</h2>
<ul>
<li><a href="/posts/revisiting-cython/">Revisiting Cython: Is It Still Effective?</a></li>
</ul>
]]></content:encoded>
    </item>
  </channel>
</rss>
