The prefix of functions and data-structures is not 'MPI_' as stated by the MPI-standard. Instead it is 'MOC_' to allow the usage of another MPI-Library (e.g. to connect several playstations) and to stress that this implementation is not fully conform with the MPI-standard.
MPI-applications (Version 1.3) are started using mpiexec/mpirun and normally only one binary is executed on all MPI-nodes. Because PPU- and SPU-instructions aren't compatible at least two executables (and two compilers) are needed. Also SPU-threads have to be initialized and started by the PPU. Because of this the SPU-binaries are embedded into the PPU-binary and started by this PPU-binary during runtime. In this library this concept is also used. So you have to program at least one PPU- and one SPU-program, embed the SPU-program into the PPU-executable and add the SPU-program-handle to the MOC-environment (see
MOC_Add_spu_thread) during runtime before calling MOC_Init.
Because of the internal design of this implementation the order of incoming messages cannot be preserved in all cases. Currently the correct order is only preserved from messages from the same source, with the same message-tag and same communicator.
According to the MPI-standard there should be at least 32767 tags available. But to save memory we use only one byte to encode the message-tag. So there are only 256 usable message-tags. Message-tags greater than 249 are reserved for internal purposes.
According to the MPI-standard there should be hardly any limitations in the number of possible simultaneous transfers. It is stated that only in pathological cases the maximum of possible outstanding transfers should be reached. Because the resources of an SPU are very limited our implementation has a tight limit of possible simultaneous transfers. Although the upper-limit can be changed using
MOC_Set_queue_size, it is limited by the 256 KByte of local-storage of a SPU. There is also a limit of the number of simultaneous DMA-calls, because for each DMA-operation an exclusive DMA-tag is used and there are only 32 DMA-tag (on the PPU only 15) available.
The parameters of the init-function for the SPU does not match the parameters defined by the MPI-standard (see
MOC_Init (SPU))