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

Reply via email to