Objet : Developers list for StarPU
Archives de la liste
- From: alankrutha reddy <alankruthareddy46@gmail.com>
- To: starpu-devel@lists.gforge.inria.fr
- Subject: [Starpu-devel] Starpu-mpi
- Date: Mon, 22 Jul 2013 17:13:48 +0530
- List-archive: <http://lists.gforge.inria.fr/pipermail/starpu-devel>
- List-id: "Developers list. For discussion of new features, code changes, etc." <starpu-devel.lists.gforge.inria.fr>
Hi,
I have tried the attached program which counts the no. of prime numbers with Starpu-MPI. I'm not getting result. I'm not understanding where is the problem. Can anyone help me.
--
Regards
Alankrutha
#include<starpu_mpi.h> #include<stdio.h> #include<math.h> #define LIMIT 30 #define FIRST 0 void prime_cpu_func(void *descr[], void *cl_arg) { int *mystart_1 = (int *)STARPU_VARIABLE_GET_PTR(descr[0]); int *stride_1 = (int *)STARPU_VARIABLE_GET_PTR(descr[1]); int *pc_1 = (int *)STARPU_VARIABLE_GET_PTR(descr[2]); int n, mystart, stride, pc; mystart = *mystart_1; stride = *stride_1; pc = *pc_1; for(n=mystart; n<=LIMIT; n+=stride) { int i,squareroot, count=0; if (n>10) { squareroot = (int) sqrt(n); for (i=3; i<=squareroot; i=i+2) if ((n%i)==0) count=0; count++; } else count=0; if(count) pc++; } *pc_1 = pc; } static struct starpu_codelet cl = { .where = STARPU_CPU, .cpu_funcs = {prime_cpu_func, NULL}, .nbuffers = 3, .modes = {STARPU_RW, STARPU_RW, STARPU_RW} }; int main(int argc, char **argv) { int my_rank, size; int pc, pcsum; int mystart, stride, n; int ret = starpu_init(NULL); STARPU_CHECK_RETURN_VALUE(ret, "starpu_init"); starpu_mpi_initialize_extended(&my_rank, &size); if(((size%2) != 0)||((LIMIT%size) != 0)) { printf("sorry - this requires an even number of tasks.\nevenly divisible into %d. Try 4 or 8.\n",LIMIT); starpu_mpi_shutdown(); starpu_shutdown(); } mystart = (my_rank*2)+1; stride = size*2; pc=0; starpu_data_handle_t data_handle1, data_handle2, data_handle3; starpu_variable_data_register(&data_handle1, 0, (uintptr_t)&mystart, sizeof(mystart)); starpu_variable_data_register(&data_handle2, 0, (uintptr_t)&stride, sizeof(stride)); starpu_variable_data_register(&data_handle3, 0, (uintptr_t)&pc, sizeof(pc)); struct starpu_task *task = starpu_task_create(); task->cl = &cl; task->callback_func =NULL; task->handles[0] = data_handle1; task->handles[1] = data_handle2; task->handles[2] = data_handle3; ret = starpu_task_submit(task); if (STARPU_UNLIKELY(ret == -ENODEV)) { printf("No worker may execute this task\n"); exit(0); } if(my_rank == FIRST) { pc+=4; MPI_Reduce(&pc, &pcsum, 1, MPI_INT, MPI_SUM, FIRST, MPI_COMM_WORLD); } if(my_rank > FIRST) { MPI_Reduce(&pc, &pcsum, 1, MPI_INT, MPI_SUM, FIRST, MPI_COMM_WORLD); } starpu_mpi_shutdown(); starpu_shutdown(); return 0; }
- [Starpu-devel] Starpu-mpi, alankrutha reddy, 22/07/2013
- Re: [Starpu-devel] Starpu-mpi, Nathalie Furmento, 22/07/2013
Archives gérées par MHonArc 2.6.19+.