summaryrefslogtreecommitdiff
path: root/std/cuda.zc
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-19 22:18:33 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-19 22:18:33 +0000
commit3af5dcf34d705cc52c1ffe5b85c2a90b5104e4c9 (patch)
tree8ad5b61b2818baf1af80c0a725622cda2c3fa1b8 /std/cuda.zc
parent959a27fd763e2e960ef31adf891118a261bad1c7 (diff)
Improve 'std/cuda.zc' and 'std/vec.zc' + iteration...
Diffstat (limited to 'std/cuda.zc')
-rw-r--r--std/cuda.zc85
1 files changed, 85 insertions, 0 deletions
diff --git a/std/cuda.zc b/std/cuda.zc
index 851acb3..dbb1fe6 100644
--- a/std/cuda.zc
+++ b/std/cuda.zc
@@ -1,5 +1,7 @@
include <cuda_runtime.h>
+import "./string.zc"
+import "./mem.zc"
// Memory Management.
@@ -97,3 +99,86 @@ fn cuda_last_error() -> int {
fn cuda_ok() -> bool {
return cuda_last_error() == 0;
}
+
+
+raw {
+ void _z_cuda_get_props(int dev, char* name, size_t* total_mem, int* sm_count, int* major, int* minor, int* max_threads, int* warp_size) {
+ struct cudaDeviceProp prop;
+ if (cudaGetDeviceProperties(&prop, dev) == 0) {
+ strcpy(name, prop.name);
+ *total_mem = prop.totalGlobalMem;
+ *sm_count = prop.multiProcessorCount;
+ *major = prop.major;
+ *minor = prop.minor;
+ *max_threads = prop.maxThreadsPerBlock;
+ *warp_size = prop.warpSize;
+ }
+ }
+}
+
+extern fn _z_cuda_get_props(dev: int, name: char*, mem: usize*, sm: int*, maj: int*, min: int*, max_t: int*, warp: int*);
+
+struct CudaDeviceProp {
+ name: String;
+ total_global_mem: usize;
+ multi_processor_count: int;
+ major: int;
+ minor: int;
+ max_threads_per_block: int;
+ warp_size: int;
+}
+
+struct CudaMemInfo {
+ free: usize;
+ total: usize;
+}
+
+fn cuda_device_properties(device_id: int) -> CudaDeviceProp {
+ var mem: usize = 0;
+ var sm: int = 0;
+ var maj: int = 0;
+ var min: int = 0;
+ var max_t: int = 0;
+ var warp: int = 0;
+
+ var name_ptr = alloc_n<char>(256);
+ name_ptr[0] = 0;
+
+ _z_cuda_get_props(device_id, name_ptr, &mem, &sm, &maj, &min, &max_t, &warp);
+
+ var s = String::new(name_ptr);
+ free(name_ptr);
+
+ return CudaDeviceProp {
+ name: s,
+ total_global_mem: mem,
+ multi_processor_count: sm,
+ major: maj,
+ minor: min,
+ max_threads_per_block: max_t,
+ warp_size: warp
+ };
+}
+
+fn cuda_driver_version() -> int {
+ var d: int = 0;
+ cudaDriverGetVersion(&d);
+ return d;
+}
+
+fn cuda_runtime_version() -> int {
+ var r: int = 0;
+ cudaRuntimeGetVersion(&r);
+ return r;
+}
+
+fn cuda_mem_info() -> CudaMemInfo {
+ var f: usize = 0;
+ var t: usize = 0;
+ cudaMemGetInfo(&f, &t);
+ return CudaMemInfo { free: f, total: t };
+}
+
+fn cuda_device_reset() {
+ cudaDeviceReset();
+}