if i use array instead of ptr uncheckedarray, then i don't need dealloc. right??
import strformat
{.emit:"""
#include "openacc.h"
""".}
const num = 128
proc test() =
var a : array[num, cdouble]
var b : array[num, cdouble]
var c : array[num,array[num, cdouble]]
var d : array[num, cdouble]
for i in 0 ..< num:
a[i] = i.cdouble
b[i] = (num - i).cdouble
echo "a[7] = ", $a[7], " | b[7] = ", $b[7]
echo "before : c[7][7] = ", $c[7][7]
const annot =
"\n#pragma acc data " &
fmt"copyin(a[:{num}],b[:{num}],c[:{num}][:{num}],d[:{num}]) " &
"\n#pragma acc kernels"
{.emit:annot.}
block:
for jj in `||`(0,num-1,""):
d[jj] = jj.cdouble
for i in `||`(0,num-1, ""):
for j in `||`(0,num-1,""):
c[i][j] = a[i] * b[j] + d[j]
{.emit:"\n#pragma acc data " & fmt"copyout(c[:{num}][:{num}])".}
echo "after : c[7][7] = ", $c[7][7]
when isMainModule:
test()
Run
a[7] = 7.0 | b[7] = 121.0 before : c[7][7] = 0.0 after : c[7][7] = 854.0
Run