<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Workshop-descriptions | Lemieux&#39;s Lab</title>
    <link>https://lemieux.iric.ca/en/workshop-description/</link>
      <atom:link href="https://lemieux.iric.ca/en/workshop-description/index.xml" rel="self" type="application/rss+xml" />
    <description>Workshop-descriptions</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Fri, 19 Dec 2025 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://lemieux.iric.ca/media/icon_hu56480358ab020a3cbd2b2e63f8640e6d_10170_512x512_fill_lanczos_center_3.png</url>
      <title>Workshop-descriptions</title>
      <link>https://lemieux.iric.ca/en/workshop-description/</link>
    </image>
    
    <item>
      <title>Metaprogramming</title>
      <link>https://lemieux.iric.ca/en/workshop-description/25-12-19-nicolas/</link>
      <pubDate>Fri, 19 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://lemieux.iric.ca/en/workshop-description/25-12-19-nicolas/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://lemieux.iric.ca/en/author/nicolas-jacquin&#34;&gt;&lt;strong&gt;Nicolas Jacquin&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sometimes, we need to work with the code syntax directly, treating it as data. This comes up often for logging, benchmarking and monitoring (think of &lt;code&gt;@time&lt;/code&gt; or &lt;code&gt;@btime&lt;/code&gt; from BenchmarkTools and &lt;code&gt;@showprogress&lt;/code&gt; from ProgressMeter), adding extra features to existing code without rewriting it (think of &lt;code&gt;@threads&lt;/code&gt;, &lt;code&gt;@async&lt;/code&gt;), changing the meaning of some code structures (with &lt;code&gt;@assert&lt;/code&gt; to make something a unit test) or cheeky compiler tricks (&lt;code&gt;@turbo&lt;/code&gt;, which promises the compiler your code doesn&amp;rsquo;t index out of bounds, iterate over empty collections, order doesn&amp;rsquo;t matter, etc&amp;hellip;)&lt;/p&gt;
&lt;p&gt;We want to write things like this: &lt;code&gt;@log_step x + y * z&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And get outputs like this: &lt;code&gt;[LOG] x + y * z = 42&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This is behaviour that&amp;rsquo;s difficult to emulate with a function.&lt;/p&gt;
&lt;h4 id=&#34;downloadable-content&#34;&gt;Downloadable content&lt;/h4&gt;
&lt;p&gt;Notebook: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-12-19/metaprogamming_workshop.jl&#34;&gt;julia&lt;/a&gt; | &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-12-19/metaprogamming_workshop.html&#34;&gt;html&lt;/a&gt; | &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-12-19/metaprogamming_workshop.pdf&#34;&gt;pdf&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Nvidia Nsight</title>
      <link>https://lemieux.iric.ca/en/workshop-description/25-11-14-serena/</link>
      <pubDate>Fri, 14 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://lemieux.iric.ca/en/workshop-description/25-11-14-serena/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://lemieux.iric.ca/en/author/serena-chan&#34;&gt;&lt;strong&gt;Serena Chan&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nsight Systems is a system-wide performance analysis that allow us to capture activity across the CPU, GPU, and OS! It uses low-overhead tracing/sampling to find bottlenecks: it can’t exactly tell you why there are slowdowns occurring, but where and when they occur.&lt;/p&gt;
&lt;h4 id=&#34;downloadable-content&#34;&gt;Downloadable content&lt;/h4&gt;
&lt;p&gt;Notes: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-11-14/notes.pdf&#34;&gt;pdf&lt;/a&gt; | &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-11-14/notes.pptx&#34;&gt;pptx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RTF report: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-11-14/rtf_report.nsys-rep&#34;&gt;nsys-rep&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Model Optimization</title>
      <link>https://lemieux.iric.ca/en/workshop-description/25-10-17-lea/</link>
      <pubDate>Fri, 17 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://lemieux.iric.ca/en/workshop-description/25-10-17-lea/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://lemieux.iric.ca/en/author/lea-kaufmann&#34;&gt;&lt;strong&gt;Léa Kaufmann&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Optimizing your model&amp;rsquo;s parameters with &lt;code&gt;wandb&lt;/code&gt; on Compute Canada.&lt;/p&gt;
&lt;h4 id=&#34;downloadable-content&#34;&gt;Downloadable content&lt;/h4&gt;
&lt;p&gt;Notes: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-10-17/notes.pdf&#34;&gt;pdf&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Multithreading</title>
      <link>https://lemieux.iric.ca/en/workshop-description/25-08-08-nicolas/</link>
      <pubDate>Fri, 08 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://lemieux.iric.ca/en/workshop-description/25-08-08-nicolas/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://lemieux.iric.ca/en/author/nicolas-jacquin&#34;&gt;&lt;strong&gt;Nicolas Jacquin&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Multithreading allows a program to run &lt;strong&gt;multiple computations at the same time&lt;/strong&gt; on separate CPU cores. This is especially useful for &lt;strong&gt;CPU-bound tasks&lt;/strong&gt; where raw computing power is the bottleneck.&lt;/p&gt;
&lt;p&gt;In Julia, multithreading is enabled with the environment variable JULIA_NUM_THREADS, and used via macros like Threads.@threads and Threads.@spawn.&lt;/p&gt;
&lt;p&gt;The goal is to split work into smaller, independent parts that can be safely computed in parallel.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll also talk about asynchronous programming, which defines coroutines running at the same time on a single thread, and able to yield control to each other while they wait for something.&lt;/p&gt;
&lt;h4 id=&#34;downloadable-content&#34;&gt;Downloadable content&lt;/h4&gt;
&lt;p&gt;Notebook: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-08-08/multithreading_workshop.jl&#34;&gt;julia&lt;/a&gt; | &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-08-08/multithreading_workshop.pdf&#34;&gt;pdf&lt;/a&gt; | &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-08-08/multithreading_workshop.html&#34;&gt;html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Debugging</title>
      <link>https://lemieux.iric.ca/en/workshop-description/25-04-23-serena/</link>
      <pubDate>Wed, 23 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://lemieux.iric.ca/en/workshop-description/25-04-23-serena/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://lemieux.iric.ca/en/author/serena-chan&#34;&gt;&lt;strong&gt;Serena Chan&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Testing and comparing debugging and profiling tools in Julia.&lt;/p&gt;
&lt;h4 id=&#34;downloadable-content&#34;&gt;Downloadable content&lt;/h4&gt;
&lt;p&gt;Notes: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-04-23/04_23_25_Lab_Meeting.pdf&#34;&gt;pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Julia script: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-04-23/dbg.jl&#34;&gt;dbg.jl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Data files: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-04-23/features.jld2&#34;&gt;features.jld2&lt;/a&gt; | &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-04-23/labels.jld2&#34;&gt;labels.jld2&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Advance Typing</title>
      <link>https://lemieux.iric.ca/en/workshop-description/25-03-12-nicolas/</link>
      <pubDate>Wed, 12 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://lemieux.iric.ca/en/workshop-description/25-03-12-nicolas/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://lemieux.iric.ca/en/author/nicolas-jacquin&#34;&gt;&lt;strong&gt;Nicolas Jacquin&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Typing matters!&lt;/p&gt;
&lt;p&gt;In general, type ambiguity forces the compiler to jump through many hoops to make sure it can accomodate the ambiguity. All of this adds extra overhead, which you should never pay unless you have absolutely no choice (or optimization is not a concern).&lt;/p&gt;
&lt;h4 id=&#34;downloadable-content&#34;&gt;Downloadable content&lt;/h4&gt;
&lt;p&gt;Notebook: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-03-12/advance_typing_workshop.jl&#34;&gt;julia&lt;/a&gt; | &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-03-12/advance_typing_workshop.html&#34;&gt;html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>GPU Kernels</title>
      <link>https://lemieux.iric.ca/en/workshop-description/25-02-06-carl-serena/</link>
      <pubDate>Thu, 06 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://lemieux.iric.ca/en/workshop-description/25-02-06-carl-serena/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://lemieux.iric.ca/en/author/serena-chan&#34;&gt;&lt;strong&gt;Serena Chan&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&#34;https://lemieux.iric.ca/en/author/carl-munoz&#34;&gt;&lt;strong&gt;Carl Munoz&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In Julia, GPU usage is already optimized for many processes through CUDA.jl. Simply by applying a function to a CuArray, operations (e.g. broadcasting and map-reducing) are executed on GPU-specialized code. Additionally, more complex tasks, such as operations in machine learning algorithms like self-attention, have optimized code through cuDNN.jl.&lt;/p&gt;
&lt;p&gt;These are done through GPU kernels, which implement functions that exploit the CUDA architecture of GPUs.&lt;/p&gt;
&lt;p&gt;Today, we will show how to write such kernels, for when already-optimized kernels do not already exist.&lt;/p&gt;
&lt;h4 id=&#34;downloadable-content&#34;&gt;Downloadable content&lt;/h4&gt;
&lt;p&gt;Notebook: &lt;a href=&#34;%28/downloads/workshop-25-02-06/notebook.jl%29&#34;&gt;julia&lt;/a&gt; | &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-02-06/notebook.pdf&#34;&gt;pdf&lt;/a&gt; | &lt;a href=&#34;%28/downloads/workshop-25-02-06/notebook.html%29&#34;&gt;html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Environement files: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-02-06/Manifest.toml&#34;&gt;Manifest.toml&lt;/a&gt; | &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-02-06/Project.toml&#34;&gt;Project.toml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Julia scripts: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-02-06/demon_sandbox.jl&#34;&gt;demo_sandbox.jl&lt;/a&gt; | &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-25-02-06/softmax_examples&#34;&gt;softmax_examples&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Web Scrapping</title>
      <link>https://lemieux.iric.ca/en/workshop-description/24-10-01-nicolas/</link>
      <pubDate>Tue, 01 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://lemieux.iric.ca/en/workshop-description/24-10-01-nicolas/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://lemieux.iric.ca/en/author/nicolas-jacquin&#34;&gt;&lt;strong&gt;Nicolas Jacquin&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What is Web Scrapping?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Extracting data from website (usually what&amp;rsquo;s displayed on a webpage)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Used to automate repetitive processes that require checking or interacting with websites&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Data is either extracted from the HTML (easy), but sometimes snooping around the requests done by a webpage in the background is required to get the data you need (Sometimes time consuming, consider if the time saved is worth it!)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;downloadable-content&#34;&gt;Downloadable content&lt;/h4&gt;
&lt;p&gt;Notebook: &lt;a href=&#34;https://lemieux.iric.ca/downloads/workshop-24-10-01/web_scrapping_workshop.html&#34;&gt;html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
