{
  "schemaVersion": 1,
  "id": "atlas-lesson-simt-active-lanes",
  "title": "SIMT execution and divergent branches",
  "category": "learning",
  "format": "Atlas lesson",
  "description": "Shares instruction issue across threads while tracking which lanes participate.",
  "canonicalUrl": "https://semiaifoundry.com/learn/atlas/simt-active-lanes/",
  "publishedDate": null,
  "revisionDate": "2026-10-07",
  "author": null,
  "topic": "Processing architectures",
  "series": null,
  "license": null,
  "rightsUrl": "https://semiaifoundry.com/ai-atlas/licenses.html",
  "version": "1.3.0",
  "status": "Published educational lesson",
  "evidenceScope": "The eight-lane drawing is pedagogical, not a claimed NVIDIA or AMD execution-group width. Cross-vendor scheduling details are intentionally not equated.",
  "contentCoverage": "published-lesson",
  "artifactUrl": "https://semiaifoundry.com/ai-atlas/lesson-data/simt-active-lanes-09a7ed633dfdd537.json",
  "interactiveUrl": "https://semiaifoundry.com/ai-atlas/#simt-active-lanes",
  "related": [],
  "supersedes": [],
  "supersededBy": [],
  "contentHash": "9f6b88240bbb028533c4f5c3ca53515db5e49107624a7074c730b0b36eb20e5d",
  "contentLength": 5163,
  "jsonUrl": "https://semiaifoundry.com/agents/publications/atlas-lesson-simt-active-lanes.json",
  "markdownUrl": "https://semiaifoundry.com/agents/publications/atlas-lesson-simt-active-lanes.md",
  "sections": [
    {
      "id": "section-1",
      "title": "SIMT execution and divergent branches",
      "start": 41,
      "end": 374
    },
    {
      "id": "section-2",
      "title": "The mechanism",
      "start": 374,
      "end": 1664
    },
    {
      "id": "section-3",
      "title": "Science and assumptions",
      "start": 1664,
      "end": 1692
    },
    {
      "id": "section-4",
      "title": "Masked execution efficiency",
      "start": 1692,
      "end": 2535
    },
    {
      "id": "section-5",
      "title": "Engineering example",
      "start": 2535,
      "end": 2775
    },
    {
      "id": "section-6",
      "title": "Distinctions and tradeoffs",
      "start": 2775,
      "end": 3192
    },
    {
      "id": "section-7",
      "title": "Specifications and interfaces",
      "start": 3192,
      "end": 3490
    },
    {
      "id": "section-8",
      "title": "Interfaces",
      "start": 3490,
      "end": 3642
    },
    {
      "id": "section-9",
      "title": "Check your understanding",
      "start": 3642,
      "end": 3671
    },
    {
      "id": "section-10",
      "title": "All threads run the same instruction but read widely separated addresses. What is the likely issue?",
      "start": 3671,
      "end": 4065
    },
    {
      "id": "section-11",
      "title": "Evidence and scope",
      "start": 4065,
      "end": 4395
    },
    {
      "id": "section-12",
      "title": "Sources",
      "start": 4395,
      "end": 4810
    },
    {
      "id": "section-13",
      "title": "Continue exploring",
      "start": 4810,
      "end": 4833
    },
    {
      "id": "section-14",
      "title": "Foundations",
      "start": 4833,
      "end": 5032
    },
    {
      "id": "section-15",
      "title": "Related lessons",
      "start": 5032,
      "end": 5163
    }
  ],
  "citations": [
    {
      "title": "Explore in Atlas",
      "url": "https://semiaifoundry.com/ai-atlas/#simt-active-lanes"
    },
    {
      "title": "CUDA C++ Programming Guide",
      "url": "https://docs.nvidia.com/cuda/cuda-c-programming-guide/"
    },
    {
      "title": "AMD Instinct MI300 Series microarchitecture",
      "url": "https://rocm.docs.amd.com/en/latest/reference/gpu-arch/mi300.html"
    },
    {
      "title": "Published lesson data",
      "url": "https://semiaifoundry.com/ai-atlas/lesson-data/simt-active-lanes-09a7ed633dfdd537.json"
    },
    {
      "title": "Atlas releases and licensing",
      "url": "https://semiaifoundry.com/ai-atlas/licenses.html"
    },
    {
      "title": "GPU kernel and thread hierarchy",
      "url": "https://semiaifoundry.com/learn/atlas/kernel/"
    },
    {
      "title": "Streaming multiprocessor",
      "url": "https://semiaifoundry.com/learn/atlas/streaming-multiprocessor/"
    },
    {
      "title": "Occupancy and asynchronous tile pipelines",
      "url": "https://semiaifoundry.com/learn/atlas/gpu-occupancy-pipeline/"
    }
  ],
  "recordHash": "eb9ebd9d7c61340b2c77ef21d99101ad4f1838bc60dedea10dac64f974e4e06c",
  "contentFormat": "text/markdown",
  "content": "Processing architectures · Atlas v1.3.0\n\n# SIMT execution and divergent branches\n\nShares instruction issue across threads while tracking which lanes participate.\n\n[Explore in Atlas](https://semiaifoundry.com/ai-atlas/#simt-active-lanes)GPU execution group to package; schematic topology\n\nLearning objectiveDistinguish divergent control from inefficient address coalescing.\n\n## The mechanism\n\nA GPU kernel describes many threads, but execution resources issue instructions to groups of threads. Threads can have different addresses and control decisions; the machine uses active masks to determine which lanes participate in a particular instruction. When a group takes different branches, the paths may require separate masked execution. Coalescing is a different concern: neighboring addresses can be combined into efficient memory transactions even when the arithmetic is identical. NVIDIA warps and AMD wavefronts instantiate related ideas with generation-specific details. The useful comparison follows the same small operation through these groups, counting both idle lanes and transferred bytes.\n\n1.  Assign logical threads to an execution group under the target architecture’s documented rules.\n2.  Issue a common operation for the lanes whose predicates are active at that point.\n3.  If control flow splits, execute the required paths with masks and reconverge according to the program.\n4.  Translate each participating lane’s address into memory transactions; contiguous addresses usually waste fewer transferred bytes.\n5.  Compare useful outputs, active masks and actual transactions before attributing low performance to insufficient arithmetic units.\n\n## Science and assumptions\n\n### Masked execution efficiency\n\n$$\nu=\\frac{\\sum_i a_i}{\\sum_i s_i}\n$$\n\nMasked-execution efficiency divides all active lane participations by all issued lane slots over the same instructions.\n\nThe introduced $a_{i}$ and $s_{i}$ explicitly name the original $active_{\\mathrm{lanes}}$ and $issued_{\\mathrm{lane,slots}}$ quantities. The denominator must be nonzero.\n\nSymbols and units\n\nu\n\nActive-lane fraction over issued instructions\n\nfraction\n\naᵢ\n\nActive lanes in issued instruction i\n\nlane participations\n\nsᵢ\n\nIssued lane slots available in instruction i\n\nlane slots\n\ni\n\nIssued-instruction index\n\ninteger index\n\nCount lane participation over issued instructions. The resulting fraction measures mask waste and has no time units.\n\nAssumptions Equal-cost instructions in this toy metric; real latency and throughput differ across instructions.\n\n## Engineering example\n\nSynthetic eight-lane group: four lanes require one ten-instruction branch and four require a different ten-instruction branch. If both paths execute under masks, 80 useful lane-instructions occupy 160 issued slots.\n\n## Distinctions and tradeoffs\n\nDivergence and uncoalesced memory access are separate effects; either can occur without the other.\n\nGrouping similar requests can reduce divergence and scattered accesses, but rearranging them costs time and can increase request latency.\n\nIrregular token lengths, sparse experts and gathers can leave SIMD-style resources underused even when a model has a large total operation count.\n\n## Specifications and interfaces\n\nActive-lane fraction\n\nUseful participating lanes / group width\n\nA dimensionless instruction-level metric, distinct from chip utilization.\n\nTransaction efficiency\n\nRequested bytes / transferred bytes\n\nDepends on address alignment, access size and memory behavior.\n\n### Interfaces\n\nKernel threads Input\n\nPer-thread values, predicates and addresses\n\nExecution group Output\n\nMasked instructions and memory transactions\n\n## Check your understanding\n\n### All threads run the same instruction but read widely separated addresses. What is the likely issue?\n\n1.  Memory transaction inefficiency\n2.  Necessarily branch divergence\n3.  Mandatory out-of-order retirement\n\nAnswer and reasoning\n\nMemory transaction inefficiency\n\nUniform control can still generate many memory transactions when the addresses do not fall into shared transaction regions.\n\n## Evidence and scope\n\nThe eight-lane drawing is pedagogical, not a claimed NVIDIA or AMD execution-group width. Cross-vendor scheduling details are intentionally not equated.\n\nUse the execution investigation for the shared tensor-to-memory-to-result thread; no current standalone calculator models this lesson’s full mechanism.\n\n## Sources\n\n-   [CUDA C++ Programming Guide](https://docs.nvidia.com/cuda/cuda-c-programming-guide/)\n-   [AMD Instinct MI300 Series microarchitecture](https://rocm.docs.amd.com/en/latest/reference/gpu-arch/mi300.html)\n\n[Published lesson data](https://semiaifoundry.com/ai-atlas/lesson-data/simt-active-lanes-09a7ed633dfdd537.json) · [Atlas releases and licensing](https://semiaifoundry.com/ai-atlas/licenses.html)\n\n## Continue exploring\n\n### Foundations\n\n-   [GPU kernel and thread hierarchy](https://semiaifoundry.com/learn/atlas/kernel/)\n-   [Streaming multiprocessor](https://semiaifoundry.com/learn/atlas/streaming-multiprocessor/)\n\n### Related lessons\n\n-   [Occupancy and asynchronous tile pipelines](https://semiaifoundry.com/learn/atlas/gpu-occupancy-pipeline/)"
}
