Mi történik, ha egy 80-as évekből itt ragadt programozási nyelvet összekötsz a modern GPU-s párhuzamosítással? Az NVIDIA szerint: egy áprilisi tréfa… ami közben kellemetlenül jól demonstrálja, merre tart a CUDA.

Mi történt

Az NVIDIA Developer Blogon megjelent egy bejegyzés „CUDA Tile Programming Now Available for BASIC!” címmel, és rögtön az elején tisztázzák a csavart: a CUDA Tile BASIC-ben április 1-jei vicc, de közben valós, és ténylegesen futtatható. A cél nem az, hogy holnaptól BASIC-ben írj HPC-kódot, hanem hogy megmutassák: a CUDA Tile mennyire rugalmas és „nyelv-nyitott”.

A háttér: a bejegyzés szerint a CUDA 13.1 hozta be a CUDA Tile-t, amit „következő generációs, tile-alapú GPU programozási paradigmának” neveznek. A „tile” itt úgy képzeld el, mint amikor egy nagy adathalmazt kisebb, azonos méretű csempékre (blokkokra) vágsz, és ezekkel a csempékkel dolgozol. Nem egyes szálak (threadek) szintjén írod le a munkát, hanem csempék szintjén fogalmazod meg a műveletet.

Erre épül a cuTile BASIC, ami a poszt szerint a CUDA Tile IR (köztes reprezentáció) specifikációjára építve ad egy BASIC-szerű felületet tile-kernelfuttatáshoz. A blog kifejezetten kiemeli, hogy a tile-alapú modell „természetes illeszkedés” lehet egy olyan nyelvhez, mint a BASIC, ami eleve egy egyszerű, történelmileg egyszálú programozási világból jön.

A bejegyzés konkrét példát is ad: a klasszikus vektorösszeadás (A + B = C) CUDA C++-ban tipikusan úgy néz ki, hogy a programozó kézzel számolja ki, melyik szál melyik elemen dolgozik (thread index), és a kernelindításnál megadja a blokkok/szálak számát. Ezzel szemben cuTile BASIC-ben a példájuk szerint elég:

A BASIC-es mintában három extra fogalom jelenik meg: A futtatási folyamatot is leírják: a BASIC-függvényt cubin-ná fordítják (ez a CUDA-ökoszisztémában a GPU-n futtatható bináris forma), majd a GPU-n elindítják. A host oldali (CPU-s) „wrapper” kódot Pythonban képzelik el; a példában egy Python script fordít és futtat, majd ellenőrzi az eredményt.

Telepítéshez pedig egy PIP-parancsot adnak meg GitHubról:

`bash pip install git+https://github.com/nvidia/cuda-tile.git@basic-experimental `

Miért fontos

A BASIC rész nyilvánvalóan a showelem, de a bejegyzés igazi állítása az, hogy a CUDA Tile nyelvileg nyitott: nem csak CUDA C++-ból lehet GPU-kódot írni, hanem elvben bármilyen nyelv rá tud célozni, ha eljut a CUDA Tile IR-ig. Gondolj erre úgy, mint egy „közös villásdugóra”: mindegy, milyen készüléked van (milyen nyelven írsz), ha ugyanahhoz a csatlakozóhoz tudsz alkalmazkodni, be tudod dugni a konnektorba (a GPU futtatókörnyezetbe).

A tile-os megközelítés pedig azért érdekes, mert a példájuk alapján a fejlesztőnek kevesebbet kell a szálkezelés mikroszintjével foglalkoznia. A klasszikus CUDA-s gondolkodásban sokszor te felelsz azért, hogy „ki mit csinál” (thread indexek, grid/block konfigurációk, határfeltételek). A tile-modellben a hangsúly eltolódik: darabold fel az adatot értelmes csempékre, írd le a csempéken végzett műveletet, és a többit a rendszer intézi.

Mire figyelj

  1. Áprilisi tréfa, de nem kamu: a poszt explicit leírja, hogy viccnek szánták, mégis működő implementációról beszélnek. Érdemes így kezelni: demonstráció, nem hivatalos „BASIC a jövőben” irány.
  2. A lényeg a CUDA Tile és az IR: a BASIC csak azt mutatja meg, mennyire „nyelv-agnosztikus” lehet a megközelítés. Ha fejlesztőként nézed, az érdekes kérdés az, milyen eszközök és nyelvek fognak ráépülni erre a modellre.
  3. A tile-méret és a felosztás döntése továbbra is számít: még ha nem is te számolod a szálindexeket, attól még a teljesítményt befolyásolja, hogyan csempézed az adatot (a példában 128-as tile-ok szerepelnek).