problem solved!! now i can use openacc in nim! import strformat {.emit:""" #include "openacc.h" """.} const num = 10 proc test() = let a = cast[ptr[UncheckedArray[float32]]](alloc0(sizeof(float32)*num)) let b = cast[ptr[UncheckedArray[float32]]](alloc0(sizeof(float32)*num)) let c = cast[ptr[UncheckedArray[float32]]](alloc0(sizeof(float32)*num)) for i in 0 ..< num: a[i] = i.float32 b[i] = (num - i).float32 echo "a[7] = ", $a[7], " | b[7] = ", $b[7] echo "before : c[7] = ", $c[7] const annot = "\n#pragma acc data " & fmt"copyin(a[:{num}],b[:{num}],c[:{num}]) " & "\n#pragma acc kernels" {.emit:annot.} block: for i in `||`(0,num-1, ""): for j in `||`(0,num-1,""): c[i] += a[i] * b[j] {.emit:"\n#pragma acc data " & fmt"copyout(c[:{num}])".} echo "after : c[7] = ", $c[7] dealloc(a) dealloc(b) dealloc(c) when isMainModule: test() Run
outputs: a[7] = 7.0 | b[7] = 3.0 before : c[7] = 0.0 after : c[7] = 385.0 Run