CUDA Kernel Optimizer

Het model kan zowel de kernel-code als de per-geval launch-configuraties wijzigen. Een onafhankelijke C++-harness compileert kernels met NVRTC, start deze via de CUDA Driver API en slaat de output op. Python wordt gebruikt voor de vergelijking en de selectie van kandidaten.

Hoe het werkt

  1. Initialisatie: Laad of genereer een signatuur, inputgevallen, een referentie-kernel en een initiële kernel.
  2. Evaluatie: Voer de referentie-kernel uit en evalueer de initiële implementatie.
  3. Iteratie: Stel een wijziging voor, compileer deze, vergelijk de output met NumPy en meet de latentie van de kernel.
  4. Verfijning: Voer de resultaten terug in de volgende poging; herstel ongeldige kandidaten binnen het iteratiebudget.
  5. Finalisatie: Sla de snelste gevalideerde kandidaat, de uitvoeringsgeschiedenis en een timing-heatmap op.

Elk geval moet voldoen aan de validatie. Voor de rangschikking wordt het meetkundig gemiddelde van de latentie over de prestatiegevallen gebruikt; kleine correctheidsgevallen beïnvloeden de score niet. De timing is standaard ingesteld op 10 opwarmingsruns en 100 gemeten runs met behulp van CUDA-events. Compilatietijd en profiler-replay-timings zijn uitgesloten van de rangschikking.

Setup

De tool is ontwikkeld op Windows met een RTX 3060 Laptop GPU. De volgende vereisten zijn noodzakelijk:

  • Python 3.12+
  • Een NVIDIA GPU en een compatibele CUDA Toolkit/driver
  • CMake 3.24+
  • Een C++17-compiler
  • Een OpenAI API-sleutel

De onderstaande build-commando's maken gebruik van Visual Studio 2026 met de geïnstalleerde C++ tools.

Voer vanuit de root van de repository het volgende uit:

python -m venv .venv
.venv\Scripts\python -m pip install -r optimizer_agent/requirements.txt
cmake -S cuda_test_harness -B cuda_test_harness/build -DCMAKE_BUILD_TYPE=Release
cmake --build cuda_test_harness/build --parallel

Maak vervolgens een .env-bestand aan in de root van de repository:

OPENAI_API_KEY=your-key-here

Uitvoeren

Start de optimizer met het volgende commando:

.venv\Scripts\python optimizer_agent/optimizer_agent.py --description "Single-precision GEMM with rectangular matrices." --max-iterations 7

Het standaardmodel is gpt-5-mini met een medium reasoning-inspanning. API-gebruik wordt gefactureerd aan uw account. Gebruik -h voor alle opties, of --config optimizer_agent/example.json voor het meegeleverde configuratievoorbeeld.

U kunt uw eigen workload-componenten leveren via --signature, --reference, --initial-kernel en --input-cases. Ontbrekende componenten worden afgeleid of gegenereerd. Om verder te gaan vanaf een eerdere run met de opgeslagen inputs:

.venv\Scripts\python optimizer_agent/optimizer_agent.py --description "Single-precision GEMM with rectangular matrices." --input-cases results/run-001/input_cases.json --reference results/run-001/reference.cu --initial-kernel results/run-001/best.cu --max-iterations 7

Dit voorbeeld gaat ervan uit dat de eerdere run reference.cu heeft gegenereerd; geleverde referenties worden opgeslagen als supplied-reference.cu. Input-manifesten behouden paden naar hun binaire data, dus zorg dat deze bestanden beschikbaar blijven.

Optionele vlaggen

  • --use-nsight: Profileert een prestatiegeval na elke geldige kandidaat en stelt profiler-tools beschikbaar voor het model. Vereist Nsight Compute en toestemming om toegang te krijgen tot GPU-prestatietellers.
  • --nvidia-research: Haalt NVIDIA-richtlijnen op voordat kernels worden gegenereerd.

Voorbeelden

  • Float32 GEMM op een RTX 3060 Laptop GPU, met NVIDIA research en Nsight Compute ingeschakeld.
  • Run 022
  • Run 023
  • Optimalisatie van de gegenereerde startkernel.
  • Continuering vanaf de beste kernel van run 022 met dezelfde inputs en referentie.

Resultaten en beperkingen

Elke sessie krijgt een directory onder results/run-NNN/ die het volgende bevat:

  • Kernel-bronbestanden
  • Verzoeken (requests)
  • Input/output-data
  • Model/tool-responsen
  • history.json en summary.json

Succesvolle runs exporteren best.cu, replay-verzoeken per geval en heatmap.png/heatmap.svg. Nsight-rapporten worden opgeslagen wanneer profiling is ingeschakeld.

Dit is een experimentele optimizer voor individuele kernels. Het passeren van de geleverde testgevallen bewijst geen algemene correctheid, en een gegenereerde referentie is geen onafhankelijk correctheid-orakel. Verbeteringen zijn afhankelijk van de workload; er is momenteel geen vergelijking opgenomen met cuBLAS of andere vendor-libraries. Houd de GPU verder ongebruikt bij het vergelijken van timings.

Waarschuwing: Gegenereerde input-scripts worden lokaal uitgevoerd als Python-subprocessen zonder sandbox. Gegenereerde CUDA-kernels worden eveneens op de lokale GPU uitgevoerd.

Workflow-grafiek

De grafiek is gegenereerd vanuit de gecompileerde LangGraph-workflow met Nsight-profiling ingeschakeld. Gestippelde lijnen zijn conditionele routes. Zonder --use-nsight gaat de evaluatie direct naar de volgende poging of naar de finalisatie; NVIDIA research wordt overgeslagen tenzij --nvidia-research is ingesteld.