00001 #include <stdio.h>
00002 #include <string.h>
00003
00004 #include <moc.h>
00005 #include <internal/imoc.h>
00006 #ifdef __SPU__
00007 #include <spu/moc_datatype_spu.h>
00008 #include <internal/spu/imoc_core_spu.h>
00009 #include <internal/spu/imoc_dma_spu.h>
00010 #include <internal/imoc_macros.h>
00011 #else
00012 #include <ppu/moc_datatype_ppu.h>
00013 #include <internal/ppu/imoc_core_ppu.h>
00014 #include <internal/ppu/imoc_dma_ppu.h>
00015 #include <internal/ppu/imoc_macros_ppu.h>
00016 #endif
00017
00018 int MOC_ISend(void* buf, int count, MOC_Datatype datatype, int dest, int tag,
00019 MOC_Comm comm, MOC_Request *request)
00020 {
00021 int bytecount;
00022
00023 if (((datatype & 0xF0) >> 4) == 0)
00024 bytecount = count;
00025 else
00026 bytecount = count * (((datatype & 0xF0) >> 4) * 2);
00027
00028
00029 if (bytecount <= MOC_SEND_TRESHOLD)
00030 {
00031 uint32_t err = MOC_Bsend(buf, count, datatype, dest, tag, comm);
00032 if (!err)
00033 {
00034 request->request_type = MOC_REQ_TYPE_ISSEND;
00035 request->request_data.issend_request.isFinished = 1;
00036 request->request_data.issend_request.source = node_handle.rank;
00037 request->request_data.issend_request.tag = tag;
00038 request->request_data.issend_request.message_size = bytecount;
00039 }
00040 else
00041 {
00042 request->request_data.issend_request.isFinished = 1;
00043 return err;
00044 }
00045 }
00046
00047 else
00048 {
00049 return MOC_ISsend(buf, count, datatype, dest, tag, comm, request);
00050 }
00051
00052 return 0;
00053 }
00054