00001 #include <moc.h>
00002
00003 #ifdef __SPU__
00004 #include <internal/spu/imoc_core_spu.h>
00005 #else
00006 #include <internal/ppu/imoc_core_ppu.h>
00007 #endif
00008
00009 int MOC_Bcast(void* buffer, int count, MOC_Datatype datatype, int root,
00010 MOC_Comm comm)
00011 {
00012 MOC_Status status;
00013
00014 if (comm == MOC_COMM_SELF)
00015 return 0;
00016
00017 if (node_handle.rank == root)
00018 {
00019 int t, err;
00020 struct moc_request_struct requests[node_handle.comm_size];
00021
00022 for (t = 0; t < node_handle.comm_size; t++)
00023 {
00024 if ((err = MOC_ISend(buffer, count, datatype, t, MOC_BCAST_TAG,
00025 comm, &requests[t])) != 0)
00026 return err;
00027 }
00028 for (t = 0; t < node_handle.comm_size; t++)
00029 {
00030 if ((err = MOC_Wait(&requests[t], &status)) != 0)
00031 return err;
00032 }
00033 return 0;
00034 }
00035
00036 else
00037 {
00038 return MOC_Recv(buffer, count, datatype, root, MOC_BCAST_TAG, comm,
00039 &status);
00040 }
00041 }
00042