- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I underdstand that cilk_spawn and cilk_for can be nested. What I would like to know is what do you do about nested for loops? It seems that it might be okay to make the outer loop cilk_for, but oneshould not make the inner loop cilk_for.
Also, I have some legacy code that has some loops other than for, such as do while. Is the anything I can do about them? Is there some instruction for rewriting these loopsto for loops?
Newport_j
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
> I underdstand that cilk_spawn and cilk_for can be nested. What I would like to know is what do you
>do about nested for loops? It seems that it might be okay to make the outer loop cilk_for, but one
>should not make the inner loop cilk_for.
Nested cilk_for loops are no different from nesting cilk_for and cilk_spawn. Again, it's a balance thing. If you've got too little work in your spawned code, you'll have too much overhead. For example, in the loop
> Also, I have some legacy code that has some loops other than for, such as do while. Is the anything
>I can do about them? Is there some instruction for rewriting these loops to for loops?
I've seen examples that gathers data in "chunks" together in a do/while loop, and then uses a cilk_for to parallelize the chunk. Something like:
>do about nested for loops? It seems that it might be okay to make the outer loop cilk_for, but one
>should not make the inner loop cilk_for.
Nested cilk_for loops are no different from nesting cilk_for and cilk_spawn. Again, it's a balance thing. If you've got too little work in your spawned code, you'll have too much overhead. For example, in the loop
for (int x = 0; x < xmax; x++) { for (int y = 0; y < ymax; y++) { for (int z = 0; z < zmax; z++) { [insert work on 3D points here] } } }I'd probably only make the outer loop a cilk_for loop, assuming that xmax was big enough, and there weren't race conditions introduced by parallelizing the outermost loop. The matrix-multiple sample gives an example of this.
> Also, I have some legacy code that has some loops other than for, such as do while. Is the anything
>I can do about them? Is there some instruction for rewriting these loops to for loops?
I've seen examples that gathers data in "chunks" together in a do/while loop, and then uses a cilk_for to parallelize the chunk. Something like:
while (! done) { data a[256]; int i = 0; while ((! done) && (i < 256)) { a[i++] = generate_data(); } cilk_for (int j = 0; j < i; j++) { process_data(a); } } - Barry
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page