Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  1. # nim c --threads:on test_par_simple.nim
  2.  
  3. ### defs
  4. proc sizeUT(dim: int): int =
  5. return (dim * (dim+1) / 2).int
  6.  
  7. proc indexUT(i: int, j: int): int =
  8. return i + (j * (j+1) / 2).int
  9.  
  10. iterator iterUTindex(dim: int): tuple[i: int, j: int, ij: int] =
  11. var
  12. i: int = 0
  13. j: int = 0
  14. ij: int = 0
  15. while ij < sizeUT(dim):
  16. yield (i, j, ij)
  17. inc(ij)
  18. if i < j:
  19. inc(i)
  20. else:
  21. i = 0
  22. inc(j)
  23.  
  24. proc ijval(i: int, j: int): float =
  25. (i * j).float
  26.  
  27. ### RUN
  28. import threadpool
  29.  
  30. const
  31. dim: int = 100
  32. i: int = 3
  33. j: int = 4
  34.  
  35. var
  36. UT: seq[float] = newSeq[float](sizeUT(dim))
  37.  
  38. ## set UT values
  39. {.experimental.}
  40. parallel:
  41. for index in iterUTindex(dim):
  42. if(index.ij <= UT.high): # artificial hint for OK bound check
  43. UT[index.ij] = spawn ijval(index.i,index.j) # TODO hint for index.ij disjoint check
  44.  
  45. ## print result
  46. echo UT[indexUT(i,j)]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement