From: Oliver Perks (o.perks_at_warwick.ac.uk)
Date: Wed Dec 02 2009 - 02:25:40 PST
I have been trying to get a simple example working where by a 2D array is striped across multiple processors. Where each column is placed on a different processor in a round robin fashion. I assumed that this would be achieved by the code provided by Ben, but the results suggest otherwise. Can anyone shine some light on what I would have considered a rather simple problem. shared int *shared * a; a = (shared int *shared *)upc_all_alloc(10,sizeof(shared int*)); upc_forall(int i = 0; i < 10; i++; i) { a[i] = upc_alloc(10*sizeof(shared int)); for(int j = 0; j < 10; j++) { a[i][j] = i * j; printf("Owner of %d - %d is %d\n", i, j, upc_threadof(&a[i][j])); } } return 0; When run on 2 threads: I would expect this to put even columns on thread 0, and odd columns on thread 1. Then each column be entirely constrained within that thread. 0 1 0 1 0 1 ..... 0 1 0 1 0 1 ..... 0 1 0 1 0 1 ..... 0 1 0 1 0 1 ..... 0 1 0 1 0 1 ..... . . . . . . . By what I actually get is that it is striping the column over the processors. 0 1 0 1 0 1 ..... 1 0 1 0 1 0 ..... 0 1 0 1 0 1 ..... 1 0 1 0 1 0 ..... 0 1 0 1 0 1 ..... . . . . . . . Any ideas. Regards Oliver