Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # nim c --threads:on test_par_simple.nim
- ### defs
- proc sizeUT(dim: int): int =
- return (dim * (dim+1) / 2).int
- proc indexUT(i: int, j: int): int =
- return i + (j * (j+1) / 2).int
- iterator iterUTindex(dim: int): tuple[i: int, j: int, ij: int] =
- var
- i: int = 0
- j: int = 0
- ij: int = 0
- while ij < sizeUT(dim):
- yield (i, j, ij)
- inc(ij)
- if i < j:
- inc(i)
- else:
- i = 0
- inc(j)
- proc ijval(i: int, j: int): float =
- (i * j).float
- ### RUN
- import threadpool
- const
- dim: int = 100
- i: int = 3
- j: int = 4
- var
- UT: seq[float] = newSeq[float](sizeUT(dim))
- ## set UT values
- {.experimental.}
- parallel:
- for index in iterUTindex(dim):
- if(index.ij <= UT.high): # artificial hint for OK bound check
- UT[index.ij] = spawn ijval(index.i,index.j) # TODO hint for index.ij disjoint check
- ## print result
- echo UT[indexUT(i,j)]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement