From: QMar=EDa_J._Mart=EDn=22?= (maria.martin.santamaria_at_udc.es)
Date: Wed Dec 02 2009 - 06:09:40 PST
The a pointer is incorrectly declarated. Try: shared[] int *shared * a; a = (shared[] int *shared *)upc_all_alloc(10,sizeof(shared int*)); Regards, Mar�a El 02/12/2009, a las 11:25, Oliver Perks escribi�: > 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 > > > >