Κρητικός GPU Compiler
Σκοπική Επισκόπηση: Η Κρητική είναι ένας ανοικτός εργαστήριος ερευνής. Η κλινική φαρμακολογία (εγκυκλοπαίδευση των επιστήμενων του vancomycin, δημοσίευση προσδοκίας του PBPK) είναι η κύριος δημοσίων προσδοκίας στην εκκάτουσα κατάσταση της ιστοσελίδας — όχι τα χρήστη της GPU.
Κρητικός (Κρητικός) = Κρήτη. Υπό την μορφή της θρέασης της Αριάδνης διά της Λάβρυστου του Κνωσού, αυτό είναι ο ονομαστικός δρόμος για την εργασία του Σουνιου για τον κωμπυλήτη GPU: επιπέδους βελτίσματα προς την θεσία, ανταποκατάσταση σε κατάλυση CPU, στοιχεία μορφής PTX/CUBIN στο αντίκτυπο, και πακέτα αντικειμένων.
Εκφύλλωση για την εκεινή προσοπολογία
Μερικές γλώσσες αποτυχούν στην προσπολεψή των GPU και απόδειξουν την τρέχουσα γραμμή διάρκειας. Ο Kretikos την προσφέρει την εντομία: αναφέρει μία γκαρνηρά για GPU ως μια προσοπολογική δυνάμη της γλώσσας και συνδέει κάθε πρόσβαση σε καταναλώσιμο αντικείμενο ή εντολή.
- Η συμβολοποίηση των εξοριζόμενων συνθηκών στην x-στήλη καταναλώσιμα σήμερα:
gpu_thread_id_x(),gpu_block_id_x(),gpu_block_dim_x(),gpu_sync_threads() - Η συμβολοποίηση των y/z εξοριζόμενων συντελεσμάτων επισημαζομένη; η προκαθορισμένη κατανάλωση στην CPU υποστήριξη στοιχεία συνδετικά
- Η προκαθορισμένες σειρές συντελεσμάτων PTX ζωντανή μέσω
kretikos emit-ptxχρησιμοποιώντας τον εντοπικό καταναλώσιμοself-hosted/gpu/ptx.sioεμιττόρ - Η προκαθορισμένες σειρές συντελεσμάτων CUBIN ζωντανή μέσω
kretikos emit-cubinχρησιμοποιώντας τον εντοπικόself-hosted/gpu/nvidia_bare.sioεμιττόρ - Η προκαθορισμένες συνθηκές αντικειμένων ζωντανή μέσω
kretikos bundle, με διαδοχικότητα των hashes των PTX/CUBIN και εξεινδυτικούς δενεις - Ο Kretikos εξηγούνται από τον ενεργό
bin/souc/souc-linux-x86_64καταναλώσιμο για την συγγραφή των μικρών εμιττόρ δραινερών - Η διαδοχική δρομολογία στην CPU είναι διαδοχική και σειριακή; δεν είναι ένα παραλληλοποιητικό συμβολολογικό γκαρνηρά για GPU
- Η κατοχή της επιχείρησης — η εμιττόρ PTX, η επικατάσταση σε SPIR-V, η γενερατορ του CUDA ELF — ζωντανή στον κατάλογο
self-hosted/gpu/
Τι αναδείχει ο Kretikos
Μία γλώσσα που επιτρέπει την χρήση συνεργασίας περιεχομένων επιστημονικής προγραμματισμού δεν πρέπει να προσθέτει την ενδιάλεκτρη πιστώση του GPU σε ένα κορίτασι που δεν κατανόησει τον χρήστη. Ο Kretikos δημοσιεύει ότι ο Sounio μπορεί:
- να αντικατάστησε την διάρκεια θεριντήσεων ως συντακτική στην επιλογή κώδικα, όχι ως τέχνη μαγική στο εξυπηρέτημα του δραινού
- να κατασκευάσει σχεδον προκαθορισμένες σημείωσεις αρτεριά της PTX και CUBIN από κώδικα αυτοπροσωπικό
- να διεκτικά εκτελέσει κερνέλες σε μίαν ανακατοπή συνεργασίας CPU σειριακή με τον συντακτικό και την προσδοκία της εκτέλεσης
- να τηρήσει την συνδυασία του κωδικοποίητη, του εξυπηρέτημα και της ιστορίας μετά την προκαταλήψεω της πραγματικής
Συντακτική βαθιάς μεταλλικής
kernel fn vec_add(n: i64) with GPU {
let tid = gpu_thread_id_x()
let bid = gpu_block_id_x()
let bdim = gpu_block_dim_x()
let i = bid * bdim + tid
if i >= n { return }
// Αυτός ο θρέαδος υπολογίζεται για το στοιχείο i.
}
fn main() with GPU, IO {
let grid = (16, 1, 1)
let block = (64, 1, 1)
perform GPU.launch(vec_add, grid, block)(1024)
perform GPU.sync()
}
Αυτό είναι η επιστροφή παρουσίασης κατανόησης σήμερα: 1D δείκηση και αντικατάσταση CPU δημιουργική. Οι περισσότερες περισσότερες δείκησεις y/z και περισσότερες επιφάνειες μνήμης είναι αντίστοιχες διαφορετικοί διαδρομοί προκαθορισμού.
Επισημογενής εντομές
# Συνδυαστήρηση και εκτελεση σε κατάσταση συνεχίστησης σειριαλ CPU (χωρίς απαιτώματα για υδραικό ΓΕΥ ΡΗΣΙΜΟΥ)
souc examples/kernel_source_level.sio /tmp/kretikos_demo.elf
/tmp/kretikos_demo.elf
```markdown
# Εκτελέστε προκαθορισμένες σχεματισμένες τροπολογίες PTX (ευθεία, χωρίς χρήση ΓΡΑΦΙκής Υπολογιστήριου)
kretikos emit-ptx vec_add -o /tmp/kretikos.ptx
kretikos emit-ptx vec_sub -o /tmp/kretikos.ptx
kretikos emit-ptx vec_mul -o /tmp/kretikos.ptx
kretikos emit-ptx vec_div -o /tmp/kretikos.ptx
kretikos emit-ptx vec_add_f64 -o /tmp/kretikos.ptx
kretikos emit-ptx fma -o /tmp/kretikos.ptx
kretikos emit-ptx fma_f64 -o /tmp/kretikos.ptx
kretikos emit-ptx store_u32_const -o /tmp/kretikos.ptx
Εκτελέστε προκαταρθετείς σχεματολογίες Metal/MSL (αυτόνομης διαδρομής, χωρίς χρήση στους macOS)
kretikos emit-metal vec_add -o /tmp/kretikos.metal kretikos emit-metal ossm_oct_step -o /tmp/kretikos.metal kretikos emit-metal sedenion_cd_step -o /tmp/kretikos.metal
Εκτελέστε το προκαλομένο vec_add_f32 CUBIN σαρλάκι
kretikos emit-cubin vec_add_f32 -o /tmp/kretikos.cubin
# Εκδόσει μία συνθετική συνθήτικο πακέτο με κρυφές και γραμμές
kretikos πακέτο -o /tmp/kretikos-πακέτο
Επιπλέον διασφάλματιση του επιλογής χρήσης και της εκκάτουσας ρουτίνας όταν ο χωρός διαφορετικά προσφέρει τους εργαλείους
kretikos πακέτος -o /tmp/kretikos-validated-bundle —validate-toolchain —validate-runtime
Επιλογή του PTX με την επισκευή GPU (περιοχή πατριάρχης συνδυασμάτων)
εξοίκτηση SOUC_GPU_BIN=”$(pwd)/artifacts/omega/souc-bin/souc-linux-x86_64-gpu” “$SOUC_GPU_BIN” κάνει συγκευή examples/kernel_source_level.sio —backend gpu -o /tmp/kretikos.ptx
## Γιατί αυτό συνεχίζεται να είναι σημαντικό
Η εργασία με τις GPU είναι όπου η παράδοση γλώσσας προκαλεί την απόλυτη απόλυξη. Είναι εύκολο να γράψεις εινοπλίες ή να υποσυντήσεις την πολυτετριστική συνδυασία. Είναι περίπλοκο να προσδράσεις έναν συνεδρικό κατασκευή καταναλώστης, έναν περίμετρο της GPU και έναν διαδρόμο που εμφανίζεται προς τον κόσμο, συγκεντρωμένος σε κατάσταση συγκλάσεων κατά την ανάλυση των κατάστασεων της στοργής και των παραμέτρων και της φόρτωσης των μονάδων PTX.
Το Kretikos είναι κατανομικό όχι μόνο για την προσύνδεσμο υπηρεσιών, αλλά και για την προκαλύσει της γλώσσας να αναφέρει αν η διανοία της συνεργείας με τα αντικείμενα της προσοχής στην προσοχή αυτή συνεργείας.
## Τετράνομα επομένων
- ελεγχόμενες κατασκευές εξωριστής: `gpu_thread_id_x`, `gpu_block_id_x`, `gpu_block_dim_x`, `gpu_sync_threads` — εξουσιαζόμενος κωμπιλλέρ
- ενεργοσυνεργή στοιχεία για CPU: τα y/z thread/block IDs επιστρέφουν `0`; τα y/z block dimensions επιστρέφουν `1`
- μορφογραφίες PTX: `kretikos emit-ptx` με 6 σχéματα (vec_add, vec_sub, vec_mul, vec_div, vec_add_f64, fma); πιο λειτουργική εμισσή μορφογραφία PTX με `build --backend gpu` (ελεγχόμενο αποτέλεσμα GPU)
- μορφογραφίες MSL: `kretikos emit-metal` με 3 σχéματα (vec_add, ossm_oct_step, sedenion_cd_step) από την εντοπισμένη εμιττοποίηση κωμπιλλέρα
- μορφογραφίες CUBIN: `kretikos emit-cubin` (εντοπισμένη εμιττοποίηση)
- πακέτος αποτέλεσμα: `kretikos bundle` εμισσάνει PTX+CUBIN και `sounio.kretikos.bundle.v1`
- επιβεβαιωμένες τargets: CUDA `sm_80`, ROCm `gfx942`
## Η γραμμή διαγραμμάτων
Ο Kretikos δεν προσφέρει:
- ότι κάθε κατάστημα GPU είναι προσωπικά τελικό
- ότι οι κείμενοι μεταβολής σε περιόδους που του τέλειο του προσφέρονται και τον PTX για όλα τα σχήματα (τα διαθέσιμα τωρατά)
- ότι `gpu.alloc<T>()` ή τεχνολογίες κοινού μνήμης ελεγχούν την εκδόσει πολλαπλής προσοχής
- ότι η καταστήρευση της CPU μοιράζεται με κατάλληλο στοιχείο συνδυασμού GPU
Η προσοποίηση του προσώπου είναι νερότερη και επομένως εκτενωμένη: υπάρχει ένας λεπτομέρης κατασκευής κωδικοποίησης GPU κατάλληλος στόχος, και το τρέχον παράδειγμα CLI του Kretikos είναι ένας στήλευμα προκαθορισμένος μορφής, όχι κατά κάποιο συντηρητικό κείμενο του χρήστη. Η επιτροπή της χρήστη και της εκτελέσεως της συσκευής υποστηρίζονται μόνο για τα επιλεγμένα στήλευματα; δεν υποτελούν επιτροπές για τα κείμενα του χρήστη που γράφουν την κείμενο του GPU.