commit 9ce8b5485d99e9c51b988a2a422f3fb8f20b281e Author: root Date: Thu Oct 26 19:57:24 2017 +0200 Initial commit. diff --git a/Makefile b/Makefile new file mode 100755 index 0000000..beaadf8 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ + + + +######################################################################## +# Target +######################################################################## + +DIRS = src/spu src/ppu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/Makefile.old b/Makefile.old new file mode 100755 index 0000000..1963752 --- /dev/null +++ b/Makefile.old @@ -0,0 +1,26 @@ + + +doc_all: doc_enduser doc_full doc_web + +doc_developer: + doxygen documentation/doxygen_developer.config + +doc_enduser: + doxygen documentation/doxygen_enduser.config + + +######################################################################## +# Target +######################################################################## + +DIRS = src/spu src/ppu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/README.md b/README.md new file mode 100644 index 0000000..bab2bc5 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ + +# MOC - MPI On Cell + + +The idea of this project is to implement a message passing library for work on the Cell BE. +The main idea behind such an implementation would be to help the programmer by adding an +layer of abstraction between the very low level libraries by IBM and give him the +possibility to work with an interface he is more familiar with. To achieve this we decided +to try to keep very closely to the standard provided by the Message Passing Interface (MPI), +so that programmers knowing how to write MPI programmers can easily work with our library. +Because of the very special nature of the Cell, it might not be possible to keep 100% true +to the standard, but we try to introduce changes only when absolutely necessary and of +great benefit, because of some specialties of the Cell's hardware. + +For more information take a look into the documentation located in the directory 'document'. + + + +## Basic Setup + +To be able to compile this library at least Cell SDK 3.0 ( Cell SDK 3.1 would be better) +is needed. If the SDK is correctly installed, a simple 'make' should do the job (buildutils +provided by the Cell SDK is used). +If using Cell SDK 3.0 and the spu-timer-library is selected as time-source on the +SPU, the path to the header-files of the spu-timer-library has to be added. Just uncomment +the appropriate entry in src/spu/Makefile. + + + +## Basic Usage + +An application using this library has to add the moc_ppu-library and the spe2-library when +linking the PPU-executable. +To link the SPU-executable the moc_spu-library is needed and also the sputimer-library when +it is selected as time-source and Cell SDK 3.0 is used. diff --git a/documentation/developer/html/annotated.html b/documentation/developer/html/annotated.html new file mode 100755 index 0000000..7a59e14 --- /dev/null +++ b/documentation/developer/html/annotated.html @@ -0,0 +1,44 @@ + + +MPI On Cell (Documentation): Data Structures + + + + + +
+

Data Structures

Here are the data structures with brief descriptions: + + + + + + + + + + + + +
error_strings_structError-Strings structure
imoc_dma_request_struct
imoc_issend_request_struct
moc_internal_buffer_node_structNode of linked list holding information about allocated buffer-space
moc_message_envelope_structMessage-envelope structure
moc_message_status_structMessage-status structure
moc_node_handle_ppu_structNode-handle structure
moc_node_handle_spu_structNode-handle structure
moc_process_structProcess-information structure
moc_request_structCommunication-Request (Handle)
moc_spu_thread_structSPU-Thread structure
MOC_Status_structStructure holding information about a received message
+
+
Generated on Thu Feb 12 13:51:17 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/bandwidth-kb.png b/documentation/developer/html/bandwidth-kb.png new file mode 100755 index 0000000..02e32c4 Binary files /dev/null and b/documentation/developer/html/bandwidth-kb.png differ diff --git a/documentation/developer/html/buffered_communication_1.png b/documentation/developer/html/buffered_communication_1.png new file mode 100755 index 0000000..88ca88e Binary files /dev/null and b/documentation/developer/html/buffered_communication_1.png differ diff --git a/documentation/developer/html/conclusion.html b/documentation/developer/html/conclusion.html new file mode 100755 index 0000000..0022e8d --- /dev/null +++ b/documentation/developer/html/conclusion.html @@ -0,0 +1,28 @@ + + +MPI On Cell (Documentation): Summary & Conclusions + + + + + +
+

Summary & Conclusions

MPI wasn't designed for the Cell Broadband Engine. A common MPI-node has one or more normal CPUs and several GBytes of RAM. The Cell Broadband Engine features a normal CPU (the PPU) and several special processing units with only a very limited amount of memory. The SPUs support only one thread per SPU and a complex handling of system-calls is needed. Because of this there are several restrictions in implementing MPI on the Cell Broadband Engine.

+Nevertheless MPI on Cell makes sense. It greatly simlifies programming on the Cell Broadband Engine, features a public API which is well known and widely used and message passing operations are generally easier to use than DMA (DMA needs memory-addresses and explicit synchronization, whereas MPI only needs the ranks of participating processes and features implicit synchronization).

+But message parsing operations cannot replace DMA. Both methods of communication have their advantages and disadvantages and they complement one another. So this library additionally features some easy to use DMA operations, if someone wants to gain maximum performance. Using DMA alltogether with send-recv especially speeds up application with a lot of communication going on between SPUs and PPU.

+
Generated on Thu Feb 12 13:50:43 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/d02/imoc__dma__spu_8h__incl.map b/documentation/developer/html/d0/d02/imoc__dma__spu_8h__incl.map new file mode 100755 index 0000000..812e032 --- /dev/null +++ b/documentation/developer/html/d0/d02/imoc__dma__spu_8h__incl.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/d0/d02/imoc__dma__spu_8h__incl.md5 b/documentation/developer/html/d0/d02/imoc__dma__spu_8h__incl.md5 new file mode 100755 index 0000000..4dd22ac --- /dev/null +++ b/documentation/developer/html/d0/d02/imoc__dma__spu_8h__incl.md5 @@ -0,0 +1 @@ +d7663ff62e467c7ce813fac164b10ed4 \ No newline at end of file diff --git a/documentation/developer/html/d0/d02/imoc__dma__spu_8h__incl.png b/documentation/developer/html/d0/d02/imoc__dma__spu_8h__incl.png new file mode 100755 index 0000000..50a4dcb Binary files /dev/null and b/documentation/developer/html/d0/d02/imoc__dma__spu_8h__incl.png differ diff --git a/documentation/developer/html/d0/d04/moc__dma-test__ppu_8c.html b/documentation/developer/html/d0/d04/moc__dma-test__ppu_8c.html new file mode 100755 index 0000000..766c52b --- /dev/null +++ b/documentation/developer/html/d0/d04/moc__dma-test__ppu_8c.html @@ -0,0 +1,48 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-test_ppu.c File Reference + + + + + +
+

src/ppu/dma/moc_dma-test_ppu.c File Reference

+

+#include <moc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <ppu/moc_dma_ppu.h>
+ +

+

+Include dependency graph for moc_dma-test_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Test_data (MOC_Request *request, int *flag)
 Tests if a MOC_IGet_data or IMOC_IPut_data is completed.
+

+
Generated on Thu Feb 12 13:50:21 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/d06/moc__wtime__ppu_8c__incl.map b/documentation/developer/html/d0/d06/moc__wtime__ppu_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/d0/d06/moc__wtime__ppu_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/d0/d06/moc__wtime__ppu_8c__incl.md5 b/documentation/developer/html/d0/d06/moc__wtime__ppu_8c__incl.md5 new file mode 100755 index 0000000..6f5c695 --- /dev/null +++ b/documentation/developer/html/d0/d06/moc__wtime__ppu_8c__incl.md5 @@ -0,0 +1 @@ +f1c5b7115e1a242852dce3e6c29a4af2 \ No newline at end of file diff --git a/documentation/developer/html/d0/d06/moc__wtime__ppu_8c__incl.png b/documentation/developer/html/d0/d06/moc__wtime__ppu_8c__incl.png new file mode 100755 index 0000000..5beab79 Binary files /dev/null and b/documentation/developer/html/d0/d06/moc__wtime__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d0/d0a/moc__dma-iget__spu_8c__incl.map b/documentation/developer/html/d0/d0a/moc__dma-iget__spu_8c__incl.map new file mode 100755 index 0000000..da901aa --- /dev/null +++ b/documentation/developer/html/d0/d0a/moc__dma-iget__spu_8c__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/documentation/developer/html/d0/d0a/moc__dma-iget__spu_8c__incl.md5 b/documentation/developer/html/d0/d0a/moc__dma-iget__spu_8c__incl.md5 new file mode 100755 index 0000000..80e1f04 --- /dev/null +++ b/documentation/developer/html/d0/d0a/moc__dma-iget__spu_8c__incl.md5 @@ -0,0 +1 @@ +7f65a65e380200f5fd875f69288651db \ No newline at end of file diff --git a/documentation/developer/html/d0/d0a/moc__dma-iget__spu_8c__incl.png b/documentation/developer/html/d0/d0a/moc__dma-iget__spu_8c__incl.png new file mode 100755 index 0000000..57dec41 Binary files /dev/null and b/documentation/developer/html/d0/d0a/moc__dma-iget__spu_8c__incl.png differ diff --git a/documentation/developer/html/d0/d19/structerror__strings__struct__coll__graph.map b/documentation/developer/html/d0/d19/structerror__strings__struct__coll__graph.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/developer/html/d0/d19/structerror__strings__struct__coll__graph.md5 b/documentation/developer/html/d0/d19/structerror__strings__struct__coll__graph.md5 new file mode 100755 index 0000000..cd33864 --- /dev/null +++ b/documentation/developer/html/d0/d19/structerror__strings__struct__coll__graph.md5 @@ -0,0 +1 @@ +04bcda5ae7b865fecf3d12067d4b4b8e \ No newline at end of file diff --git a/documentation/developer/html/d0/d19/structerror__strings__struct__coll__graph.png b/documentation/developer/html/d0/d19/structerror__strings__struct__coll__graph.png new file mode 100755 index 0000000..0f3e1e1 Binary files /dev/null and b/documentation/developer/html/d0/d19/structerror__strings__struct__coll__graph.png differ diff --git a/documentation/developer/html/d0/d1d/moc__datatype__spu_8h.html b/documentation/developer/html/d0/d1d/moc__datatype__spu_8h.html new file mode 100755 index 0000000..8c1bd8d --- /dev/null +++ b/documentation/developer/html/d0/d1d/moc__datatype__spu_8h.html @@ -0,0 +1,67 @@ + + +MPI On Cell (Documentation): include/spu/moc_datatype_spu.h File Reference + + + + + +
+

include/spu/moc_datatype_spu.h File Reference

+

+#include "../moc_datatype.h"
+ +

+

+Include dependency graph for moc_datatype_spu.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + +

Defines

SPU-only
#define MOC_LONG   ((MOC_Datatype)32+2)
 C-Datatype long.
#define MOC_UNSIGNED_LONG   ((MOC_Datatype)32+3)
 C-Datatype unsigned long.
#define MOC_VEC_ULLONG2   ((MOC_Datatype)128+0)
 Cell-specific Datatype vector unsigned long long (vec_ullong2).
#define MOC_VEC_LLONG2   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector signed long long (vec_llong2).
#define MOC_VEC_DOUBLE2   ((MOC_Datatype)128+2)
 Cell-specific Datatype vector double (vec_double2).
+

+
Generated on Thu Feb 12 13:50:04 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/d1e/imoc__wait__message_8c__incl.map b/documentation/developer/html/d0/d1e/imoc__wait__message_8c__incl.map new file mode 100755 index 0000000..97afcbd --- /dev/null +++ b/documentation/developer/html/d0/d1e/imoc__wait__message_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/d0/d1e/imoc__wait__message_8c__incl.md5 b/documentation/developer/html/d0/d1e/imoc__wait__message_8c__incl.md5 new file mode 100755 index 0000000..96bb035 --- /dev/null +++ b/documentation/developer/html/d0/d1e/imoc__wait__message_8c__incl.md5 @@ -0,0 +1 @@ +783e08a8acf0458a2ee24a90b0776ce3 \ No newline at end of file diff --git a/documentation/developer/html/d0/d1e/imoc__wait__message_8c__incl.png b/documentation/developer/html/d0/d1e/imoc__wait__message_8c__incl.png new file mode 100755 index 0000000..49cfd23 Binary files /dev/null and b/documentation/developer/html/d0/d1e/imoc__wait__message_8c__incl.png differ diff --git a/documentation/developer/html/d0/d3a/spu_2moc_8h.html b/documentation/developer/html/d0/d3a/spu_2moc_8h.html new file mode 100755 index 0000000..a031403 --- /dev/null +++ b/documentation/developer/html/d0/d3a/spu_2moc_8h.html @@ -0,0 +1,49 @@ + + +MPI On Cell (Documentation): include/spu/moc.h File Reference + + + + + +
+

include/spu/moc.h File Reference

+

+#include "moc_dma_spu.h"
+#include "moc_datatype_spu.h"
+#include "../moc.h"
+#include <stdint.h>
+ +

+

+Include dependency graph for moc.h:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + +

Functions

SPU-only
int MOC_Init (unsigned long long argp, int length, void *buffer)
 Initialize the MPI execution environment.
+

+
Generated on Thu Feb 12 13:49:58 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/d3d/imoc__dma-iput__spu_8c__incl.map b/documentation/developer/html/d0/d3d/imoc__dma-iput__spu_8c__incl.map new file mode 100755 index 0000000..ab66afa --- /dev/null +++ b/documentation/developer/html/d0/d3d/imoc__dma-iput__spu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d0/d3d/imoc__dma-iput__spu_8c__incl.md5 b/documentation/developer/html/d0/d3d/imoc__dma-iput__spu_8c__incl.md5 new file mode 100755 index 0000000..d0076b4 --- /dev/null +++ b/documentation/developer/html/d0/d3d/imoc__dma-iput__spu_8c__incl.md5 @@ -0,0 +1 @@ +d7e3cf1a7a31a34f73e79c5127c7eb19 \ No newline at end of file diff --git a/documentation/developer/html/d0/d3d/imoc__dma-iput__spu_8c__incl.png b/documentation/developer/html/d0/d3d/imoc__dma-iput__spu_8c__incl.png new file mode 100755 index 0000000..cfc6988 Binary files /dev/null and b/documentation/developer/html/d0/d3d/imoc__dma-iput__spu_8c__incl.png differ diff --git a/documentation/developer/html/d0/d43/imoc__dma-tags__ppu_8c-source.html b/documentation/developer/html/d0/d43/imoc__dma-tags__ppu_8c-source.html new file mode 100755 index 0000000..f3bc528 --- /dev/null +++ b/documentation/developer/html/d0/d43/imoc__dma-tags__ppu_8c-source.html @@ -0,0 +1,63 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-tags_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/d4d/imoc__dma-iput__spu_8c-source.html b/documentation/developer/html/d0/d4d/imoc__dma-iput__spu_8c-source.html new file mode 100755 index 0000000..de5f94a --- /dev/null +++ b/documentation/developer/html/d0/d4d/imoc__dma-iput__spu_8c-source.html @@ -0,0 +1,85 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-iput_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/d64/group__p2p__main.html b/documentation/developer/html/d0/d64/group__p2p__main.html new file mode 100755 index 0000000..ad5353c --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main.html @@ -0,0 +1,465 @@ + + +MPI On Cell (Documentation): Point-to-Point Communication + + + + + +
+

Point-to-Point Communication
+ +[End-User Documentation] +

+

+

+Collaboration diagram for Point-to-Point Communication:
+
+
+ +
+
+

Detailed Description

+Sending and receiving of messages by processes is the basic MPI communication mechanism. +

+The basic point-to-point communication operations are send and receive.

+MOC_Send uses either buffered or synchronous send depending on the message-size (Short messages are transmitted using buffered send and long messages are transmitted using synchronous send).

+MOC_Recv receives all messages irrespective wether buffered or synchronous communication is used.

+

Note:
Because there are separate message-queues for each remote process and no distinct global ordering of messages, there may be some situation where a message from a process may never be received. This may occur when MOC_Recv, MOC_Probe and MOC_IProbe are used with MOC_ANY_SOURCE, because then there is the possibility that new messages are received before a specific message from a process with a higher rank than the other senders. This may also occur with lower possibility when using MOC_ANY_TAG between messages from the same sender but with other tags.
+ +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + +

Modules

 Return Status
 Receiving operations return a status-object holding information about the message.
 Datatypes
 Datatypes supported by MOC.
 Synchronous Communication
 Direct blocking sending of messages without any intermediate buffer.
 Buffered Communication
 Blocking sending of messages with the use of an intermediate buffer.
 Send-Receive
 The send-receive operations combine in one call the sending of a message to one destination and the receiving of another message, from another process.
 Non-Blocking Communication
 Non-blocking sending and receiving messages.

Defines

#define MOC_SEND_TRESHOLD   4096
 Indicates, at which message-size MOC_Send switches to synchronous send.

Functions

int MOC_Send (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking standard mode send operation.
int MOC_Recv (void *buf, int count, MOC_Datatype datatype, int source, int tag, MOC_Comm comm, MOC_Status *status)
 Performs a blocking standard mode receive operation.
int MOC_Probe (int source, int tag, MOC_Comm comm, MOC_Status *status)
 Waits till a message is received and returns information without actually receiving the message.
int MOC_Iprobe (int source, int tag, MOC_Comm comm, int *flag, MOC_Status *status)
 Tests if a message is available and returns information without actually receiving the message.
+


Define Documentation

+ +
+
+ + + + +
#define MOC_SEND_TRESHOLD   4096
+
+
+ +

+Indicates, at which message-size MOC_Send switches to synchronous send. +

+ +

Definition at line 374 of file moc.h.

+ +

Referenced by MOC_ISend(), and MOC_Send().

+ +
+

+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Iprobe (int  source,
int  tag,
MOC_Comm  comm,
int *  flag,
MOC_Status *  status 
)
+
+
+ +

+Tests if a message is available and returns information without actually receiving the message. +

+

Parameters:
+ + + + + + +
source in source of message
tag in message-tag
comm in communicator
flag out boolean value telling if a message is available
status out status-object holding information about message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 5 of file moc_iprobe.c.

+ +

References moc_message_envelope_struct::id, IMOC_get_entry(), MOC_Status_struct::message_size, MOC_Status_struct::mid, MOC_Status_struct::MOC_ERROR, MOC_Status_struct::MOC_SOURCE, MOC_Status_struct::MOC_TAG, moc_message_envelope_struct::size, and moc_message_envelope_struct::tag.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Probe (int  source,
int  tag,
MOC_Comm  comm,
MOC_Status *  status 
)
+
+
+ +

+Waits till a message is received and returns information without actually receiving the message. +

+

Parameters:
+ + + + + +
source in source of message
tag in message-tag
comm in communicator
status out status-object holding information about message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 4 of file moc_probe.c.

+ +

References moc_message_envelope_struct::id, IMOC_get_entry(), MOC_Status_struct::message_size, MOC_Status_struct::mid, MOC_Status_struct::MOC_ERROR, MOC_Status_struct::MOC_SOURCE, MOC_Status_struct::MOC_TAG, moc_message_envelope_struct::size, and moc_message_envelope_struct::tag.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Recv (void *  buf,
int  count,
MOC_Datatype  datatype,
int  source,
int  tag,
MOC_Comm  comm,
MOC_Status *  status 
)
+
+
+ +

+Performs a blocking standard mode receive operation. +

+

Note:
This routine blocks until the message is received.
+
Parameters:
+ + + + + + + + +
buf inout Buffer into which data should be stored
count in Number of elements in receive buffer (not equal to actual byte-value)
datatype in Datatype of each receive buffer element
source in Rank of source
tag in Tag of message
comm in Communicator of message
status inout Object holding status-information (has to be allocated by user)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 11 of file moc_recv_ppu.c.

+ +

References __attribute__(), moc_message_envelope_struct::bits, moc_message_envelope_struct::datatype, moc_message_envelope_struct::flags, moc_message_envelope_struct::id, IMOC_EA_REMOTE_STATUS_ENTRY, IMOC_get_data(), IMOC_get_entry(), IMOC_MESSAGE_CHANNEL_DMA, IMOC_MESSAGE_CHANNEL_ENV, IMOC_TEST_ALIGNMENT, IMOC_TEST_BUFFER, IMOC_TEST_BYTECOUNT, IMOC_TEST_COMM_RECV, IMOC_TEST_PROC_NULL, IMOC_TEST_PROC_SELF, IMOC_TEST_RANK_RECV, IMOC_TEST_TAG_RECV, moc_spu_thread_struct::ls_base, moc_message_envelope_struct::message_address, MOC_Status_struct::message_size, MOC_Status_struct::mid, MOC_BYTE, MOC_ERR_INTERN, MOC_ERR_TYPE, MOC_Status_struct::MOC_ERROR, moc_ppu_thread_count, MOC_Status_struct::MOC_SOURCE, moc_spu_thread_list, MOC_Status_struct::MOC_TAG, moc_message_envelope_struct::size, and moc_message_envelope_struct::value.

+ +

Referenced by MOC_Bcast(), MOC_Sendrecv(), and MOC_Sendrecv_replace().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Send (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  tag,
MOC_Comm  comm 
)
+
+
+ +

+Performs a blocking standard mode send operation. +

+

Note:
This routine may block until the message is received.
+
Parameters:
+ + + + + + + +
buf in Pointer to buffer where data is stored
count in Number of elements to be send (not equal to actual byte-value)
datatype in Type of elements to be send
dest in Rank of receiving process
tag in Tag of message
comm in communicator of message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 19 of file moc_send.c.

+ +

References MOC_Bsend(), MOC_SEND_TRESHOLD, and MOC_Ssend().

+ +

Referenced by MOC_Sendrecv(), and MOC_Sendrecv_replace().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+

+
Generated on Thu Feb 12 13:50:48 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/d64/group__p2p__main.png b/documentation/developer/html/d0/d64/group__p2p__main.png new file mode 100755 index 0000000..8e71b90 Binary files /dev/null and b/documentation/developer/html/d0/d64/group__p2p__main.png differ diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g0bc7e537cd866537357a01a12a115a84_cgraph.map b/documentation/developer/html/d0/d64/group__p2p__main_g0bc7e537cd866537357a01a12a115a84_cgraph.map new file mode 100755 index 0000000..118aa1f --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g0bc7e537cd866537357a01a12a115a84_cgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g0bc7e537cd866537357a01a12a115a84_cgraph.md5 b/documentation/developer/html/d0/d64/group__p2p__main_g0bc7e537cd866537357a01a12a115a84_cgraph.md5 new file mode 100755 index 0000000..3a30598 --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g0bc7e537cd866537357a01a12a115a84_cgraph.md5 @@ -0,0 +1 @@ +fd34f01d6a8f98624433a82598387889 \ No newline at end of file diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g0bc7e537cd866537357a01a12a115a84_cgraph.png b/documentation/developer/html/d0/d64/group__p2p__main_g0bc7e537cd866537357a01a12a115a84_cgraph.png new file mode 100755 index 0000000..1441311 Binary files /dev/null and b/documentation/developer/html/d0/d64/group__p2p__main_g0bc7e537cd866537357a01a12a115a84_cgraph.png differ diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_cgraph.map b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_cgraph.map new file mode 100755 index 0000000..2dd7132 --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_cgraph.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_cgraph.md5 b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_cgraph.md5 new file mode 100755 index 0000000..c40f139 --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_cgraph.md5 @@ -0,0 +1 @@ +e6125c06c561393cdfea4720ef1f9439 \ No newline at end of file diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_cgraph.png b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_cgraph.png new file mode 100755 index 0000000..1a2955a Binary files /dev/null and b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_cgraph.png differ diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_icgraph.map b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_icgraph.map new file mode 100755 index 0000000..f132b85 --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_icgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_icgraph.md5 b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_icgraph.md5 new file mode 100755 index 0000000..d31f07f --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_icgraph.md5 @@ -0,0 +1 @@ +efbc291e43ab69c23c75573d0ff1425a \ No newline at end of file diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_icgraph.png b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_icgraph.png new file mode 100755 index 0000000..0af6910 Binary files /dev/null and b/documentation/developer/html/d0/d64/group__p2p__main_g23e0afbe55bc4c86cb738c3361623a4c_icgraph.png differ diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_cgraph.map b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_cgraph.map new file mode 100755 index 0000000..c4b03dc --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_cgraph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_cgraph.md5 b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_cgraph.md5 new file mode 100755 index 0000000..9d1c067 --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_cgraph.md5 @@ -0,0 +1 @@ +491d115c8e8ce30ce707f1813ed295b3 \ No newline at end of file diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_cgraph.png b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_cgraph.png new file mode 100755 index 0000000..211253c Binary files /dev/null and b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_cgraph.png differ diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_icgraph.map b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_icgraph.map new file mode 100755 index 0000000..2a348ba --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_icgraph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_icgraph.md5 b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_icgraph.md5 new file mode 100755 index 0000000..b145e8d --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_icgraph.md5 @@ -0,0 +1 @@ +d0319d325b405a1f1d56457a30650cdd \ No newline at end of file diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_icgraph.png b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_icgraph.png new file mode 100755 index 0000000..bd706bd Binary files /dev/null and b/documentation/developer/html/d0/d64/group__p2p__main_g30c532510cffd36acd1b9b0b3edb3832_icgraph.png differ diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g39ceb4e6f08da2cd3dac3e93bb6e3ee1_cgraph.map b/documentation/developer/html/d0/d64/group__p2p__main_g39ceb4e6f08da2cd3dac3e93bb6e3ee1_cgraph.map new file mode 100755 index 0000000..118aa1f --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g39ceb4e6f08da2cd3dac3e93bb6e3ee1_cgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g39ceb4e6f08da2cd3dac3e93bb6e3ee1_cgraph.md5 b/documentation/developer/html/d0/d64/group__p2p__main_g39ceb4e6f08da2cd3dac3e93bb6e3ee1_cgraph.md5 new file mode 100755 index 0000000..5d9f5aa --- /dev/null +++ b/documentation/developer/html/d0/d64/group__p2p__main_g39ceb4e6f08da2cd3dac3e93bb6e3ee1_cgraph.md5 @@ -0,0 +1 @@ +f67694c219f42597e6d63ac5f14f8f76 \ No newline at end of file diff --git a/documentation/developer/html/d0/d64/group__p2p__main_g39ceb4e6f08da2cd3dac3e93bb6e3ee1_cgraph.png b/documentation/developer/html/d0/d64/group__p2p__main_g39ceb4e6f08da2cd3dac3e93bb6e3ee1_cgraph.png new file mode 100755 index 0000000..5b615b8 Binary files /dev/null and b/documentation/developer/html/d0/d64/group__p2p__main_g39ceb4e6f08da2cd3dac3e93bb6e3ee1_cgraph.png differ diff --git a/documentation/developer/html/d0/d65/structmoc__process__struct__coll__graph.map b/documentation/developer/html/d0/d65/structmoc__process__struct__coll__graph.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/developer/html/d0/d65/structmoc__process__struct__coll__graph.md5 b/documentation/developer/html/d0/d65/structmoc__process__struct__coll__graph.md5 new file mode 100755 index 0000000..0112e57 --- /dev/null +++ b/documentation/developer/html/d0/d65/structmoc__process__struct__coll__graph.md5 @@ -0,0 +1 @@ +a29a8f0e6f1cedd21aa86adc9307ddbd \ No newline at end of file diff --git a/documentation/developer/html/d0/d65/structmoc__process__struct__coll__graph.png b/documentation/developer/html/d0/d65/structmoc__process__struct__coll__graph.png new file mode 100755 index 0000000..d2a9d9b Binary files /dev/null and b/documentation/developer/html/d0/d65/structmoc__process__struct__coll__graph.png differ diff --git a/documentation/developer/html/d0/d82/imoc__core__ppu_8c-source.html b/documentation/developer/html/d0/d82/imoc__core__ppu_8c-source.html new file mode 100755 index 0000000..e9af42e --- /dev/null +++ b/documentation/developer/html/d0/d82/imoc__core__ppu_8c-source.html @@ -0,0 +1,26 @@ + + +MPI On Cell (Documentation): src/ppu/internal/imoc_core_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/d87/imoc__macros_8h-source.html b/documentation/developer/html/d0/d87/imoc__macros_8h-source.html new file mode 100755 index 0000000..44e32c6 --- /dev/null +++ b/documentation/developer/html/d0/d87/imoc__macros_8h-source.html @@ -0,0 +1,163 @@ + + +MPI On Cell (Documentation): include/internal/imoc_macros.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/d99/moc__datatype_8h-source.html b/documentation/developer/html/d0/d99/moc__datatype_8h-source.html new file mode 100755 index 0000000..cff4fcc --- /dev/null +++ b/documentation/developer/html/d0/d99/moc__datatype_8h-source.html @@ -0,0 +1,171 @@ + + +MPI On Cell (Documentation): include/moc_datatype.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/da9/moc__dma-iput__ppu_8c__incl.map b/documentation/developer/html/d0/da9/moc__dma-iput__ppu_8c__incl.map new file mode 100755 index 0000000..05664b5 --- /dev/null +++ b/documentation/developer/html/d0/da9/moc__dma-iput__ppu_8c__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d0/da9/moc__dma-iput__ppu_8c__incl.md5 b/documentation/developer/html/d0/da9/moc__dma-iput__ppu_8c__incl.md5 new file mode 100755 index 0000000..1c83e8d --- /dev/null +++ b/documentation/developer/html/d0/da9/moc__dma-iput__ppu_8c__incl.md5 @@ -0,0 +1 @@ +2dc3b73d960ab0a0d9a20fcb069dd70b \ No newline at end of file diff --git a/documentation/developer/html/d0/da9/moc__dma-iput__ppu_8c__incl.png b/documentation/developer/html/d0/da9/moc__dma-iput__ppu_8c__incl.png new file mode 100755 index 0000000..7e8b766 Binary files /dev/null and b/documentation/developer/html/d0/da9/moc__dma-iput__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d0/db8/structmoc__process__struct.html b/documentation/developer/html/d0/db8/structmoc__process__struct.html new file mode 100755 index 0000000..5b16c5f --- /dev/null +++ b/documentation/developer/html/d0/db8/structmoc__process__struct.html @@ -0,0 +1,170 @@ + + +MPI On Cell (Documentation): moc_process_struct Struct Reference + + + + + +
+

moc_process_struct Struct Reference
+ +[Implementation-Core] +

#include <imoc_core.h> +

+

+Collaboration diagram for moc_process_struct:
+
+

Collaboration graph
+
[legend]
+

Detailed Description

+Process-information structure. +

+Stores information about a MOC-Process. This information is used for communication between the processes. +

Definition at line 162 of file imoc_core.h.

+ + + + + + + + + + + + + + + + + + +

Data Fields

uint8_t type
 Process-type (SPU or PPU).
uint8_t reserved [7]
 reserved
uint64_t inbox_queue_base
 effective base-address of message-queues
uint64_t stat_array_base
 effective base-address of message-status-array
uint64_t ps_base
 effective base-address of problem-state (Signals, mailboxes, .
+

Field Documentation

+ +
+
+ + + + +
uint8_t moc_process_struct::type
+
+
+ +

+Process-type (SPU or PPU). +

+ +

Definition at line 164 of file imoc_core.h.

+ +

Referenced by MOC_Init().

+ +
+

+ +

+
+ + + + +
uint8_t moc_process_struct::reserved[7]
+
+
+ +

+reserved +

+ +

Definition at line 165 of file imoc_core.h.

+ +
+

+ +

+ +
+ +

+effective base-address of message-queues +

+ +

Definition at line 166 of file imoc_core.h.

+ +

Referenced by MOC_Init().

+ +
+

+ +

+ +
+ +

+effective base-address of message-status-array +

+ +

Definition at line 167 of file imoc_core.h.

+ +

Referenced by MOC_Init().

+ +
+

+ +

+
+ + + + +
uint64_t moc_process_struct::ps_base
+
+
+ +

+effective base-address of problem-state (Signals, mailboxes, . +

+..) +

Definition at line 168 of file imoc_core.h.

+ +

Referenced by MOC_Init().

+ +
+

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:21 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/dba/imoc__dma-tags__ppu_8c.html b/documentation/developer/html/d0/dba/imoc__dma-tags__ppu_8c.html new file mode 100755 index 0000000..3ba5b89 --- /dev/null +++ b/documentation/developer/html/d0/dba/imoc__dma-tags__ppu_8c.html @@ -0,0 +1,74 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-tags_ppu.c File Reference + + + + + +
+

src/ppu/internal/dma/imoc_dma-tags_ppu.c File Reference

+

+#include <stdint.h>
+#include <moc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+ +

+

+Include dependency graph for imoc_dma-tags_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + +

Functions

int moc_tag_reserve (unsigned int speid)
 Reserves a tag on the ppu, for communication with a given spu.
int moc_tag_release (unsigned int speid, int tag)
 Releases a reserved tag.

Variables

static unsigned short tags [8]
+


Variable Documentation

+ +
+
+ + + + +
unsigned short tags[8] [static]
+
+
+ +

+ +

Definition at line 12 of file imoc_dma-tags_ppu.c.

+ +

Referenced by moc_tag_release(), and moc_tag_reserve().

+ +
+

+

+
Generated on Thu Feb 12 13:50:25 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d0/dc8/imoc__dma-get__ppu_8c__incl.map b/documentation/developer/html/d0/dc8/imoc__dma-get__ppu_8c__incl.map new file mode 100755 index 0000000..44b5507 --- /dev/null +++ b/documentation/developer/html/d0/dc8/imoc__dma-get__ppu_8c__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/documentation/developer/html/d0/dc8/imoc__dma-get__ppu_8c__incl.md5 b/documentation/developer/html/d0/dc8/imoc__dma-get__ppu_8c__incl.md5 new file mode 100755 index 0000000..9d0e5a1 --- /dev/null +++ b/documentation/developer/html/d0/dc8/imoc__dma-get__ppu_8c__incl.md5 @@ -0,0 +1 @@ +cad94990205de8fa36d0e303f48f44bb \ No newline at end of file diff --git a/documentation/developer/html/d0/dc8/imoc__dma-get__ppu_8c__incl.png b/documentation/developer/html/d0/dc8/imoc__dma-get__ppu_8c__incl.png new file mode 100755 index 0000000..f1692b6 Binary files /dev/null and b/documentation/developer/html/d0/dc8/imoc__dma-get__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d0/dcb/moc__send__recv_8c__incl.map b/documentation/developer/html/d0/dcb/moc__send__recv_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/d0/dcb/moc__send__recv_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/d0/dcb/moc__send__recv_8c__incl.md5 b/documentation/developer/html/d0/dcb/moc__send__recv_8c__incl.md5 new file mode 100755 index 0000000..e20e9b6 --- /dev/null +++ b/documentation/developer/html/d0/dcb/moc__send__recv_8c__incl.md5 @@ -0,0 +1 @@ +6a8ea46bc3dce4379e963da8dc3d0376 \ No newline at end of file diff --git a/documentation/developer/html/d0/dcb/moc__send__recv_8c__incl.png b/documentation/developer/html/d0/dcb/moc__send__recv_8c__incl.png new file mode 100755 index 0000000..d406ece Binary files /dev/null and b/documentation/developer/html/d0/dcb/moc__send__recv_8c__incl.png differ diff --git a/documentation/developer/html/d0/df2/moc__datatype__spu_8h__incl.map b/documentation/developer/html/d0/df2/moc__datatype__spu_8h__incl.map new file mode 100755 index 0000000..bacd368 --- /dev/null +++ b/documentation/developer/html/d0/df2/moc__datatype__spu_8h__incl.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d0/df2/moc__datatype__spu_8h__incl.md5 b/documentation/developer/html/d0/df2/moc__datatype__spu_8h__incl.md5 new file mode 100755 index 0000000..777a972 --- /dev/null +++ b/documentation/developer/html/d0/df2/moc__datatype__spu_8h__incl.md5 @@ -0,0 +1 @@ +45928cb93d8a1636172e47ed28663823 \ No newline at end of file diff --git a/documentation/developer/html/d0/df2/moc__datatype__spu_8h__incl.png b/documentation/developer/html/d0/df2/moc__datatype__spu_8h__incl.png new file mode 100755 index 0000000..f2d716a Binary files /dev/null and b/documentation/developer/html/d0/df2/moc__datatype__spu_8h__incl.png differ diff --git a/documentation/developer/html/d0/dfc/moc__wtime__spu_8c.html b/documentation/developer/html/d0/dfc/moc__wtime__spu_8c.html new file mode 100755 index 0000000..bb6c054 --- /dev/null +++ b/documentation/developer/html/d0/dfc/moc__wtime__spu_8c.html @@ -0,0 +1,45 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_wtime_spu.c File Reference + + + + + +
+

src/spu/system/moc_wtime_spu.c File Reference

+

+#include <moc.h>
+ +

+

+Include dependency graph for moc_wtime_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

double MOC_Wtime (void)
 Returns a floating-point number of seconds, representing elapsed wall-clock time since some time in the past.
+

+
Generated on Thu Feb 12 13:50:43 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/d03/moc__dma__spu_8h-source.html b/documentation/developer/html/d1/d03/moc__dma__spu_8h-source.html new file mode 100755 index 0000000..6be89ed --- /dev/null +++ b/documentation/developer/html/d1/d03/moc__dma__spu_8h-source.html @@ -0,0 +1,139 @@ + + +MPI On Cell (Documentation): include/spu/moc_dma_spu.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/d0c/group__internal__comm.html b/documentation/developer/html/d1/d0c/group__internal__comm.html new file mode 100755 index 0000000..6df35e8 --- /dev/null +++ b/documentation/developer/html/d1/d0c/group__internal__comm.html @@ -0,0 +1,42 @@ + + +MPI On Cell (Documentation): Groups, Context and Communicators + + + + + +
+

Groups, Context and Communicators
+ +[Developer Documentation] +

+

+

+Collaboration diagram for Groups, Context and Communicators:
+
+
+ +
+
+At the moment user-defined groups and communicators are not implemented and maybe never will be. Nevertheless user-defined groups and communicators have been taken into consideration while making the software-design (e.g. reserved field for communicator in message-envelope). So it should be not too hard to implement groups and communicators. However a lot of things concerning communicators are hardcoded (e.g. parameter checks).

+To save memory only one byte is used to encode the communicator. So if one day user-defined communicators are implemented there are only 256 possible communicators. +

+ + +
+

+
Generated on Thu Feb 12 13:51:07 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/d0c/group__internal__comm.png b/documentation/developer/html/d1/d0c/group__internal__comm.png new file mode 100755 index 0000000..698e646 Binary files /dev/null and b/documentation/developer/html/d1/d0c/group__internal__comm.png differ diff --git a/documentation/developer/html/d1/d24/imoc__dma-test__spu_8c__incl.map b/documentation/developer/html/d1/d24/imoc__dma-test__spu_8c__incl.map new file mode 100755 index 0000000..dd8fc21 --- /dev/null +++ b/documentation/developer/html/d1/d24/imoc__dma-test__spu_8c__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/documentation/developer/html/d1/d24/imoc__dma-test__spu_8c__incl.md5 b/documentation/developer/html/d1/d24/imoc__dma-test__spu_8c__incl.md5 new file mode 100755 index 0000000..1cff0ea --- /dev/null +++ b/documentation/developer/html/d1/d24/imoc__dma-test__spu_8c__incl.md5 @@ -0,0 +1 @@ +802afd9abc7cf52920baaa76bb325a4d \ No newline at end of file diff --git a/documentation/developer/html/d1/d24/imoc__dma-test__spu_8c__incl.png b/documentation/developer/html/d1/d24/imoc__dma-test__spu_8c__incl.png new file mode 100755 index 0000000..8601e77 Binary files /dev/null and b/documentation/developer/html/d1/d24/imoc__dma-test__spu_8c__incl.png differ diff --git a/documentation/developer/html/d1/d2a/imoc__get__free__entry_8c-source.html b/documentation/developer/html/d1/d2a/imoc__get__free__entry_8c-source.html new file mode 100755 index 0000000..53715b3 --- /dev/null +++ b/documentation/developer/html/d1/d2a/imoc__get__free__entry_8c-source.html @@ -0,0 +1,61 @@ + + +MPI On Cell (Documentation): src/noarch/internal/communication/imoc_get_free_entry.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/d36/moc__wait_8c__incl.map b/documentation/developer/html/d1/d36/moc__wait_8c__incl.map new file mode 100755 index 0000000..5904819 --- /dev/null +++ b/documentation/developer/html/d1/d36/moc__wait_8c__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/documentation/developer/html/d1/d36/moc__wait_8c__incl.md5 b/documentation/developer/html/d1/d36/moc__wait_8c__incl.md5 new file mode 100755 index 0000000..c966d4a --- /dev/null +++ b/documentation/developer/html/d1/d36/moc__wait_8c__incl.md5 @@ -0,0 +1 @@ +cc73b895177eff784457871f0bad4374 \ No newline at end of file diff --git a/documentation/developer/html/d1/d36/moc__wait_8c__incl.png b/documentation/developer/html/d1/d36/moc__wait_8c__incl.png new file mode 100755 index 0000000..2631a39 Binary files /dev/null and b/documentation/developer/html/d1/d36/moc__wait_8c__incl.png differ diff --git a/documentation/developer/html/d1/d3a/imoc__core__ppu_8c__incl.map b/documentation/developer/html/d1/d3a/imoc__core__ppu_8c__incl.map new file mode 100755 index 0000000..f7f09e1 --- /dev/null +++ b/documentation/developer/html/d1/d3a/imoc__core__ppu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d1/d3a/imoc__core__ppu_8c__incl.md5 b/documentation/developer/html/d1/d3a/imoc__core__ppu_8c__incl.md5 new file mode 100755 index 0000000..5053724 --- /dev/null +++ b/documentation/developer/html/d1/d3a/imoc__core__ppu_8c__incl.md5 @@ -0,0 +1 @@ +6ca26acba7f3b701f6536a899da03001 \ No newline at end of file diff --git a/documentation/developer/html/d1/d3a/imoc__core__ppu_8c__incl.png b/documentation/developer/html/d1/d3a/imoc__core__ppu_8c__incl.png new file mode 100755 index 0000000..6f0d685 Binary files /dev/null and b/documentation/developer/html/d1/d3a/imoc__core__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d1/d67/moc__finalize__ppu_8c-source.html b/documentation/developer/html/d1/d67/moc__finalize__ppu_8c-source.html new file mode 100755 index 0000000..bbdf4e6 --- /dev/null +++ b/documentation/developer/html/d1/d67/moc__finalize__ppu_8c-source.html @@ -0,0 +1,64 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_finalize_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/d72/moc__barrier__ppu_8c.html b/documentation/developer/html/d1/d72/moc__barrier__ppu_8c.html new file mode 100755 index 0000000..445d64b --- /dev/null +++ b/documentation/developer/html/d1/d72/moc__barrier__ppu_8c.html @@ -0,0 +1,73 @@ + + +MPI On Cell (Documentation): src/ppu/communication/moc_barrier_ppu.c File Reference + + + + + +
+

src/ppu/communication/moc_barrier_ppu.c File Reference

+

+#include <stdio.h>
+#include <string.h>
+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_macros_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_barrier_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + +

Defines

#define IMOC_BARRIER_TAG   1

Functions

int MOC_Barrier (MOC_Comm comm)
 Blocks the caller until all processes in the communicator have called it; that is, the call returns at any process only after all members of the communicator have entered the call.
+


Define Documentation

+ +
+
+ + + + +
#define IMOC_BARRIER_TAG   1
+
+
+ +

+ +

Definition at line 9 of file moc_barrier_ppu.c.

+ +

Referenced by MOC_Barrier().

+ +
+

+

+
Generated on Thu Feb 12 13:50:16 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/d82/moc_8h.html b/documentation/developer/html/d1/d82/moc_8h.html new file mode 100755 index 0000000..4bcfe68 --- /dev/null +++ b/documentation/developer/html/d1/d82/moc_8h.html @@ -0,0 +1,351 @@ + + +MPI On Cell (Documentation): include/moc.h File Reference + + + + + +
+

include/moc.h File Reference

+

+#include <stdint.h>
+#include "moc_datatype.h"
+#include "moc_error_codes.h"
+ +

+

+Include dependency graph for moc.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  imoc_dma_request_struct
struct  imoc_issend_request_struct
struct  MOC_Status_struct
 Structure holding information about a received message. More...
struct  moc_request_struct
 Communication-Request (Handle). More...

Defines

#define MOC_ANY_TAG   1000
 Indicates, in a receive, to accept a message with any tag value.
#define MOC_BCAST_TAG   250
 Reserved Tag for Broadcast-Messages (MOC_Bcast).
#define MOC_PROC_NULL   1000
 Specifies a rank that can be used to send or receive from no-one.
#define MOC_ANY_SOURCE   1001
 Indicates, in a receive, to accept a message from any source.
#define MAX_DMA_CALL_SIZE   16384
 Maximum byte-count which can be transferred by one DMA-transfer.
#define MAX_MOC_MESSAGE_SIZE   16777215
 Maximum byte-count of a MOC-message.
#define MOC_MAX_ERROR_STRING   255
 Maximal length of error-text.
#define MOC_VERSION   0
 Major version-number of this MOC-Implementation.
#define MOC_SUBVERSION   9
 Minor version-number of this MOC-Implementation.
#define MOC_MAX_PROCESSOR_NAME   4
 The maximum length of the string returned by MOC_Get_processor_name.
#define MOC_COMM_NULL   0
 Specifies a null communicator.
#define MOC_COMM_WORLD   1
 Specifies a constant that contains all of the processes.
#define MOC_COMM_SELF   2
 Specifies a constant that contains only the calling process.
#define MOC_SEND_TRESHOLD   4096
 Indicates, at which message-size MOC_Send switches to synchronous send.

Typedefs

typedef struct MOC_Status_struct MOC_Status
 Structure holding information about a received message.
typedef int MOC_Comm
 Communicator-Handle.
typedef struct moc_request_struct MOC_Request
 Communication-Request (Handle).
typedef struct
+imoc_dma_request_struct 
imoc_dma_request
typedef struct
+imoc_issend_request_struct 
imoc_issend_request

Functions

int MOC_Error_string (int errorcode, char *string, int *resultlen)
 Returns an error-text for a given error code.
int MOC_Error_class (int errorcode, int *errorclass)
 Converts an error code into an error class.
int MOC_Get_processor_name (char *name, int *resultlen)
 Gets the name of the processor.
int MOC_Get_version (int *version, int *subversion)
 Returns the major and minor version of this MOC-implementation.
int MOC_Get_count (MOC_Status *status, MOC_Datatype datatype, int *count)
 Gets the number of received elements which is encoded in MOC_Status.
int MOC_Comm_rank (MOC_Comm comm, int *rank)
 Determines the rank of the calling process in the communicator.
int MOC_Comm_size (MOC_Comm comm, int *size)
 Determines the size of the group associated with a communictor.
double MOC_Wtime (void)
 Returns a floating-point number of seconds, representing elapsed wall-clock time since some time in the past.
double MOC_Wtick (void)
 Returns the resolution of Moc_Wtime in seconds.
int MOC_Send (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking standard mode send operation.
int MOC_Recv (void *buf, int count, MOC_Datatype datatype, int source, int tag, MOC_Comm comm, MOC_Status *status)
 Performs a blocking standard mode receive operation.
int MOC_Probe (int source, int tag, MOC_Comm comm, MOC_Status *status)
 Waits till a message is received and returns information without actually receiving the message.
int MOC_Iprobe (int source, int tag, MOC_Comm comm, int *flag, MOC_Status *status)
 Tests if a message is available and returns information without actually receiving the message.
int MOC_Ssend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking synchronous mode send operation.
int MOC_Bsend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking buffered mode send operation.
int MOC_Sendrecv (void *sendbuf, int sendcount, MOC_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MOC_Datatype recvtype, int source, int recvtag, MOC_Comm comm, MOC_Status *status)
 Execute a blocking send and receive operation.
int MOC_Sendrecv_replace (void *buf, int count, MOC_Datatype datatype, int dest, int sendtag, int source, int recvtag, MOC_Comm comm, MOC_Status *status)
 Execute a blocking send and receive.
int MOC_ISend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, MOC_Request *request)
 Performs a non-blocking standard mode send operation.
int MOC_ISsend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, MOC_Request *request)
 Performs a non-blocking synchronous mode send operation.
int MOC_Test (MOC_Request *request, int *flag, MOC_Status *status)
 Tests, if a non-blocking communication has been completed.
int MOC_Wait (MOC_Request *request, MOC_Status *status)
 Wait till a non-blocking communication has been completed.
int MOC_Bcast (void *buffer, int count, MOC_Datatype datatype, int root, MOC_Comm comm)
 Broadcasts a message from the process with rank "root" to all other processes of the group.
int MOC_Barrier (MOC_Comm comm)
 Blocks the caller until all processes in the communicator have called it; that is, the call returns at any process only after all members of the communicator have entered the call.
PPU & SPU
int MOC_Finalize (void)
 Terminates MPI execution environment.
+


Define Documentation

+ +
+
+ + + + +
#define MAX_DMA_CALL_SIZE   16384
+
+
+ +

+Maximum byte-count which can be transferred by one DMA-transfer. +

+ +

Definition at line 33 of file moc.h.

+ +

Referenced by IMOC_get_data(), IMOC_iget_data(), IMOC_iput_data(), and IMOC_put_data().

+ +
+

+ +

+
+ + + + +
#define MAX_MOC_MESSAGE_SIZE   16777215
+
+
+ +

+Maximum byte-count of a MOC-message. +

+It's only the theoretical size, because practically the SPU's local-stores can only hold much fewer bytes. +

Definition at line 39 of file moc.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ANY_SOURCE   1001
+
+
+ +

+Indicates, in a receive, to accept a message from any source. +

+ +

Definition at line 28 of file moc.h.

+ +

Referenced by IMOC_get_entry().

+ +
+

+ +

+
+ + + + +
#define MOC_ANY_TAG   1000
+
+
+ +

+Indicates, in a receive, to accept a message with any tag value. +

+ +

Definition at line 13 of file moc.h.

+ +

Referenced by IMOC_get_entry().

+ +
+

+ +

+
+ + + + +
#define MOC_BCAST_TAG   250
+
+
+ +

+Reserved Tag for Broadcast-Messages (MOC_Bcast). +

+ +

Definition at line 18 of file moc.h.

+ +

Referenced by MOC_Bcast().

+ +
+

+ +

+
+ + + + +
#define MOC_PROC_NULL   1000
+
+
+ +

+Specifies a rank that can be used to send or receive from no-one. +

+ +

Definition at line 23 of file moc.h.

+ +
+

+


Typedef Documentation

+ +
+
+ + + + +
typedef struct imoc_dma_request_struct imoc_dma_request
+
+
+ +

+ +

+

+ +

+ +
+ +

+ +

+

+

+
Generated on Thu Feb 12 13:49:56 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/d8a/moc__probe_8c.html b/documentation/developer/html/d1/d8a/moc__probe_8c.html new file mode 100755 index 0000000..699537d --- /dev/null +++ b/documentation/developer/html/d1/d8a/moc__probe_8c.html @@ -0,0 +1,46 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_probe.c File Reference + + + + + +
+

src/noarch/communication/moc_probe.c File Reference

+

+#include <moc.h>
+#include <internal/imoc.h>
+ +

+

+Include dependency graph for moc_probe.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Probe (int source, int tag, MOC_Comm comm, MOC_Status *status)
 Waits till a message is received and returns information without actually receiving the message.
+

+
Generated on Thu Feb 12 13:50:07 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/d8b/structmoc__spu__thread__struct.html b/documentation/developer/html/d1/d8b/structmoc__spu__thread__struct.html new file mode 100755 index 0000000..55b400c --- /dev/null +++ b/documentation/developer/html/d1/d8b/structmoc__spu__thread__struct.html @@ -0,0 +1,339 @@ + + +MPI On Cell (Documentation): moc_spu_thread_struct Struct Reference + + + + + +
+

moc_spu_thread_struct Struct Reference
+ +[SPU-Thread Management] +

#include <imoc_core_ppu.h> +

+

+Collaboration diagram for moc_spu_thread_struct:
+
+

Collaboration graph
+
[legend]
+

Detailed Description

+SPU-Thread structure. +

+

Note:
PPU only
+Stores information about the SPU-Threads the managing PPU-Process needs to know. +

Definition at line 74 of file imoc_core_ppu.h.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

uint8_t rank
 rank of SPU-thread
pthread_t pthread
 PThread-handle <.
spe_context_ptr_t speid
 SPE-Context.
spe_stop_info_t stop_info
 Error-Information.
uint32_t spe_entry_adress
 Spe-entry-address.
void * argp
 effective address of user-defined information in main-memory
void * envp
 Pointer to environment information.
void * buffer_base
 base-address of the SPU-Thread's buffer
uint32_t buffer_size
 size of the SPU-Thread's buffer
uint64_t ls_base
 Effective Basis-Address of SPU's local-storage.
uint32_t queue_base_in_ls
 Address of message-queue in SPU's local-storage.
uint32_t status_base_in_ls
 Address of status-array in SPU's local-storage.
+

Field Documentation

+ +
+
+ + + + +
uint8_t moc_spu_thread_struct::rank
+
+
+ +

+rank of SPU-thread +

+ +

Definition at line 76 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Init(), and moc_spe_pthread_func().

+ +
+

+ +

+
+ + + + +
pthread_t moc_spu_thread_struct::pthread
+
+
+ +

+PThread-handle <. +

+ +

Definition at line 77 of file imoc_core_ppu.h.

+ +
+

+ +

+
+ + + + +
spe_context_ptr_t moc_spu_thread_struct::speid
+
+
+ +

+SPE-Context. +

+ +

Definition at line 78 of file imoc_core_ppu.h.

+ +

Referenced by IMOC_test_dma(), IMOC_wait_dma(), MOC_Barrier(), and moc_spe_pthread_func().

+ +
+

+ +

+
+ + + + +
spe_stop_info_t moc_spu_thread_struct::stop_info
+
+
+ +

+Error-Information. +

+ +

Definition at line 79 of file imoc_core_ppu.h.

+ +

Referenced by moc_spe_pthread_func().

+ +
+

+ +

+ +
+ +

+Spe-entry-address. +

+ +

Definition at line 80 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Add_spu_thread(), and moc_spe_pthread_func().

+ +
+

+ +

+
+ + + + +
void* moc_spu_thread_struct::argp
+
+
+ +

+effective address of user-defined information in main-memory +

+ +

Definition at line 81 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Add_spu_thread(), and moc_spe_pthread_func().

+ +
+

+ +

+
+ + + + +
void* moc_spu_thread_struct::envp
+
+
+ +

+Pointer to environment information. +

+ +

Definition at line 83 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Init(), and moc_spe_pthread_func().

+ +
+

+ +

+ +
+ +

+base-address of the SPU-Thread's buffer +

+ +

Definition at line 84 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Init().

+ +
+

+ +

+ +
+ +

+size of the SPU-Thread's buffer +

+ +

Definition at line 85 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Init().

+ +
+

+ +

+
+ + + + +
uint64_t moc_spu_thread_struct::ls_base
+
+
+ +

+Effective Basis-Address of SPU's local-storage. +

+ +

Definition at line 86 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Init(), and MOC_Recv().

+ +
+

+ +

+ +
+ +

+Address of message-queue in SPU's local-storage. +

+ +

Definition at line 87 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Init().

+ +
+

+ +

+ +
+ +

+Address of status-array in SPU's local-storage. +

+ +

Definition at line 88 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Init().

+ +
+

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/d93/imoc__dma__spu_8h__dep__incl.map b/documentation/developer/html/d1/d93/imoc__dma__spu_8h__dep__incl.map new file mode 100755 index 0000000..bd980b4 --- /dev/null +++ b/documentation/developer/html/d1/d93/imoc__dma__spu_8h__dep__incl.map @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d1/d93/imoc__dma__spu_8h__dep__incl.md5 b/documentation/developer/html/d1/d93/imoc__dma__spu_8h__dep__incl.md5 new file mode 100755 index 0000000..f3f758d --- /dev/null +++ b/documentation/developer/html/d1/d93/imoc__dma__spu_8h__dep__incl.md5 @@ -0,0 +1 @@ +027979004a69944348e326e53400f660 \ No newline at end of file diff --git a/documentation/developer/html/d1/d93/imoc__dma__spu_8h__dep__incl.png b/documentation/developer/html/d1/d93/imoc__dma__spu_8h__dep__incl.png new file mode 100755 index 0000000..3af2ad4 Binary files /dev/null and b/documentation/developer/html/d1/d93/imoc__dma__spu_8h__dep__incl.png differ diff --git a/documentation/developer/html/d1/d97/group__internal__error.html b/documentation/developer/html/d1/d97/group__internal__error.html new file mode 100755 index 0000000..846e606 --- /dev/null +++ b/documentation/developer/html/d1/d97/group__internal__error.html @@ -0,0 +1,168 @@ + + +MPI On Cell (Documentation): Error-Handling + + + + + +
+

Error-Handling
+ +[Environmental Management] +

+

+

+Collaboration diagram for Error-Handling:
+
+
+ +
+
+

Detailed Description

+This section deals with error-messages. +

+An array of type error_strings_struct stores error-messages and their corresponding error-codes. MOC_Error_string searches this list for a given error-code and returns the error-message. +

+ + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  error_strings_struct
 Error-Strings structure. More...

PPU-only

error_strings_t error_strings []
 stores the error-messages
#define ERROR_STRINGS_COUNT   28
 error-message count

SPU-only

error_strings_t error_strings []
 stores the error-messages
#define ERROR_STRINGS_COUNT   28
 error-message count

Typedefs

typedef struct error_strings_struct error_strings_t
 Error-Strings structure.
+


Define Documentation

+ +
+
+ + + + +
#define ERROR_STRINGS_COUNT   28
+
+
+ +

+error-message count +

+

Note:
SPU-only
+ +

Definition at line 61 of file moc_error_string_spu.c.

+ +
+

+ +

+
+ + + + +
#define ERROR_STRINGS_COUNT   28
+
+
+ +

+error-message count +

+

Note:
PPU-only
+ +

Definition at line 62 of file moc_error_string_ppu.c.

+ +

Referenced by MOC_Error_string().

+ +
+

+


Typedef Documentation

+ +
+
+ + + + +
typedef struct error_strings_struct error_strings_t
+
+
+ +

+Error-Strings structure. +

+stores the error-string to a given error-code typedef for error_strings_struct +

+

+


Variable Documentation

+ +
+ +
+ +

+stores the error-messages +

+

Note:
SPU-only
+ +

Definition at line 22 of file moc_error_string_spu.c.

+ +
+

+ +

+ +
+ +

+stores the error-messages +

+

Note:
PPU-only
+ +

Definition at line 22 of file moc_error_string_ppu.c.

+ +
+

+

+
Generated on Thu Feb 12 13:51:06 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/d97/group__internal__error.png b/documentation/developer/html/d1/d97/group__internal__error.png new file mode 100755 index 0000000..7384bf6 Binary files /dev/null and b/documentation/developer/html/d1/d97/group__internal__error.png differ diff --git a/documentation/developer/html/d1/da6/imoc__dma-iget__ppu_8c.html b/documentation/developer/html/d1/da6/imoc__dma-iget__ppu_8c.html new file mode 100755 index 0000000..41dd62d --- /dev/null +++ b/documentation/developer/html/d1/da6/imoc__dma-iget__ppu_8c.html @@ -0,0 +1,51 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-iget_ppu.c File Reference + + + + + +
+

src/ppu/internal/dma/imoc_dma-iget_ppu.c File Reference

+

+#include <malloc_align.h>
+#include <string.h>
+#include <moc.h>
+#include <ppu/moc_dma_ppu.h>
+#include <internal/ppu/imoc_macros_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for imoc_dma-iget_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_iget_data (void *target, uint64_t source, uint32_t size, uint32_t dest, imoc_dma_request *request)
 Internal wrapper-function for a non-blocking DMA-get operation.
+

+
Generated on Thu Feb 12 13:50:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/dc4/imoc__dma-test__spu_8c.html b/documentation/developer/html/d1/dc4/imoc__dma-test__spu_8c.html new file mode 100755 index 0000000..9cad1dc --- /dev/null +++ b/documentation/developer/html/d1/dc4/imoc__dma-test__spu_8c.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-test_spu.c File Reference + + + + + +
+

src/spu/internal/dma/imoc_dma-test_spu.c File Reference

+

+#include <string.h>
+#include <stdint.h>
+#include <free_align.h>
+#include <spu_mfcio.h>
+#include <moc.h>
+#include <internal/spu/imoc_dma_spu.h>
+ +

+

+Include dependency graph for imoc_dma-test_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_test_dma (imoc_dma_request *request, int *flag)
 Tests if a IMOC_iget_data or IMOC_iput_data is completed.
+

+
Generated on Thu Feb 12 13:50:39 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/dc9/imoc__test__message_8c__incl.map b/documentation/developer/html/d1/dc9/imoc__test__message_8c__incl.map new file mode 100755 index 0000000..97afcbd --- /dev/null +++ b/documentation/developer/html/d1/dc9/imoc__test__message_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/d1/dc9/imoc__test__message_8c__incl.md5 b/documentation/developer/html/d1/dc9/imoc__test__message_8c__incl.md5 new file mode 100755 index 0000000..b901a22 --- /dev/null +++ b/documentation/developer/html/d1/dc9/imoc__test__message_8c__incl.md5 @@ -0,0 +1 @@ +eb2248d6682a8df8145c58910bbdc969 \ No newline at end of file diff --git a/documentation/developer/html/d1/dc9/imoc__test__message_8c__incl.png b/documentation/developer/html/d1/dc9/imoc__test__message_8c__incl.png new file mode 100755 index 0000000..02bec22 Binary files /dev/null and b/documentation/developer/html/d1/dc9/imoc__test__message_8c__incl.png differ diff --git a/documentation/developer/html/d1/dd1/group__comm__mgt.html b/documentation/developer/html/d1/dd1/group__comm__mgt.html new file mode 100755 index 0000000..bdba910 --- /dev/null +++ b/documentation/developer/html/d1/dd1/group__comm__mgt.html @@ -0,0 +1,242 @@ + + +MPI On Cell (Documentation): Communicator Management + + + + + +
+

Communicator Management
+ +[Groups, Context and Communicators] +

+

+

+Collaboration diagram for Communicator Management:
+
+
+ +
+
+

Detailed Description

+Funktions for managing communicators. +

+Because of reasons already stated (see Groups, Context and Communicators) there is no support for user-defined communicators. So this section is limited to functions which return the size of a specific communicator or the rank of the calling process. +

+ + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define MOC_COMM_NULL   0
 Specifies a null communicator.
#define MOC_COMM_WORLD   1
 Specifies a constant that contains all of the processes.
#define MOC_COMM_SELF   2
 Specifies a constant that contains only the calling process.

Typedefs

typedef int MOC_Comm
 Communicator-Handle.

Functions

int MOC_Comm_rank (MOC_Comm comm, int *rank)
 Determines the rank of the calling process in the communicator.
int MOC_Comm_size (MOC_Comm comm, int *size)
 Determines the size of the group associated with a communictor.
+


Define Documentation

+ +
+
+ + + + +
#define MOC_COMM_NULL   0
+
+
+ +

+Specifies a null communicator. +

+ +

Definition at line 291 of file moc.h.

+ +
+

+ +

+
+ + + + +
#define MOC_COMM_SELF   2
+
+
+ +

+Specifies a constant that contains only the calling process. +

+ +

Definition at line 301 of file moc.h.

+ +

Referenced by MOC_Barrier(), MOC_Bcast(), MOC_Comm_rank(), and MOC_Comm_size().

+ +
+

+ +

+
+ + + + +
#define MOC_COMM_WORLD   1
+
+
+ +

+Specifies a constant that contains all of the processes. +

+ +

Definition at line 296 of file moc.h.

+ +

Referenced by MOC_Barrier(), MOC_Comm_rank(), and MOC_Comm_size().

+ +
+

+


Typedef Documentation

+ +
+
+ + + + +
typedef int MOC_Comm
+
+
+ +

+Communicator-Handle. +

+Masks the actual type which is used to encode the communicator. Char is used and therefore the maximum number of possible communicators is limited to 256. But because there are three predefined communicators (MPI_COMM_NULL, MPI_COMM_WORLD and MPI_COMM_SELF) only 253 user-defined communicators are possible. +

Definition at line 286 of file moc.h.

+ +
+

+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int MOC_Comm_rank (MOC_Comm  comm,
int *  rank 
)
+
+
+ +

+Determines the rank of the calling process in the communicator. +

+

Parameters:
+ + + +
comm in commicator-handle
rank out rank of the calling process in group of comm
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_COMM Invalid communicator. A common error is to use a null communicator in a call.
+
+ +

Definition at line 8 of file moc_comm_rank.c.

+ +

References MOC_COMM_SELF, MOC_COMM_WORLD, MOC_ERR_COMM, node_handle, and moc_node_handle_ppu_struct::rank.

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Comm_size (MOC_Comm  comm,
int *  size 
)
+
+
+ +

+Determines the size of the group associated with a communictor. +

+

Parameters:
+ + + +
comm in commicator-handle
size out number of processes in the group of comm
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_COMM Invalid communicator. A common error is to use a null communicator in a call.
+
+ +

Definition at line 8 of file moc_comm_size.c.

+ +

References moc_node_handle_ppu_struct::comm_size, MOC_COMM_SELF, MOC_COMM_WORLD, MOC_ERR_COMM, and node_handle.

+ +
+

+

+
Generated on Thu Feb 12 13:51:02 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/dd1/group__comm__mgt.png b/documentation/developer/html/d1/dd1/group__comm__mgt.png new file mode 100755 index 0000000..682638b Binary files /dev/null and b/documentation/developer/html/d1/dd1/group__comm__mgt.png differ diff --git a/documentation/developer/html/d1/ddf/moc__get__count_8c-source.html b/documentation/developer/html/d1/ddf/moc__get__count_8c-source.html new file mode 100755 index 0000000..0db2c7e --- /dev/null +++ b/documentation/developer/html/d1/ddf/moc__get__count_8c-source.html @@ -0,0 +1,37 @@ + + +MPI On Cell (Documentation): src/noarch/system/moc_get_count.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/df0/group__comm__main.html b/documentation/developer/html/d1/df0/group__comm__main.html new file mode 100755 index 0000000..7cc00a2 --- /dev/null +++ b/documentation/developer/html/d1/df0/group__comm__main.html @@ -0,0 +1,53 @@ + + +MPI On Cell (Documentation): Groups, Context and Communicators + + + + + +
+

Groups, Context and Communicators
+ +[End-User Documentation] +

+

+

+Collaboration diagram for Groups, Context and Communicators:
+
+
+ +
+
+

Detailed Description

+The MOC communicator specifies a group of processes inside which a communication occurs. +

+Initially there is a single communicator, MPI_COMM_WORLD, which contains all of the processes involved in the computation.

+Currently there is no support for creating and managing user-defined groups and communicators and probably never will be. The local storage of a SPU is very small and also the maximal number of nodes is limited to a small number and so there is doubt if the benefits will be greater than the overhead introduced by supporting user-defined groups and communicators.

+Only the predefined communicators MOC_COMM_WORLD, MOC_COMM_SELF and MOC_COMM_NULL are available.

+The only operations which are currently implemented are MOC_Comm_size and MOC_Comm_rank. +

+ + + + + + + +

+


Modules

 Communicator Management
 Funktions for managing communicators.
+

+
Generated on Thu Feb 12 13:51:02 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d1/df0/group__comm__main.png b/documentation/developer/html/d1/df0/group__comm__main.png new file mode 100755 index 0000000..4ae014f Binary files /dev/null and b/documentation/developer/html/d1/df0/group__comm__main.png differ diff --git a/documentation/developer/html/d1/df4/moc__get__proc__name__spu_8c.html b/documentation/developer/html/d1/df4/moc__get__proc__name__spu_8c.html new file mode 100755 index 0000000..fcb5b79 --- /dev/null +++ b/documentation/developer/html/d1/df4/moc__get__proc__name__spu_8c.html @@ -0,0 +1,45 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_get_proc_name_spu.c File Reference + + + + + +
+

src/spu/system/moc_get_proc_name_spu.c File Reference

+

+#include <moc.h>
+ +

+

+Include dependency graph for moc_get_proc_name_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Get_processor_name (char *name, int *resultlen)
 Gets the name of the processor.
+

+
Generated on Thu Feb 12 13:50:41 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/d00/moc__ssend__ppu_8c.html b/documentation/developer/html/d2/d00/moc__ssend__ppu_8c.html new file mode 100755 index 0000000..064b2e1 --- /dev/null +++ b/documentation/developer/html/d2/d00/moc__ssend__ppu_8c.html @@ -0,0 +1,51 @@ + + +MPI On Cell (Documentation): src/ppu/communication/moc_ssend_ppu.c File Reference + + + + + +
+

src/ppu/communication/moc_ssend_ppu.c File Reference

+

+#include <stdio.h>
+#include <string.h>
+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_macros_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_ssend_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Ssend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking synchronous mode send operation.
+

+
Generated on Thu Feb 12 13:50:18 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/d14/moc__dma-wait__spu_8c.html b/documentation/developer/html/d2/d14/moc__dma-wait__spu_8c.html new file mode 100755 index 0000000..f3ee42d --- /dev/null +++ b/documentation/developer/html/d2/d14/moc__dma-wait__spu_8c.html @@ -0,0 +1,47 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-wait_spu.c File Reference + + + + + +
+

src/spu/dma/moc_dma-wait_spu.c File Reference

+

+#include <moc.h>
+#include <internal/spu/imoc_dma_spu.h>
+#include <spu/moc_dma_spu.h>
+ +

+

+Include dependency graph for moc_dma-wait_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Wait_data (MOC_Request *request)
 Waits till a MOC_IGet_data or IMOC_IPut_data is completed.
+

+
Generated on Thu Feb 12 13:50:37 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/d15/moc__set__buffer__size__ppu_8c.html b/documentation/developer/html/d2/d15/moc__set__buffer__size__ppu_8c.html new file mode 100755 index 0000000..334c67e --- /dev/null +++ b/documentation/developer/html/d2/d15/moc__set__buffer__size__ppu_8c.html @@ -0,0 +1,45 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_set_buffer_size_ppu.c File Reference + + + + + +
+

src/ppu/system/moc_set_buffer_size_ppu.c File Reference

+

+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_set_buffer_size_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Set_buffer_size (uint32_t size)
 Sets the size of the buffer used for buffered communication.
+

+
Generated on Thu Feb 12 13:50:30 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/d16/group__internal__env.html b/documentation/developer/html/d2/d16/group__internal__env.html new file mode 100755 index 0000000..451e17c --- /dev/null +++ b/documentation/developer/html/d2/d16/group__internal__env.html @@ -0,0 +1,60 @@ + + +MPI On Cell (Documentation): Environmental Management + + + + + +
+

Environmental Management
+ +[Developer Documentation] +

+

+

+Collaboration diagram for Environmental Management:
+
+
+ +
+
+

Detailed Description

+Internals about Startup & Shutdown and Error-Handling. +

+ +

+ + + + + + + +

+

+ + + +

+

+ + + +

+


Modules

 Startup & Shutdown
 Internals about the startup of the execution-environment and SPU-Thread-Management.
 Error-Handling
 This section deals with error-messages.
 Timers and Synchronization
 Internals about Time.
+

+
Generated on Thu Feb 12 13:51:04 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/d16/group__internal__env.png b/documentation/developer/html/d2/d16/group__internal__env.png new file mode 100755 index 0000000..3275dc5 Binary files /dev/null and b/documentation/developer/html/d2/d16/group__internal__env.png differ diff --git a/documentation/developer/html/d2/d2a/moc__translate__ea__ls__ppu_8c.html b/documentation/developer/html/d2/d2a/moc__translate__ea__ls__ppu_8c.html new file mode 100755 index 0000000..978b62a --- /dev/null +++ b/documentation/developer/html/d2/d2a/moc__translate__ea__ls__ppu_8c.html @@ -0,0 +1,46 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_translate_ea_ls_ppu.c File Reference + + + + + +
+

src/ppu/dma/moc_translate_ea_ls_ppu.c File Reference

+

+#include <ppu/moc_dma_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_translate_ea_ls_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Translate_EA_to_LS (uint64_t ea, int rank, uint32_t *ls)
 Translates an effective-address of a SPU into the corresponding local-store address.
+

+
Generated on Thu Feb 12 13:50:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/d2a/structmoc__internal__buffer__node__struct__coll__graph.map b/documentation/developer/html/d2/d2a/structmoc__internal__buffer__node__struct__coll__graph.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/developer/html/d2/d2a/structmoc__internal__buffer__node__struct__coll__graph.md5 b/documentation/developer/html/d2/d2a/structmoc__internal__buffer__node__struct__coll__graph.md5 new file mode 100755 index 0000000..3dbb69b --- /dev/null +++ b/documentation/developer/html/d2/d2a/structmoc__internal__buffer__node__struct__coll__graph.md5 @@ -0,0 +1 @@ +c8359dda4ae6ebfe59a81476a6a762a8 \ No newline at end of file diff --git a/documentation/developer/html/d2/d2a/structmoc__internal__buffer__node__struct__coll__graph.png b/documentation/developer/html/d2/d2a/structmoc__internal__buffer__node__struct__coll__graph.png new file mode 100755 index 0000000..2c9798a Binary files /dev/null and b/documentation/developer/html/d2/d2a/structmoc__internal__buffer__node__struct__coll__graph.png differ diff --git a/documentation/developer/html/d2/d42/imoc__macros_8h.html b/documentation/developer/html/d2/d42/imoc__macros_8h.html new file mode 100755 index 0000000..9d9da83 --- /dev/null +++ b/documentation/developer/html/d2/d42/imoc__macros_8h.html @@ -0,0 +1,90 @@ + + +MPI On Cell (Documentation): include/internal/imoc_macros.h File Reference + + + + + +
+

include/internal/imoc_macros.h File Reference

+

+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define IMOC_TEST_COMM_SEND(comm)
 Tests if invalid communicator in a send-operation.
#define IMOC_TEST_COMM_RECV(comm)
 Tests if invalid communicator in a recv-operation.
#define IMOC_TEST_TAG_SEND(tag)
 Tests if invalid tag in a send-operation.
#define IMOC_TEST_TAG_RECV(tag)
 Tests if invalid tag in a recv-operation.
#define IMOC_TEST_RANK(rank)
 Tests if invalid rank.
#define IMOC_TEST_RANK_RECV(rank)
 Tests if invalid rank in a recv-operation.
#define IMOC_TEST_BYTECOUNT(count)
 Tests if invalid byte-count in a recv-operation.
#define IMOC_TEST_BUFFER(buf)
 Tests if invalid buffer-pointer.
#define IMOC_TEST_PROC_NULL(rank)
 Tests if rank is MOC_PROC_NULL and returns with MOC_SUCCESS itself.
#define IMOC_TEST_PROC_SELF(proc)
 Tests if rank is own rank and returns with MOC_SUCCESS itself.
#define IMOC_TEST_ALIGNMENT(address)
 Tests if address is 16-byte aligned.
PPU & SPU
#define IMOC_EA_REMOTE_QUEUE(proc)   ( (proc > node_handle.rank) ? node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank : node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1) )
 Effective base-address of own remote queue at node 'rank'.
#define IMOC_LOCAL_QUEUE(proc)   ( (proc < node_handle.rank) ? node_handle.message_queue_base+node_handle.queue_size*(proc) : node_handle.message_queue_base+node_handle.queue_size*(proc-1) )
 Effective Base-Address of local queue responsible for node 'rank'.
#define IMOC_EA_REMOTE_QUEUE_ENTRY(proc, index)   ( (proc > node_handle.rank) ? node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank+sizeof(moc_message_envelope_t)*(index) : node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1)+sizeof(moc_message_envelope_t)*(index) )
 Effective base-address of own remote queue-entry at node 'rank'.
#define IMOC_LOCAL_QUEUE_ENTRY(proc, index)   ( (proc < node_handle.rank) ? node_handle.message_queue_base+node_handle.queue_size*(proc)+(index) : node_handle.message_queue_base+node_handle.queue_size*(proc-1)+(index) )
 Effective Base-Address of local queue-entry responsible for node 'rank'.
#define IMOC_EA_REMOTE_STATUS_ENTRY(id, rank)   ( node_handle.moc_process_list[rank].stat_array_base+sizeof(moc_message_status_t)*(id) )
 Effective Address of remote status-array entry at node 'rank'.
+

+
Generated on Thu Feb 12 13:49:50 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/d55/imoc__dma-wait__spu_8c__incl.map b/documentation/developer/html/d2/d55/imoc__dma-wait__spu_8c__incl.map new file mode 100755 index 0000000..dd8fc21 --- /dev/null +++ b/documentation/developer/html/d2/d55/imoc__dma-wait__spu_8c__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/documentation/developer/html/d2/d55/imoc__dma-wait__spu_8c__incl.md5 b/documentation/developer/html/d2/d55/imoc__dma-wait__spu_8c__incl.md5 new file mode 100755 index 0000000..dca7a11 --- /dev/null +++ b/documentation/developer/html/d2/d55/imoc__dma-wait__spu_8c__incl.md5 @@ -0,0 +1 @@ +46c70b32b626eac4328a4776efe9b1e8 \ No newline at end of file diff --git a/documentation/developer/html/d2/d55/imoc__dma-wait__spu_8c__incl.png b/documentation/developer/html/d2/d55/imoc__dma-wait__spu_8c__incl.png new file mode 100755 index 0000000..359072c Binary files /dev/null and b/documentation/developer/html/d2/d55/imoc__dma-wait__spu_8c__incl.png differ diff --git a/documentation/developer/html/d2/d7b/imoc__buffer__malloc_8c.html b/documentation/developer/html/d2/d7b/imoc__buffer__malloc_8c.html new file mode 100755 index 0000000..fff1e03 --- /dev/null +++ b/documentation/developer/html/d2/d7b/imoc__buffer__malloc_8c.html @@ -0,0 +1,55 @@ + + +MPI On Cell (Documentation): src/noarch/internal/imoc_buffer_malloc.c File Reference + + + + + +
+

src/noarch/internal/imoc_buffer_malloc.c File Reference

+

+#include <stdlib.h>
+#include <stdio.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for imoc_buffer_malloc.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + +

Functions

moc_internal_buffer_node_t * __attribute__ ((always_inline))
 void bmalloc_print_nodes() { if (!bmalloc_first_node) printf("No nodes in list\n"); else { int z = 0; moc_internal_buffer_node_t* t; for (t = bmalloc_first_node; t != 0; t = t->next_node) { printf( "Node %i: offset %u - size %u - valid %i - mid %u\n", z, node_handle.status_array_base[ t->mid ].buffer_offset, node_handle.status_array_base[ t->mid ].message_size, node_handle.status_array_base[ t->mid ].flags.bits.buffer_used, t->mid ); z++; } } }
uint64_t IMOC_bmalloc (uint32_t size, uint8_t mid)
 Allocate buffer-space.

Variables

moc_internal_buffer_node_t * bmalloc_first_node = 0
 Pointer to first entry of linked-list.
+

+
Generated on Thu Feb 12 13:50:14 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/d97/moc__iprobe_8c.html b/documentation/developer/html/d2/d97/moc__iprobe_8c.html new file mode 100755 index 0000000..800998f --- /dev/null +++ b/documentation/developer/html/d2/d97/moc__iprobe_8c.html @@ -0,0 +1,46 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_iprobe.c File Reference + + + + + +
+

src/noarch/communication/moc_iprobe.c File Reference

+

+#include <moc.h>
+#include <internal/imoc.h>
+ +

+

+Include dependency graph for moc_iprobe.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Iprobe (int source, int tag, MOC_Comm comm, int *flag, MOC_Status *status)
 Tests if a message is available and returns information without actually receiving the message.
+

+
Generated on Thu Feb 12 13:50:06 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/da7/structMOC__Status__struct__coll__graph.map b/documentation/developer/html/d2/da7/structMOC__Status__struct__coll__graph.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/developer/html/d2/da7/structMOC__Status__struct__coll__graph.md5 b/documentation/developer/html/d2/da7/structMOC__Status__struct__coll__graph.md5 new file mode 100755 index 0000000..a5547aa --- /dev/null +++ b/documentation/developer/html/d2/da7/structMOC__Status__struct__coll__graph.md5 @@ -0,0 +1 @@ +f51089f283f47befbc3ee1ff74c29a89 \ No newline at end of file diff --git a/documentation/developer/html/d2/da7/structMOC__Status__struct__coll__graph.png b/documentation/developer/html/d2/da7/structMOC__Status__struct__coll__graph.png new file mode 100755 index 0000000..3c442fb Binary files /dev/null and b/documentation/developer/html/d2/da7/structMOC__Status__struct__coll__graph.png differ diff --git a/documentation/developer/html/d2/daa/doxygen__internal__main_8doxygen.html b/documentation/developer/html/d2/daa/doxygen__internal__main_8doxygen.html new file mode 100755 index 0000000..85e79d5 --- /dev/null +++ b/documentation/developer/html/d2/daa/doxygen__internal__main_8doxygen.html @@ -0,0 +1,31 @@ + + +MPI On Cell (Documentation): include/internal/doxygen_internal_main.doxygen File Reference + + + + + +
+

include/internal/doxygen_internal_main.doxygen File Reference

+

+ +

+Go to the source code of this file. + +
+

+
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/db6/moc__bsend__ppu_8c-source.html b/documentation/developer/html/d2/db6/moc__bsend__ppu_8c-source.html new file mode 100755 index 0000000..99e1035 --- /dev/null +++ b/documentation/developer/html/d2/db6/moc__bsend__ppu_8c-source.html @@ -0,0 +1,135 @@ + + +MPI On Cell (Documentation): src/ppu/communication/moc_bsend_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/dc1/moc__set__buffer__size__ppu_8c__incl.map b/documentation/developer/html/d2/dc1/moc__set__buffer__size__ppu_8c__incl.map new file mode 100755 index 0000000..f7f09e1 --- /dev/null +++ b/documentation/developer/html/d2/dc1/moc__set__buffer__size__ppu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d2/dc1/moc__set__buffer__size__ppu_8c__incl.md5 b/documentation/developer/html/d2/dc1/moc__set__buffer__size__ppu_8c__incl.md5 new file mode 100755 index 0000000..8611c25 --- /dev/null +++ b/documentation/developer/html/d2/dc1/moc__set__buffer__size__ppu_8c__incl.md5 @@ -0,0 +1 @@ +3928aac285d2019a7aec6dbf2e6577ef \ No newline at end of file diff --git a/documentation/developer/html/d2/dc1/moc__set__buffer__size__ppu_8c__incl.png b/documentation/developer/html/d2/dc1/moc__set__buffer__size__ppu_8c__incl.png new file mode 100755 index 0000000..3a5b4f4 Binary files /dev/null and b/documentation/developer/html/d2/dc1/moc__set__buffer__size__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d2/dc7/moc__dma-get__spu_8c__incl.map b/documentation/developer/html/d2/dc7/moc__dma-get__spu_8c__incl.map new file mode 100755 index 0000000..ba8859a --- /dev/null +++ b/documentation/developer/html/d2/dc7/moc__dma-get__spu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d2/dc7/moc__dma-get__spu_8c__incl.md5 b/documentation/developer/html/d2/dc7/moc__dma-get__spu_8c__incl.md5 new file mode 100755 index 0000000..dcd7bca --- /dev/null +++ b/documentation/developer/html/d2/dc7/moc__dma-get__spu_8c__incl.md5 @@ -0,0 +1 @@ +ac18b4e2b5f0c318b6492f2f9c126647 \ No newline at end of file diff --git a/documentation/developer/html/d2/dc7/moc__dma-get__spu_8c__incl.png b/documentation/developer/html/d2/dc7/moc__dma-get__spu_8c__incl.png new file mode 100755 index 0000000..2f391c0 Binary files /dev/null and b/documentation/developer/html/d2/dc7/moc__dma-get__spu_8c__incl.png differ diff --git a/documentation/developer/html/d2/dd3/imoc__wait__message_8c-source.html b/documentation/developer/html/d2/dd3/imoc__wait__message_8c-source.html new file mode 100755 index 0000000..05acb36 --- /dev/null +++ b/documentation/developer/html/d2/dd3/imoc__wait__message_8c-source.html @@ -0,0 +1,37 @@ + + +MPI On Cell (Documentation): src/noarch/internal/communication/imoc_wait_message.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/dd7/group__internal__p2p__buffered.html b/documentation/developer/html/d2/dd7/group__internal__p2p__buffered.html new file mode 100755 index 0000000..f7cf8ae --- /dev/null +++ b/documentation/developer/html/d2/dd7/group__internal__p2p__buffered.html @@ -0,0 +1,53 @@ + + +MPI On Cell (Documentation): Buffered Communication + + + + + +
+

Buffered Communication
+ +[Blocking Communication] +

+

+

+Collaboration diagram for Buffered Communication:
+
+
+ +
+
+

Detailed Description

+Internals about blocking buffered Communication. +

+

+buffered_communication_1.png +
+ +

+ + + + + + + +

+


Modules

 Buffer-Management
 This section shows how the buffer used for buffered communication is managed.
+

+
Generated on Thu Feb 12 13:51:15 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/dd7/group__internal__p2p__buffered.png b/documentation/developer/html/d2/dd7/group__internal__p2p__buffered.png new file mode 100755 index 0000000..108c0f9 Binary files /dev/null and b/documentation/developer/html/d2/dd7/group__internal__p2p__buffered.png differ diff --git a/documentation/developer/html/d2/de0/moc__datatype_8h__incl.map b/documentation/developer/html/d2/de0/moc__datatype_8h__incl.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/developer/html/d2/de0/moc__datatype_8h__incl.md5 b/documentation/developer/html/d2/de0/moc__datatype_8h__incl.md5 new file mode 100755 index 0000000..ca96a5c --- /dev/null +++ b/documentation/developer/html/d2/de0/moc__datatype_8h__incl.md5 @@ -0,0 +1 @@ +2201fd6f50ef698b71684029e28a36fe \ No newline at end of file diff --git a/documentation/developer/html/d2/de0/moc__datatype_8h__incl.png b/documentation/developer/html/d2/de0/moc__datatype_8h__incl.png new file mode 100755 index 0000000..490edec Binary files /dev/null and b/documentation/developer/html/d2/de0/moc__datatype_8h__incl.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma.html b/documentation/developer/html/d2/de2/group__internal__p2p__dma.html new file mode 100755 index 0000000..46af1f5 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma.html @@ -0,0 +1,833 @@ + + +MPI On Cell (Documentation): DMA-Helper Functions + + + + + +
+

DMA-Helper Functions
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for DMA-Helper Functions:
+
+
+ +
+
+

Detailed Description

+Functions wrapping DMA-Transfers. +

+The Cell Broadband Engine uses Direct Memory Access (DMA) for communication. Therefore data of a MOC-message is transfered using DMA operations. Because programming DMA is rather complex, some functions are provided to hide this complexity. One DMA-call can only tranfer a maximum of 16KByte of data and the data-size has to be a multiple of 16 byte. The provided functions split the data into multiple DMA-calls if needed. If the data-size requires it, an intermediate buffer is used into which a separate DMA-Call transfers 16 byte containing the piece of data not fitting into the 16-byte scheme. Then only the needed bytes are copied into the receive-buffer. But the latter only works for a get-operation.

+The internal DMA-functions are also made publicly available via wrapping-function (see chapter Direct Memory Access) which provide parameter checks. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

PPU-only

int IMOC_get_data (void *target, uint64_t source, uint32_t size, int dest)
 Internal wrapper-function for a blocking DMA-get operation.
int IMOC_put_data (void *source, uint64_t target, uint32_t size, int dest)
 Internal wrapper-function for a blocking DMA-put operation.
int IMOC_iget_data (void *target, uint64_t source, uint32_t size, uint32_t dest, imoc_dma_request *request)
 Internal wrapper-function for a non-blocking DMA-get operation.
int IMOC_iput_data (void *source, uint64_t target, uint32_t size, uint32_t dest, imoc_dma_request *request)
 Internal wrapper-function for a non-blocking DMA-put operation.
int IMOC_wait_dma (imoc_dma_request *request)
 Waits till a IMOC_iget_data or IMOC_iput_data is completed.
int IMOC_test_dma (imoc_dma_request *request, int *flag)
 Tests if a IMOC_iget_data or IMOC_iput_data is completed.
int moc_tag_reserve (unsigned int speid)
 Reserves a tag on the ppu, for communication with a given spu.
int moc_tag_release (unsigned int speid, int tag)
 Releases a reserved tag.

SPU-only

int IMOC_get_data (void *target, uint64_t source, uint32_t size)
 Internal wrapper-function for a blocking DMA-get operation.
int IMOC_put_data (void *source, uint64_t target, uint32_t size)
 Internal wrapper-function for a blocking DMA-put operation.
int IMOC_iget_data (void *target, uint64_t source, uint32_t size, imoc_dma_request *request)
 Internal wrapper-function for a non-blocking DMA-get operation.
int IMOC_iput_data (void *source, uint64_t target, uint32_t size, imoc_dma_request *request)
 Internal wrapper-function for a blocking DMA-put operation.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int IMOC_get_data (void *  target,
uint64_t  source,
uint32_t  size 
)
+
+
+ +

+Internal wrapper-function for a blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned.

+This function actually always reads a multiple of 16 from the source, but copies only size bytes of it to target. This means however that up to 15 bytes are read from an invalid location. As it is never written to them this should always be safe.

+

Parameters:
+ + + + +
target in ls-address of buffer
source in ea-address of data
size in size of data in byte
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 8 of file imoc_dma-get_spu.c.

+ +

References MAX_DMA_CALL_SIZE, MOC_ERR_INTERN, and MOC_SUCCESS.

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int IMOC_get_data (void *  target,
uint64_t  source,
uint32_t  size,
int  dest 
)
+
+
+ +

+Internal wrapper-function for a blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned.

+This function actually always reads a multiple of 16 from the source, but copies only size bytes of it to target. This means however that up to 15 bytes are read from an invalid location. As it is never written to them this should always be safe.

+On the ppu the system for tag reservation is not present, so a hardcoded tag is used. It has also to be noted that the dma calls are actually initiated on the spu by the ppu.

+

Parameters:
+ + + + + +
target in local-address of buffer
source in ea-address of data
size in size of data in byte
dest in id of source spe
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 9 of file imoc_dma-get_ppu.c.

+ +

References __attribute__(), MAX_DMA_CALL_SIZE, MOC_ERR_INTERN, moc_ppu_thread_count, moc_spu_thread_list, and MOC_SUCCESS.

+ +

Referenced by MOC_Get_data(), and MOC_Recv().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int IMOC_iget_data (void *  target,
uint64_t  source,
uint32_t  size,
imoc_dma_request *  request 
)
+
+
+ +

+Internal wrapper-function for a non-blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned.

+This function actually always reads a multiple of 16 from the source, but copies only size bytes of it to target. This means however that up to 15 bytes are read from an invalid location. As it is never written to them this should always be safe.

+

Parameters:
+ + + + + +
target in ls-address of buffer
source in ea-address of data
size in size of data in byte
request out request-handle
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 10 of file imoc_dma-iget_spu.c.

+ +

References imoc_dma_request_struct::buffer, MAX_DMA_CALL_SIZE, MOC_ERR_INTERN, MOC_SUCCESS, imoc_dma_request_struct::remainder, imoc_dma_request_struct::size, imoc_dma_request_struct::tag_id, and imoc_dma_request_struct::target.

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int IMOC_iget_data (void *  target,
uint64_t  source,
uint32_t  size,
uint32_t  dest,
imoc_dma_request *  request 
)
+
+
+ +

+Internal wrapper-function for a non-blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned.

+This function actually always reads a multiple of 16 from the source, but copies only size bytes of it to target. This means however that up to 15 bytes are read from an invalid location. As it is never written to them this should always be safe.

+On the ppu the system for tag reservation is not present, so a hardcoded tag is used. It has also to be noted that the dma calls are actually initiated on the spu by the ppu.

+

Parameters:
+ + + + + + +
target in local-address of buffer
source in ea-address of data
size in size of data in byte
dest in id of source spe
request out request-handle
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 10 of file imoc_dma-iget_ppu.c.

+ +

References imoc_dma_request_struct::buffer, imoc_dma_request_struct::dest, MAX_DMA_CALL_SIZE, MOC_ERR_INTERN, moc_ppu_thread_count, moc_spu_thread_list, MOC_SUCCESS, moc_tag_reserve(), imoc_dma_request_struct::remainder, imoc_dma_request_struct::size, imoc_dma_request_struct::tag_id, and imoc_dma_request_struct::target.

+ +

Referenced by MOC_IGet_data().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int IMOC_iput_data (void *  source,
uint64_t  target,
uint32_t  size,
imoc_dma_request *  request 
)
+
+
+ +

+Internal wrapper-function for a blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned.

+This function actually always reads a multiple of 16 from the source, and copies it to target. This means however that up to 15 bytes are written to and invalid location, so if one wants to use it with invalid sizes precautions have to be taken in order to make it safe.

+

Parameters:
+ + + + + +
source in ls-address of data
target in ea-address of buffer
size in size of data in byte
request out request-handle
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 10 of file imoc_dma-iput_spu.c.

+ +

References MAX_DMA_CALL_SIZE, MOC_ERR_INTERN, MOC_SUCCESS, imoc_dma_request_struct::remainder, and imoc_dma_request_struct::tag_id.

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int IMOC_iput_data (void *  source,
uint64_t  target,
uint32_t  size,
uint32_t  dest,
imoc_dma_request *  request 
)
+
+
+ +

+Internal wrapper-function for a non-blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned.

+This function actually always reads a multiple of 16 from the source, and copies it to target. This means however that up to 15 bytes are written to and invalid location, so if one wants to use it with invalid sizes precautions have to be taken in order to make it safe.

+On the ppu the system for tag reservation is not present, so a hardcoded tag is used. It has also to be noted that the dma calls are actually initiated on the spu by the ppu.

+

Parameters:
+ + + + + + +
source in local-address of data
target in ea-address of buffer
size in size of data in byte
dest in id of source spe
request out request-handle
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 19 of file imoc_dma-iput_ppu.c.

+ +

References imoc_dma_request_struct::dest, MAX_DMA_CALL_SIZE, MOC_ERR_INTERN, moc_ppu_thread_count, moc_spu_thread_list, MOC_SUCCESS, moc_tag_reserve(), imoc_dma_request_struct::remainder, imoc_dma_request_struct::size, imoc_dma_request_struct::tag_id, and imoc_dma_request_struct::target.

+ +

Referenced by MOC_IPut_data().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int IMOC_put_data (void *  source,
uint64_t  target,
uint32_t  size 
)
+
+
+ +

+Internal wrapper-function for a blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned.

+This function actually always reads a multiple of 16 from the source, and copies it to target. This means however that up to 15 bytes are written to and invalid location, so if one wants to use it with invalid sizes precautions have to be taken in order to make it safe.

+

Parameters:
+ + + + +
source in ls-address of data
target in ea-address of buffer
size in size of data in byte
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 8 of file imoc_dma-put_spu.c.

+ +

References MAX_DMA_CALL_SIZE, MOC_ERR_INTERN, and MOC_SUCCESS.

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int IMOC_put_data (void *  source,
uint64_t  target,
uint32_t  size,
int  dest 
)
+
+
+ +

+Internal wrapper-function for a blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned.

+This function actually always reads a multiple of 16 from the source, and copies it to target. This means however that up to 15 bytes are written to and invalid location, so if one wants to use it with invalid sizes precautions have to be taken in order to make it safe.

+On the ppu the system for tag reservation is not present, so a hardcoded tag is used. It has also to be noted that the dma calls are actually initiated on the spu by the ppu.

+

Parameters:
+ + + + + +
source in local-address of data
target in ea-address of buffer
size in size of data in byte
dest in id of source spe
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 9 of file imoc_dma-put_ppu.c.

+ +

References MAX_DMA_CALL_SIZE, MOC_ERR_INTERN, moc_ppu_thread_count, moc_spu_thread_list, and MOC_SUCCESS.

+ +

Referenced by MOC_Bsend(), and MOC_Put_data().

+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int IMOC_test_dma (imoc_dma_request *  request,
int *  flag 
)
+
+
+ +

+Tests if a IMOC_iget_data or IMOC_iput_data is completed. +

+

Parameters:
+ + + +
request in request-handle
flag out true if operation is completed
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 9 of file imoc_dma-test_ppu.c.

+ +

References imoc_dma_request_struct::buffer, imoc_dma_request_struct::dest, MOC_ERR_INTERN, moc_ppu_thread_count, moc_spu_thread_list, MOC_SUCCESS, moc_tag_release(), imoc_dma_request_struct::remainder, imoc_dma_request_struct::size, moc_spu_thread_struct::speid, imoc_dma_request_struct::tag_id, and imoc_dma_request_struct::target.

+ +

Referenced by MOC_Test(), and MOC_Test_data().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + +
int IMOC_wait_dma (imoc_dma_request *  request  ) 
+
+
+ +

+Waits till a IMOC_iget_data or IMOC_iput_data is completed. +

+

Parameters:
+ + +
request in request-handle
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 9 of file imoc_dma-wait_ppu.c.

+ +

References imoc_dma_request_struct::buffer, imoc_dma_request_struct::dest, MOC_ERR_INTERN, moc_ppu_thread_count, moc_spu_thread_list, MOC_SUCCESS, moc_tag_release(), imoc_dma_request_struct::remainder, imoc_dma_request_struct::size, moc_spu_thread_struct::speid, imoc_dma_request_struct::tag_id, and imoc_dma_request_struct::target.

+ +

Referenced by MOC_Wait(), and MOC_Wait_data().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int moc_tag_release (unsigned int  speid,
int  tag 
)
+
+
+ +

+Releases a reserved tag. +

+

Parameters:
+ + + +
speid id of spu for which the tag was reserved
tag tag to be released
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 32 of file imoc_dma-tags_ppu.c.

+ +

References MOC_ERR_INTERN, MOC_SUCCESS, and tags.

+ +

Referenced by IMOC_test_dma(), and IMOC_wait_dma().

+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + +
int moc_tag_reserve (unsigned int  speid  ) 
+
+
+ +

+Reserves a tag on the ppu, for communication with a given spu. +

+

Parameters:
+ + +
speid id of spu to communicate with
+
+
Returns:
tag (0-14) when success otherwise error code
+ +

Definition at line 14 of file imoc_dma-tags_ppu.c.

+ +

References MOC_ERR_INTERN, and tags.

+ +

Referenced by IMOC_iget_data(), and IMOC_iput_data().

+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+

+
Generated on Thu Feb 12 13:51:14 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma.png new file mode 100755 index 0000000..7642cc8 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_cgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_cgraph.map new file mode 100755 index 0000000..d79861a --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_cgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_cgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_cgraph.md5 new file mode 100755 index 0000000..545433d --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_cgraph.md5 @@ -0,0 +1 @@ +bda54ea0732025e405ea2f3ee7c537b2 \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_cgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_cgraph.png new file mode 100755 index 0000000..a60ac43 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_cgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_icgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_icgraph.map new file mode 100755 index 0000000..52c6a9a --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_icgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_icgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_icgraph.md5 new file mode 100755 index 0000000..eda74c7 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_icgraph.md5 @@ -0,0 +1 @@ +44d36ff47cb99238fc2f7698ae5c3c5c \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_icgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_icgraph.png new file mode 100755 index 0000000..07db509 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g0c76eeaa08ac299e19dc2758d4142cd9_icgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g29d3bf9879af70f97d63e774a5aa4d33_icgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g29d3bf9879af70f97d63e774a5aa4d33_icgraph.map new file mode 100755 index 0000000..55745d2 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g29d3bf9879af70f97d63e774a5aa4d33_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g29d3bf9879af70f97d63e774a5aa4d33_icgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g29d3bf9879af70f97d63e774a5aa4d33_icgraph.md5 new file mode 100755 index 0000000..306f3f7 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g29d3bf9879af70f97d63e774a5aa4d33_icgraph.md5 @@ -0,0 +1 @@ +df849505d2ffd43782a3564cc89aee12 \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g29d3bf9879af70f97d63e774a5aa4d33_icgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g29d3bf9879af70f97d63e774a5aa4d33_icgraph.png new file mode 100755 index 0000000..fb2e2b7 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g29d3bf9879af70f97d63e774a5aa4d33_icgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_cgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_cgraph.map new file mode 100755 index 0000000..b8af958 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_cgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_cgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_cgraph.md5 new file mode 100755 index 0000000..b0c77fe --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_cgraph.md5 @@ -0,0 +1 @@ +d6bcce489811e9c5f1eab7f6387817c4 \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_cgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_cgraph.png new file mode 100755 index 0000000..d29ae36 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_cgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_icgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_icgraph.map new file mode 100755 index 0000000..8d79dd0 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_icgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_icgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_icgraph.md5 new file mode 100755 index 0000000..c4a2ecc --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_icgraph.md5 @@ -0,0 +1 @@ +27e0e8bd048800791ef5aead0369892c \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_icgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_icgraph.png new file mode 100755 index 0000000..19aa866 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g53d36c567e4c98e5d258a7857096e7ab_icgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_cgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_cgraph.map new file mode 100755 index 0000000..711119b --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_cgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_cgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_cgraph.md5 new file mode 100755 index 0000000..23565ce --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_cgraph.md5 @@ -0,0 +1 @@ +cbb383eac3b7873fe8473237cec08838 \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_cgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_cgraph.png new file mode 100755 index 0000000..1b2e522 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_cgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_icgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_icgraph.map new file mode 100755 index 0000000..0db7abc --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_icgraph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_icgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_icgraph.md5 new file mode 100755 index 0000000..c84ffcb --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_icgraph.md5 @@ -0,0 +1 @@ +437915f627a99704f1cd51e4490b3efc \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_icgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_icgraph.png new file mode 100755 index 0000000..aee5b94 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_g57b89667357146b299f32bd114e0e5ad_icgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gb48c58191a7cf4d3e502d1c7a6c0ab9c_icgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gb48c58191a7cf4d3e502d1c7a6c0ab9c_icgraph.map new file mode 100755 index 0000000..670fcf9 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gb48c58191a7cf4d3e502d1c7a6c0ab9c_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gb48c58191a7cf4d3e502d1c7a6c0ab9c_icgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gb48c58191a7cf4d3e502d1c7a6c0ab9c_icgraph.md5 new file mode 100755 index 0000000..faef293 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gb48c58191a7cf4d3e502d1c7a6c0ab9c_icgraph.md5 @@ -0,0 +1 @@ +2baebd254628320f036ba4a64f1f8989 \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gb48c58191a7cf4d3e502d1c7a6c0ab9c_icgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gb48c58191a7cf4d3e502d1c7a6c0ab9c_icgraph.png new file mode 100755 index 0000000..a1258c8 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gb48c58191a7cf4d3e502d1c7a6c0ab9c_icgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_cgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_cgraph.map new file mode 100755 index 0000000..d79861a --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_cgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_cgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_cgraph.md5 new file mode 100755 index 0000000..929f9f4 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_cgraph.md5 @@ -0,0 +1 @@ +666210f54adf74337a08e7907608b473 \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_cgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_cgraph.png new file mode 100755 index 0000000..7b9a701 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_cgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_icgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_icgraph.map new file mode 100755 index 0000000..0fd84a8 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_icgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_icgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_icgraph.md5 new file mode 100755 index 0000000..8f59707 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_icgraph.md5 @@ -0,0 +1 @@ +46f3bd7ab55d324d7a5564dc8166cb3b \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_icgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_icgraph.png new file mode 100755 index 0000000..f1c3375 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gc181bb2e3eb058990534c71355af3443_icgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_cgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_cgraph.map new file mode 100755 index 0000000..711119b --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_cgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_cgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_cgraph.md5 new file mode 100755 index 0000000..98f5a9b --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_cgraph.md5 @@ -0,0 +1 @@ +45ce75d27b88c1e041d2458dd5d9ddb9 \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_cgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_cgraph.png new file mode 100755 index 0000000..4a1acde Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_cgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_icgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_icgraph.map new file mode 100755 index 0000000..682a645 --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_icgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_icgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_icgraph.md5 new file mode 100755 index 0000000..ebaba8c --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_icgraph.md5 @@ -0,0 +1 @@ +c4d361de4e1a73da093bec4ad6e1ab01 \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_icgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_icgraph.png new file mode 100755 index 0000000..af96ecb Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gdc3d91a083a9dc3aa539aee4d56616f0_icgraph.png differ diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gf465203c58c5a8066a7ef3ee91b15cec_icgraph.map b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gf465203c58c5a8066a7ef3ee91b15cec_icgraph.map new file mode 100755 index 0000000..85f67cb --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gf465203c58c5a8066a7ef3ee91b15cec_icgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gf465203c58c5a8066a7ef3ee91b15cec_icgraph.md5 b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gf465203c58c5a8066a7ef3ee91b15cec_icgraph.md5 new file mode 100755 index 0000000..15a172e --- /dev/null +++ b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gf465203c58c5a8066a7ef3ee91b15cec_icgraph.md5 @@ -0,0 +1 @@ +ec480351a3ddb0122a5fbb655e5330c0 \ No newline at end of file diff --git a/documentation/developer/html/d2/de2/group__internal__p2p__dma_gf465203c58c5a8066a7ef3ee91b15cec_icgraph.png b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gf465203c58c5a8066a7ef3ee91b15cec_icgraph.png new file mode 100755 index 0000000..7ce8de7 Binary files /dev/null and b/documentation/developer/html/d2/de2/group__internal__p2p__dma_gf465203c58c5a8066a7ef3ee91b15cec_icgraph.png differ diff --git a/documentation/developer/html/d2/ded/group__p2p__sendrecv.html b/documentation/developer/html/d2/ded/group__p2p__sendrecv.html new file mode 100755 index 0000000..b88edcb --- /dev/null +++ b/documentation/developer/html/d2/ded/group__p2p__sendrecv.html @@ -0,0 +1,285 @@ + + +MPI On Cell (Documentation): Send-Receive + + + + + +
+

Send-Receive
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Send-Receive:
+
+
+ +
+
+

Detailed Description

+The send-receive operations combine in one call the sending of a message to one destination and the receiving of another message, from another process. +

+A message sent by a send-receive operation can be received by a regular receive operation or probed by a probe operation; a send-receive operation can receive a message sent by a regular send operation. +

+ + + + + + + + + +

Functions

int MOC_Sendrecv (void *sendbuf, int sendcount, MOC_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MOC_Datatype recvtype, int source, int recvtag, MOC_Comm comm, MOC_Status *status)
 Execute a blocking send and receive operation.
int MOC_Sendrecv_replace (void *buf, int count, MOC_Datatype datatype, int dest, int sendtag, int source, int recvtag, MOC_Comm comm, MOC_Status *status)
 Execute a blocking send and receive.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Sendrecv (void *  sendbuf,
int  sendcount,
MOC_Datatype  sendtype,
int  dest,
int  sendtag,
void *  recvbuf,
int  recvcount,
MOC_Datatype  recvtype,
int  source,
int  recvtag,
MOC_Comm  comm,
MOC_Status *  status 
)
+
+
+ +

+Execute a blocking send and receive operation. +

+Both send and receive use the same communicator, but possibly different tags. The send buffer and receive buffers may be disjoint, and may have different lengths and datatypes.

+

Parameters:
+ + + + + + + + + + + + + +
sendbuf in Pointer to buffer where data is stored
sendcount in Number of elements to be send (not equal to actual byte-value)
sendtype in Type of elements to be send
dest in Rank of receiving process
sendtag in Tag of message to be send
recvbuf inout Buffer into which data should be stored
recvcount in Number of elements in receive buffer (not equal to actual byte-value)
recvtype in Datatype of each receive buffer element
source in Rank of source
recvtag in Tag of message to be received
comm in Communicator of message
status inout Object holding status-information (has to be allocated by user)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 3 of file moc_send_recv.c.

+ +

References MOC_Recv(), and MOC_Send().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Sendrecv_replace (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  sendtag,
int  source,
int  recvtag,
MOC_Comm  comm,
MOC_Status *  status 
)
+
+
+ +

+Execute a blocking send and receive. +

+The same buffer is used both for the send and for the receive, so that the message sent is replaced by the message received.

+

Parameters:
+ + + + + + + + + + +
buf inout Pointer to buffer
count in Number of elements (not equal to actual byte-value)
datatype in Type of elements
dest in Rank of receiving process
sendtag in Tag of message to be send
source in Rank of source
recvtag in Tag of message to be received
comm in Communicator of message
status inout Object holding status-information (has to be allocated by user)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 3 of file moc_send_recv_replace.c.

+ +

References MOC_Recv(), and MOC_Send().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+

+
Generated on Thu Feb 12 13:50:53 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d2/ded/group__p2p__sendrecv.png b/documentation/developer/html/d2/ded/group__p2p__sendrecv.png new file mode 100755 index 0000000..3bda184 Binary files /dev/null and b/documentation/developer/html/d2/ded/group__p2p__sendrecv.png differ diff --git a/documentation/developer/html/d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph.map b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph.map new file mode 100755 index 0000000..1c1f8e1 --- /dev/null +++ b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph.md5 b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph.md5 new file mode 100755 index 0000000..e4fbb2c --- /dev/null +++ b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph.md5 @@ -0,0 +1 @@ +4ae61932e5eb308c7f595be5ec1378d8 \ No newline at end of file diff --git a/documentation/developer/html/d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph.png b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph.png new file mode 100755 index 0000000..6fa6585 Binary files /dev/null and b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g1e5b32eaefd61f863f89778dcbbb70a2_cgraph.png differ diff --git a/documentation/developer/html/d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph.map b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph.map new file mode 100755 index 0000000..8a83fd1 --- /dev/null +++ b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph.md5 b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph.md5 new file mode 100755 index 0000000..0d8c608 --- /dev/null +++ b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph.md5 @@ -0,0 +1 @@ +5d092073b4734ee8a7d84c5443ee90b2 \ No newline at end of file diff --git a/documentation/developer/html/d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph.png b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph.png new file mode 100755 index 0000000..8d25309 Binary files /dev/null and b/documentation/developer/html/d2/ded/group__p2p__sendrecv_g70885aadac98497e169267e74abee516_cgraph.png differ diff --git a/documentation/developer/html/d2/df9/imoc__dma-test__ppu_8c-source.html b/documentation/developer/html/d2/df9/imoc__dma-test__ppu_8c-source.html new file mode 100755 index 0000000..b6d8ce0 --- /dev/null +++ b/documentation/developer/html/d2/df9/imoc__dma-test__ppu_8c-source.html @@ -0,0 +1,55 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-test_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/d17/imoc__buffer__malloc_8c__incl.map b/documentation/developer/html/d3/d17/imoc__buffer__malloc_8c__incl.map new file mode 100755 index 0000000..a65c022 --- /dev/null +++ b/documentation/developer/html/d3/d17/imoc__buffer__malloc_8c__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/documentation/developer/html/d3/d17/imoc__buffer__malloc_8c__incl.md5 b/documentation/developer/html/d3/d17/imoc__buffer__malloc_8c__incl.md5 new file mode 100755 index 0000000..33c9bd6 --- /dev/null +++ b/documentation/developer/html/d3/d17/imoc__buffer__malloc_8c__incl.md5 @@ -0,0 +1 @@ +ea2ce393a4b35f435ad60df4845e9d9e \ No newline at end of file diff --git a/documentation/developer/html/d3/d17/imoc__buffer__malloc_8c__incl.png b/documentation/developer/html/d3/d17/imoc__buffer__malloc_8c__incl.png new file mode 100755 index 0000000..13a7493 Binary files /dev/null and b/documentation/developer/html/d3/d17/imoc__buffer__malloc_8c__incl.png differ diff --git a/documentation/developer/html/d3/d32/group__internal__tm.html b/documentation/developer/html/d3/d32/group__internal__tm.html new file mode 100755 index 0000000..7f9577e --- /dev/null +++ b/documentation/developer/html/d3/d32/group__internal__tm.html @@ -0,0 +1,387 @@ + + +MPI On Cell (Documentation): Test-Macros + + + + + +
+

Test-Macros
+ +[Implementation-Core] +

+

+

+Collaboration diagram for Test-Macros:
+
+
+ +
+
+

Detailed Description

+Predefined Macros for testing the validity of parameters. +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define IMOC_TEST_COMM_SEND(comm)
 Tests if invalid communicator in a send-operation.
#define IMOC_TEST_COMM_RECV(comm)
 Tests if invalid communicator in a recv-operation.
#define IMOC_TEST_TAG_SEND(tag)
 Tests if invalid tag in a send-operation.
#define IMOC_TEST_TAG_RECV(tag)
 Tests if invalid tag in a recv-operation.
#define IMOC_TEST_RANK(rank)
 Tests if invalid rank.
#define IMOC_TEST_RANK_RECV(rank)
 Tests if invalid rank in a recv-operation.
#define IMOC_TEST_BYTECOUNT(count)
 Tests if invalid byte-count in a recv-operation.
#define IMOC_TEST_BUFFER(buf)
 Tests if invalid buffer-pointer.
#define IMOC_TEST_PROC_NULL(rank)
 Tests if rank is MOC_PROC_NULL and returns with MOC_SUCCESS itself.
#define IMOC_TEST_PROC_SELF(proc)
 Tests if rank is own rank and returns with MOC_SUCCESS itself.
#define IMOC_TEST_ALIGNMENT(address)
 Tests if address is 16-byte aligned.
+


Define Documentation

+ +
+
+ + + + + + + + + +
#define IMOC_TEST_ALIGNMENT (address   ) 
+
+
+ +

+Value:

if ( ((unsigned long)(address)) % 16 != 0 ) \
+                                                                                        { return MOC_ERR_BAD_ALIGNMENT; }
+
Tests if address is 16-byte aligned. +

+Calls return with appropriate error-code itself. +

Definition at line 135 of file imoc_macros.h.

+ +

Referenced by MOC_Bsend(), MOC_ISsend(), MOC_Recv(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_TEST_BUFFER (buf   ) 
+
+
+ +

+Value:

if ( (buf) == 0 ) \
+                                                                                        { return MOC_ERR_BUFFER; }
+
Tests if invalid buffer-pointer. +

+Calls return with appropriate error-code itself. +

Definition at line 116 of file imoc_macros.h.

+ +

Referenced by MOC_Bsend(), MOC_ISsend(), MOC_Recv(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_TEST_BYTECOUNT (count   ) 
+
+
+ +

+Value:

if ( (count) < 0 || (count) > MAX_MOC_MESSAGE_SIZE ) \
+                                                                                        { return MOC_ERR_COUNT; }
+
Tests if invalid byte-count in a recv-operation. +

+Calls return with appropriate error-code itself. +

Definition at line 109 of file imoc_macros.h.

+ +

Referenced by MOC_Bsend(), MOC_Get_data(), MOC_IGet_data(), MOC_IPut_data(), MOC_ISsend(), MOC_Put_data(), MOC_Recv(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_TEST_COMM_RECV (comm   ) 
+
+
+ +

+Value:

if ( (comm) != MOC_COMM_WORLD && (comm) != MOC_COMM_SELF ) \
+                                                                                        { return MOC_ERR_COMM; }
+
Tests if invalid communicator in a recv-operation. +

+Calls return with appropriate error-code itself. +

Definition at line 74 of file imoc_macros.h.

+ +

Referenced by MOC_Recv().

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_TEST_COMM_SEND (comm   ) 
+
+
+ +

+Value:

if ( (comm) != MOC_COMM_WORLD && (comm) != MOC_COMM_SELF ) \
+                                                                                        { return MOC_ERR_COMM; }
+
Tests if invalid communicator in a send-operation. +

+Calls return with appropriate error-code itself. +

Definition at line 67 of file imoc_macros.h.

+ +

Referenced by MOC_Bsend(), MOC_ISsend(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_TEST_PROC_NULL (rank   ) 
+
+
+ +

+Value:

if ((rank) == MOC_PROC_NULL ) \
+                                                                                        { return MOC_SUCCESS; }
+
Tests if rank is MOC_PROC_NULL and returns with MOC_SUCCESS itself. +

+ +

Definition at line 122 of file imoc_macros.h.

+ +

Referenced by MOC_Bsend(), MOC_ISsend(), MOC_Recv(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_TEST_PROC_SELF (proc   ) 
+
+
+ +

+Value:

if ( (proc) == node_handle.rank ) \
+                                                                                        { return MOC_SUCCESS; }
+
Tests if rank is own rank and returns with MOC_SUCCESS itself. +

+ +

Definition at line 128 of file imoc_macros.h.

+ +

Referenced by MOC_Bsend(), MOC_ISsend(), MOC_Recv(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_TEST_RANK (rank   ) 
+
+
+ +

+Value:

if ( (rank) < 0 || (rank) >= node_handle.comm_size ) \
+                                                                                        { return MOC_ERR_RANK; }
+
Tests if invalid rank. +

+Calls return with appropriate error-code itself. +

Definition at line 95 of file imoc_macros.h.

+ +

Referenced by MOC_Bsend(), MOC_Get_data(), MOC_IGet_data(), MOC_IPut_data(), MOC_ISsend(), MOC_Put_data(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_TEST_RANK_RECV (rank   ) 
+
+
+ +

+Value:

if ( rank != MOC_ANY_SOURCE && ((rank) < 0 || (rank) >= node_handle.comm_size) ) \
+                                                                                        { return MOC_ERR_RANK; }
+
Tests if invalid rank in a recv-operation. +

+Calls return with appropriate error-code itself. +

Definition at line 102 of file imoc_macros.h.

+ +

Referenced by MOC_Recv().

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_TEST_TAG_RECV (tag   ) 
+
+
+ +

+Value:

if ( (tag)!=MOC_ANY_TAG && ((tag) > 255 || (tag) < 0) ) \
+                                                                                        { return MOC_ERR_TAG; }
+
Tests if invalid tag in a recv-operation. +

+Calls return with appropriate error-code itself. +

Definition at line 88 of file imoc_macros.h.

+ +

Referenced by MOC_Recv().

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_TEST_TAG_SEND (tag   ) 
+
+
+ +

+Value:

if ( (tag) > 255 || (tag) < 0 ) \
+                                                                                        { return MOC_ERR_TAG; }
+
Tests if invalid tag in a send-operation. +

+Calls return with appropriate error-code itself. +

Definition at line 81 of file imoc_macros.h.

+ +

Referenced by MOC_Bsend(), MOC_ISsend(), and MOC_Ssend().

+ +
+

+

+
Generated on Thu Feb 12 13:51:04 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/d32/group__internal__tm.png b/documentation/developer/html/d3/d32/group__internal__tm.png new file mode 100755 index 0000000..de3b220 Binary files /dev/null and b/documentation/developer/html/d3/d32/group__internal__tm.png differ diff --git a/documentation/developer/html/d3/d40/spu_2moc_8h__incl.map b/documentation/developer/html/d3/d40/spu_2moc_8h__incl.map new file mode 100755 index 0000000..b3bfb1b --- /dev/null +++ b/documentation/developer/html/d3/d40/spu_2moc_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/documentation/developer/html/d3/d40/spu_2moc_8h__incl.md5 b/documentation/developer/html/d3/d40/spu_2moc_8h__incl.md5 new file mode 100755 index 0000000..397a262 --- /dev/null +++ b/documentation/developer/html/d3/d40/spu_2moc_8h__incl.md5 @@ -0,0 +1 @@ +7d3dcbab84f5fc765336fd6bfd472272 \ No newline at end of file diff --git a/documentation/developer/html/d3/d40/spu_2moc_8h__incl.png b/documentation/developer/html/d3/d40/spu_2moc_8h__incl.png new file mode 100755 index 0000000..68ead99 Binary files /dev/null and b/documentation/developer/html/d3/d40/spu_2moc_8h__incl.png differ diff --git a/documentation/developer/html/d3/d41/imoc__core__spu_8c__incl.map b/documentation/developer/html/d3/d41/imoc__core__spu_8c__incl.map new file mode 100755 index 0000000..d4dc937 --- /dev/null +++ b/documentation/developer/html/d3/d41/imoc__core__spu_8c__incl.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d3/d41/imoc__core__spu_8c__incl.md5 b/documentation/developer/html/d3/d41/imoc__core__spu_8c__incl.md5 new file mode 100755 index 0000000..8c11410 --- /dev/null +++ b/documentation/developer/html/d3/d41/imoc__core__spu_8c__incl.md5 @@ -0,0 +1 @@ +406bdc6ed4cc542b51a9a530b1c9c455 \ No newline at end of file diff --git a/documentation/developer/html/d3/d41/imoc__core__spu_8c__incl.png b/documentation/developer/html/d3/d41/imoc__core__spu_8c__incl.png new file mode 100755 index 0000000..14418fe Binary files /dev/null and b/documentation/developer/html/d3/d41/imoc__core__spu_8c__incl.png differ diff --git a/documentation/developer/html/d3/d4e/imoc__get__free__entry_8c__incl.map b/documentation/developer/html/d3/d4e/imoc__get__free__entry_8c__incl.map new file mode 100755 index 0000000..97afcbd --- /dev/null +++ b/documentation/developer/html/d3/d4e/imoc__get__free__entry_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/d3/d4e/imoc__get__free__entry_8c__incl.md5 b/documentation/developer/html/d3/d4e/imoc__get__free__entry_8c__incl.md5 new file mode 100755 index 0000000..efb040a --- /dev/null +++ b/documentation/developer/html/d3/d4e/imoc__get__free__entry_8c__incl.md5 @@ -0,0 +1 @@ +b45509a5bda71f76bb497972f6e2e0fd \ No newline at end of file diff --git a/documentation/developer/html/d3/d4e/imoc__get__free__entry_8c__incl.png b/documentation/developer/html/d3/d4e/imoc__get__free__entry_8c__incl.png new file mode 100755 index 0000000..c35ce40 Binary files /dev/null and b/documentation/developer/html/d3/d4e/imoc__get__free__entry_8c__incl.png differ diff --git a/documentation/developer/html/d3/d5a/imoc__dma-test__ppu_8c__incl.map b/documentation/developer/html/d3/d5a/imoc__dma-test__ppu_8c__incl.map new file mode 100755 index 0000000..12a9ce4 --- /dev/null +++ b/documentation/developer/html/d3/d5a/imoc__dma-test__ppu_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/d3/d5a/imoc__dma-test__ppu_8c__incl.md5 b/documentation/developer/html/d3/d5a/imoc__dma-test__ppu_8c__incl.md5 new file mode 100755 index 0000000..c36b19f --- /dev/null +++ b/documentation/developer/html/d3/d5a/imoc__dma-test__ppu_8c__incl.md5 @@ -0,0 +1 @@ +ceea5909d844607a06c67f481ca9e8a5 \ No newline at end of file diff --git a/documentation/developer/html/d3/d5a/imoc__dma-test__ppu_8c__incl.png b/documentation/developer/html/d3/d5a/imoc__dma-test__ppu_8c__incl.png new file mode 100755 index 0000000..c89ca18 Binary files /dev/null and b/documentation/developer/html/d3/d5a/imoc__dma-test__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d3/d5e/moc__test_8c__incl.map b/documentation/developer/html/d3/d5e/moc__test_8c__incl.map new file mode 100755 index 0000000..3eb37cf --- /dev/null +++ b/documentation/developer/html/d3/d5e/moc__test_8c__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/documentation/developer/html/d3/d5e/moc__test_8c__incl.md5 b/documentation/developer/html/d3/d5e/moc__test_8c__incl.md5 new file mode 100755 index 0000000..4cf3a4a --- /dev/null +++ b/documentation/developer/html/d3/d5e/moc__test_8c__incl.md5 @@ -0,0 +1 @@ +f66c49deddc305dedeff64fca09e6d07 \ No newline at end of file diff --git a/documentation/developer/html/d3/d5e/moc__test_8c__incl.png b/documentation/developer/html/d3/d5e/moc__test_8c__incl.png new file mode 100755 index 0000000..6400288 Binary files /dev/null and b/documentation/developer/html/d3/d5e/moc__test_8c__incl.png differ diff --git a/documentation/developer/html/d3/d60/moc__recv__spu_8c__incl.map b/documentation/developer/html/d3/d60/moc__recv__spu_8c__incl.map new file mode 100755 index 0000000..e26a352 --- /dev/null +++ b/documentation/developer/html/d3/d60/moc__recv__spu_8c__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/documentation/developer/html/d3/d60/moc__recv__spu_8c__incl.md5 b/documentation/developer/html/d3/d60/moc__recv__spu_8c__incl.md5 new file mode 100755 index 0000000..7676af5 --- /dev/null +++ b/documentation/developer/html/d3/d60/moc__recv__spu_8c__incl.md5 @@ -0,0 +1 @@ +11e00a3749dbf99d2063888586d26e29 \ No newline at end of file diff --git a/documentation/developer/html/d3/d60/moc__recv__spu_8c__incl.png b/documentation/developer/html/d3/d60/moc__recv__spu_8c__incl.png new file mode 100755 index 0000000..3883145 Binary files /dev/null and b/documentation/developer/html/d3/d60/moc__recv__spu_8c__incl.png differ diff --git a/documentation/developer/html/d3/d68/moc__error__string__ppu_8c-source.html b/documentation/developer/html/d3/d68/moc__error__string__ppu_8c-source.html new file mode 100755 index 0000000..5ae2202 --- /dev/null +++ b/documentation/developer/html/d3/d68/moc__error__string__ppu_8c-source.html @@ -0,0 +1,111 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_error_string_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/d71/moc__ssend__spu_8c.html b/documentation/developer/html/d3/d71/moc__ssend__spu_8c.html new file mode 100755 index 0000000..732b4a3 --- /dev/null +++ b/documentation/developer/html/d3/d71/moc__ssend__spu_8c.html @@ -0,0 +1,53 @@ + + +MPI On Cell (Documentation): src/spu/communication/moc_ssend_spu.c File Reference + + + + + +
+

src/spu/communication/moc_ssend_spu.c File Reference

+

+#include <stdio.h>
+#include <string.h>
+#include <spu_mfcio.h>
+#include <moc.h>
+#include <spu/moc_datatype_spu.h>
+#include <internal/imoc.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+#include <internal/spu/imoc_core_spu.h>
+ +

+

+Include dependency graph for moc_ssend_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Ssend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking synchronous mode send operation.
+

+
Generated on Thu Feb 12 13:50:34 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/d88/moc__get__version_8c-source.html b/documentation/developer/html/d3/d88/moc__get__version_8c-source.html new file mode 100755 index 0000000..6dd5130 --- /dev/null +++ b/documentation/developer/html/d3/d88/moc__get__version_8c-source.html @@ -0,0 +1,35 @@ + + +MPI On Cell (Documentation): src/noarch/system/moc_get_version.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/d8f/imoc__dma-put__ppu_8c.html b/documentation/developer/html/d3/d8f/imoc__dma-put__ppu_8c.html new file mode 100755 index 0000000..9acc82e --- /dev/null +++ b/documentation/developer/html/d3/d8f/imoc__dma-put__ppu_8c.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-put_ppu.c File Reference + + + + + +
+

src/ppu/internal/dma/imoc_dma-put_ppu.c File Reference

+

+#include <string.h>
+#include <moc.h>
+#include <ppu/moc_dma_ppu.h>
+#include <internal/ppu/imoc_macros_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+ +

+

+Include dependency graph for imoc_dma-put_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_put_data (void *source, uint64_t target, uint32_t size, int dest)
 Internal wrapper-function for a blocking DMA-put operation.
+

+
Generated on Thu Feb 12 13:50:24 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/d95/moc__error__codes_8h-source.html b/documentation/developer/html/d3/d95/moc__error__codes_8h-source.html new file mode 100755 index 0000000..c04fe8c --- /dev/null +++ b/documentation/developer/html/d3/d95/moc__error__codes_8h-source.html @@ -0,0 +1,94 @@ + + +MPI On Cell (Documentation): include/moc_error_codes.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/d9d/moc__comm__rank_8c.html b/documentation/developer/html/d3/d9d/moc__comm__rank_8c.html new file mode 100755 index 0000000..24079c3 --- /dev/null +++ b/documentation/developer/html/d3/d9d/moc__comm__rank_8c.html @@ -0,0 +1,46 @@ + + +MPI On Cell (Documentation): src/noarch/system/moc_comm_rank.c File Reference + + + + + +
+

src/noarch/system/moc_comm_rank.c File Reference

+

+#include <moc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_comm_rank.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Comm_rank (MOC_Comm comm, int *rank)
 Determines the rank of the calling process in the communicator.
+

+
Generated on Thu Feb 12 13:50:14 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/d9e/group__end__user.html b/documentation/developer/html/d3/d9e/group__end__user.html new file mode 100755 index 0000000..512fb74 --- /dev/null +++ b/documentation/developer/html/d3/d9e/group__end__user.html @@ -0,0 +1,68 @@ + + +MPI On Cell (Documentation): End-User Documentation + + + + + +
+

End-User Documentation

+

+

+Collaboration diagram for End-User Documentation:
+
+
+ +
+
+

Detailed Description

+This section describes the public API provided by the MOC-library. +

+If some things remain unclear, consult the official MPI-standard (Version 1.3).

+This library uses Direct Memory Access (DMA) provided by the Cell Broadband Engine. So the use of other DMA operations than provided of this library is discouraged, because it may interfere with this library. One exceptions are signals. We don't use signals at all at the moment, so one can savely use signal. +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+


Modules

 Environmental Management
 This chapter discusses routines for getting and, where appropriate, setting various parameters that relate to the MPI implementation and the execution environment (such as error handling, startup&shutdown and Time).
 Point-to-Point Communication
 Sending and receiving of messages by processes is the basic MPI communication mechanism.
 Collective Communication
 Communication that involves a group of processes.
 Direct Memory Access
 Functions which use DMA to transfer Data.
 Groups, Context and Communicators
 The MOC communicator specifies a group of processes inside which a communication occurs.
+

+
Generated on Thu Feb 12 13:50:43 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/d9e/group__end__user.png b/documentation/developer/html/d3/d9e/group__end__user.png new file mode 100755 index 0000000..8397aa5 Binary files /dev/null and b/documentation/developer/html/d3/d9e/group__end__user.png differ diff --git a/documentation/developer/html/d3/d9e/moc__finalize__ppu_8c.html b/documentation/developer/html/d3/d9e/moc__finalize__ppu_8c.html new file mode 100755 index 0000000..9b81041 --- /dev/null +++ b/documentation/developer/html/d3/d9e/moc__finalize__ppu_8c.html @@ -0,0 +1,52 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_finalize_ppu.c File Reference + + + + + +
+

src/ppu/system/moc_finalize_ppu.c File Reference

+

+#include <malloc_align.h>
+#include <free_align.h>
+#include <stdlib.h>
+#include <string.h>
+#include <moc.h>
+#include <ppu/moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_finalize_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Finalize ()
 Terminates MPI execution environment.
+

+
Generated on Thu Feb 12 13:50:28 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/d9f/imoc__core_8h__incl.map b/documentation/developer/html/d3/d9f/imoc__core_8h__incl.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/developer/html/d3/d9f/imoc__core_8h__incl.md5 b/documentation/developer/html/d3/d9f/imoc__core_8h__incl.md5 new file mode 100755 index 0000000..939423f --- /dev/null +++ b/documentation/developer/html/d3/d9f/imoc__core_8h__incl.md5 @@ -0,0 +1 @@ +bb891e40a960a58d6a9bd25144d68e95 \ No newline at end of file diff --git a/documentation/developer/html/d3/d9f/imoc__core_8h__incl.png b/documentation/developer/html/d3/d9f/imoc__core_8h__incl.png new file mode 100755 index 0000000..a3afa97 Binary files /dev/null and b/documentation/developer/html/d3/d9f/imoc__core_8h__incl.png differ diff --git a/documentation/developer/html/d3/da7/moc__wtick__spu_8c-source.html b/documentation/developer/html/d3/da7/moc__wtick__spu_8c-source.html new file mode 100755 index 0000000..13bf916 --- /dev/null +++ b/documentation/developer/html/d3/da7/moc__wtick__spu_8c-source.html @@ -0,0 +1,68 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_wtick_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/dbb/imoc__dma-wait__ppu_8c__incl.map b/documentation/developer/html/d3/dbb/imoc__dma-wait__ppu_8c__incl.map new file mode 100755 index 0000000..12a9ce4 --- /dev/null +++ b/documentation/developer/html/d3/dbb/imoc__dma-wait__ppu_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/d3/dbb/imoc__dma-wait__ppu_8c__incl.md5 b/documentation/developer/html/d3/dbb/imoc__dma-wait__ppu_8c__incl.md5 new file mode 100755 index 0000000..001d3d3 --- /dev/null +++ b/documentation/developer/html/d3/dbb/imoc__dma-wait__ppu_8c__incl.md5 @@ -0,0 +1 @@ +ca5ecb1b463609f776a0d9935164f6dd \ No newline at end of file diff --git a/documentation/developer/html/d3/dbb/imoc__dma-wait__ppu_8c__incl.png b/documentation/developer/html/d3/dbb/imoc__dma-wait__ppu_8c__incl.png new file mode 100755 index 0000000..1b9bb0a Binary files /dev/null and b/documentation/developer/html/d3/dbb/imoc__dma-wait__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d3/dc2/moc__isend_8c.html b/documentation/developer/html/d3/dc2/moc__isend_8c.html new file mode 100755 index 0000000..3ecd2bd --- /dev/null +++ b/documentation/developer/html/d3/dc2/moc__isend_8c.html @@ -0,0 +1,52 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_isend.c File Reference + + + + + +
+

src/noarch/communication/moc_isend.c File Reference

+

+#include <stdio.h>
+#include <string.h>
+#include <moc.h>
+#include <internal/imoc.h>
+#include <ppu/moc_datatype_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <internal/ppu/imoc_macros_ppu.h>
+ +

+

+Include dependency graph for moc_isend.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_ISend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, MOC_Request *request)
 Performs a non-blocking standard mode send operation.
+

+
Generated on Thu Feb 12 13:50:07 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/dc6/moc__dma-iget__ppu_8c.html b/documentation/developer/html/d3/dc6/moc__dma-iget__ppu_8c.html new file mode 100755 index 0000000..a11a104 --- /dev/null +++ b/documentation/developer/html/d3/dc6/moc__dma-iget__ppu_8c.html @@ -0,0 +1,52 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-iget_ppu.c File Reference + + + + + +
+

src/ppu/dma/moc_dma-iget_ppu.c File Reference

+

+#include <malloc_align.h>
+#include <string.h>
+#include <moc.h>
+#include <ppu/moc_dma_ppu.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_macros_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_dma-iget_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_IGet_data (void *target, uint32_t source, int count, MOC_Datatype datatype, int dest, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-get operation.
+

+
Generated on Thu Feb 12 13:50:19 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/dd2/group__internal__timer.html b/documentation/developer/html/d3/dd2/group__internal__timer.html new file mode 100755 index 0000000..fa14688 --- /dev/null +++ b/documentation/developer/html/d3/dd2/group__internal__timer.html @@ -0,0 +1,44 @@ + + +MPI On Cell (Documentation): Timers and Synchronization + + + + + +
+

Timers and Synchronization
+ +[Environmental Management] +

+

+

+Collaboration diagram for Timers and Synchronization:
+
+
+ +
+
+On the PPU "gettimeofday()" from time.h is used, because it is the only function which seems to work ("clock()" from time.h always returns 0).

+On the SPU there are two implementations. One uses also "gettimeofday()" and the other uses the spu-timer-library. The reason for this lies in the fact, that the spu-timer-library was marked as prototype in Cell SDK 3.0 and the future development of this library was uncertain. Cell SDK 3.1 has integrated the spu-timer-library in the main-library and so the gettimeofday-implementation is now obsolete.

+

Note:
The timebase-constant which is needed to calculate time is hardcoded, because there was no according function for retrieving this value in Cell SDK 3.0 and we had only access to a playstation 3. Now Cell SDK 3.1 provides a function for retrieving the timebase value, but we didn't use it to provide backwards-compatibility. So if you plan to use MOC on another platform than playstation 3 keep in mind to check if the timebase-value is correct.
+ +

+ + +
+

+
Generated on Thu Feb 12 13:51:06 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/dd2/group__internal__timer.png b/documentation/developer/html/d3/dd2/group__internal__timer.png new file mode 100755 index 0000000..7a44ace Binary files /dev/null and b/documentation/developer/html/d3/dd2/group__internal__timer.png differ diff --git a/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc.html b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc.html new file mode 100755 index 0000000..61018b4 --- /dev/null +++ b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc.html @@ -0,0 +1,205 @@ + + +MPI On Cell (Documentation): Buffer-Management + + + + + +
+

Buffer-Management
+ +[Buffered Communication] +

+

+

+Collaboration diagram for Buffer-Management:
+
+
+ +
+
+

Detailed Description

+This section shows how the buffer used for buffered communication is managed. +

+Information about already allocated buffer-space is stored in the status-array.

+But this information has no order which forces us everytime we want to allocate buffer-space to create an ordered list of already allocated buffer-space. To avoid this we have additionally an ordered linked-list. This list orders the indexes (== message-IDs) of the status-array-entries in ascending order of the memory-addresses. This enables fast searching for free buffer-space.

+Allocated buffer-space is cleared by the receiving process by setting the appropriate flag in the status-array-entry. This is done by a DMA-Transfer and so no collaboration of the sending-process is needed. During the next allocation of buffer-space nodes with disabled buffer-flags are freed. +

+ + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  moc_internal_buffer_node_struct
 Node of linked list holding information about allocated buffer-space. More...

Typedefs

typedef struct
+moc_internal_buffer_node_struct 
moc_internal_buffer_node_t
 Node of linked list holding information about allocated buffer-space.

Functions

uint64_t IMOC_bmalloc (uint32_t size, uint8_t mid)
 Allocate buffer-space.
moc_internal_buffer_node_t * __attribute__ ((always_inline))
 void bmalloc_print_nodes() { if (!bmalloc_first_node) printf("No nodes in list\n"); else { int z = 0; moc_internal_buffer_node_t* t; for (t = bmalloc_first_node; t != 0; t = t->next_node) { printf( "Node %i: offset %u - size %u - valid %i - mid %u\n", z, node_handle.status_array_base[ t->mid ].buffer_offset, node_handle.status_array_base[ t->mid ].message_size, node_handle.status_array_base[ t->mid ].flags.bits.buffer_used, t->mid ); z++; } } }

Variables

moc_internal_buffer_node_t * bmalloc_first_node = 0
 Pointer to first entry of linked-list.
+


Typedef Documentation

+ +
+ +
+ +

+Node of linked list holding information about allocated buffer-space. +

+ +

+

+


Function Documentation

+ +
+
+ + + + + + + + + +
moc_internal_buffer_node_t* __attribute__ ((always_inline)   ) 
+
+
+ +

+void bmalloc_print_nodes() { if (!bmalloc_first_node) printf("No nodes in list\n"); else { int z = 0; moc_internal_buffer_node_t* t; for (t = bmalloc_first_node; t != 0; t = t->next_node) { printf( "Node %i: offset %u - size %u - valid %i - mid %u\n", z, node_handle.status_array_base[ t->mid ].buffer_offset, node_handle.status_array_base[ t->mid ].message_size, node_handle.status_array_base[ t->mid ].flags.bits.buffer_used, t->mid ); z++; } } } +

+Returns the next node holding valid buffer-information coming after node start.

+During the search all invalid nodes the function stumbles across are freed and the links are corrected.

+

Parameters:
+ + +
start in start-node of search (NULL means beginning of list)
+
+
Returns:
next valid node
+ +

Definition at line 56 of file imoc_buffer_malloc.c.

+ +

References moc_message_status_struct::bits, moc_message_status_struct::flags, moc_internal_buffer_node_struct::mid, moc_internal_buffer_node_struct::next_node, node_handle, and moc_node_handle_ppu_struct::status_array_base.

+ +

Referenced by IMOC_get_data(), MOC_Barrier(), MOC_Bsend(), MOC_ISsend(), MOC_Recv(), and MOC_Ssend().

+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
uint64_t IMOC_bmalloc (uint32_t  size,
uint8_t  mid 
)
+
+
+ +

+Allocate buffer-space. +

+

Parameters:
+ + + +
size in size of buffer-space
mid in corresponding message-ID
+
+
Returns:
effective address of allocated buffer-space (16-byte aligned)
+ +

Definition at line 85 of file imoc_buffer_malloc.c.

+ +

References moc_message_status_struct::bits, moc_node_handle_ppu_struct::buffer_base, moc_message_status_struct::buffer_offset, moc_node_handle_ppu_struct::buffer_size, moc_message_status_struct::flags, moc_message_status_struct::message_size, moc_internal_buffer_node_struct::mid, moc_internal_buffer_node_struct::next_node, node_handle, and moc_node_handle_ppu_struct::status_array_base.

+ +

Referenced by MOC_Bsend().

+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+


Variable Documentation

+ +
+ +
+ +

+Pointer to first entry of linked-list. +

+ +

Definition at line 20 of file imoc_buffer_malloc.c.

+ +

Referenced by MOC_Finalize().

+ +
+

+

+
Generated on Thu Feb 12 13:51:16 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc.png b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc.png new file mode 100755 index 0000000..923b381 Binary files /dev/null and b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc.png differ diff --git a/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_g5295b372d853993b2e6cfb6912a0ee41_icgraph.map b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_g5295b372d853993b2e6cfb6912a0ee41_icgraph.map new file mode 100755 index 0000000..42fbff3 --- /dev/null +++ b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_g5295b372d853993b2e6cfb6912a0ee41_icgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_g5295b372d853993b2e6cfb6912a0ee41_icgraph.md5 b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_g5295b372d853993b2e6cfb6912a0ee41_icgraph.md5 new file mode 100755 index 0000000..0ca8ee8 --- /dev/null +++ b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_g5295b372d853993b2e6cfb6912a0ee41_icgraph.md5 @@ -0,0 +1 @@ +c4e956d8cefb652dc4ae4485e1af795f \ No newline at end of file diff --git a/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_g5295b372d853993b2e6cfb6912a0ee41_icgraph.png b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_g5295b372d853993b2e6cfb6912a0ee41_icgraph.png new file mode 100755 index 0000000..55b058e Binary files /dev/null and b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_g5295b372d853993b2e6cfb6912a0ee41_icgraph.png differ diff --git a/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_gad8750c7ba3d6da9c137c2c462d2c531_icgraph.map b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_gad8750c7ba3d6da9c137c2c462d2c531_icgraph.map new file mode 100755 index 0000000..4605515 --- /dev/null +++ b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_gad8750c7ba3d6da9c137c2c462d2c531_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_gad8750c7ba3d6da9c137c2c462d2c531_icgraph.md5 b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_gad8750c7ba3d6da9c137c2c462d2c531_icgraph.md5 new file mode 100755 index 0000000..8f01ed6 --- /dev/null +++ b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_gad8750c7ba3d6da9c137c2c462d2c531_icgraph.md5 @@ -0,0 +1 @@ +a93b5b38b071a3c035489ad4e4642a62 \ No newline at end of file diff --git a/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_gad8750c7ba3d6da9c137c2c462d2c531_icgraph.png b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_gad8750c7ba3d6da9c137c2c462d2c531_icgraph.png new file mode 100755 index 0000000..ad62e4a Binary files /dev/null and b/documentation/developer/html/d3/dd3/group__internal__p2p__bmalloc_gad8750c7ba3d6da9c137c2c462d2c531_icgraph.png differ diff --git a/documentation/developer/html/d3/de0/moc__issend__spu_8c__incl.map b/documentation/developer/html/d3/de0/moc__issend__spu_8c__incl.map new file mode 100755 index 0000000..e26a352 --- /dev/null +++ b/documentation/developer/html/d3/de0/moc__issend__spu_8c__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/documentation/developer/html/d3/de0/moc__issend__spu_8c__incl.md5 b/documentation/developer/html/d3/de0/moc__issend__spu_8c__incl.md5 new file mode 100755 index 0000000..50183fa --- /dev/null +++ b/documentation/developer/html/d3/de0/moc__issend__spu_8c__incl.md5 @@ -0,0 +1 @@ +cc8eefd9b8aa7ec18b4ed1aca33b6c7e \ No newline at end of file diff --git a/documentation/developer/html/d3/de0/moc__issend__spu_8c__incl.png b/documentation/developer/html/d3/de0/moc__issend__spu_8c__incl.png new file mode 100755 index 0000000..5e26fc8 Binary files /dev/null and b/documentation/developer/html/d3/de0/moc__issend__spu_8c__incl.png differ diff --git a/documentation/developer/html/d3/de7/moc__send_8c__incl.map b/documentation/developer/html/d3/de7/moc__send_8c__incl.map new file mode 100755 index 0000000..76657e9 --- /dev/null +++ b/documentation/developer/html/d3/de7/moc__send_8c__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d3/de7/moc__send_8c__incl.md5 b/documentation/developer/html/d3/de7/moc__send_8c__incl.md5 new file mode 100755 index 0000000..edf49a1 --- /dev/null +++ b/documentation/developer/html/d3/de7/moc__send_8c__incl.md5 @@ -0,0 +1 @@ +621440415361f3c0e6d88907e6ea7479 \ No newline at end of file diff --git a/documentation/developer/html/d3/de7/moc__send_8c__incl.png b/documentation/developer/html/d3/de7/moc__send_8c__incl.png new file mode 100755 index 0000000..fc9bfc0 Binary files /dev/null and b/documentation/developer/html/d3/de7/moc__send_8c__incl.png differ diff --git a/documentation/developer/html/d3/df5/imoc__dma-put__spu_8c__incl.map b/documentation/developer/html/d3/df5/imoc__dma-put__spu_8c__incl.map new file mode 100755 index 0000000..503cd3c --- /dev/null +++ b/documentation/developer/html/d3/df5/imoc__dma-put__spu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d3/df5/imoc__dma-put__spu_8c__incl.md5 b/documentation/developer/html/d3/df5/imoc__dma-put__spu_8c__incl.md5 new file mode 100755 index 0000000..322f149 --- /dev/null +++ b/documentation/developer/html/d3/df5/imoc__dma-put__spu_8c__incl.md5 @@ -0,0 +1 @@ +93c12d4b0229e38ba321ca5cbb3a7909 \ No newline at end of file diff --git a/documentation/developer/html/d3/df5/imoc__dma-put__spu_8c__incl.png b/documentation/developer/html/d3/df5/imoc__dma-put__spu_8c__incl.png new file mode 100755 index 0000000..402378e Binary files /dev/null and b/documentation/developer/html/d3/df5/imoc__dma-put__spu_8c__incl.png differ diff --git a/documentation/developer/html/d3/df5/moc__wtime__spu_8c-source.html b/documentation/developer/html/d3/df5/moc__wtime__spu_8c-source.html new file mode 100755 index 0000000..2795cbc --- /dev/null +++ b/documentation/developer/html/d3/df5/moc__wtime__spu_8c-source.html @@ -0,0 +1,82 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_wtime_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/dfa/moc__dma-put__ppu_8c.html b/documentation/developer/html/d3/dfa/moc__dma-put__ppu_8c.html new file mode 100755 index 0000000..ad3fd25 --- /dev/null +++ b/documentation/developer/html/d3/dfa/moc__dma-put__ppu_8c.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-put_ppu.c File Reference + + + + + +
+

src/ppu/dma/moc_dma-put_ppu.c File Reference

+

+#include <string.h>
+#include <moc.h>
+#include <ppu/moc_dma_ppu.h>
+#include <internal/ppu/imoc_macros_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+ +

+

+Include dependency graph for moc_dma-put_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Put_data (void *source, uint32_t target, int count, MOC_Datatype datatype, int src)
 Wrapper-function for a blocking DMA-put operation.
+

+
Generated on Thu Feb 12 13:50:21 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d3/dfa/moc__get__avail__spu__ppu_8c-source.html b/documentation/developer/html/d3/dfa/moc__get__avail__spu__ppu_8c-source.html new file mode 100755 index 0000000..a992506 --- /dev/null +++ b/documentation/developer/html/d3/dfa/moc__get__avail__spu__ppu_8c-source.html @@ -0,0 +1,33 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_get_avail_spu_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/d28/moc__barrier__spu_8c-source.html b/documentation/developer/html/d4/d28/moc__barrier__spu_8c-source.html new file mode 100755 index 0000000..288090a --- /dev/null +++ b/documentation/developer/html/d4/d28/moc__barrier__spu_8c-source.html @@ -0,0 +1,135 @@ + + +MPI On Cell (Documentation): src/spu/communication/moc_barrier_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/d2c/moc__datatype__spu_8h__dep__incl.map b/documentation/developer/html/d4/d2c/moc__datatype__spu_8h__dep__incl.map new file mode 100755 index 0000000..dca358e --- /dev/null +++ b/documentation/developer/html/d4/d2c/moc__datatype__spu_8h__dep__incl.map @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d4/d2c/moc__datatype__spu_8h__dep__incl.md5 b/documentation/developer/html/d4/d2c/moc__datatype__spu_8h__dep__incl.md5 new file mode 100755 index 0000000..c037686 --- /dev/null +++ b/documentation/developer/html/d4/d2c/moc__datatype__spu_8h__dep__incl.md5 @@ -0,0 +1 @@ +7cc02476c851fbb6995d049ea9c3a3e7 \ No newline at end of file diff --git a/documentation/developer/html/d4/d2c/moc__datatype__spu_8h__dep__incl.png b/documentation/developer/html/d4/d2c/moc__datatype__spu_8h__dep__incl.png new file mode 100755 index 0000000..d90a83c Binary files /dev/null and b/documentation/developer/html/d4/d2c/moc__datatype__spu_8h__dep__incl.png differ diff --git a/documentation/developer/html/d4/d2d/imoc__dma-get__ppu_8c.html b/documentation/developer/html/d4/d2d/imoc__dma-get__ppu_8c.html new file mode 100755 index 0000000..48ef9d7 --- /dev/null +++ b/documentation/developer/html/d4/d2d/imoc__dma-get__ppu_8c.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-get_ppu.c File Reference + + + + + +
+

src/ppu/internal/dma/imoc_dma-get_ppu.c File Reference

+

+#include <string.h>
+#include <moc.h>
+#include <ppu/moc_dma_ppu.h>
+#include <internal/imoc_macros.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for imoc_dma-get_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_get_data (void *target, uint64_t source, uint32_t size, int dest)
 Internal wrapper-function for a blocking DMA-get operation.
+

+
Generated on Thu Feb 12 13:50:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/d5b/imoc__dma-test__ppu_8c.html b/documentation/developer/html/d4/d5b/imoc__dma-test__ppu_8c.html new file mode 100755 index 0000000..dcb6fa6 --- /dev/null +++ b/documentation/developer/html/d4/d5b/imoc__dma-test__ppu_8c.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-test_ppu.c File Reference + + + + + +
+

src/ppu/internal/dma/imoc_dma-test_ppu.c File Reference

+

+#include <string.h>
+#include <stdint.h>
+#include <free_align.h>
+#include <moc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+ +

+

+Include dependency graph for imoc_dma-test_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_test_dma (imoc_dma_request *request, int *flag)
 Tests if a IMOC_iget_data or IMOC_iput_data is completed.
+

+
Generated on Thu Feb 12 13:50:25 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/d65/moc__translate__ea__ls__ppu_8c-source.html b/documentation/developer/html/d4/d65/moc__translate__ea__ls__ppu_8c-source.html new file mode 100755 index 0000000..b0b8888 --- /dev/null +++ b/documentation/developer/html/d4/d65/moc__translate__ea__ls__ppu_8c-source.html @@ -0,0 +1,32 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_translate_ea_ls_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/d71/group__internal__p2p__synch.html b/documentation/developer/html/d4/d71/group__internal__p2p__synch.html new file mode 100755 index 0000000..b4390b9 --- /dev/null +++ b/documentation/developer/html/d4/d71/group__internal__p2p__synch.html @@ -0,0 +1,44 @@ + + +MPI On Cell (Documentation): Synchronous Communication + + + + + +
+

Synchronous Communication
+ +[Blocking Communication] +

+

+

+Collaboration diagram for Synchronous Communication:
+
+
+ +
+
+
+synchronous_communication_1.png +
+ +

+ + +
+

+
Generated on Thu Feb 12 13:51:15 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/d71/group__internal__p2p__synch.png b/documentation/developer/html/d4/d71/group__internal__p2p__synch.png new file mode 100755 index 0000000..3b406a4 Binary files /dev/null and b/documentation/developer/html/d4/d71/group__internal__p2p__synch.png differ diff --git a/documentation/developer/html/d4/d73/moc__set__queue__size__ppu_8c__incl.map b/documentation/developer/html/d4/d73/moc__set__queue__size__ppu_8c__incl.map new file mode 100755 index 0000000..f7f09e1 --- /dev/null +++ b/documentation/developer/html/d4/d73/moc__set__queue__size__ppu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d4/d73/moc__set__queue__size__ppu_8c__incl.md5 b/documentation/developer/html/d4/d73/moc__set__queue__size__ppu_8c__incl.md5 new file mode 100755 index 0000000..8ba39cc --- /dev/null +++ b/documentation/developer/html/d4/d73/moc__set__queue__size__ppu_8c__incl.md5 @@ -0,0 +1 @@ +b63b51e977313ecc3d53d015b2782d26 \ No newline at end of file diff --git a/documentation/developer/html/d4/d73/moc__set__queue__size__ppu_8c__incl.png b/documentation/developer/html/d4/d73/moc__set__queue__size__ppu_8c__incl.png new file mode 100755 index 0000000..24741ee Binary files /dev/null and b/documentation/developer/html/d4/d73/moc__set__queue__size__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d4/d95/imoc__dma__spu_8h-source.html b/documentation/developer/html/d4/d95/imoc__dma__spu_8h-source.html new file mode 100755 index 0000000..684d80c --- /dev/null +++ b/documentation/developer/html/d4/d95/imoc__dma__spu_8h-source.html @@ -0,0 +1,137 @@ + + +MPI On Cell (Documentation): include/internal/spu/imoc_dma_spu.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/d9b/imoc_8h-source.html b/documentation/developer/html/d4/d9b/imoc_8h-source.html new file mode 100755 index 0000000..8f44e07 --- /dev/null +++ b/documentation/developer/html/d4/d9b/imoc_8h-source.html @@ -0,0 +1,223 @@ + + +MPI On Cell (Documentation): include/internal/imoc.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/da3/structimoc__dma__request__struct.html b/documentation/developer/html/d4/da3/structimoc__dma__request__struct.html new file mode 100755 index 0000000..db8b412 --- /dev/null +++ b/documentation/developer/html/d4/da3/structimoc__dma__request__struct.html @@ -0,0 +1,173 @@ + + +MPI On Cell (Documentation): imoc_dma_request_struct Struct Reference + + + + + +
+

imoc_dma_request_struct Struct Reference

#include <moc.h> +

+

+Collaboration diagram for imoc_dma_request_struct:
+
+

Collaboration graph
+
[legend]
+

Detailed Description

+ +

Definition at line 59 of file moc.h.

+ + + + + + + + + + + + + + + +

Data Fields

char * buffer
void * target
uint32_t size
uint32_t remainder
uint32_t dest
uint32_t tag_id
+

Field Documentation

+ +
+ +
+ +

+ +

Definition at line 61 of file moc.h.

+ +

Referenced by IMOC_iget_data(), IMOC_test_dma(), and IMOC_wait_dma().

+ +
+

+ +

+ +
+ +

+ +

Definition at line 62 of file moc.h.

+ +

Referenced by IMOC_iget_data(), IMOC_iput_data(), IMOC_test_dma(), and IMOC_wait_dma().

+ +
+

+ +

+
+ + + + +
uint32_t imoc_dma_request_struct::size
+
+
+ +

+ +

Definition at line 63 of file moc.h.

+ +

Referenced by IMOC_iget_data(), IMOC_iput_data(), IMOC_test_dma(), IMOC_wait_dma(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+ +
+ +

+ +

Definition at line 64 of file moc.h.

+ +

Referenced by IMOC_iget_data(), IMOC_iput_data(), IMOC_test_dma(), and IMOC_wait_dma().

+ +
+

+ +

+
+ + + + +
uint32_t imoc_dma_request_struct::dest
+
+
+ +

+ +

Definition at line 65 of file moc.h.

+ +

Referenced by IMOC_iget_data(), IMOC_iput_data(), IMOC_test_dma(), and IMOC_wait_dma().

+ +
+

+ +

+
+ + + + +
uint32_t imoc_dma_request_struct::tag_id
+
+
+ +

+ +

Definition at line 66 of file moc.h.

+ +

Referenced by IMOC_iget_data(), IMOC_iput_data(), IMOC_test_dma(), and IMOC_wait_dma().

+ +
+

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:18 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/db3/imoc__dma-iget__spu_8c-source.html b/documentation/developer/html/d4/db3/imoc__dma-iget__spu_8c-source.html new file mode 100755 index 0000000..2f8755c --- /dev/null +++ b/documentation/developer/html/d4/db3/imoc__dma-iget__spu_8c-source.html @@ -0,0 +1,89 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-iget_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/db6/moc__ssend__ppu_8c-source.html b/documentation/developer/html/d4/db6/moc__ssend__ppu_8c-source.html new file mode 100755 index 0000000..eecf45d --- /dev/null +++ b/documentation/developer/html/d4/db6/moc__ssend__ppu_8c-source.html @@ -0,0 +1,129 @@ + + +MPI On Cell (Documentation): src/ppu/communication/moc_ssend_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/dce/imoc__dma__spu_8h.html b/documentation/developer/html/d4/dce/imoc__dma__spu_8h.html new file mode 100755 index 0000000..758662c --- /dev/null +++ b/documentation/developer/html/d4/dce/imoc__dma__spu_8h.html @@ -0,0 +1,72 @@ + + +MPI On Cell (Documentation): include/internal/spu/imoc_dma_spu.h File Reference + + + + + +
+

include/internal/spu/imoc_dma_spu.h File Reference

+

+#include <stdint.h>
+#include "../../moc.h"
+ +

+

+Include dependency graph for imoc_dma_spu.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + +

Functions

SPU-only
int IMOC_get_data (void *target, uint64_t source, uint32_t size)
 Internal wrapper-function for a blocking DMA-get operation.
int IMOC_put_data (void *source, uint64_t target, uint32_t size)
 Internal wrapper-function for a blocking DMA-put operation.
int IMOC_iget_data (void *target, uint64_t source, uint32_t size, imoc_dma_request *request)
 Internal wrapper-function for a non-blocking DMA-get operation.
int IMOC_iput_data (void *source, uint64_t target, uint32_t size, imoc_dma_request *request)
 Internal wrapper-function for a blocking DMA-put operation.
PPU-only
int IMOC_wait_dma (imoc_dma_request *request)
 Waits till a IMOC_iget_data or IMOC_iput_data is completed.
int IMOC_test_dma (imoc_dma_request *request, int *flag)
 Tests if a IMOC_iget_data or IMOC_iput_data is completed.
+

+
Generated on Thu Feb 12 13:49:55 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/de2/doxygen__pages_8doxygen-source.html b/documentation/developer/html/d4/de2/doxygen__pages_8doxygen-source.html new file mode 100755 index 0000000..221ddaf --- /dev/null +++ b/documentation/developer/html/d4/de2/doxygen__pages_8doxygen-source.html @@ -0,0 +1,226 @@ + + +MPI On Cell (Documentation): include/doxygen_pages.doxygen Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/de2/moc__init__spu_8c.html b/documentation/developer/html/d4/de2/moc__init__spu_8c.html new file mode 100755 index 0000000..dec771d --- /dev/null +++ b/documentation/developer/html/d4/de2/moc__init__spu_8c.html @@ -0,0 +1,92 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_init_spu.c File Reference + + + + + +
+

src/spu/system/moc_init_spu.c File Reference

+

+#include <stdlib.h>
+#include <string.h>
+#include <malloc_align.h>
+#include <free_align.h>
+#include <stdio.h>
+#include <spu_mfcio.h>
+#include <internal/spu/imoc_core_spu.h>
+#include <internal/imoc.h>
+#include <spu/moc.h>
+ +

+

+Include dependency graph for moc_init_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + +

Functions

int MOC_Init (unsigned long long argp __attribute__((unused)), int length __attribute__((unused)), void *buffer __attribute__((unused)))
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Init (unsigned long long argp   __attribute__(unused),
int length   __attribute__(unused),
void *buffer   __attribute__(unused) 
)
+
+ +

+

+
Generated on Thu Feb 12 13:50:42 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/df7/moc__bsend__spu_8c__incl.map b/documentation/developer/html/d4/df7/moc__bsend__spu_8c__incl.map new file mode 100755 index 0000000..5ec74cf --- /dev/null +++ b/documentation/developer/html/d4/df7/moc__bsend__spu_8c__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/documentation/developer/html/d4/df7/moc__bsend__spu_8c__incl.md5 b/documentation/developer/html/d4/df7/moc__bsend__spu_8c__incl.md5 new file mode 100755 index 0000000..43d8659 --- /dev/null +++ b/documentation/developer/html/d4/df7/moc__bsend__spu_8c__incl.md5 @@ -0,0 +1 @@ +87f56c177b26b610808d2aa0b899fe42 \ No newline at end of file diff --git a/documentation/developer/html/d4/df7/moc__bsend__spu_8c__incl.png b/documentation/developer/html/d4/df7/moc__bsend__spu_8c__incl.png new file mode 100755 index 0000000..57186f9 Binary files /dev/null and b/documentation/developer/html/d4/df7/moc__bsend__spu_8c__incl.png differ diff --git a/documentation/developer/html/d4/df9/moc__dma-wait__ppu_8c-source.html b/documentation/developer/html/d4/df9/moc__dma-wait__ppu_8c-source.html new file mode 100755 index 0000000..76cde23 --- /dev/null +++ b/documentation/developer/html/d4/df9/moc__dma-wait__ppu_8c-source.html @@ -0,0 +1,36 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-wait_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d4/df9/moc__probe_8c__incl.map b/documentation/developer/html/d4/df9/moc__probe_8c__incl.map new file mode 100755 index 0000000..e793a43 --- /dev/null +++ b/documentation/developer/html/d4/df9/moc__probe_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d4/df9/moc__probe_8c__incl.md5 b/documentation/developer/html/d4/df9/moc__probe_8c__incl.md5 new file mode 100755 index 0000000..3f46c36 --- /dev/null +++ b/documentation/developer/html/d4/df9/moc__probe_8c__incl.md5 @@ -0,0 +1 @@ +18b885d6ec7d0fa3d2ce64577b33201c \ No newline at end of file diff --git a/documentation/developer/html/d4/df9/moc__probe_8c__incl.png b/documentation/developer/html/d4/df9/moc__probe_8c__incl.png new file mode 100755 index 0000000..cef6986 Binary files /dev/null and b/documentation/developer/html/d4/df9/moc__probe_8c__incl.png differ diff --git a/documentation/developer/html/d4/dfc/moc__wait_8c.html b/documentation/developer/html/d4/dfc/moc__wait_8c.html new file mode 100755 index 0000000..b5b3620 --- /dev/null +++ b/documentation/developer/html/d4/dfc/moc__wait_8c.html @@ -0,0 +1,48 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_wait.c File Reference + + + + + +
+

src/noarch/communication/moc_wait.c File Reference

+

+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+ +

+

+Include dependency graph for moc_wait.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Wait (MOC_Request *request, MOC_Status *status)
 Wait till a non-blocking communication has been completed.
+

+
Generated on Thu Feb 12 13:50:09 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d5/d1c/imoc__dma-get__spu_8c.html b/documentation/developer/html/d5/d1c/imoc__dma-get__spu_8c.html new file mode 100755 index 0000000..97fb023 --- /dev/null +++ b/documentation/developer/html/d5/d1c/imoc__dma-get__spu_8c.html @@ -0,0 +1,49 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-get_spu.c File Reference + + + + + +
+

src/spu/internal/dma/imoc_dma-get_spu.c File Reference

+

+#include <spu_mfcio.h>
+#include <string.h>
+#include <moc.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+ +

+

+Include dependency graph for imoc_dma-get_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_get_data (void *target, uint64_t source, uint32_t size)
 Internal wrapper-function for a blocking DMA-get operation.
+

+
Generated on Thu Feb 12 13:50:38 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d5/d32/moc__recv__spu_8c-source.html b/documentation/developer/html/d5/d32/moc__recv__spu_8c-source.html new file mode 100755 index 0000000..e23ea61 --- /dev/null +++ b/documentation/developer/html/d5/d32/moc__recv__spu_8c-source.html @@ -0,0 +1,136 @@ + + +MPI On Cell (Documentation): src/spu/communication/moc_recv_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d5/d44/moc__init__spu_8c__incl.map b/documentation/developer/html/d5/d44/moc__init__spu_8c__incl.map new file mode 100755 index 0000000..70711c1 --- /dev/null +++ b/documentation/developer/html/d5/d44/moc__init__spu_8c__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/documentation/developer/html/d5/d44/moc__init__spu_8c__incl.md5 b/documentation/developer/html/d5/d44/moc__init__spu_8c__incl.md5 new file mode 100755 index 0000000..ae586b7 --- /dev/null +++ b/documentation/developer/html/d5/d44/moc__init__spu_8c__incl.md5 @@ -0,0 +1 @@ +b1515fe6143aab59cc38befb35d89b4b \ No newline at end of file diff --git a/documentation/developer/html/d5/d44/moc__init__spu_8c__incl.png b/documentation/developer/html/d5/d44/moc__init__spu_8c__incl.png new file mode 100755 index 0000000..605d24e Binary files /dev/null and b/documentation/developer/html/d5/d44/moc__init__spu_8c__incl.png differ diff --git a/documentation/developer/html/d5/d49/imoc__macros__ppu_8h__incl.map b/documentation/developer/html/d5/d49/imoc__macros__ppu_8h__incl.map new file mode 100755 index 0000000..7ad7b9a --- /dev/null +++ b/documentation/developer/html/d5/d49/imoc__macros__ppu_8h__incl.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d5/d49/imoc__macros__ppu_8h__incl.md5 b/documentation/developer/html/d5/d49/imoc__macros__ppu_8h__incl.md5 new file mode 100755 index 0000000..f151ed1 --- /dev/null +++ b/documentation/developer/html/d5/d49/imoc__macros__ppu_8h__incl.md5 @@ -0,0 +1 @@ +317c5907960f412a1f2eb9a70f0dc8fe \ No newline at end of file diff --git a/documentation/developer/html/d5/d49/imoc__macros__ppu_8h__incl.png b/documentation/developer/html/d5/d49/imoc__macros__ppu_8h__incl.png new file mode 100755 index 0000000..fe324e2 Binary files /dev/null and b/documentation/developer/html/d5/d49/imoc__macros__ppu_8h__incl.png differ diff --git a/documentation/developer/html/d5/d4e/moc__isend_8c-source.html b/documentation/developer/html/d5/d4e/moc__isend_8c-source.html new file mode 100755 index 0000000..50a232b --- /dev/null +++ b/documentation/developer/html/d5/d4e/moc__isend_8c-source.html @@ -0,0 +1,76 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_isend.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d5/d66/moc__init__ppu_8c__incl.map b/documentation/developer/html/d5/d66/moc__init__ppu_8c__incl.map new file mode 100755 index 0000000..95f125a --- /dev/null +++ b/documentation/developer/html/d5/d66/moc__init__ppu_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/d5/d66/moc__init__ppu_8c__incl.md5 b/documentation/developer/html/d5/d66/moc__init__ppu_8c__incl.md5 new file mode 100755 index 0000000..f638c10 --- /dev/null +++ b/documentation/developer/html/d5/d66/moc__init__ppu_8c__incl.md5 @@ -0,0 +1 @@ +dec05f63972bb3d308ef3be5fc94a327 \ No newline at end of file diff --git a/documentation/developer/html/d5/d66/moc__init__ppu_8c__incl.png b/documentation/developer/html/d5/d66/moc__init__ppu_8c__incl.png new file mode 100755 index 0000000..735fbdc Binary files /dev/null and b/documentation/developer/html/d5/d66/moc__init__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d5/d73/ppu_2moc_8h__dep__incl.map b/documentation/developer/html/d5/d73/ppu_2moc_8h__dep__incl.map new file mode 100755 index 0000000..80bf810 --- /dev/null +++ b/documentation/developer/html/d5/d73/ppu_2moc_8h__dep__incl.map @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d5/d73/ppu_2moc_8h__dep__incl.md5 b/documentation/developer/html/d5/d73/ppu_2moc_8h__dep__incl.md5 new file mode 100755 index 0000000..5e6f272 --- /dev/null +++ b/documentation/developer/html/d5/d73/ppu_2moc_8h__dep__incl.md5 @@ -0,0 +1 @@ +72e39fbed804930543db2899d50db659 \ No newline at end of file diff --git a/documentation/developer/html/d5/d73/ppu_2moc_8h__dep__incl.png b/documentation/developer/html/d5/d73/ppu_2moc_8h__dep__incl.png new file mode 100755 index 0000000..2d82f2a Binary files /dev/null and b/documentation/developer/html/d5/d73/ppu_2moc_8h__dep__incl.png differ diff --git a/documentation/developer/html/d5/d94/moc__datatype_8h.html b/documentation/developer/html/d5/d94/moc__datatype_8h.html new file mode 100755 index 0000000..8d21bed --- /dev/null +++ b/documentation/developer/html/d5/d94/moc__datatype_8h.html @@ -0,0 +1,106 @@ + + +MPI On Cell (Documentation): include/moc_datatype.h File Reference + + + + + +
+

include/moc_datatype.h File Reference

+

+#include <stdint.h>
+ +

+

+Include dependency graph for moc_datatype.h:
+
+

+
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

PPU & SPU

#define MOC_BYTE   ((MOC_Datatype)0+0)
 MOC_Byte is a special datatype.
#define MOC_CHAR   ((MOC_Datatype)0+1)
 C-Datatype char.
#define MOC_UNSIGNED_CHAR   ((MOC_Datatype)0+2)
 C-Datatype unsigned char.
#define MOC_SHORT   ((MOC_Datatype)16+0)
 C-Datatype short.
#define MOC_UNSIGNED_SHORT   ((MOC_Datatype)16+1)
 C-Datatype unsigned short.
#define MOC_INT   ((MOC_Datatype)32+0)
 C-Datatype int.
#define MOC_UNSIGNED   ((MOC_Datatype)32+1)
 C-Datatype unsigned int.
#define MOC_LONG_LONG   ((MOC_Datatype)64+0)
 C-Datatype long long.
#define MOC_UNSIGNED_LONG_LONG   ((MOC_Datatype)64+1)
 C-Datatype unsigned long long.
#define MOC_FLOAT   ((MOC_Datatype)32+2)
 C-Datatype float.
#define MOC_DOUBLE   ((MOC_Datatype)64+5)
 C-Datatype double.
#define MOC_VEC_UCHAR16   ((MOC_Datatype)128+0)
 Cell-specific Datatype vector unsigned char (vec_uchar16).
#define MOC_VEC_USHORT8   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector unsigned short (vec_ushort8).
#define MOC_VEC_UINT4   ((MOC_Datatype)128+2)
 Cell-specific Datatype vector unsigned int (vec_uint4).
#define MOC_VEC_CHAR16   ((MOC_Datatype)128+4)
 Cell-specific Datatype vector signed char (vec_char16).
#define MOC_VEC_SHORT8   ((MOC_Datatype)128+3)
 Cell-specific Datatype vector signed short (vec_short8).
#define MOC_VEC_INT4   ((MOC_Datatype)128+5)
 Cell-specific Datatype vector signed int (vec_int4).
#define MOC_VEC_FLOAT4   ((MOC_Datatype)128+6)
 Cell-specific Datatype vector float (vec_float4).
typedef uint8_t MOC_Datatype
 Typedef defining MOC_Datatype.
+

+
Generated on Thu Feb 12 13:49:59 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d5/dac/moc__comm__rank_8c__incl.map b/documentation/developer/html/d5/dac/moc__comm__rank_8c__incl.map new file mode 100755 index 0000000..511b41f --- /dev/null +++ b/documentation/developer/html/d5/dac/moc__comm__rank_8c__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/documentation/developer/html/d5/dac/moc__comm__rank_8c__incl.md5 b/documentation/developer/html/d5/dac/moc__comm__rank_8c__incl.md5 new file mode 100755 index 0000000..a0a4075 --- /dev/null +++ b/documentation/developer/html/d5/dac/moc__comm__rank_8c__incl.md5 @@ -0,0 +1 @@ +6ce010387cd62328ac4e6869f44a0bd6 \ No newline at end of file diff --git a/documentation/developer/html/d5/dac/moc__comm__rank_8c__incl.png b/documentation/developer/html/d5/dac/moc__comm__rank_8c__incl.png new file mode 100755 index 0000000..82da4b9 Binary files /dev/null and b/documentation/developer/html/d5/dac/moc__comm__rank_8c__incl.png differ diff --git a/documentation/developer/html/d5/dc2/group__p2p__synch.html b/documentation/developer/html/d5/dc2/group__p2p__synch.html new file mode 100755 index 0000000..ee57340 --- /dev/null +++ b/documentation/developer/html/d5/dc2/group__p2p__synch.html @@ -0,0 +1,145 @@ + + +MPI On Cell (Documentation): Synchronous Communication + + + + + +
+

Synchronous Communication
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Synchronous Communication:
+
+
+ +
+
+

Detailed Description

+Direct blocking sending of messages without any intermediate buffer. +

+The blocking synchronous send-operation returns only when the receiver has completely received the message. +

+ + + + + + +

Functions

int MOC_Ssend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking synchronous mode send operation.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Ssend (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  tag,
MOC_Comm  comm 
)
+
+
+ +

+Performs a blocking synchronous mode send operation. +

+

Note:
This routine blocks until the message is received.
+
Parameters:
+ + + + + + + +
buf in Pointer to buffer where data is stored
count in Number of elements to be send (not equal to actual byte-value)
datatype in Type of elements to be send
dest in Rank of receiving process
tag in Tag of message
comm in communicator of message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 10 of file moc_ssend_ppu.c.

+ +

References __attribute__(), moc_message_status_struct::bits, moc_message_status_struct::flags, IMOC_EA_REMOTE_QUEUE, IMOC_EA_REMOTE_QUEUE_ENTRY, IMOC_getFreeEntry(), IMOC_getFreeMID(), IMOC_LS_REMOTE_QUEUE, IMOC_MESSAGE_CHANNEL_DMA, IMOC_MESSAGE_CHANNEL_ENV, IMOC_TEST_ALIGNMENT, IMOC_TEST_BUFFER, IMOC_TEST_BYTECOUNT, IMOC_TEST_COMM_SEND, IMOC_TEST_PROC_NULL, IMOC_TEST_PROC_SELF, IMOC_TEST_RANK, IMOC_TEST_TAG_SEND, IMOC_waitForMessageCompletion(), MEMCPY_GET_TRESHOLD, MOC_ERR_INTERN, moc_ppu_thread_count, moc_spu_thread_list, MOC_SUCCESS, node_handle, moc_node_handle_ppu_struct::queue_size, and moc_node_handle_ppu_struct::status_array_base.

+ +

Referenced by MOC_Send().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+

+
Generated on Thu Feb 12 13:50:50 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d5/dc2/group__p2p__synch.png b/documentation/developer/html/d5/dc2/group__p2p__synch.png new file mode 100755 index 0000000..c575760 Binary files /dev/null and b/documentation/developer/html/d5/dc2/group__p2p__synch.png differ diff --git a/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_cgraph.map b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_cgraph.map new file mode 100755 index 0000000..0019ae9 --- /dev/null +++ b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_cgraph.md5 b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_cgraph.md5 new file mode 100755 index 0000000..d3f824c --- /dev/null +++ b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_cgraph.md5 @@ -0,0 +1 @@ +f19549e781411508624921af77038aea \ No newline at end of file diff --git a/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_cgraph.png b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_cgraph.png new file mode 100755 index 0000000..5d309e0 Binary files /dev/null and b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_cgraph.png differ diff --git a/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_icgraph.map b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_icgraph.map new file mode 100755 index 0000000..3a11d2c --- /dev/null +++ b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_icgraph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_icgraph.md5 b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_icgraph.md5 new file mode 100755 index 0000000..f30eaf3 --- /dev/null +++ b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_icgraph.md5 @@ -0,0 +1 @@ +ad51d0650d65c07c7a80831d028fc80a \ No newline at end of file diff --git a/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_icgraph.png b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_icgraph.png new file mode 100755 index 0000000..3047b47 Binary files /dev/null and b/documentation/developer/html/d5/dc2/group__p2p__synch_g46cb2ff2b5a0601165978598932d6120_icgraph.png differ diff --git a/documentation/developer/html/d5/dcb/structmoc__spu__thread__struct__coll__graph.map b/documentation/developer/html/d5/dcb/structmoc__spu__thread__struct__coll__graph.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/developer/html/d5/dcb/structmoc__spu__thread__struct__coll__graph.md5 b/documentation/developer/html/d5/dcb/structmoc__spu__thread__struct__coll__graph.md5 new file mode 100755 index 0000000..e8f11dd --- /dev/null +++ b/documentation/developer/html/d5/dcb/structmoc__spu__thread__struct__coll__graph.md5 @@ -0,0 +1 @@ +fb8640ef8582be607519356665768280 \ No newline at end of file diff --git a/documentation/developer/html/d5/dcb/structmoc__spu__thread__struct__coll__graph.png b/documentation/developer/html/d5/dcb/structmoc__spu__thread__struct__coll__graph.png new file mode 100755 index 0000000..0d6ba48 Binary files /dev/null and b/documentation/developer/html/d5/dcb/structmoc__spu__thread__struct__coll__graph.png differ diff --git a/documentation/developer/html/d5/ddb/moc__get__version_8c__incl.map b/documentation/developer/html/d5/ddb/moc__get__version_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/d5/ddb/moc__get__version_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/d5/ddb/moc__get__version_8c__incl.md5 b/documentation/developer/html/d5/ddb/moc__get__version_8c__incl.md5 new file mode 100755 index 0000000..39d206b --- /dev/null +++ b/documentation/developer/html/d5/ddb/moc__get__version_8c__incl.md5 @@ -0,0 +1 @@ +11e71476f3f3fe924686c22aa1c4dd2e \ No newline at end of file diff --git a/documentation/developer/html/d5/ddb/moc__get__version_8c__incl.png b/documentation/developer/html/d5/ddb/moc__get__version_8c__incl.png new file mode 100755 index 0000000..537b2d2 Binary files /dev/null and b/documentation/developer/html/d5/ddb/moc__get__version_8c__incl.png differ diff --git a/documentation/developer/html/d5/de0/moc__error__string__ppu_8c__incl.map b/documentation/developer/html/d5/de0/moc__error__string__ppu_8c__incl.map new file mode 100755 index 0000000..e793a43 --- /dev/null +++ b/documentation/developer/html/d5/de0/moc__error__string__ppu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d5/de0/moc__error__string__ppu_8c__incl.md5 b/documentation/developer/html/d5/de0/moc__error__string__ppu_8c__incl.md5 new file mode 100755 index 0000000..3d829b8 --- /dev/null +++ b/documentation/developer/html/d5/de0/moc__error__string__ppu_8c__incl.md5 @@ -0,0 +1 @@ +74b77f88e80c7ccd3a83edb292c7e85f \ No newline at end of file diff --git a/documentation/developer/html/d5/de0/moc__error__string__ppu_8c__incl.png b/documentation/developer/html/d5/de0/moc__error__string__ppu_8c__incl.png new file mode 100755 index 0000000..26d0075 Binary files /dev/null and b/documentation/developer/html/d5/de0/moc__error__string__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d5/de2/moc__wtime__ppu_8c-source.html b/documentation/developer/html/d5/de2/moc__wtime__ppu_8c-source.html new file mode 100755 index 0000000..a75d60b --- /dev/null +++ b/documentation/developer/html/d5/de2/moc__wtime__ppu_8c-source.html @@ -0,0 +1,35 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_wtime_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d5/df4/moc__dma-iget__spu_8c-source.html b/documentation/developer/html/d5/df4/moc__dma-iget__spu_8c-source.html new file mode 100755 index 0000000..ab1bc46 --- /dev/null +++ b/documentation/developer/html/d5/df4/moc__dma-iget__spu_8c-source.html @@ -0,0 +1,53 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-iget_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d5/dfd/moc__barrier__spu_8c__incl.map b/documentation/developer/html/d5/dfd/moc__barrier__spu_8c__incl.map new file mode 100755 index 0000000..ba2b986 --- /dev/null +++ b/documentation/developer/html/d5/dfd/moc__barrier__spu_8c__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/documentation/developer/html/d5/dfd/moc__barrier__spu_8c__incl.md5 b/documentation/developer/html/d5/dfd/moc__barrier__spu_8c__incl.md5 new file mode 100755 index 0000000..e9232d9 --- /dev/null +++ b/documentation/developer/html/d5/dfd/moc__barrier__spu_8c__incl.md5 @@ -0,0 +1 @@ +f5cb099f23a0875c372704c476517e7c \ No newline at end of file diff --git a/documentation/developer/html/d5/dfd/moc__barrier__spu_8c__incl.png b/documentation/developer/html/d5/dfd/moc__barrier__spu_8c__incl.png new file mode 100755 index 0000000..e62bdb6 Binary files /dev/null and b/documentation/developer/html/d5/dfd/moc__barrier__spu_8c__incl.png differ diff --git a/documentation/developer/html/d6/d09/imoc__core__ppu_8h.html b/documentation/developer/html/d6/d09/imoc__core__ppu_8h.html new file mode 100755 index 0000000..450d2e7 --- /dev/null +++ b/documentation/developer/html/d6/d09/imoc__core__ppu_8h.html @@ -0,0 +1,94 @@ + + +MPI On Cell (Documentation): include/internal/ppu/imoc_core_ppu.h File Reference + + + + + +
+

include/internal/ppu/imoc_core_ppu.h File Reference

+

+#include <stdint.h>
+#include <libspe2.h>
+#include <pthread.h>
+#include "../imoc_core.h"
+#include "../../ppu/moc.h"
+ +

+

+Include dependency graph for imoc_core_ppu.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  moc_node_handle_ppu_struct
 Node-handle structure. More...
struct  moc_spu_thread_struct
 SPU-Thread structure. More...

PPU only

typedef struct
+moc_node_handle_ppu_struct 
moc_node_handle_ppu_t
 Node-handle structure.
moc_node_handle_ppu_t node_handle
 Information each node knowns about himself and the world.

Typedefs

typedef struct
+moc_spu_thread_struct 
moc_spu_thread_t
 SPU-Thread structure.

Functions

void * moc_spe_pthread_func (void *arg)
 PThread-function for creating SPU-Threads.

Variables

uint8_t moc_spu_thread_count
 actual number of SPU-Threads.
uint8_t moc_ppu_thread_count
 actual number of PPU-Threads.
uint32_t moc_spu_buffer_size
 init buffer size
uint8_t moc_spu_queue_size
 init message-queue size
moc_spu_thread_t moc_spu_thread_list [MOC_SPU_THREAD_MAX]
 array of SPU-Threads.
+

+
Generated on Thu Feb 12 13:49:52 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/d1e/moc__get__count_8c__incl.map b/documentation/developer/html/d6/d1e/moc__get__count_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/d6/d1e/moc__get__count_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/d6/d1e/moc__get__count_8c__incl.md5 b/documentation/developer/html/d6/d1e/moc__get__count_8c__incl.md5 new file mode 100755 index 0000000..0455c65 --- /dev/null +++ b/documentation/developer/html/d6/d1e/moc__get__count_8c__incl.md5 @@ -0,0 +1 @@ +5274436481629d64277090c0566d7794 \ No newline at end of file diff --git a/documentation/developer/html/d6/d1e/moc__get__count_8c__incl.png b/documentation/developer/html/d6/d1e/moc__get__count_8c__incl.png new file mode 100755 index 0000000..61647da Binary files /dev/null and b/documentation/developer/html/d6/d1e/moc__get__count_8c__incl.png differ diff --git a/documentation/developer/html/d6/d21/moc__send__recv_8c.html b/documentation/developer/html/d6/d21/moc__send__recv_8c.html new file mode 100755 index 0000000..572bdb7 --- /dev/null +++ b/documentation/developer/html/d6/d21/moc__send__recv_8c.html @@ -0,0 +1,45 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_send_recv.c File Reference + + + + + +
+

src/noarch/communication/moc_send_recv.c File Reference

+

+#include <moc.h>
+ +

+

+Include dependency graph for moc_send_recv.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Sendrecv (void *sendbuf, int sendcount, MOC_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MOC_Datatype recvtype, int source, int recvtag, MOC_Comm comm, MOC_Status *status)
 Execute a blocking send and receive operation.
+

+
Generated on Thu Feb 12 13:50:08 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/d2b/imoc__get__free__mid_8c__incl.map b/documentation/developer/html/d6/d2b/imoc__get__free__mid_8c__incl.map new file mode 100755 index 0000000..97afcbd --- /dev/null +++ b/documentation/developer/html/d6/d2b/imoc__get__free__mid_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/d6/d2b/imoc__get__free__mid_8c__incl.md5 b/documentation/developer/html/d6/d2b/imoc__get__free__mid_8c__incl.md5 new file mode 100755 index 0000000..da7bae6 --- /dev/null +++ b/documentation/developer/html/d6/d2b/imoc__get__free__mid_8c__incl.md5 @@ -0,0 +1 @@ +8b6c84c2ba947728c97bce67b28abd0c \ No newline at end of file diff --git a/documentation/developer/html/d6/d2b/imoc__get__free__mid_8c__incl.png b/documentation/developer/html/d6/d2b/imoc__get__free__mid_8c__incl.png new file mode 100755 index 0000000..0d58998 Binary files /dev/null and b/documentation/developer/html/d6/d2b/imoc__get__free__mid_8c__incl.png differ diff --git a/documentation/developer/html/d6/d2c/imoc__core_8h-source.html b/documentation/developer/html/d6/d2c/imoc__core_8h-source.html new file mode 100755 index 0000000..bc709fe --- /dev/null +++ b/documentation/developer/html/d6/d2c/imoc__core_8h-source.html @@ -0,0 +1,195 @@ + + +MPI On Cell (Documentation): include/internal/imoc_core.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/d2f/structmoc__message__status__struct__coll__graph.map b/documentation/developer/html/d6/d2f/structmoc__message__status__struct__coll__graph.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/developer/html/d6/d2f/structmoc__message__status__struct__coll__graph.md5 b/documentation/developer/html/d6/d2f/structmoc__message__status__struct__coll__graph.md5 new file mode 100755 index 0000000..1ada033 --- /dev/null +++ b/documentation/developer/html/d6/d2f/structmoc__message__status__struct__coll__graph.md5 @@ -0,0 +1 @@ +d009a550ac13e8c21064d9609ebaf42e \ No newline at end of file diff --git a/documentation/developer/html/d6/d2f/structmoc__message__status__struct__coll__graph.png b/documentation/developer/html/d6/d2f/structmoc__message__status__struct__coll__graph.png new file mode 100755 index 0000000..e2c2368 Binary files /dev/null and b/documentation/developer/html/d6/d2f/structmoc__message__status__struct__coll__graph.png differ diff --git a/documentation/developer/html/d6/d68/imoc__dma-iget__spu_8c__incl.map b/documentation/developer/html/d6/d68/imoc__dma-iget__spu_8c__incl.map new file mode 100755 index 0000000..ab66afa --- /dev/null +++ b/documentation/developer/html/d6/d68/imoc__dma-iget__spu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d6/d68/imoc__dma-iget__spu_8c__incl.md5 b/documentation/developer/html/d6/d68/imoc__dma-iget__spu_8c__incl.md5 new file mode 100755 index 0000000..ad10ad5 --- /dev/null +++ b/documentation/developer/html/d6/d68/imoc__dma-iget__spu_8c__incl.md5 @@ -0,0 +1 @@ +a4c64c8c32921c734a3614da3342cadb \ No newline at end of file diff --git a/documentation/developer/html/d6/d68/imoc__dma-iget__spu_8c__incl.png b/documentation/developer/html/d6/d68/imoc__dma-iget__spu_8c__incl.png new file mode 100755 index 0000000..8e36152 Binary files /dev/null and b/documentation/developer/html/d6/d68/imoc__dma-iget__spu_8c__incl.png differ diff --git a/documentation/developer/html/d6/d74/moc__probe_8c-source.html b/documentation/developer/html/d6/d74/moc__probe_8c-source.html new file mode 100755 index 0000000..e7ff33a --- /dev/null +++ b/documentation/developer/html/d6/d74/moc__probe_8c-source.html @@ -0,0 +1,38 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_probe.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/d82/moc__datatype__spu_8h-source.html b/documentation/developer/html/d6/d82/moc__datatype__spu_8h-source.html new file mode 100755 index 0000000..cdb5b0c --- /dev/null +++ b/documentation/developer/html/d6/d82/moc__datatype__spu_8h-source.html @@ -0,0 +1,82 @@ + + +MPI On Cell (Documentation): include/spu/moc_datatype_spu.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/d83/imoc__macros__ppu_8h__dep__incl.map b/documentation/developer/html/d6/d83/imoc__macros__ppu_8h__dep__incl.map new file mode 100755 index 0000000..48d41c3 --- /dev/null +++ b/documentation/developer/html/d6/d83/imoc__macros__ppu_8h__dep__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/documentation/developer/html/d6/d83/imoc__macros__ppu_8h__dep__incl.md5 b/documentation/developer/html/d6/d83/imoc__macros__ppu_8h__dep__incl.md5 new file mode 100755 index 0000000..7c6803b --- /dev/null +++ b/documentation/developer/html/d6/d83/imoc__macros__ppu_8h__dep__incl.md5 @@ -0,0 +1 @@ +a933e07ccaef2140e7aa5e39b94f0a58 \ No newline at end of file diff --git a/documentation/developer/html/d6/d83/imoc__macros__ppu_8h__dep__incl.png b/documentation/developer/html/d6/d83/imoc__macros__ppu_8h__dep__incl.png new file mode 100755 index 0000000..5071e49 Binary files /dev/null and b/documentation/developer/html/d6/d83/imoc__macros__ppu_8h__dep__incl.png differ diff --git a/documentation/developer/html/d6/d8c/moc__bsend__spu_8c.html b/documentation/developer/html/d6/d8c/moc__bsend__spu_8c.html new file mode 100755 index 0000000..72e37b0 --- /dev/null +++ b/documentation/developer/html/d6/d8c/moc__bsend__spu_8c.html @@ -0,0 +1,52 @@ + + +MPI On Cell (Documentation): src/spu/communication/moc_bsend_spu.c File Reference + + + + + +
+

src/spu/communication/moc_bsend_spu.c File Reference

+

+#include <stdio.h>
+#include <string.h>
+#include <spu_mfcio.h>
+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+#include <internal/spu/imoc_core_spu.h>
+ +

+

+Include dependency graph for moc_bsend_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Bsend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking buffered mode send operation.
+

+
Generated on Thu Feb 12 13:50:33 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/db1/moc__bcast_8c.html b/documentation/developer/html/d6/db1/moc__bcast_8c.html new file mode 100755 index 0000000..13689f3 --- /dev/null +++ b/documentation/developer/html/d6/db1/moc__bcast_8c.html @@ -0,0 +1,46 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_bcast.c File Reference + + + + + +
+

src/noarch/communication/moc_bcast.c File Reference

+

+#include <moc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_bcast.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Bcast (void *buffer, int count, MOC_Datatype datatype, int root, MOC_Comm comm)
 Broadcasts a message from the process with rank "root" to all other processes of the group.
+

+
Generated on Thu Feb 12 13:50:06 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/dca/imoc__dma-test__spu_8c-source.html b/documentation/developer/html/d6/dca/imoc__dma-test__spu_8c-source.html new file mode 100755 index 0000000..c7d72f3 --- /dev/null +++ b/documentation/developer/html/d6/dca/imoc__dma-test__spu_8c-source.html @@ -0,0 +1,53 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-test_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/dcd/moc__translate__ls__ea__spu_8c.html b/documentation/developer/html/d6/dcd/moc__translate__ls__ea__spu_8c.html new file mode 100755 index 0000000..3790948 --- /dev/null +++ b/documentation/developer/html/d6/dcd/moc__translate__ls__ea__spu_8c.html @@ -0,0 +1,46 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_translate_ls_ea_spu.c File Reference + + + + + +
+

src/spu/dma/moc_translate_ls_ea_spu.c File Reference

+

+#include <spu/moc_dma_spu.h>
+#include <internal/spu/imoc_core_spu.h>
+ +

+

+Include dependency graph for moc_translate_ls_ea_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Translate_LS_to_EA (void *ls, uint64_t *ea)
 Translates a local-store address of the calling SPU into the corresponding effective-address.
+

+
Generated on Thu Feb 12 13:50:37 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/de0/group__internal__init.html b/documentation/developer/html/d6/de0/group__internal__init.html new file mode 100755 index 0000000..8619174 --- /dev/null +++ b/documentation/developer/html/d6/de0/group__internal__init.html @@ -0,0 +1,58 @@ + + +MPI On Cell (Documentation): Startup & Shutdown + + + + + +
+

Startup & Shutdown
+ +[Environmental Management] +

+

+

+Collaboration diagram for Startup & Shutdown:
+
+
+ +
+
+

Detailed Description

+Internals about the startup of the execution-environment and SPU-Thread-Management. +

+

+Startup

+The PPU-Process creates for every SPU-thread an own thread using the pthread-library (see SPU-Thread Management). The rank of each prozess, the overall process count, the sizes of message-queue and buffer-space and the effective base address of the buffer is send to each SPU-thread via mailbox-messages. The SPU-threads then send the memory-addresses of their message-queues and status-arrays back to the PPU-process which writes this data into the prozess-list. After all SPU-Threads have reported back to the PPU-process the effective address of the PPU's process-list ist distributed among the SPU-processes which then copy the process-list via DMA in their local storages.

+Shutdown

+

+PPU

+The PPU-process waits till all SPU-threads have signalled that they are also executing the finalize-function. After that a signal is send back to each SPU-Thread that they can now stop execution. Then local ressources are freed and the finalize-function returns.

+SPU

+A mailbox-message is send to the PPU to signal that the SPU-process is now executing the finalize-function. After that the SPU-process is waiting till a mailbox-message from the PPU-process is received. Then local ressources are freed and the finalize-function returns. +

+ + + + + + + +

+


Modules

 SPU-Thread Management
 This section deals about the creation and management of SPU-threads.
+

+
Generated on Thu Feb 12 13:51:05 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/de0/group__internal__init.png b/documentation/developer/html/d6/de0/group__internal__init.png new file mode 100755 index 0000000..de27ea8 Binary files /dev/null and b/documentation/developer/html/d6/de0/group__internal__init.png differ diff --git a/documentation/developer/html/d6/de5/moc__dma-wait__ppu_8c.html b/documentation/developer/html/d6/de5/moc__dma-wait__ppu_8c.html new file mode 100755 index 0000000..9135a12 --- /dev/null +++ b/documentation/developer/html/d6/de5/moc__dma-wait__ppu_8c.html @@ -0,0 +1,48 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-wait_ppu.c File Reference + + + + + +
+

src/ppu/dma/moc_dma-wait_ppu.c File Reference

+

+#include <moc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <ppu/moc_dma_ppu.h>
+ +

+

+Include dependency graph for moc_dma-wait_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Wait_data (MOC_Request *request)
 Waits till a MOC_IGet_data or IMOC_IPut_data is completed.
+

+
Generated on Thu Feb 12 13:50:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/df6/imoc__dma-iget__ppu_8c-source.html b/documentation/developer/html/d6/df6/imoc__dma-iget__ppu_8c-source.html new file mode 100755 index 0000000..c54c68d --- /dev/null +++ b/documentation/developer/html/d6/df6/imoc__dma-iget__ppu_8c-source.html @@ -0,0 +1,118 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-iget_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d6/dfa/moc__wtick__ppu_8c.html b/documentation/developer/html/d6/dfa/moc__wtick__ppu_8c.html new file mode 100755 index 0000000..b8fe66b --- /dev/null +++ b/documentation/developer/html/d6/dfa/moc__wtick__ppu_8c.html @@ -0,0 +1,47 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_wtick_ppu.c File Reference + + + + + +
+

src/ppu/system/moc_wtick_ppu.c File Reference

+

+#include <moc.h>
+#include <time.h>
+#include <sys/time.h>
+ +

+

+Include dependency graph for moc_wtick_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

double MOC_Wtick (void)
 Returns the resolution of Moc_Wtime in seconds.
+

+
Generated on Thu Feb 12 13:50:31 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/d0f/imoc_8h__incl.map b/documentation/developer/html/d7/d0f/imoc_8h__incl.map new file mode 100755 index 0000000..0a4266a --- /dev/null +++ b/documentation/developer/html/d7/d0f/imoc_8h__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/documentation/developer/html/d7/d0f/imoc_8h__incl.md5 b/documentation/developer/html/d7/d0f/imoc_8h__incl.md5 new file mode 100755 index 0000000..2e23d2d --- /dev/null +++ b/documentation/developer/html/d7/d0f/imoc_8h__incl.md5 @@ -0,0 +1 @@ +83adef834e4bae185e259c2bb85bf231 \ No newline at end of file diff --git a/documentation/developer/html/d7/d0f/imoc_8h__incl.png b/documentation/developer/html/d7/d0f/imoc_8h__incl.png new file mode 100755 index 0000000..003378e Binary files /dev/null and b/documentation/developer/html/d7/d0f/imoc_8h__incl.png differ diff --git a/documentation/developer/html/d7/d1f/imoc__buffer__malloc_8c-source.html b/documentation/developer/html/d7/d1f/imoc__buffer__malloc_8c-source.html new file mode 100755 index 0000000..a27f2ad --- /dev/null +++ b/documentation/developer/html/d7/d1f/imoc__buffer__malloc_8c-source.html @@ -0,0 +1,161 @@ + + +MPI On Cell (Documentation): src/noarch/internal/imoc_buffer_malloc.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/d24/moc__test_8c-source.html b/documentation/developer/html/d7/d24/moc__test_8c-source.html new file mode 100755 index 0000000..1e4850c --- /dev/null +++ b/documentation/developer/html/d7/d24/moc__test_8c-source.html @@ -0,0 +1,87 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_test.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/d33/imoc__dma-put__ppu_8c__incl.map b/documentation/developer/html/d7/d33/imoc__dma-put__ppu_8c__incl.map new file mode 100755 index 0000000..2a24ed3 --- /dev/null +++ b/documentation/developer/html/d7/d33/imoc__dma-put__ppu_8c__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d7/d33/imoc__dma-put__ppu_8c__incl.md5 b/documentation/developer/html/d7/d33/imoc__dma-put__ppu_8c__incl.md5 new file mode 100755 index 0000000..89fba75 --- /dev/null +++ b/documentation/developer/html/d7/d33/imoc__dma-put__ppu_8c__incl.md5 @@ -0,0 +1 @@ +eaad9a2b92b7433209edcbc961c26aa7 \ No newline at end of file diff --git a/documentation/developer/html/d7/d33/imoc__dma-put__ppu_8c__incl.png b/documentation/developer/html/d7/d33/imoc__dma-put__ppu_8c__incl.png new file mode 100755 index 0000000..3ae238e Binary files /dev/null and b/documentation/developer/html/d7/d33/imoc__dma-put__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d7/d36/imoc__dma-get__spu_8c__incl.map b/documentation/developer/html/d7/d36/imoc__dma-get__spu_8c__incl.map new file mode 100755 index 0000000..503cd3c --- /dev/null +++ b/documentation/developer/html/d7/d36/imoc__dma-get__spu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d7/d36/imoc__dma-get__spu_8c__incl.md5 b/documentation/developer/html/d7/d36/imoc__dma-get__spu_8c__incl.md5 new file mode 100755 index 0000000..4880934 --- /dev/null +++ b/documentation/developer/html/d7/d36/imoc__dma-get__spu_8c__incl.md5 @@ -0,0 +1 @@ +c3258153d0685d9e8937aa3d3eea71cc \ No newline at end of file diff --git a/documentation/developer/html/d7/d36/imoc__dma-get__spu_8c__incl.png b/documentation/developer/html/d7/d36/imoc__dma-get__spu_8c__incl.png new file mode 100755 index 0000000..220e050 Binary files /dev/null and b/documentation/developer/html/d7/d36/imoc__dma-get__spu_8c__incl.png differ diff --git a/documentation/developer/html/d7/d3b/moc__send__recv__replace_8c.html b/documentation/developer/html/d7/d3b/moc__send__recv__replace_8c.html new file mode 100755 index 0000000..5e3c0dd --- /dev/null +++ b/documentation/developer/html/d7/d3b/moc__send__recv__replace_8c.html @@ -0,0 +1,45 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_send_recv_replace.c File Reference + + + + + +
+

src/noarch/communication/moc_send_recv_replace.c File Reference

+

+#include <moc.h>
+ +

+

+Include dependency graph for moc_send_recv_replace.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Sendrecv_replace (void *buf, int count, MOC_Datatype datatype, int dest, int sendtag, int source, int recvtag, MOC_Comm comm, MOC_Status *status)
 Execute a blocking send and receive.
+

+
Generated on Thu Feb 12 13:50:08 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/d3d/imoc__core_8h.html b/documentation/developer/html/d7/d3d/imoc__core_8h.html new file mode 100755 index 0000000..a992e90 --- /dev/null +++ b/documentation/developer/html/d7/d3d/imoc__core_8h.html @@ -0,0 +1,88 @@ + + +MPI On Cell (Documentation): include/internal/imoc_core.h File Reference + + + + + +
+

include/internal/imoc_core.h File Reference

+

+#include <stdint.h>
+ +

+

+Include dependency graph for imoc_core.h:
+
+

+
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  moc_message_envelope_struct
 Message-envelope structure. More...
struct  moc_message_status_struct
 Message-status structure. More...
struct  moc_process_struct
 Process-information structure. More...

PPU & SPU

#define MOC_QUEUE_SIZE   4
 Default size of the message-queues.
#define MOC_BUFFER_SIZE   2048
 Default size of the buffers used for buffered communication.
#define IMOC_MESSAGE_CHANNEL_DMA   0
 Constant for moc_message_envelope_t.flags.channel.
#define IMOC_MESSAGE_CHANNEL_ENV   1
 Constant for moc_message_envelope_t.flags.channel.
#define MOC_PPU_PROCESS   0
 Constant for moc_process_struct.type.
#define MOC_SPU_PROCESS   1
 Constant for moc_process_struct.type.
typedef struct
+moc_message_envelope_struct 
moc_message_envelope_t
 Message-envelope structure.
typedef struct
+moc_message_status_struct 
moc_message_status_t
 Message-status structure.
typedef struct moc_process_struct moc_process_t
 Process-information structure.
+

+
Generated on Thu Feb 12 13:49:50 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/d41/group__internal__p2p__imm.html b/documentation/developer/html/d7/d41/group__internal__p2p__imm.html new file mode 100755 index 0000000..6c60fd6 --- /dev/null +++ b/documentation/developer/html/d7/d41/group__internal__p2p__imm.html @@ -0,0 +1,98 @@ + + +MPI On Cell (Documentation): Non-Blocking Communication + + + + + +
+

Non-Blocking Communication
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Non-Blocking Communication:
+
+
+ +
+
+

Detailed Description

+Internals about non-blocking communication. +

+The SPUs are very limited in usage, e.g. only one thread per SPU is supported, and so it is hard to make communication non-blocking. In fact only synchronous send and receive provide possibilities for non-blocking communication. Because we think that the advantages of a non-blocking receive aren't worth the effort, only non-blocking send is implemented at the moment. The picture below illustrates a non-blocking synchronous communication call.

+

+isyncronous_communication_1.png +
+ +

+ + + + + + + + + +

Constants for MOC_Request.request_type

#define MOC_REQ_TYPE_DMA   0
 MOC_Request is associated with a DMA-Communication.
#define MOC_REQ_TYPE_ISSEND   1
 MOC_Request is associated with aISsend-Communication.
+


Define Documentation

+ +
+
+ + + + +
#define MOC_REQ_TYPE_DMA   0
+
+
+ +

+MOC_Request is associated with a DMA-Communication. +

+ +

Definition at line 25 of file imoc.h.

+ +

Referenced by MOC_IGet_data(), MOC_IPut_data(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+
+ + + + +
#define MOC_REQ_TYPE_ISSEND   1
+
+
+ +

+MOC_Request is associated with aISsend-Communication. +

+ +

Definition at line 30 of file imoc.h.

+ +

Referenced by MOC_ISend(), MOC_ISsend(), MOC_Test(), and MOC_Wait().

+ +
+

+

+
Generated on Thu Feb 12 13:51:17 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/d41/group__internal__p2p__imm.png b/documentation/developer/html/d7/d41/group__internal__p2p__imm.png new file mode 100755 index 0000000..2151885 Binary files /dev/null and b/documentation/developer/html/d7/d41/group__internal__p2p__imm.png differ diff --git a/documentation/developer/html/d7/d46/structimoc__issend__request__struct__coll__graph.map b/documentation/developer/html/d7/d46/structimoc__issend__request__struct__coll__graph.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/developer/html/d7/d46/structimoc__issend__request__struct__coll__graph.md5 b/documentation/developer/html/d7/d46/structimoc__issend__request__struct__coll__graph.md5 new file mode 100755 index 0000000..dde9d11 --- /dev/null +++ b/documentation/developer/html/d7/d46/structimoc__issend__request__struct__coll__graph.md5 @@ -0,0 +1 @@ +4d8977c85f221b55db3b8f6992329755 \ No newline at end of file diff --git a/documentation/developer/html/d7/d46/structimoc__issend__request__struct__coll__graph.png b/documentation/developer/html/d7/d46/structimoc__issend__request__struct__coll__graph.png new file mode 100755 index 0000000..7b3a98d Binary files /dev/null and b/documentation/developer/html/d7/d46/structimoc__issend__request__struct__coll__graph.png differ diff --git a/documentation/developer/html/d7/d54/moc__issend__ppu_8c__incl.map b/documentation/developer/html/d7/d54/moc__issend__ppu_8c__incl.map new file mode 100755 index 0000000..9d6bb5a --- /dev/null +++ b/documentation/developer/html/d7/d54/moc__issend__ppu_8c__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d7/d54/moc__issend__ppu_8c__incl.md5 b/documentation/developer/html/d7/d54/moc__issend__ppu_8c__incl.md5 new file mode 100755 index 0000000..bd95d27 --- /dev/null +++ b/documentation/developer/html/d7/d54/moc__issend__ppu_8c__incl.md5 @@ -0,0 +1 @@ +c0dd22f30abc8443dfef1594c6f47d8a \ No newline at end of file diff --git a/documentation/developer/html/d7/d54/moc__issend__ppu_8c__incl.png b/documentation/developer/html/d7/d54/moc__issend__ppu_8c__incl.png new file mode 100755 index 0000000..c0e7c33 Binary files /dev/null and b/documentation/developer/html/d7/d54/moc__issend__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d7/d57/moc__translate__ls__ea__spu_8c-source.html b/documentation/developer/html/d7/d57/moc__translate__ls__ea__spu_8c-source.html new file mode 100755 index 0000000..8b255ff --- /dev/null +++ b/documentation/developer/html/d7/d57/moc__translate__ls__ea__spu_8c-source.html @@ -0,0 +1,31 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_translate_ls_ea_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/d58/moc__dma-get__ppu_8c.html b/documentation/developer/html/d7/d58/moc__dma-get__ppu_8c.html new file mode 100755 index 0000000..ca68380 --- /dev/null +++ b/documentation/developer/html/d7/d58/moc__dma-get__ppu_8c.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-get_ppu.c File Reference + + + + + +
+

src/ppu/dma/moc_dma-get_ppu.c File Reference

+

+#include <string.h>
+#include <moc.h>
+#include <ppu/moc_dma_ppu.h>
+#include <internal/imoc_macros.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_dma-get_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Get_data (void *target, uint32_t source, int count, MOC_Datatype datatype, int dest)
 Wrapper-function for a blocking DMA-get operation.
+

+
Generated on Thu Feb 12 13:50:19 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/d60/moc__dma-iput__spu_8c__incl.map b/documentation/developer/html/d7/d60/moc__dma-iput__spu_8c__incl.map new file mode 100755 index 0000000..1a25fa0 --- /dev/null +++ b/documentation/developer/html/d7/d60/moc__dma-iput__spu_8c__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/documentation/developer/html/d7/d60/moc__dma-iput__spu_8c__incl.md5 b/documentation/developer/html/d7/d60/moc__dma-iput__spu_8c__incl.md5 new file mode 100755 index 0000000..e4575dc --- /dev/null +++ b/documentation/developer/html/d7/d60/moc__dma-iput__spu_8c__incl.md5 @@ -0,0 +1 @@ +182318f07795c8507246347622615edc \ No newline at end of file diff --git a/documentation/developer/html/d7/d60/moc__dma-iput__spu_8c__incl.png b/documentation/developer/html/d7/d60/moc__dma-iput__spu_8c__incl.png new file mode 100755 index 0000000..6541c52 Binary files /dev/null and b/documentation/developer/html/d7/d60/moc__dma-iput__spu_8c__incl.png differ diff --git a/documentation/developer/html/d7/d62/group__p2p__imm.html b/documentation/developer/html/d7/d62/group__p2p__imm.html new file mode 100755 index 0000000..af426f4 --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm.html @@ -0,0 +1,426 @@ + + +MPI On Cell (Documentation): Non-Blocking Communication + + + + + +
+

Non-Blocking Communication
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Non-Blocking Communication:
+
+
+ +
+
+

Detailed Description

+Non-blocking sending and receiving messages. +

+Because of restrictions of the Cell Broadband Engine non-blocking communication can only be provided with a lot of limitations. In fact the only operation where non-blocking communication make sense is synchronous send.

+MOC_ISend uses blocking buffered send or non-blocking synchronous send according to the message size.

+

Note:
Every non-blocking communication operation has to be finished using MOC_Test or MOC_Wait, otherwise resources are no freed and some data are not copied correctly.
+ +

+ + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  moc_request_struct
 Communication-Request (Handle). More...

Typedefs

typedef struct moc_request_struct MOC_Request
 Communication-Request (Handle).

Functions

int MOC_ISend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, MOC_Request *request)
 Performs a non-blocking standard mode send operation.
int MOC_ISsend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, MOC_Request *request)
 Performs a non-blocking synchronous mode send operation.
int MOC_Test (MOC_Request *request, int *flag, MOC_Status *status)
 Tests, if a non-blocking communication has been completed.
int MOC_Wait (MOC_Request *request, MOC_Status *status)
 Wait till a non-blocking communication has been completed.
+


Typedef Documentation

+ +
+
+ + + + +
typedef struct moc_request_struct MOC_Request
+
+
+ +

+Communication-Request (Handle). +

+< Communication-Request (Handle) +

+

+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_ISend (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  tag,
MOC_Comm  comm,
MOC_Request *  request 
)
+
+
+ +

+Performs a non-blocking standard mode send operation. +

+

Note:
This routine returns as soon as possible.
+
Parameters:
+ + + + + + + + +
buf in Pointer to buffer where data is stored
count in Number of elements to be send (not equal to actual byte-value)
datatype in Type of elements to be send
dest in Rank of receiving process
tag in Tag of message
comm in communicator of message
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

+byte-count <= 4096 ==> buffered send

+other ==> true non-blocking send +

Definition at line 18 of file moc_isend.c.

+ +

References imoc_issend_request_struct::isFinished, moc_request_struct::issend_request, imoc_issend_request_struct::message_size, MOC_Bsend(), MOC_ISsend(), MOC_REQ_TYPE_ISSEND, MOC_SEND_TRESHOLD, node_handle, moc_node_handle_ppu_struct::rank, moc_request_struct::request_data, moc_request_struct::request_type, imoc_issend_request_struct::source, and imoc_issend_request_struct::tag.

+ +

Referenced by MOC_Bcast().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_ISsend (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  tag,
MOC_Comm  comm,
MOC_Request *  request 
)
+
+
+ +

+Performs a non-blocking synchronous mode send operation. +

+

Note:
This routine returns as soon as possible (After the message-envelope has been written into the receiver's message-queue).
+
Parameters:
+ + + + + + + + +
buf in Pointer to buffer where data is stored
count in Number of elements to be send (not equal to actual byte-value)
datatype in Type of elements to be send
dest in Rank of receiving process
tag in Tag of message
comm in communicator of message
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 10 of file moc_issend_ppu.c.

+ +

References __attribute__(), moc_message_status_struct::bits, moc_message_status_struct::flags, IMOC_EA_REMOTE_QUEUE, IMOC_EA_REMOTE_QUEUE_ENTRY, IMOC_getFreeEntry(), IMOC_getFreeMID(), IMOC_LS_REMOTE_QUEUE, IMOC_MESSAGE_CHANNEL_DMA, IMOC_MESSAGE_CHANNEL_ENV, IMOC_TEST_ALIGNMENT, IMOC_TEST_BUFFER, IMOC_TEST_BYTECOUNT, IMOC_TEST_COMM_SEND, IMOC_TEST_PROC_NULL, IMOC_TEST_PROC_SELF, IMOC_TEST_RANK, IMOC_TEST_TAG_SEND, imoc_issend_request_struct::isFinished, moc_request_struct::issend_request, MEMCPY_GET_TRESHOLD, imoc_issend_request_struct::message_size, imoc_issend_request_struct::mid, MOC_ERR_INTERN, moc_ppu_thread_count, MOC_REQ_TYPE_ISSEND, moc_spu_thread_list, MOC_SUCCESS, node_handle, moc_node_handle_ppu_struct::queue_size, moc_node_handle_ppu_struct::rank, moc_request_struct::request_data, moc_request_struct::request_type, imoc_issend_request_struct::source, moc_node_handle_ppu_struct::status_array_base, and imoc_issend_request_struct::tag.

+ +

Referenced by MOC_ISend().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Test (MOC_Request *  request,
int *  flag,
MOC_Status *  status 
)
+
+
+ +

+Tests, if a non-blocking communication has been completed. +

+

Parameters:
+ + + + +
request in Communication-Request (Handle)
flag out true, if communication-request has been completed
status out Object holding status-information
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 13 of file moc_test.c.

+ +

References moc_message_status_struct::bits, moc_request_struct::dma_data, moc_message_status_struct::flags, IMOC_test_dma(), IMOC_testForMessageCompletion(), imoc_issend_request_struct::isFinished, moc_request_struct::issend_request, imoc_issend_request_struct::message_size, MOC_Status_struct::message_size, imoc_issend_request_struct::mid, MOC_ERR_REQUEST, MOC_Status_struct::MOC_ERROR, MOC_REQ_TYPE_DMA, MOC_REQ_TYPE_ISSEND, MOC_Status_struct::MOC_SOURCE, MOC_Status_struct::MOC_TAG, node_handle, moc_request_struct::request_data, moc_request_struct::request_type, imoc_dma_request_struct::size, imoc_issend_request_struct::source, moc_node_handle_ppu_struct::status_array_base, and imoc_issend_request_struct::tag.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Wait (MOC_Request *  request,
MOC_Status *  status 
)
+
+
+ +

+Wait till a non-blocking communication has been completed. +

+

Parameters:
+ + + +
request in Communication-Request (Handle)
status out Object holding status-information
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 11 of file moc_wait.c.

+ +

References moc_request_struct::dma_data, moc_message_status_struct::flags, IMOC_wait_dma(), IMOC_waitForMessageCompletion(), imoc_issend_request_struct::isFinished, moc_request_struct::issend_request, imoc_issend_request_struct::message_size, MOC_Status_struct::message_size, imoc_issend_request_struct::mid, MOC_ERR_REQUEST, MOC_Status_struct::MOC_ERROR, MOC_REQ_TYPE_DMA, MOC_REQ_TYPE_ISSEND, MOC_Status_struct::MOC_SOURCE, MOC_Status_struct::MOC_TAG, node_handle, moc_node_handle_ppu_struct::rank, moc_request_struct::request_data, moc_request_struct::request_type, imoc_dma_request_struct::size, imoc_issend_request_struct::source, moc_node_handle_ppu_struct::status_array_base, imoc_issend_request_struct::tag, and moc_message_status_struct::value.

+ +

Referenced by MOC_Bcast().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+

+
Generated on Thu Feb 12 13:50:56 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/d62/group__p2p__imm.png b/documentation/developer/html/d7/d62/group__p2p__imm.png new file mode 100755 index 0000000..2151885 Binary files /dev/null and b/documentation/developer/html/d7/d62/group__p2p__imm.png differ diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_g5ee1f1c1275717d2dc78d6058ff81e9e_cgraph.map b/documentation/developer/html/d7/d62/group__p2p__imm_g5ee1f1c1275717d2dc78d6058ff81e9e_cgraph.map new file mode 100755 index 0000000..f261967 --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_g5ee1f1c1275717d2dc78d6058ff81e9e_cgraph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_g5ee1f1c1275717d2dc78d6058ff81e9e_cgraph.md5 b/documentation/developer/html/d7/d62/group__p2p__imm_g5ee1f1c1275717d2dc78d6058ff81e9e_cgraph.md5 new file mode 100755 index 0000000..84268a5 --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_g5ee1f1c1275717d2dc78d6058ff81e9e_cgraph.md5 @@ -0,0 +1 @@ +2529a59ea522673ee74f3d5b2557e08d \ No newline at end of file diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_g5ee1f1c1275717d2dc78d6058ff81e9e_cgraph.png b/documentation/developer/html/d7/d62/group__p2p__imm_g5ee1f1c1275717d2dc78d6058ff81e9e_cgraph.png new file mode 100755 index 0000000..4ca9ce9 Binary files /dev/null and b/documentation/developer/html/d7/d62/group__p2p__imm_g5ee1f1c1275717d2dc78d6058ff81e9e_cgraph.png differ diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_cgraph.map b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_cgraph.map new file mode 100755 index 0000000..7caaa2d --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_cgraph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_cgraph.md5 b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_cgraph.md5 new file mode 100755 index 0000000..144bf26 --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_cgraph.md5 @@ -0,0 +1 @@ +73392a47729c8d32932628e6a495863a \ No newline at end of file diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_cgraph.png b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_cgraph.png new file mode 100755 index 0000000..0d8edfb Binary files /dev/null and b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_cgraph.png differ diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_icgraph.map b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_icgraph.map new file mode 100755 index 0000000..22d8b94 --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_icgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_icgraph.md5 b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_icgraph.md5 new file mode 100755 index 0000000..8d40a1f --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_icgraph.md5 @@ -0,0 +1 @@ +63d544a2dc6a4e2bcbe0231a23658bdc \ No newline at end of file diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_icgraph.png b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_icgraph.png new file mode 100755 index 0000000..8fbc913 Binary files /dev/null and b/documentation/developer/html/d7/d62/group__p2p__imm_g68043e4a0893fdc25c67f87bae1015a6_icgraph.png differ diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_cgraph.map b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_cgraph.map new file mode 100755 index 0000000..a7bd739 --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_cgraph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_cgraph.md5 b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_cgraph.md5 new file mode 100755 index 0000000..cea53dd --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_cgraph.md5 @@ -0,0 +1 @@ +428ad66dd6228d9afa3caf1a3db2894e \ No newline at end of file diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_cgraph.png b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_cgraph.png new file mode 100755 index 0000000..f2a4048 Binary files /dev/null and b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_cgraph.png differ diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_icgraph.map b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_icgraph.map new file mode 100755 index 0000000..e7df0ee --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_icgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_icgraph.md5 b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_icgraph.md5 new file mode 100755 index 0000000..1c4ea38 --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_icgraph.md5 @@ -0,0 +1 @@ +6e0172d1513c06c5511e6b3a83651668 \ No newline at end of file diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_icgraph.png b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_icgraph.png new file mode 100755 index 0000000..693ff83 Binary files /dev/null and b/documentation/developer/html/d7/d62/group__p2p__imm_gc148ff9b9bee69164139425a7df53697_icgraph.png differ diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_cgraph.map b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_cgraph.map new file mode 100755 index 0000000..5618b92 --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_cgraph.md5 b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_cgraph.md5 new file mode 100755 index 0000000..8eb32f6 --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_cgraph.md5 @@ -0,0 +1 @@ +a0e3eb390839ffa7180a771bc6d6903b \ No newline at end of file diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_cgraph.png b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_cgraph.png new file mode 100755 index 0000000..2492d9c Binary files /dev/null and b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_cgraph.png differ diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_icgraph.map b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_icgraph.map new file mode 100755 index 0000000..1577f71 --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_icgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_icgraph.md5 b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_icgraph.md5 new file mode 100755 index 0000000..c69bfcf --- /dev/null +++ b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_icgraph.md5 @@ -0,0 +1 @@ +e9968cf1b31e35824e828f1a3f43b55a \ No newline at end of file diff --git a/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_icgraph.png b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_icgraph.png new file mode 100755 index 0000000..6661837 Binary files /dev/null and b/documentation/developer/html/d7/d62/group__p2p__imm_gd88773e68570adfad9f99159c69502af_icgraph.png differ diff --git a/documentation/developer/html/d7/d6a/moc__dma-iput__spu_8c-source.html b/documentation/developer/html/d7/d6a/moc__dma-iput__spu_8c-source.html new file mode 100755 index 0000000..9bdeb34 --- /dev/null +++ b/documentation/developer/html/d7/d6a/moc__dma-iput__spu_8c-source.html @@ -0,0 +1,56 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-iput_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/d6e/moc__wtime__spu_8c__incl.map b/documentation/developer/html/d7/d6e/moc__wtime__spu_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/d7/d6e/moc__wtime__spu_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/d7/d6e/moc__wtime__spu_8c__incl.md5 b/documentation/developer/html/d7/d6e/moc__wtime__spu_8c__incl.md5 new file mode 100755 index 0000000..18d9b33 --- /dev/null +++ b/documentation/developer/html/d7/d6e/moc__wtime__spu_8c__incl.md5 @@ -0,0 +1 @@ +46d3ea5da3768543c182abc8c4f09ed5 \ No newline at end of file diff --git a/documentation/developer/html/d7/d6e/moc__wtime__spu_8c__incl.png b/documentation/developer/html/d7/d6e/moc__wtime__spu_8c__incl.png new file mode 100755 index 0000000..aedb15f Binary files /dev/null and b/documentation/developer/html/d7/d6e/moc__wtime__spu_8c__incl.png differ diff --git a/documentation/developer/html/d7/d70/moc__wtick__ppu_8c__incl.map b/documentation/developer/html/d7/d70/moc__wtick__ppu_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/d7/d70/moc__wtick__ppu_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/d7/d70/moc__wtick__ppu_8c__incl.md5 b/documentation/developer/html/d7/d70/moc__wtick__ppu_8c__incl.md5 new file mode 100755 index 0000000..e698b9c --- /dev/null +++ b/documentation/developer/html/d7/d70/moc__wtick__ppu_8c__incl.md5 @@ -0,0 +1 @@ +294c35e7a76cae12499bdf0caa0acab5 \ No newline at end of file diff --git a/documentation/developer/html/d7/d70/moc__wtick__ppu_8c__incl.png b/documentation/developer/html/d7/d70/moc__wtick__ppu_8c__incl.png new file mode 100755 index 0000000..4501a56 Binary files /dev/null and b/documentation/developer/html/d7/d70/moc__wtick__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d7/d98/doxygen__internal__main_8doxygen-source.html b/documentation/developer/html/d7/d98/doxygen__internal__main_8doxygen-source.html new file mode 100755 index 0000000..865bb1a --- /dev/null +++ b/documentation/developer/html/d7/d98/doxygen__internal__main_8doxygen-source.html @@ -0,0 +1,240 @@ + + +MPI On Cell (Documentation): include/internal/doxygen_internal_main.doxygen Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/daf/imoc__dma-iget__spu_8c.html b/documentation/developer/html/d7/daf/imoc__dma-iget__spu_8c.html new file mode 100755 index 0000000..3a1da45 --- /dev/null +++ b/documentation/developer/html/d7/daf/imoc__dma-iget__spu_8c.html @@ -0,0 +1,51 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-iget_spu.c File Reference + + + + + +
+

src/spu/internal/dma/imoc_dma-iget_spu.c File Reference

+

+#include <spu_mfcio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <moc.h>
+#include <spu/moc_dma_spu.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+ +

+

+Include dependency graph for imoc_dma-iget_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_iget_data (void *target, uint64_t source, uint32_t size, imoc_dma_request *request)
 Internal wrapper-function for a non-blocking DMA-get operation.
+

+
Generated on Thu Feb 12 13:50:38 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/db6/imoc__core__spu_8h__incl.map b/documentation/developer/html/d7/db6/imoc__core__spu_8h__incl.map new file mode 100755 index 0000000..c7e17ee --- /dev/null +++ b/documentation/developer/html/d7/db6/imoc__core__spu_8h__incl.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d7/db6/imoc__core__spu_8h__incl.md5 b/documentation/developer/html/d7/db6/imoc__core__spu_8h__incl.md5 new file mode 100755 index 0000000..95ed214 --- /dev/null +++ b/documentation/developer/html/d7/db6/imoc__core__spu_8h__incl.md5 @@ -0,0 +1 @@ +09c0f837d2ee653c3131eabdf702c423 \ No newline at end of file diff --git a/documentation/developer/html/d7/db6/imoc__core__spu_8h__incl.png b/documentation/developer/html/d7/db6/imoc__core__spu_8h__incl.png new file mode 100755 index 0000000..558044d Binary files /dev/null and b/documentation/developer/html/d7/db6/imoc__core__spu_8h__incl.png differ diff --git a/documentation/developer/html/d7/dc3/structimoc__dma__request__struct__coll__graph.map b/documentation/developer/html/d7/dc3/structimoc__dma__request__struct__coll__graph.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/developer/html/d7/dc3/structimoc__dma__request__struct__coll__graph.md5 b/documentation/developer/html/d7/dc3/structimoc__dma__request__struct__coll__graph.md5 new file mode 100755 index 0000000..bdf4c3b --- /dev/null +++ b/documentation/developer/html/d7/dc3/structimoc__dma__request__struct__coll__graph.md5 @@ -0,0 +1 @@ +7b1f5e750fafab9b6c19fb6121647a65 \ No newline at end of file diff --git a/documentation/developer/html/d7/dc3/structimoc__dma__request__struct__coll__graph.png b/documentation/developer/html/d7/dc3/structimoc__dma__request__struct__coll__graph.png new file mode 100755 index 0000000..8a957e8 Binary files /dev/null and b/documentation/developer/html/d7/dc3/structimoc__dma__request__struct__coll__graph.png differ diff --git a/documentation/developer/html/d7/dc5/moc__dma-test__ppu_8c-source.html b/documentation/developer/html/d7/dc5/moc__dma-test__ppu_8c-source.html new file mode 100755 index 0000000..8962cee --- /dev/null +++ b/documentation/developer/html/d7/dc5/moc__dma-test__ppu_8c-source.html @@ -0,0 +1,36 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-test_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/dce/moc__dma-get__ppu_8c__incl.map b/documentation/developer/html/d7/dce/moc__dma-get__ppu_8c__incl.map new file mode 100755 index 0000000..44b5507 --- /dev/null +++ b/documentation/developer/html/d7/dce/moc__dma-get__ppu_8c__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/documentation/developer/html/d7/dce/moc__dma-get__ppu_8c__incl.md5 b/documentation/developer/html/d7/dce/moc__dma-get__ppu_8c__incl.md5 new file mode 100755 index 0000000..809d2a8 --- /dev/null +++ b/documentation/developer/html/d7/dce/moc__dma-get__ppu_8c__incl.md5 @@ -0,0 +1 @@ +04f5c65f48788c73d64d7514d0c00aeb \ No newline at end of file diff --git a/documentation/developer/html/d7/dce/moc__dma-get__ppu_8c__incl.png b/documentation/developer/html/d7/dce/moc__dma-get__ppu_8c__incl.png new file mode 100755 index 0000000..c32a01c Binary files /dev/null and b/documentation/developer/html/d7/dce/moc__dma-get__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d7/dd4/imoc__dma-iput__ppu_8c__incl.map b/documentation/developer/html/d7/dd4/imoc__dma-iput__ppu_8c__incl.map new file mode 100755 index 0000000..44b5507 --- /dev/null +++ b/documentation/developer/html/d7/dd4/imoc__dma-iput__ppu_8c__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/documentation/developer/html/d7/dd4/imoc__dma-iput__ppu_8c__incl.md5 b/documentation/developer/html/d7/dd4/imoc__dma-iput__ppu_8c__incl.md5 new file mode 100755 index 0000000..fc1cef3 --- /dev/null +++ b/documentation/developer/html/d7/dd4/imoc__dma-iput__ppu_8c__incl.md5 @@ -0,0 +1 @@ +75140f8ffc4121f64c6d09b2c5126cd4 \ No newline at end of file diff --git a/documentation/developer/html/d7/dd4/imoc__dma-iput__ppu_8c__incl.png b/documentation/developer/html/d7/dd4/imoc__dma-iput__ppu_8c__incl.png new file mode 100755 index 0000000..e0ef70d Binary files /dev/null and b/documentation/developer/html/d7/dd4/imoc__dma-iput__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d7/dda/moc__get__proc__name__spu_8c-source.html b/documentation/developer/html/d7/dda/moc__get__proc__name__spu_8c-source.html new file mode 100755 index 0000000..85c1171 --- /dev/null +++ b/documentation/developer/html/d7/dda/moc__get__proc__name__spu_8c-source.html @@ -0,0 +1,34 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_get_proc_name_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/de1/moc_8h-source.html b/documentation/developer/html/d7/de1/moc_8h-source.html new file mode 100755 index 0000000..1116251 --- /dev/null +++ b/documentation/developer/html/d7/de1/moc_8h-source.html @@ -0,0 +1,702 @@ + + +MPI On Cell (Documentation): include/moc.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d7/df2/imoc__dma-get__ppu_8c-source.html b/documentation/developer/html/d7/df2/imoc__dma-get__ppu_8c-source.html new file mode 100755 index 0000000..ba2753b --- /dev/null +++ b/documentation/developer/html/d7/df2/imoc__dma-get__ppu_8c-source.html @@ -0,0 +1,109 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-get_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d00/moc__dma-iget__ppu_8c__incl.map b/documentation/developer/html/d8/d00/moc__dma-iget__ppu_8c__incl.map new file mode 100755 index 0000000..d9b4d34 --- /dev/null +++ b/documentation/developer/html/d8/d00/moc__dma-iget__ppu_8c__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d8/d00/moc__dma-iget__ppu_8c__incl.md5 b/documentation/developer/html/d8/d00/moc__dma-iget__ppu_8c__incl.md5 new file mode 100755 index 0000000..2b324db --- /dev/null +++ b/documentation/developer/html/d8/d00/moc__dma-iget__ppu_8c__incl.md5 @@ -0,0 +1 @@ +1a91751e3b4daa21e9e7be15c37e54df \ No newline at end of file diff --git a/documentation/developer/html/d8/d00/moc__dma-iget__ppu_8c__incl.png b/documentation/developer/html/d8/d00/moc__dma-iget__ppu_8c__incl.png new file mode 100755 index 0000000..f98042c Binary files /dev/null and b/documentation/developer/html/d8/d00/moc__dma-iget__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d8/d02/moc__error__class_8c-source.html b/documentation/developer/html/d8/d02/moc__error__class_8c-source.html new file mode 100755 index 0000000..b6162d1 --- /dev/null +++ b/documentation/developer/html/d8/d02/moc__error__class_8c-source.html @@ -0,0 +1,41 @@ + + +MPI On Cell (Documentation): src/noarch/system/moc_error_class.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d02/moc__test_8c.html b/documentation/developer/html/d8/d02/moc__test_8c.html new file mode 100755 index 0000000..8dcdae1 --- /dev/null +++ b/documentation/developer/html/d8/d02/moc__test_8c.html @@ -0,0 +1,49 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_test.c File Reference + + + + + +
+

src/noarch/communication/moc_test.c File Reference

+

+#include <stdint.h>
+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+ +

+

+Include dependency graph for moc_test.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Test (MOC_Request *request, int *flag, MOC_Status *status)
 Tests, if a non-blocking communication has been completed.
+

+
Generated on Thu Feb 12 13:50:09 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d06/moc__dma-iput__ppu_8c.html b/documentation/developer/html/d8/d06/moc__dma-iput__ppu_8c.html new file mode 100755 index 0000000..751728f --- /dev/null +++ b/documentation/developer/html/d8/d06/moc__dma-iput__ppu_8c.html @@ -0,0 +1,52 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-iput_ppu.c File Reference + + + + + +
+

src/ppu/dma/moc_dma-iput_ppu.c File Reference

+

+#include <string.h>
+#include <stdlib.h>
+#include <moc.h>
+#include <ppu/moc_dma_ppu.h>
+#include <internal/imoc.h>
+#include <internal/imoc_macros.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_dma-iput_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_IPut_data (void *source, uint32_t target, int count, MOC_Datatype datatype, int src, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-put operation.
+

+
Generated on Thu Feb 12 13:50:20 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d15/moc__dma-test__spu_8c.html b/documentation/developer/html/d8/d15/moc__dma-test__spu_8c.html new file mode 100755 index 0000000..576643f --- /dev/null +++ b/documentation/developer/html/d8/d15/moc__dma-test__spu_8c.html @@ -0,0 +1,47 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-test_spu.c File Reference + + + + + +
+

src/spu/dma/moc_dma-test_spu.c File Reference

+

+#include <moc.h>
+#include <internal/spu/imoc_dma_spu.h>
+#include <spu/moc_dma_spu.h>
+ +

+

+Include dependency graph for moc_dma-test_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Test_data (MOC_Request *request, int *flag)
 Tests if a MOC_IGet_data or IMOC_IPut_data is completed.
+

+
Generated on Thu Feb 12 13:50:36 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d2f/moc__finalize__spu_8c.html b/documentation/developer/html/d8/d2f/moc__finalize__spu_8c.html new file mode 100755 index 0000000..93f9445 --- /dev/null +++ b/documentation/developer/html/d8/d2f/moc__finalize__spu_8c.html @@ -0,0 +1,51 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_finalize_spu.c File Reference + + + + + +
+

src/spu/system/moc_finalize_spu.c File Reference

+

+#include <stdlib.h>
+#include <free_align.h>
+#include <stdio.h>
+#include <spu_mfcio.h>
+#include <internal/spu/imoc_core_spu.h>
+#include <internal/imoc.h>
+#include <spu/moc.h>
+ +

+

+Include dependency graph for moc_finalize_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Finalize (void)
 Terminates MPI execution environment.
+

+
Generated on Thu Feb 12 13:50:41 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d30/imoc__dma-iput__spu_8c.html b/documentation/developer/html/d8/d30/imoc__dma-iput__spu_8c.html new file mode 100755 index 0000000..709f1d5 --- /dev/null +++ b/documentation/developer/html/d8/d30/imoc__dma-iput__spu_8c.html @@ -0,0 +1,51 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-iput_spu.c File Reference + + + + + +
+

src/spu/internal/dma/imoc_dma-iput_spu.c File Reference

+

+#include <spu_mfcio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <moc.h>
+#include <spu/moc_dma_spu.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+ +

+

+Include dependency graph for imoc_dma-iput_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_iput_data (void *source, uint64_t target, uint32_t size, imoc_dma_request *request)
 Internal wrapper-function for a blocking DMA-put operation.
+

+
Generated on Thu Feb 12 13:50:38 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d32/imoc__dma__ppu_8h__dep__incl.map b/documentation/developer/html/d8/d32/imoc__dma__ppu_8h__dep__incl.map new file mode 100755 index 0000000..4bd56e7 --- /dev/null +++ b/documentation/developer/html/d8/d32/imoc__dma__ppu_8h__dep__incl.map @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d8/d32/imoc__dma__ppu_8h__dep__incl.md5 b/documentation/developer/html/d8/d32/imoc__dma__ppu_8h__dep__incl.md5 new file mode 100755 index 0000000..710c1ce --- /dev/null +++ b/documentation/developer/html/d8/d32/imoc__dma__ppu_8h__dep__incl.md5 @@ -0,0 +1 @@ +98e96232ee8f2b169051b8642010da66 \ No newline at end of file diff --git a/documentation/developer/html/d8/d32/imoc__dma__ppu_8h__dep__incl.png b/documentation/developer/html/d8/d32/imoc__dma__ppu_8h__dep__incl.png new file mode 100755 index 0000000..0e9d2e5 Binary files /dev/null and b/documentation/developer/html/d8/d32/imoc__dma__ppu_8h__dep__incl.png differ diff --git a/documentation/developer/html/d8/d3b/moc__wtick__ppu_8c-source.html b/documentation/developer/html/d8/d3b/moc__wtick__ppu_8c-source.html new file mode 100755 index 0000000..186d882 --- /dev/null +++ b/documentation/developer/html/d8/d3b/moc__wtick__ppu_8c-source.html @@ -0,0 +1,32 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_wtick_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d65/moc__comm__size_8c-source.html b/documentation/developer/html/d8/d65/moc__comm__size_8c-source.html new file mode 100755 index 0000000..a167e2c --- /dev/null +++ b/documentation/developer/html/d8/d65/moc__comm__size_8c-source.html @@ -0,0 +1,48 @@ + + +MPI On Cell (Documentation): src/noarch/system/moc_comm_size.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d65/moc__get__avail__spu__ppu_8c.html b/documentation/developer/html/d8/d65/moc__get__avail__spu__ppu_8c.html new file mode 100755 index 0000000..1fa6e72 --- /dev/null +++ b/documentation/developer/html/d8/d65/moc__get__avail__spu__ppu_8c.html @@ -0,0 +1,46 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_get_avail_spu_ppu.c File Reference + + + + + +
+

src/ppu/system/moc_get_avail_spu_ppu.c File Reference

+

+#include <moc.h>
+#include <libspe2.h>
+ +

+

+Include dependency graph for moc_get_avail_spu_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Get_avail_spu_count (int *count)
 Returns the number of available SPUs.
+

+
Generated on Thu Feb 12 13:50:28 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d7a/moc__recv__ppu_8c__incl.map b/documentation/developer/html/d8/d7a/moc__recv__ppu_8c__incl.map new file mode 100755 index 0000000..12380ed --- /dev/null +++ b/documentation/developer/html/d8/d7a/moc__recv__ppu_8c__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d8/d7a/moc__recv__ppu_8c__incl.md5 b/documentation/developer/html/d8/d7a/moc__recv__ppu_8c__incl.md5 new file mode 100755 index 0000000..b43dab9 --- /dev/null +++ b/documentation/developer/html/d8/d7a/moc__recv__ppu_8c__incl.md5 @@ -0,0 +1 @@ +aeaf46284877bf181b722bce7b50e006 \ No newline at end of file diff --git a/documentation/developer/html/d8/d7a/moc__recv__ppu_8c__incl.png b/documentation/developer/html/d8/d7a/moc__recv__ppu_8c__incl.png new file mode 100755 index 0000000..4e678cd Binary files /dev/null and b/documentation/developer/html/d8/d7a/moc__recv__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d8/d84/imoc__macros_8h__dep__incl.map b/documentation/developer/html/d8/d84/imoc__macros_8h__dep__incl.map new file mode 100755 index 0000000..1978d08 --- /dev/null +++ b/documentation/developer/html/d8/d84/imoc__macros_8h__dep__incl.map @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d8/d84/imoc__macros_8h__dep__incl.md5 b/documentation/developer/html/d8/d84/imoc__macros_8h__dep__incl.md5 new file mode 100755 index 0000000..ac35c32 --- /dev/null +++ b/documentation/developer/html/d8/d84/imoc__macros_8h__dep__incl.md5 @@ -0,0 +1 @@ +c1d9082aad6241034d1ff55107b46781 \ No newline at end of file diff --git a/documentation/developer/html/d8/d84/imoc__macros_8h__dep__incl.png b/documentation/developer/html/d8/d84/imoc__macros_8h__dep__incl.png new file mode 100755 index 0000000..52e17df Binary files /dev/null and b/documentation/developer/html/d8/d84/imoc__macros_8h__dep__incl.png differ diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main.html b/documentation/developer/html/d8/d88/group__internal__p2p__main.html new file mode 100755 index 0000000..49fb514 --- /dev/null +++ b/documentation/developer/html/d8/d88/group__internal__p2p__main.html @@ -0,0 +1,425 @@ + + +MPI On Cell (Documentation): Point-to-Point Communication + + + + + +
+

Point-to-Point Communication
+ +[Developer Documentation] +

+

+

+Collaboration diagram for Point-to-Point Communication:
+
+
+ +
+
+

Detailed Description

+Internals about Point-to-Point Communication. +

+ +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + +

Modules

 DMA-Helper Functions
 Functions wrapping DMA-Transfers.
 Blocking Communication
 Internals about blocking Point-to-Point Communication.
 Non-Blocking Communication
 Internals about non-blocking communication.

Internal shared functions

moc_message_envelope_t * IMOC_get_entry (int source, int tag, MOC_Comm comm, int isSpecial, MOC_Status *status)
 Get the next valid message-envelope from "source" with specified "tag" and "comm".
int IMOC_getFreeEntry (moc_message_envelope_t *pqueue, uint8_t tag, MOC_Comm comm, int isSpecial, int *index)
 Get next free entry in message-queue (a local copy of the message-queue has to be used).
int IMOC_getFreeMID (int *mid)
 Get free message-ID.
int IMOC_waitForMessageCompletion (uint8_t mid)
 Wait till message with message-ID mid has been received.
int IMOC_testForMessageCompletion (uint8_t mid, uint8_t *status)
 Tests if message with message-ID mid has been received.

Internal constants

#define MEMCPY_GET_TRESHOLD   156
 Defines a treshold, when to use memcpy and when to use DMA in a get-operation on the PPU.
#define MEMCPY_PUT_TRESHOLD   2210
 Defines a treshold, when to use memcpy and when to use DMA in a put-operation on the PPU.
+


Define Documentation

+ +
+
+ + + + +
#define MEMCPY_GET_TRESHOLD   156
+
+
+ +

+Defines a treshold, when to use memcpy and when to use DMA in a get-operation on the PPU. +

+ +

Definition at line 49 of file imoc.h.

+ +

Referenced by MOC_Barrier(), MOC_Bsend(), MOC_ISsend(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + +
#define MEMCPY_PUT_TRESHOLD   2210
+
+
+ +

+Defines a treshold, when to use memcpy and when to use DMA in a put-operation on the PPU. +

+ +

Definition at line 55 of file imoc.h.

+ +
+

+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
moc_message_envelope_t* IMOC_get_entry (int  source,
int  tag,
MOC_Comm  comm,
int  isSpecial,
MOC_Status *  status 
)
+
+
+ +

+Get the next valid message-envelope from "source" with specified "tag" and "comm". +

+

Parameters:
+ + + + + + +
source in rank of sending node
tag in message-tag
comm in message-communicator
isSpecial in true to return special-message
status inout MOC_status-instance to add some information (e.g. source by MOC_ANY_SOURCE)
+
+
Returns:
pointer to the appropriate message-queue-entry.
+ +

Definition at line 13 of file imoc_get_entry.c.

+ +

References moc_message_envelope_struct::bits, moc_node_handle_ppu_struct::comm_size, moc_message_envelope_struct::communicator, moc_message_envelope_struct::flags, IMOC_LOCAL_QUEUE, moc_node_handle_ppu_struct::message_queue_base, MOC_ANY_SOURCE, MOC_ANY_TAG, MOC_Status_struct::MOC_SOURCE, node_handle, moc_node_handle_ppu_struct::queue_size, moc_node_handle_ppu_struct::rank, and moc_message_envelope_struct::tag.

+ +

Referenced by MOC_Barrier(), MOC_Iprobe(), MOC_Probe(), and MOC_Recv().

+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int IMOC_getFreeEntry (moc_message_envelope_t *  pqueue,
uint8_t  tag,
MOC_Comm  comm,
int  isSpecial,
int *  index 
)
+
+
+ +

+Get next free entry in message-queue (a local copy of the message-queue has to be used). +

+To ensure correct ordering message-tag and -comm and -type has to be specified.

+

Parameters:
+ + + + + + +
pqueue in pointer to local copy of remote message-queue
tag in message-tag
comm in message-communicator
isSpecial in true if message should be a special message
index out index of free entry
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 9 of file imoc_get_free_entry.c.

+ +

References moc_message_envelope_struct::bits, MOC_ERR_MESSAGE_EXHAUSTED, node_handle, and moc_node_handle_ppu_struct::queue_size.

+ +

Referenced by MOC_Barrier(), MOC_Bsend(), MOC_ISsend(), and MOC_Ssend().

+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + +
int IMOC_getFreeMID (int *  mid  ) 
+
+
+ +

+Get free message-ID. +

+

Note:
Message-ID is index of message-status-array
+
Parameters:
+ + +
mid out free message-ID
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_MESSAGE_EXHAUSTED No further messages possible.
+
+ +

Definition at line 9 of file imoc_get_free_mid.c.

+ +

References moc_message_status_struct::bits, moc_node_handle_ppu_struct::comm_size, moc_message_status_struct::flags, MOC_ERR_MESSAGE_EXHAUSTED, node_handle, moc_node_handle_ppu_struct::queue_size, and moc_node_handle_ppu_struct::status_array_base.

+ +

Referenced by MOC_Bsend(), MOC_ISsend(), and MOC_Ssend().

+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int IMOC_testForMessageCompletion (uint8_t  mid,
uint8_t *  status 
)
+
+
+ +

+Tests if message with message-ID mid has been received. +

+Tests if message-status-flag 'outstanding' is 0.

+

Parameters:
+ + + +
mid in message-ID
status out status of message
+
+
Return values:
+ + +
MOC_SUCCESS No error; MPI routine completed successfully.
+
+ +

Definition at line 9 of file imoc_test_message.c.

+ +

References moc_message_status_struct::bits, moc_message_status_struct::flags, node_handle, and moc_node_handle_ppu_struct::status_array_base.

+ +

Referenced by MOC_Test().

+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + +
int IMOC_waitForMessageCompletion (uint8_t  mid  ) 
+
+
+ +

+Wait till message with message-ID mid has been received. +

+Waits till message-status-flag 'outstanding' is 0.

+

Parameters:
+ + +
mid in message-ID
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 9 of file imoc_wait_message.c.

+ +

References moc_message_status_struct::bits, moc_message_status_struct::flags, node_handle, and moc_node_handle_ppu_struct::status_array_base.

+ +

Referenced by MOC_Ssend(), and MOC_Wait().

+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+

+
Generated on Thu Feb 12 13:51:09 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main.png b/documentation/developer/html/d8/d88/group__internal__p2p__main.png new file mode 100755 index 0000000..87c7ead Binary files /dev/null and b/documentation/developer/html/d8/d88/group__internal__p2p__main.png differ diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g2a948cdecce651ae6cc1b0c0ddb1b750_icgraph.map b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2a948cdecce651ae6cc1b0c0ddb1b750_icgraph.map new file mode 100755 index 0000000..09b9cf3 --- /dev/null +++ b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2a948cdecce651ae6cc1b0c0ddb1b750_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g2a948cdecce651ae6cc1b0c0ddb1b750_icgraph.md5 b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2a948cdecce651ae6cc1b0c0ddb1b750_icgraph.md5 new file mode 100755 index 0000000..b58cb19 --- /dev/null +++ b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2a948cdecce651ae6cc1b0c0ddb1b750_icgraph.md5 @@ -0,0 +1 @@ +037aaa621f76c7a1bcf3888d2e1201c6 \ No newline at end of file diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g2a948cdecce651ae6cc1b0c0ddb1b750_icgraph.png b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2a948cdecce651ae6cc1b0c0ddb1b750_icgraph.png new file mode 100755 index 0000000..37d3f60 Binary files /dev/null and b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2a948cdecce651ae6cc1b0c0ddb1b750_icgraph.png differ diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g2e74930cd8e161a131b90f2f1081037a_icgraph.map b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2e74930cd8e161a131b90f2f1081037a_icgraph.map new file mode 100755 index 0000000..91c8af7 --- /dev/null +++ b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2e74930cd8e161a131b90f2f1081037a_icgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g2e74930cd8e161a131b90f2f1081037a_icgraph.md5 b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2e74930cd8e161a131b90f2f1081037a_icgraph.md5 new file mode 100755 index 0000000..9072a19 --- /dev/null +++ b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2e74930cd8e161a131b90f2f1081037a_icgraph.md5 @@ -0,0 +1 @@ +caa376f6469dd3058cf931a47696eefb \ No newline at end of file diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g2e74930cd8e161a131b90f2f1081037a_icgraph.png b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2e74930cd8e161a131b90f2f1081037a_icgraph.png new file mode 100755 index 0000000..6336e2f Binary files /dev/null and b/documentation/developer/html/d8/d88/group__internal__p2p__main_g2e74930cd8e161a131b90f2f1081037a_icgraph.png differ diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g409bdbea503611cf04829413d15830df_icgraph.map b/documentation/developer/html/d8/d88/group__internal__p2p__main_g409bdbea503611cf04829413d15830df_icgraph.map new file mode 100755 index 0000000..4c3a3a5 --- /dev/null +++ b/documentation/developer/html/d8/d88/group__internal__p2p__main_g409bdbea503611cf04829413d15830df_icgraph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g409bdbea503611cf04829413d15830df_icgraph.md5 b/documentation/developer/html/d8/d88/group__internal__p2p__main_g409bdbea503611cf04829413d15830df_icgraph.md5 new file mode 100755 index 0000000..f8c5777 --- /dev/null +++ b/documentation/developer/html/d8/d88/group__internal__p2p__main_g409bdbea503611cf04829413d15830df_icgraph.md5 @@ -0,0 +1 @@ +c00f1e16996577169cebb9bdb642792a \ No newline at end of file diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g409bdbea503611cf04829413d15830df_icgraph.png b/documentation/developer/html/d8/d88/group__internal__p2p__main_g409bdbea503611cf04829413d15830df_icgraph.png new file mode 100755 index 0000000..2e6d6b3 Binary files /dev/null and b/documentation/developer/html/d8/d88/group__internal__p2p__main_g409bdbea503611cf04829413d15830df_icgraph.png differ diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g8675f9552168f2dd8926cad5ac00be69_icgraph.map b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8675f9552168f2dd8926cad5ac00be69_icgraph.map new file mode 100755 index 0000000..04121a9 --- /dev/null +++ b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8675f9552168f2dd8926cad5ac00be69_icgraph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g8675f9552168f2dd8926cad5ac00be69_icgraph.md5 b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8675f9552168f2dd8926cad5ac00be69_icgraph.md5 new file mode 100755 index 0000000..b09a37d --- /dev/null +++ b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8675f9552168f2dd8926cad5ac00be69_icgraph.md5 @@ -0,0 +1 @@ +59740295441f1f4ee5f159b200048773 \ No newline at end of file diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g8675f9552168f2dd8926cad5ac00be69_icgraph.png b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8675f9552168f2dd8926cad5ac00be69_icgraph.png new file mode 100755 index 0000000..c97099f Binary files /dev/null and b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8675f9552168f2dd8926cad5ac00be69_icgraph.png differ diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g8980da77fa506e9a6d503c8c6eba68e2_icgraph.map b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8980da77fa506e9a6d503c8c6eba68e2_icgraph.map new file mode 100755 index 0000000..d0b50fd --- /dev/null +++ b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8980da77fa506e9a6d503c8c6eba68e2_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g8980da77fa506e9a6d503c8c6eba68e2_icgraph.md5 b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8980da77fa506e9a6d503c8c6eba68e2_icgraph.md5 new file mode 100755 index 0000000..4c4d02a --- /dev/null +++ b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8980da77fa506e9a6d503c8c6eba68e2_icgraph.md5 @@ -0,0 +1 @@ +870033bf32aebbe76cafeee73779ab5c \ No newline at end of file diff --git a/documentation/developer/html/d8/d88/group__internal__p2p__main_g8980da77fa506e9a6d503c8c6eba68e2_icgraph.png b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8980da77fa506e9a6d503c8c6eba68e2_icgraph.png new file mode 100755 index 0000000..ddfeebf Binary files /dev/null and b/documentation/developer/html/d8/d88/group__internal__p2p__main_g8980da77fa506e9a6d503c8c6eba68e2_icgraph.png differ diff --git a/documentation/developer/html/d8/d8d/moc__isend_8c__incl.map b/documentation/developer/html/d8/d8d/moc__isend_8c__incl.map new file mode 100755 index 0000000..76657e9 --- /dev/null +++ b/documentation/developer/html/d8/d8d/moc__isend_8c__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d8/d8d/moc__isend_8c__incl.md5 b/documentation/developer/html/d8/d8d/moc__isend_8c__incl.md5 new file mode 100755 index 0000000..b68e56b --- /dev/null +++ b/documentation/developer/html/d8/d8d/moc__isend_8c__incl.md5 @@ -0,0 +1 @@ +1affa7a7abd98e8b29f52e5bf698b759 \ No newline at end of file diff --git a/documentation/developer/html/d8/d8d/moc__isend_8c__incl.png b/documentation/developer/html/d8/d8d/moc__isend_8c__incl.png new file mode 100755 index 0000000..c81e549 Binary files /dev/null and b/documentation/developer/html/d8/d8d/moc__isend_8c__incl.png differ diff --git a/documentation/developer/html/d8/d8f/group__environment__information.html b/documentation/developer/html/d8/d8f/group__environment__information.html new file mode 100755 index 0000000..d0e270e --- /dev/null +++ b/documentation/developer/html/d8/d8f/group__environment__information.html @@ -0,0 +1,216 @@ + + +MPI On Cell (Documentation): Implementation Information + + + + + +
+

Implementation Information
+ +[Environmental Management] +

+

+

+Collaboration diagram for Implementation Information:
+
+
+ +
+
+

Detailed Description

+Functions to return some information about the execution environment and the MOC-implementation. +

+ +

+ + + + + + + + + + + + + + + + + + + +

Defines

#define MOC_VERSION   0
 Major version-number of this MOC-Implementation.
#define MOC_SUBVERSION   9
 Minor version-number of this MOC-Implementation.
#define MOC_MAX_PROCESSOR_NAME   4
 The maximum length of the string returned by MOC_Get_processor_name.

Functions

int MOC_Get_processor_name (char *name, int *resultlen)
 Gets the name of the processor.
int MOC_Get_version (int *version, int *subversion)
 Returns the major and minor version of this MOC-implementation.
+


Define Documentation

+ +
+
+ + + + +
#define MOC_MAX_PROCESSOR_NAME   4
+
+
+ +

+The maximum length of the string returned by MOC_Get_processor_name. +

+ +

Definition at line 153 of file moc.h.

+ +
+

+ +

+
+ + + + +
#define MOC_SUBVERSION   9
+
+
+ +

+Minor version-number of this MOC-Implementation. +

+ +

Definition at line 148 of file moc.h.

+ +

Referenced by MOC_Get_version().

+ +
+

+ +

+
+ + + + +
#define MOC_VERSION   0
+
+
+ +

+Major version-number of this MOC-Implementation. +

+ +

Definition at line 143 of file moc.h.

+ +

Referenced by MOC_Get_version().

+ +
+

+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int MOC_Get_processor_name (char *  name,
int *  resultlen 
)
+
+
+ +

+Gets the name of the processor. +

+

Note:
This function returns "SPU" if the calling process is running on a SPU otherwise it's running on the "PPU".
+
Parameters:
+ + + +
name out Specifies the processor-type the calling process is runnning on
resultlen out Length (in characters) of the name
+
+
Return values:
+ + +
MOC_SUCCESS No error; MPI routine completed successfully.
+
+ +

Definition at line 3 of file moc_get_proc_name_ppu.c.

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Get_version (int *  version,
int *  subversion 
)
+
+
+ +

+Returns the major and minor version of this MOC-implementation. +

+

Note:
Can be called before MOC_Init and after MOC_Finalize.
+
Parameters:
+ + + +
version out Major version of this MOC-implementation
subversion out Minor version of this MOC-implementation
+
+
Return values:
+ + +
MOC_SUCCESS Function returned successfully
+
+ +

Definition at line 3 of file moc_get_version.c.

+ +

References MOC_ERR_ARG, MOC_SUBVERSION, and MOC_VERSION.

+ +
+

+

+
Generated on Thu Feb 12 13:50:44 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d8f/group__environment__information.png b/documentation/developer/html/d8/d8f/group__environment__information.png new file mode 100755 index 0000000..7f2f4af Binary files /dev/null and b/documentation/developer/html/d8/d8f/group__environment__information.png differ diff --git a/documentation/developer/html/d8/d91/moc__dma-get__spu_8c.html b/documentation/developer/html/d8/d91/moc__dma-get__spu_8c.html new file mode 100755 index 0000000..94486ec --- /dev/null +++ b/documentation/developer/html/d8/d91/moc__dma-get__spu_8c.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-get_spu.c File Reference + + + + + +
+

src/spu/dma/moc_dma-get_spu.c File Reference

+

+#include <spu_mfcio.h>
+#include <string.h>
+#include <moc.h>
+#include <spu/moc_dma_spu.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+ +

+

+Include dependency graph for moc_dma-get_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Get_data (void *target, uint64_t source, int count, MOC_Datatype datatype)
 Wrapper-function for a blocking DMA-get operation.
+

+
Generated on Thu Feb 12 13:50:34 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d92/moc__comm__size_8c__incl.map b/documentation/developer/html/d8/d92/moc__comm__size_8c__incl.map new file mode 100755 index 0000000..511b41f --- /dev/null +++ b/documentation/developer/html/d8/d92/moc__comm__size_8c__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/documentation/developer/html/d8/d92/moc__comm__size_8c__incl.md5 b/documentation/developer/html/d8/d92/moc__comm__size_8c__incl.md5 new file mode 100755 index 0000000..e214cdd --- /dev/null +++ b/documentation/developer/html/d8/d92/moc__comm__size_8c__incl.md5 @@ -0,0 +1 @@ +62fdb38fe7e1dc6fffb7aaf6ee8ca586 \ No newline at end of file diff --git a/documentation/developer/html/d8/d92/moc__comm__size_8c__incl.png b/documentation/developer/html/d8/d92/moc__comm__size_8c__incl.png new file mode 100755 index 0000000..f178253 Binary files /dev/null and b/documentation/developer/html/d8/d92/moc__comm__size_8c__incl.png differ diff --git a/documentation/developer/html/d8/d93/moc__dma-wait__ppu_8c__incl.map b/documentation/developer/html/d8/d93/moc__dma-wait__ppu_8c__incl.map new file mode 100755 index 0000000..86d59b5 --- /dev/null +++ b/documentation/developer/html/d8/d93/moc__dma-wait__ppu_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/d8/d93/moc__dma-wait__ppu_8c__incl.md5 b/documentation/developer/html/d8/d93/moc__dma-wait__ppu_8c__incl.md5 new file mode 100755 index 0000000..d845bb3 --- /dev/null +++ b/documentation/developer/html/d8/d93/moc__dma-wait__ppu_8c__incl.md5 @@ -0,0 +1 @@ +89c0453f82df8de6d3b763842c9b42e1 \ No newline at end of file diff --git a/documentation/developer/html/d8/d93/moc__dma-wait__ppu_8c__incl.png b/documentation/developer/html/d8/d93/moc__dma-wait__ppu_8c__incl.png new file mode 100755 index 0000000..4c2b813 Binary files /dev/null and b/documentation/developer/html/d8/d93/moc__dma-wait__ppu_8c__incl.png differ diff --git a/documentation/developer/html/d8/d93/structmoc__node__handle__ppu__struct.html b/documentation/developer/html/d8/d93/structmoc__node__handle__ppu__struct.html new file mode 100755 index 0000000..679757a --- /dev/null +++ b/documentation/developer/html/d8/d93/structmoc__node__handle__ppu__struct.html @@ -0,0 +1,271 @@ + + +MPI On Cell (Documentation): moc_node_handle_ppu_struct Struct Reference + + + + + +
+

moc_node_handle_ppu_struct Struct Reference
+ +[Implementation-Core] +

#include <imoc_core_ppu.h> +

+

+Collaboration diagram for moc_node_handle_ppu_struct:
+
+

Collaboration graph
+ + +
[legend]
+

Detailed Description

+Node-handle structure. +

+

Note:
PPU only
+Information each node knowns about himself and the world. +

Definition at line 30 of file imoc_core_ppu.h.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

uint8_t rank
 rank of node
uint8_t comm_size
 number of overall processes
uint8_t queue_size
 Size of a message-queue.
volatile moc_message_envelope_t * message_queue_base
 base-address of own message-queues
volatile moc_message_status_t * status_array_base
 base-address of own message-status-array
void * buffer_base
 base-address of own buffer
uint32_t buffer_size
 size of own buffer
volatile uint32_t * signal_area
 address of own signal-area
volatile moc_process_t * moc_process_list
 list of all other MOC-processes (index is rank of process)
+

Field Documentation

+ +
+ +
+ +

+rank of node +

+ +

Definition at line 32 of file imoc_core_ppu.h.

+ +

Referenced by IMOC_get_entry(), MOC_Barrier(), MOC_Bcast(), MOC_Comm_rank(), MOC_Finalize(), MOC_Init(), MOC_ISend(), MOC_ISsend(), and MOC_Wait().

+ +
+

+ +

+ +
+ +

+number of overall processes +

+ +

Definition at line 33 of file imoc_core_ppu.h.

+ +

Referenced by IMOC_get_entry(), IMOC_getFreeMID(), MOC_Barrier(), MOC_Comm_size(), and MOC_Init().

+ +
+

+ +

+ +
+ +

+Size of a message-queue. +

+ +

Definition at line 34 of file imoc_core_ppu.h.

+ +

Referenced by IMOC_get_entry(), IMOC_getFreeEntry(), IMOC_getFreeMID(), MOC_Barrier(), MOC_Bsend(), MOC_Init(), MOC_ISsend(), and MOC_Ssend().

+ +
+

+ +

+ +
+ +

+base-address of own message-queues +

+ +

Definition at line 35 of file imoc_core_ppu.h.

+ +

Referenced by IMOC_get_entry(), MOC_Finalize(), and MOC_Init().

+ +
+

+ +

+ +

+ +
+ +

+base-address of own buffer +

+ +

Definition at line 37 of file imoc_core_ppu.h.

+ +

Referenced by IMOC_bmalloc(), MOC_Finalize(), and MOC_Init().

+ +
+

+ +

+ +
+ +

+size of own buffer +

+ +

Definition at line 38 of file imoc_core_ppu.h.

+ +

Referenced by IMOC_bmalloc(), and MOC_Init().

+ +
+

+ +

+
+ + + + +
volatile uint32_t* moc_node_handle_ppu_struct::signal_area
+
+
+ +

+address of own signal-area +

+ +

Definition at line 39 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Finalize(), and MOC_Init().

+ +
+

+ +

+ +
+ +

+list of all other MOC-processes (index is rank of process) +

+ +

Definition at line 40 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Finalize(), and MOC_Init().

+ +
+

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:20 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d98/imoc__macros__ppu_8h.html b/documentation/developer/html/d8/d98/imoc__macros__ppu_8h.html new file mode 100755 index 0000000..d544ddf --- /dev/null +++ b/documentation/developer/html/d8/d98/imoc__macros__ppu_8h.html @@ -0,0 +1,61 @@ + + +MPI On Cell (Documentation): include/internal/ppu/imoc_macros_ppu.h File Reference + + + + + +
+

include/internal/ppu/imoc_macros_ppu.h File Reference

+

+#include "../imoc_macros.h"
+ +

+

+Include dependency graph for imoc_macros_ppu.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + +

Defines

PPU-only
#define IMOC_LS_REMOTE_QUEUE(proc)   ( (proc > node_handle.rank) ? moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank : moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1) )
 LS-Address of own remote queue at node 'rank'.
#define IMOC_LS_REMOTE_QUEUE_ENTRY(proc, index)   ( (proc > node_handle.rank) ? moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank+sizeof(moc_message_envelope_t)*(index) : moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1)+sizeof(moc_message_envelope_t)*(index) )
 LS-Address of own remote queue-entry at node 'rank'.
#define IMOC_LS_REMOTE_STATUS_ENTRY(id, rank)   ( moc_spu_thread_list[rank-moc_ppu_thread_count].status_base_in_ls+sizeof(moc_message_status_t)*(id) )
 Effective Address of remote status-array entry at node 'rank'.
+

+
Generated on Thu Feb 12 13:49:53 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d9a/group__environment__startup.html b/documentation/developer/html/d8/d9a/group__environment__startup.html new file mode 100755 index 0000000..e3f3b59 --- /dev/null +++ b/documentation/developer/html/d8/d9a/group__environment__startup.html @@ -0,0 +1,406 @@ + + +MPI On Cell (Documentation): Startup & Shutdown + + + + + +
+

Startup & Shutdown
+ +[Environmental Management] +

+

+

+Collaboration diagram for Startup & Shutdown:
+
+
+ +
+
+

Detailed Description

+Functions to start and terminate the MOC-execution environment. +

+To be able to communicate with other processes every MOC-process needs to setup his MOC-Environment before any MOC-function can be called (there are some exceptions though).

+The PPU-process has a special role, because he is the one who starts the SPU-processes. SPU-processes can be added to the MOC-environment by calling MOC_Add_spu_thread with the appropriate SPU-thread-handle (This implementation only supports the embedded binary concept where the SPU-binary is embedded into the PPU-binary and accessed via a handle). The order of calling determines the rank of the SPU-processes. To get the number of total and available SPUs the functions MOC_Get_avail_spu_count and MOC_Get_max_spu_count can be used.

+The buffer-size and the size of the message-queues can be set before calling MOC_Init on the PPU using MOC_Set_buffer_size and MOC_Set_queue_size.

+MOC_Init only returns after all processes have called this function and have set up their environment.

+If the MOC-environment isn't needed anymore, MOC_Finalize should be called by all MOC-processes. MOC_Finalize only returns after all MOC-processes have called this functions and have shutdown their environments. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

PPU & SPU

int MOC_Finalize (void)
 Terminates MPI execution environment.

PPU-only

int MOC_Get_avail_spu_count (int *count)
 Returns the number of available SPUs.
int MOC_Get_max_spu_count (int *count)
 Returns the number of SPUs.
int MOC_Add_spu_thread (spe_program_handle_t *phandle, void *argp)
 Adds a SPU-Thread.
int MOC_Set_buffer_size (uint32_t size)
 Sets the size of the buffer used for buffered communication.
int MOC_Set_queue_size (uint8_t size)
 Sets the size of the message-queues.
int MOC_Init (int *argc, char ***argv)
 Initialize the MPI execution environment.

SPU-only

int MOC_Init (unsigned long long argp, int length, void *buffer)
 Initialize the MPI execution environment.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int MOC_Add_spu_thread (spe_program_handle_t *  phandle,
void *  argp 
)
+
+
+ +

+Adds a SPU-Thread. +

+

Attention:
PPU-only
+
Note:
Must be called before calling MOC_Init

+The order of executions defines the order of the ranks of the SPU-Threads

+
Parameters:
+ + + +
phandle in Handle of the SPE-Program
argp in Pointer to some user-defined information in the main-memory
+
+
Return values:
+ + + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_BUFFER_OVERFLOW A Buffer-Overflow occured. Mosst likely you tried to add more SPU-threads than defined by MOC_SPU_THREAD_MAX.
MOC_ERR_INTERN Internal Error
+
+ +

Definition at line 11 of file moc_add_spu_thread_ppu.c.

+ +

References moc_spu_thread_struct::argp, MOC_ERR_BUFFER_OVERFLOW, MOC_ERR_INTERN, moc_spu_thread_count, moc_spu_thread_list, MOC_SPU_THREAD_MAX, and moc_spu_thread_struct::spe_entry_adress.

+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Finalize (void   ) 
+
+
+ +

+Terminates MPI execution environment. +

+

Note:
All processes must call this routine before exiting.
+
Return values:
+ + +
MOC_SUCCESS No error; MPI routine completed successfully.
+
+ +

Definition at line 11 of file moc_finalize_ppu.c.

+ +

References bmalloc_first_node, moc_node_handle_ppu_struct::buffer_base, moc_node_handle_ppu_struct::message_queue_base, MOC_ERR_INTERN, moc_node_handle_ppu_struct::moc_process_list, moc_spu_thread_count, moc_spu_thread_list, moc_internal_buffer_node_struct::next_node, node_handle, moc_node_handle_ppu_struct::rank, moc_node_handle_ppu_struct::signal_area, and moc_node_handle_ppu_struct::status_array_base.

+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Get_avail_spu_count (int *  count  ) 
+
+
+ +

+Returns the number of available SPUs. +

+

Attention:
PPU-only
+
Note:
Must be called before MOC_Init

+This function should return the count of free SPUs. But this doesn't really works. To get the available SPU-count the function spe_cpu_info_get() from libspe2 with SPE_COUNT_USABLE_SPES-flag is used. However this function can only detect if a SPU-thread is used by the calling function. There seems to be no means to detect SPU-thread used by other applications.

+
Parameters:
+ + +
count out number of available SPUs
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 4 of file moc_get_avail_spu_ppu.c.

+ +

References MOC_ERR_INTERN.

+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Get_max_spu_count (int *  count  ) 
+
+
+ +

+Returns the number of SPUs. +

+

Attention:
PPU-only
+
Note:
Must be called before MOC_Init
+
Parameters:
+ + +
count out SPU-count
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 4 of file moc_get_max_spu_ppu.c.

+ +

References MOC_ERR_INTERN.

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Init (unsigned long long  argp,
int  length,
void *  buffer 
)
+
+
+ +

+Initialize the MPI execution environment. +

+

+

Attention:
SPU-only function
+
Note:
All processes must call this routine before executing any MOC-routine.
+
Parameters:
+ + + + +
argp in Pointer to user-defined information in the main-memory
length in Length of the user-defined information in bytes
buffer out Buffer into which the user-defined information should be copied
+
+
Return values:
+ + + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_NO_MEMORY Insufficient Memory.
MOC_ERR_INTERN Internal Error
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Init (int *  argc,
char ***  argv 
)
+
+
+ +

+Initialize the MPI execution environment. +

+

Attention:
PPU-only function
+
Note:
All processes must call this routine before executing any MOC-routine.
+
Parameters:
+ + + +
argc in Pointer to the number of arguments
argv in Pointer to the argument vector
+
+
Return values:
+ + + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_NO_MEMORY Insufficient Memory.
MOC_ERR_INTERN Internal Error
+
+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Set_buffer_size (uint32_t  size  ) 
+
+
+ +

+Sets the size of the buffer used for buffered communication. +

+

Attention:
PPU-only
+
Note:
Must be called before MOC_Init
+
Parameters:
+ + +
size buffer-size
+
+
Returns:
0 if success, otherwise error-code
+ +

Definition at line 3 of file moc_set_buffer_size_ppu.c.

+ +

References moc_spu_buffer_size.

+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Set_queue_size (uint8_t  size  ) 
+
+
+ +

+Sets the size of the message-queues. +

+

Attention:
PPU-only
+
Note:
Must be called before MOC_Init
+
Parameters:
+ + +
size queue-size
+
+
Returns:
0 if success, otherwise error-code
+ +

Definition at line 3 of file moc_set_queue_size_ppu.c.

+ +

References moc_spu_queue_size.

+ +
+

+

+
Generated on Thu Feb 12 13:50:44 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/d9a/group__environment__startup.png b/documentation/developer/html/d8/d9a/group__environment__startup.png new file mode 100755 index 0000000..0b38fe5 Binary files /dev/null and b/documentation/developer/html/d8/d9a/group__environment__startup.png differ diff --git a/documentation/developer/html/d8/da1/group__environment__error.html b/documentation/developer/html/d8/da1/group__environment__error.html new file mode 100755 index 0000000..c7c5161 --- /dev/null +++ b/documentation/developer/html/d8/da1/group__environment__error.html @@ -0,0 +1,828 @@ + + +MPI On Cell (Documentation): Error-Handling + + + + + +
+

Error-Handling
+ +[Environmental Management] +

+

+

+Collaboration diagram for Error-Handling:
+
+
+ +
+
+

Detailed Description

+This section describes how errors are handled. +

+Every function should return an integer if possible. This integer should be MOC_SUCCESS if the operation teminated successfully otherwise an error-code telling the reason of the error is returned.

+Every function should return an integer if possible. This integer should be MOC_SUCCESS if the operation teminated successfully otherwise an error-code telling the reason of the error is returned.

+For more information see Chapter 7.2 of the MPI 1.3 Standard. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

MPI_ERROR-CLASSES

Error-classes defined by the MPI-standard.

+Every error-code returned by a MOC-function should belong to an error-class or be an error-class itself. This enables implementation-independend error-handling.

+Value-range: 0 = MOC_SUCCESS < MOC_ERR_... <= MOC_ERR_LASTCODE

#define MOC_SUCCESS   0
 No error.
#define MOC_ERR_BUFFER   1000
 Invalid buffer pointer.
#define MOC_ERR_COUNT   2000
 Invalid count argument.
#define MOC_ERR_TYPE   3000
 Invalid datatype argument.
#define MOC_ERR_TAG   4000
 Invalid tag argument.
#define MOC_ERR_COMM   5000
 Invalid communicator.
#define MOC_ERR_RANK   6000
 Invalid rank.
#define MOC_ERR_REQUEST   7000
 Invalid request (handle).
#define MOC_ERR_ROOT   8000
 Invalid root.
#define MOC_ERR_GROUP   9000
 Invalid group.
#define MOC_ERR_OP   10000
 Invalid operation.
#define MOC_ERR_TOPOLOGY   11000
 Invalid topology.
#define MOC_ERR_DIMS   12000
 Invalid dimension argument.
#define MOC_ERR_ARG   13000
 Invalid argument of some other kind.
#define MOC_ERR_UNKNOWN   14000
 Unknown error.
#define MOC_ERR_TRUNCATE   15000
 Message truncated on receive.
#define MOC_ERR_OTHER   16000
 Known error not in this list.
#define MOC_ERR_INTERN   17000
 Internal MOC (implementation) error.
#define MOC_ERR_IN_STATUS   18000
 Error code is in status.
#define MOC_ERR_PENDING   19000
 Pending request.
#define MOC_ERR_LASTCODE   20000
 Last error code.

MOC-Error-Codes

Implementation dependent Error-Codes.

#define MOC_ERR_NOT_IMPLEMENTED   17001
 Function not implemented.
#define MOC_ERR_BUFFER_OVERFLOW   17002
 Internal Buffer Overflow.
#define MOC_ERR_NO_MEMORY   17003
 Insufficient Memory.
#define MOC_ERR_NO_BUFFER   17004
 Insufficient Buffer-Space.
#define MOC_ERR_MESSAGE_EXHAUSTED   17005
 No further messages possible.
#define MOC_ERR_BAD_ALIGNMENT   16001
 Base-Adress of Buffer isn't 16-byte aligned.
#define MOC_ERR_BAD_SIZE   16002
 Bad Size (probably no multiple of 16).

Defines

#define MOC_MAX_ERROR_STRING   255
 Maximal length of error-text.

Functions

int MOC_Error_string (int errorcode, char *string, int *resultlen)
 Returns an error-text for a given error code.
int MOC_Error_class (int errorcode, int *errorclass)
 Converts an error code into an error class.
+


Define Documentation

+ +
+
+ + + + +
#define MOC_ERR_ARG   13000
+
+
+ +

+Invalid argument of some other kind. +

+ +

Definition at line 43 of file moc_error_codes.h.

+ +

Referenced by MOC_Error_class(), MOC_Error_string(), MOC_Get_count(), and MOC_Get_version().

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_BAD_ALIGNMENT   16001
+
+
+ +

+Base-Adress of Buffer isn't 16-byte aligned. +

+ +

Definition at line 66 of file moc_error_codes.h.

+ +

Referenced by MOC_Get_data(), MOC_IGet_data(), MOC_IPut_data(), and MOC_Put_data().

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_BAD_SIZE   16002
+
+
+ +

+Bad Size (probably no multiple of 16). +

+ +

Definition at line 67 of file moc_error_codes.h.

+ +

Referenced by MOC_IPut_data(), and MOC_Put_data().

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_BUFFER   1000
+
+
+ +

+Invalid buffer pointer. +

+ +

Definition at line 31 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_BUFFER_OVERFLOW   17002
+
+
+ +

+Internal Buffer Overflow. +

+ +

Definition at line 62 of file moc_error_codes.h.

+ +

Referenced by MOC_Add_spu_thread().

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_COMM   5000
+
+
+ +

+Invalid communicator. +

+ +

Definition at line 35 of file moc_error_codes.h.

+ +

Referenced by MOC_Barrier(), MOC_Comm_rank(), and MOC_Comm_size().

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_COUNT   2000
+
+
+ +

+Invalid count argument. +

+ +

Definition at line 32 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_DIMS   12000
+
+
+ +

+Invalid dimension argument. +

+ +

Definition at line 42 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_GROUP   9000
+
+
+ +

+Invalid group. +

+ +

Definition at line 39 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_IN_STATUS   18000
+
+
+ +

+Error code is in status. +

+ +

Definition at line 48 of file moc_error_codes.h.

+ +
+

+ +

+ +

+
+ + + + +
#define MOC_ERR_LASTCODE   20000
+
+
+ +

+Last error code. +

+ +

Definition at line 50 of file moc_error_codes.h.

+ +

Referenced by MOC_Error_class(), and MOC_Error_string().

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_MESSAGE_EXHAUSTED   17005
+
+
+ +

+No further messages possible. +

+ +

Definition at line 65 of file moc_error_codes.h.

+ +

Referenced by IMOC_getFreeEntry(), and IMOC_getFreeMID().

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_NO_BUFFER   17004
+
+
+ +

+Insufficient Buffer-Space. +

+ +

Definition at line 64 of file moc_error_codes.h.

+ +

Referenced by MOC_Bsend().

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_NO_MEMORY   17003
+
+
+ +

+Insufficient Memory. +

+ +

Definition at line 63 of file moc_error_codes.h.

+ +

Referenced by MOC_Init().

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_NOT_IMPLEMENTED   17001
+
+
+ +

+Function not implemented. +

+ +

Definition at line 61 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_OP   10000
+
+
+ +

+Invalid operation. +

+ +

Definition at line 40 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_OTHER   16000
+
+
+ +

+Known error not in this list. +

+ +

Definition at line 46 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_PENDING   19000
+
+
+ +

+Pending request. +

+ +

Definition at line 49 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_RANK   6000
+
+
+ +

+Invalid rank. +

+ +

Definition at line 36 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_REQUEST   7000
+
+
+ +

+Invalid request (handle). +

+ +

Definition at line 37 of file moc_error_codes.h.

+ +

Referenced by MOC_Test(), and MOC_Wait().

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_ROOT   8000
+
+
+ +

+Invalid root. +

+ +

Definition at line 38 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_TAG   4000
+
+
+ +

+Invalid tag argument. +

+ +

Definition at line 34 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_TOPOLOGY   11000
+
+
+ +

+Invalid topology. +

+ +

Definition at line 41 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_TRUNCATE   15000
+
+
+ +

+Message truncated on receive. +

+ +

Definition at line 45 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_TYPE   3000
+
+
+ +

+Invalid datatype argument. +

+ +

Definition at line 33 of file moc_error_codes.h.

+ +

Referenced by MOC_Recv().

+ +
+

+ +

+
+ + + + +
#define MOC_ERR_UNKNOWN   14000
+
+
+ +

+Unknown error. +

+ +

Definition at line 44 of file moc_error_codes.h.

+ +
+

+ +

+
+ + + + +
#define MOC_MAX_ERROR_STRING   255
+
+
+ +

+Maximal length of error-text. +

+ +

Definition at line 101 of file moc.h.

+ +
+

+ +

+
+ + + + +
#define MOC_SUCCESS   0
+
+ +

+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int MOC_Error_class (int  errorcode,
int *  errorclass 
)
+
+
+ +

+Converts an error code into an error class. +

+

Parameters:
+ + + +
errorcode in Error code returned by an MPI routine
errorclass out Error class associated with errorcode
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_COMM Invalid argument. Most likely an error-code out of range.
+
+ +

Definition at line 7 of file moc_error_class.c.

+ +

References MOC_ERR_ARG, and MOC_ERR_LASTCODE.

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Error_string (int  errorcode,
char *  string,
int *  resultlen 
)
+
+
+ +

+Returns an error-text for a given error code. +

+The error-text is already terminated by '\0'.

+

Parameters:
+ + + + +
errorcode in Error code returned by an MPI routine
string out Text that corresponds to the errorcode
resultlen out Length of string
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_ARG Invalid argument. Most likely an error-code out of range.
+
+ +

Definition at line 68 of file moc_error_string_ppu.c.

+ +

References ERROR_STRINGS_COUNT, MOC_ERR_ARG, and MOC_ERR_LASTCODE.

+ +
+

+

+
Generated on Thu Feb 12 13:50:45 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/da1/group__environment__error.png b/documentation/developer/html/d8/da1/group__environment__error.png new file mode 100755 index 0000000..7384bf6 Binary files /dev/null and b/documentation/developer/html/d8/da1/group__environment__error.png differ diff --git a/documentation/developer/html/d8/da3/moc__dma-iget__ppu_8c-source.html b/documentation/developer/html/d8/da3/moc__dma-iget__ppu_8c-source.html new file mode 100755 index 0000000..b2fc54e --- /dev/null +++ b/documentation/developer/html/d8/da3/moc__dma-iget__ppu_8c-source.html @@ -0,0 +1,55 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-iget_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/da5/imoc__dma-wait__ppu_8c-source.html b/documentation/developer/html/d8/da5/imoc__dma-wait__ppu_8c-source.html new file mode 100755 index 0000000..980dbac --- /dev/null +++ b/documentation/developer/html/d8/da5/imoc__dma-wait__ppu_8c-source.html @@ -0,0 +1,48 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-wait_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/da6/group__environment__timer.html b/documentation/developer/html/d8/da6/group__environment__timer.html new file mode 100755 index 0000000..69cdfef --- /dev/null +++ b/documentation/developer/html/d8/da6/group__environment__timer.html @@ -0,0 +1,102 @@ + + +MPI On Cell (Documentation): Timers and Synchronization + + + + + +
+

Timers and Synchronization
+ +[Environmental Management] +

+

+

+Collaboration diagram for Timers and Synchronization:
+
+
+ +
+
+

Detailed Description

+Functions to measure time. +

+On the PPU gettimeofday from time.h is used. On the SPU either also gettimeofday or the spu-timer-library is used depending on the configuration during compilation of the MOC-library. When gettimeofday is used on the SPU the time is global in the MOC-environment with the disadvantage that the SPU-threads get their times from the PPU using DMA causing inaccuracy and delays. +

+ + + + + + + + + +

Functions

double MOC_Wtime (void)
 Returns a floating-point number of seconds, representing elapsed wall-clock time since some time in the past.
double MOC_Wtick (void)
 Returns the resolution of Moc_Wtime in seconds.
+


Function Documentation

+ +
+
+ + + + + + + + + +
double MOC_Wtick (void   ) 
+
+
+ +

+Returns the resolution of Moc_Wtime in seconds. +

+

Returns:
resolution in seconds.
+ +

Definition at line 6 of file moc_wtick_ppu.c.

+ +
+

+ +

+
+ + + + + + + + + +
double MOC_Wtime (void   ) 
+
+
+ +

+Returns a floating-point number of seconds, representing elapsed wall-clock time since some time in the past. +

+

Returns:
wall-clock time in seconds.
+ +

Definition at line 6 of file moc_wtime_ppu.c.

+ +
+

+

+
Generated on Thu Feb 12 13:50:45 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/da6/group__environment__timer.png b/documentation/developer/html/d8/da6/group__environment__timer.png new file mode 100755 index 0000000..7a44ace Binary files /dev/null and b/documentation/developer/html/d8/da6/group__environment__timer.png differ diff --git a/documentation/developer/html/d8/dbc/moc__dma-put__spu_8c-source.html b/documentation/developer/html/d8/dbc/moc__dma-put__spu_8c-source.html new file mode 100755 index 0000000..e3d126e --- /dev/null +++ b/documentation/developer/html/d8/dbc/moc__dma-put__spu_8c-source.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-put_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/dbc/moc__recv__ppu_8c-source.html b/documentation/developer/html/d8/dbc/moc__recv__ppu_8c-source.html new file mode 100755 index 0000000..dcdea6a --- /dev/null +++ b/documentation/developer/html/d8/dbc/moc__recv__ppu_8c-source.html @@ -0,0 +1,140 @@ + + +MPI On Cell (Documentation): src/ppu/communication/moc_recv_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/dcd/moc__datatype_8h__dep__incl.map b/documentation/developer/html/d8/dcd/moc__datatype_8h__dep__incl.map new file mode 100755 index 0000000..1f99317 --- /dev/null +++ b/documentation/developer/html/d8/dcd/moc__datatype_8h__dep__incl.map @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d8/dcd/moc__datatype_8h__dep__incl.md5 b/documentation/developer/html/d8/dcd/moc__datatype_8h__dep__incl.md5 new file mode 100755 index 0000000..d56bc0e --- /dev/null +++ b/documentation/developer/html/d8/dcd/moc__datatype_8h__dep__incl.md5 @@ -0,0 +1 @@ +e208da3341bd6fd7b6b05b8589279626 \ No newline at end of file diff --git a/documentation/developer/html/d8/dcd/moc__datatype_8h__dep__incl.png b/documentation/developer/html/d8/dcd/moc__datatype_8h__dep__incl.png new file mode 100755 index 0000000..66062c2 Binary files /dev/null and b/documentation/developer/html/d8/dcd/moc__datatype_8h__dep__incl.png differ diff --git a/documentation/developer/html/d8/dd7/doxygen__main_8doxygen-source.html b/documentation/developer/html/d8/dd7/doxygen__main_8doxygen-source.html new file mode 100755 index 0000000..b726ed2 --- /dev/null +++ b/documentation/developer/html/d8/dd7/doxygen__main_8doxygen-source.html @@ -0,0 +1,266 @@ + + +MPI On Cell (Documentation): include/doxygen_main.doxygen Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/de2/moc__datatype__ppu_8h.html b/documentation/developer/html/d8/de2/moc__datatype__ppu_8h.html new file mode 100755 index 0000000..7757eb4 --- /dev/null +++ b/documentation/developer/html/d8/de2/moc__datatype__ppu_8h.html @@ -0,0 +1,70 @@ + + +MPI On Cell (Documentation): include/ppu/moc_datatype_ppu.h File Reference + + + + + +
+

include/ppu/moc_datatype_ppu.h File Reference

+

+#include "../moc_datatype.h"
+ +

+

+Include dependency graph for moc_datatype_ppu.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + +

Defines

PPU-only
#define MOC_LONG   ((MOC_Datatype)64+2)
 C-Datatype long.
#define MOC_UNSIGNED_LONG   ((MOC_Datatype)64+3)
 C-Datatype unsigned long.
#define MOC_VEC_BCHAR16   ((MOC_Datatype)128+0)
 Cell-specific Datatype vector bool char (vec_bchar16).
#define MOC_VEC_BSHORT8   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector bool short (vec_bshort8).
#define MOC_VEC_PIXEL8   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector pixel (vec_pixel8).
#define MOC_VEC_BINT4   ((MOC_Datatype)128+2)
 Cell-specific Datatype vector bool int (vec_bint4).
+

+
Generated on Thu Feb 12 13:50:02 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d8/dec/moc__datatype__ppu_8h__dep__incl.map b/documentation/developer/html/d8/dec/moc__datatype__ppu_8h__dep__incl.map new file mode 100755 index 0000000..cedd1e5 --- /dev/null +++ b/documentation/developer/html/d8/dec/moc__datatype__ppu_8h__dep__incl.map @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d8/dec/moc__datatype__ppu_8h__dep__incl.md5 b/documentation/developer/html/d8/dec/moc__datatype__ppu_8h__dep__incl.md5 new file mode 100755 index 0000000..38e0219 --- /dev/null +++ b/documentation/developer/html/d8/dec/moc__datatype__ppu_8h__dep__incl.md5 @@ -0,0 +1 @@ +8b53a27a44ebd459fa39b408d1c7caed \ No newline at end of file diff --git a/documentation/developer/html/d8/dec/moc__datatype__ppu_8h__dep__incl.png b/documentation/developer/html/d8/dec/moc__datatype__ppu_8h__dep__incl.png new file mode 100755 index 0000000..8bf0b0b Binary files /dev/null and b/documentation/developer/html/d8/dec/moc__datatype__ppu_8h__dep__incl.png differ diff --git a/documentation/developer/html/d8/df3/moc__dma__ppu_8h-source.html b/documentation/developer/html/d8/df3/moc__dma__ppu_8h-source.html new file mode 100755 index 0000000..bddb6ff --- /dev/null +++ b/documentation/developer/html/d8/df3/moc__dma__ppu_8h-source.html @@ -0,0 +1,141 @@ + + +MPI On Cell (Documentation): include/ppu/moc_dma_ppu.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/d00/imoc__core__spu_8h.html b/documentation/developer/html/d9/d00/imoc__core__spu_8h.html new file mode 100755 index 0000000..9891953 --- /dev/null +++ b/documentation/developer/html/d9/d00/imoc__core__spu_8h.html @@ -0,0 +1,62 @@ + + +MPI On Cell (Documentation): include/internal/spu/imoc_core_spu.h File Reference + + + + + +
+

include/internal/spu/imoc_core_spu.h File Reference

+

+#include "../imoc_core.h"
+ +

+

+Include dependency graph for imoc_core_spu.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + +

Data Structures

struct  moc_node_handle_spu_struct
 Node-handle structure. More...

SPU only

typedef struct
+moc_node_handle_spu_struct 
moc_node_handle_spu_t
 Node-handle structure.
moc_node_handle_spu_t node_handle
 Information each node knowns about himself and the world.
+

+
Generated on Thu Feb 12 13:49:54 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/d04/moc__init__ppu_8c.html b/documentation/developer/html/d9/d04/moc__init__ppu_8c.html new file mode 100755 index 0000000..b4e356d --- /dev/null +++ b/documentation/developer/html/d9/d04/moc__init__ppu_8c.html @@ -0,0 +1,94 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_init_ppu.c File Reference + + + + + +
+

src/ppu/system/moc_init_ppu.c File Reference

+

+#include <malloc_align.h>
+#include <free_align.h>
+#include <stdlib.h>
+#include <string.h>
+#include <moc.h>
+#include <ppu/moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_init_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + +

Functions

int MOC_Init (int *argc __attribute__((unused)), char ***argv __attribute__((unused)))
+


Function Documentation

+ +

+

+
Generated on Thu Feb 12 13:50:30 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/d04/moc__init__ppu_8c_9f5e3249bff688ab3258c8c5bfc7d61b_cgraph.map b/documentation/developer/html/d9/d04/moc__init__ppu_8c_9f5e3249bff688ab3258c8c5bfc7d61b_cgraph.map new file mode 100755 index 0000000..0bcdc41 --- /dev/null +++ b/documentation/developer/html/d9/d04/moc__init__ppu_8c_9f5e3249bff688ab3258c8c5bfc7d61b_cgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d9/d04/moc__init__ppu_8c_9f5e3249bff688ab3258c8c5bfc7d61b_cgraph.md5 b/documentation/developer/html/d9/d04/moc__init__ppu_8c_9f5e3249bff688ab3258c8c5bfc7d61b_cgraph.md5 new file mode 100755 index 0000000..ec8cf47 --- /dev/null +++ b/documentation/developer/html/d9/d04/moc__init__ppu_8c_9f5e3249bff688ab3258c8c5bfc7d61b_cgraph.md5 @@ -0,0 +1 @@ +418c78977ebb62d717d4eda357df10c1 \ No newline at end of file diff --git a/documentation/developer/html/d9/d04/moc__init__ppu_8c_9f5e3249bff688ab3258c8c5bfc7d61b_cgraph.png b/documentation/developer/html/d9/d04/moc__init__ppu_8c_9f5e3249bff688ab3258c8c5bfc7d61b_cgraph.png new file mode 100755 index 0000000..11a38f6 Binary files /dev/null and b/documentation/developer/html/d9/d04/moc__init__ppu_8c_9f5e3249bff688ab3258c8c5bfc7d61b_cgraph.png differ diff --git a/documentation/developer/html/d9/d14/moc__bsend__ppu_8c.html b/documentation/developer/html/d9/d14/moc__bsend__ppu_8c.html new file mode 100755 index 0000000..7caaa61 --- /dev/null +++ b/documentation/developer/html/d9/d14/moc__bsend__ppu_8c.html @@ -0,0 +1,51 @@ + + +MPI On Cell (Documentation): src/ppu/communication/moc_bsend_ppu.c File Reference + + + + + +
+

src/ppu/communication/moc_bsend_ppu.c File Reference

+

+#include <stdio.h>
+#include <string.h>
+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_macros_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_bsend_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Bsend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking buffered mode send operation.
+

+
Generated on Thu Feb 12 13:50:17 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/d16/group__dma__access.html b/documentation/developer/html/d9/d16/group__dma__access.html new file mode 100755 index 0000000..fcee0fb --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access.html @@ -0,0 +1,894 @@ + + +MPI On Cell (Documentation): Direct Memory Access + + + + + +
+

Direct Memory Access
+ +[End-User Documentation] +

+

+

+Collaboration diagram for Direct Memory Access:
+
+
+ +
+
+

Detailed Description

+Functions which use DMA to transfer Data. +

+The operations defined in this section provide simple means to use Direct Memory Access (DMA).

+The MPI-standard assumes a distributed memory architecture, where active participation of the sending and the receiving processes is required. But the Cell Broadband Engine is a distributed shared memory architecture which provides a common address space and DMA-Operations enabling processes to write data directly into the memory of an remote process without active participation of the receiving process. DMA is faster than Send-Receive but more complicated to handle, and so there are some functions provided to enable the advantages of DMA and to hide as much complexity as possible. So the user doesn't have to care about the upper-limit of an DMA-transfer and in get-operations the data-size doesn't have to be a multiple of 16-byte. However the data-address should be at least 16-byte aligned and in put-operations the data-size has to be a multiple of 16-byte.

+There are two kind of addresses. Local-store addresses are used on the SPUs and are only valid in context of a specific SPU. Effective addresses define a common address-space and are used on the PPU. Functions to translate between those address types are provided.

+DMA-operations can be blocking or non-blocking. The status of non-blocking DMA-calls can be requested by using MOC_Test and MOC_Wait.

+

Note:
Every non-blocking DMA operation has to be finished using MOC_Test or MOC_Wait, otherwise resources are no freed and some data are not copied correctly.
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

PPU-only

int MOC_Get_data (void *target, uint32_t source, int count, MOC_Datatype datatype, int dest)
 Wrapper-function for a blocking DMA-get operation.
int MOC_Put_data (void *source, uint32_t target, int count, MOC_Datatype datatype, int src)
 Wrapper-function for a blocking DMA-put operation.
int MOC_IGet_data (void *target, uint32_t source, int count, MOC_Datatype datatype, int dest, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-get operation.
int MOC_IPut_data (void *source, uint32_t target, int count, MOC_Datatype datatype, int src, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-put operation.
int MOC_Translate_EA_to_LS (uint64_t ea, int rank, uint32_t *ls)
 Translates an effective-address of a SPU into the corresponding local-store address.

SPU-only

int MOC_Get_data (void *target, uint64_t source, int count, MOC_Datatype datatype)
 Wrapper-function for a blocking DMA-get operation.
int MOC_Put_data (void *source, uint64_t target, int count, MOC_Datatype datatype)
 Wrapper-function for a blocking DMA-put operation.
int MOC_IGet_data (void *target, uint64_t source, int count, MOC_Datatype datatype, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-get operation.
int MOC_IPut_data (void *source, uint64_t target, int count, MOC_Datatype datatype, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-put operation.
int MOC_Translate_LS_to_EA (void *ls, uint64_t *ea)
 Translates a local-store address of the calling SPU into the corresponding effective-address.

Functions

int MOC_Wait_data (MOC_Request *request)
 Waits till a MOC_IGet_data or IMOC_IPut_data is completed.
int MOC_Test_data (MOC_Request *request, int *flag)
 Tests if a MOC_IGet_data or IMOC_IPut_data is completed.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Get_data (void *  target,
uint64_t  source,
int  count,
MOC_Datatype  datatype 
)
+
+
+ +

+Wrapper-function for a blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned.

+

Parameters:
+ + + + + +
target out pointer to buffer
source in ea-address of data
count in size of data in byte
datatype in Type of Elements
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 9 of file moc_dma-get_spu.c.

+ +

References IMOC_get_data(), IMOC_TEST_BYTECOUNT, and MOC_ERR_BAD_ALIGNMENT.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Get_data (void *  target,
uint32_t  source,
int  count,
MOC_Datatype  datatype,
int  dest 
)
+
+
+ +

+Wrapper-function for a blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned.

+

Parameters:
+ + + + + + +
target out pointer to buffer
source in local-store address of data
count in size of data in byte
datatype in Type of Elements
dest in rank of source spe
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 9 of file moc_dma-get_ppu.c.

+ +

References IMOC_get_data(), IMOC_TEST_BYTECOUNT, IMOC_TEST_RANK, and MOC_ERR_BAD_ALIGNMENT.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_IGet_data (void *  target,
uint64_t  source,
int  count,
MOC_Datatype  datatype,
MOC_Request *  request 
)
+
+
+ +

+Wrapper-function for a non-blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.

+

Parameters:
+ + + + + + +
target out pointer to buffer
source in ea-address of data
count in size of data in byte
datatype in Type of Elements
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 10 of file moc_dma-iget_spu.c.

+ +

References moc_request_struct::dma_data, IMOC_iget_data(), IMOC_TEST_BYTECOUNT, MOC_ERR_BAD_ALIGNMENT, MOC_REQ_TYPE_DMA, moc_request_struct::request_data, and moc_request_struct::request_type.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_IGet_data (void *  target,
uint32_t  source,
int  count,
MOC_Datatype  datatype,
int  dest,
MOC_Request *  request 
)
+
+
+ +

+Wrapper-function for a non-blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.

+

Parameters:
+ + + + + + + +
target out pointer to buffer
source in local-store address of data
count in size of data in byte
datatype in Type of Elements
dest in rank of source spe
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 11 of file moc_dma-iget_ppu.c.

+ +

References moc_request_struct::dma_data, IMOC_iget_data(), IMOC_TEST_BYTECOUNT, IMOC_TEST_RANK, MOC_ERR_BAD_ALIGNMENT, MOC_REQ_TYPE_DMA, moc_request_struct::request_data, and moc_request_struct::request_type.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_IPut_data (void *  source,
uint64_t  target,
int  count,
MOC_Datatype  datatype,
MOC_Request *  request 
)
+
+
+ +

+Wrapper-function for a non-blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.

+

Parameters:
+ + + + + + +
source in pointer to data
target in ea-address of buffer
count in size of data in byte
datatype in Type of Elements
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 11 of file moc_dma-iput_spu.c.

+ +

References moc_request_struct::dma_data, IMOC_iput_data(), IMOC_TEST_BYTECOUNT, MOC_ERR_BAD_ALIGNMENT, MOC_ERR_BAD_SIZE, MOC_REQ_TYPE_DMA, moc_request_struct::request_data, and moc_request_struct::request_type.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_IPut_data (void *  source,
uint32_t  target,
int  count,
MOC_Datatype  datatype,
int  src,
MOC_Request *  request 
)
+
+
+ +

+Wrapper-function for a non-blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.

+

Parameters:
+ + + + + + + +
source in pointer to data
target in local-store address of buffer
count in size of data in byte
datatype in Type of Elements
src in rank of source-SPE
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 11 of file moc_dma-iput_ppu.c.

+ +

References moc_request_struct::dma_data, IMOC_iput_data(), IMOC_TEST_BYTECOUNT, IMOC_TEST_RANK, MOC_ERR_BAD_ALIGNMENT, MOC_ERR_BAD_SIZE, MOC_REQ_TYPE_DMA, moc_request_struct::request_data, and moc_request_struct::request_type.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Put_data (void *  source,
uint64_t  target,
int  count,
MOC_Datatype  datatype 
)
+
+
+ +

+Wrapper-function for a blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned.

+

Parameters:
+ + + + + +
source in pointer to data
target in ea-address of buffer
count in size of data in byte
datatype in Type of Elements
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 8 of file moc_dma-put_spu.c.

+ +

References IMOC_put_data(), IMOC_TEST_BYTECOUNT, MOC_ERR_BAD_ALIGNMENT, and MOC_ERR_BAD_SIZE.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Put_data (void *  source,
uint32_t  target,
int  count,
MOC_Datatype  datatype,
int  src 
)
+
+
+ +

+Wrapper-function for a blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned.

+

Parameters:
+ + + + + + +
source in pointer to data
target in local-store address of buffer
count in size of data in byte
datatype in Type of Elements
src in rank of source-SPE
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 9 of file moc_dma-put_ppu.c.

+ +

References IMOC_put_data(), IMOC_TEST_BYTECOUNT, IMOC_TEST_RANK, MOC_ERR_BAD_ALIGNMENT, and MOC_ERR_BAD_SIZE.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Test_data (MOC_Request *  request,
int *  flag 
)
+
+
+ +

+Tests if a MOC_IGet_data or IMOC_IPut_data is completed. +

+

Parameters:
+ + + +
request in request-handle
flag out true if operation is completed
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 11 of file moc_dma-test_ppu.c.

+ +

References moc_request_struct::dma_data, IMOC_test_dma(), and moc_request_struct::request_data.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Translate_EA_to_LS (uint64_t  ea,
int  rank,
uint32_t *  ls 
)
+
+
+ +

+Translates an effective-address of a SPU into the corresponding local-store address. +

+

Parameters:
+ + + + +
ea in effective-address
rank in rank of SPU
ls out local-store address
+
+ +

Definition at line 4 of file moc_translate_ea_ls_ppu.c.

+ +

References moc_ppu_thread_count, and moc_spu_thread_list.

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Translate_LS_to_EA (void *  ls,
uint64_t *  ea 
)
+
+
+ +

+Translates a local-store address of the calling SPU into the corresponding effective-address. +

+

Parameters:
+ + + +
ls in local-store address
ea out effective-address
+
+ +

Definition at line 4 of file moc_translate_ls_ea_spu.c.

+ +

References node_handle.

+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Wait_data (MOC_Request *  request  ) 
+
+
+ +

+Waits till a MOC_IGet_data or IMOC_IPut_data is completed. +

+

Parameters:
+ + +
request in request-handle
+
+
Returns:
0 when success otherwise error-code
+ +

Definition at line 11 of file moc_dma-wait_ppu.c.

+ +

References moc_request_struct::dma_data, IMOC_wait_dma(), and moc_request_struct::request_data.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+

+
Generated on Thu Feb 12 13:51:02 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/d16/group__dma__access.png b/documentation/developer/html/d9/d16/group__dma__access.png new file mode 100755 index 0000000..9db69ae Binary files /dev/null and b/documentation/developer/html/d9/d16/group__dma__access.png differ diff --git a/documentation/developer/html/d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph.map b/documentation/developer/html/d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph.map new file mode 100755 index 0000000..8459c93 --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph.md5 b/documentation/developer/html/d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph.md5 new file mode 100755 index 0000000..44665fa --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph.md5 @@ -0,0 +1 @@ +e1e918e87469897698a8599843626d92 \ No newline at end of file diff --git a/documentation/developer/html/d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph.png b/documentation/developer/html/d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph.png new file mode 100755 index 0000000..7802fd2 Binary files /dev/null and b/documentation/developer/html/d9/d16/group__dma__access_g08f0af30f2e0e6840ec2be5ca93fd14f_cgraph.png differ diff --git a/documentation/developer/html/d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph.map b/documentation/developer/html/d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph.map new file mode 100755 index 0000000..4c82119 --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph.md5 b/documentation/developer/html/d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph.md5 new file mode 100755 index 0000000..6e04029 --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph.md5 @@ -0,0 +1 @@ +b0590e78d6dab1dd39762b15c2e670bc \ No newline at end of file diff --git a/documentation/developer/html/d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph.png b/documentation/developer/html/d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph.png new file mode 100755 index 0000000..9a09bf0 Binary files /dev/null and b/documentation/developer/html/d9/d16/group__dma__access_g0ba7b00fbebaabb8b39737a7c13efc67_cgraph.png differ diff --git a/documentation/developer/html/d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph.map b/documentation/developer/html/d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph.map new file mode 100755 index 0000000..c118d0e --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph.md5 b/documentation/developer/html/d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph.md5 new file mode 100755 index 0000000..9e81e2e --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph.md5 @@ -0,0 +1 @@ +18bba259ab770d041c2d242f88f75d76 \ No newline at end of file diff --git a/documentation/developer/html/d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph.png b/documentation/developer/html/d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph.png new file mode 100755 index 0000000..80b714a Binary files /dev/null and b/documentation/developer/html/d9/d16/group__dma__access_g1baab78008563718380887026cf9444f_cgraph.png differ diff --git a/documentation/developer/html/d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph.map b/documentation/developer/html/d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph.map new file mode 100755 index 0000000..c411ca2 --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph.md5 b/documentation/developer/html/d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph.md5 new file mode 100755 index 0000000..ac94c9f --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph.md5 @@ -0,0 +1 @@ +cc353fced3deaed14d950a770adedbb0 \ No newline at end of file diff --git a/documentation/developer/html/d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph.png b/documentation/developer/html/d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph.png new file mode 100755 index 0000000..fea1232 Binary files /dev/null and b/documentation/developer/html/d9/d16/group__dma__access_g1fd9a141352dd4344e20f1bde778d265_cgraph.png differ diff --git a/documentation/developer/html/d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph.map b/documentation/developer/html/d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph.map new file mode 100755 index 0000000..6c81e0d --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph.md5 b/documentation/developer/html/d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph.md5 new file mode 100755 index 0000000..a3d2a35 --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph.md5 @@ -0,0 +1 @@ +422279512d282edaae2adfffd596a931 \ No newline at end of file diff --git a/documentation/developer/html/d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph.png b/documentation/developer/html/d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph.png new file mode 100755 index 0000000..45e3b35 Binary files /dev/null and b/documentation/developer/html/d9/d16/group__dma__access_g342d07658aae4252a2e2cd6a8cc185dd_cgraph.png differ diff --git a/documentation/developer/html/d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph.map b/documentation/developer/html/d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph.map new file mode 100755 index 0000000..fb2d82f --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph.md5 b/documentation/developer/html/d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph.md5 new file mode 100755 index 0000000..624a29a --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph.md5 @@ -0,0 +1 @@ +eb881a23b0f9133d77f6a732085f4477 \ No newline at end of file diff --git a/documentation/developer/html/d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph.png b/documentation/developer/html/d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph.png new file mode 100755 index 0000000..0380b8b Binary files /dev/null and b/documentation/developer/html/d9/d16/group__dma__access_g3716465d42f20379bbf65002ecd9e448_cgraph.png differ diff --git a/documentation/developer/html/d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph.map b/documentation/developer/html/d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph.map new file mode 100755 index 0000000..c411ca2 --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph.md5 b/documentation/developer/html/d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph.md5 new file mode 100755 index 0000000..ac94c9f --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph.md5 @@ -0,0 +1 @@ +cc353fced3deaed14d950a770adedbb0 \ No newline at end of file diff --git a/documentation/developer/html/d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph.png b/documentation/developer/html/d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph.png new file mode 100755 index 0000000..fea1232 Binary files /dev/null and b/documentation/developer/html/d9/d16/group__dma__access_g3ee8513f7c0ebb782a3b0d17b8135693_cgraph.png differ diff --git a/documentation/developer/html/d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph.map b/documentation/developer/html/d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph.map new file mode 100755 index 0000000..fb2d82f --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph.md5 b/documentation/developer/html/d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph.md5 new file mode 100755 index 0000000..624a29a --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph.md5 @@ -0,0 +1 @@ +eb881a23b0f9133d77f6a732085f4477 \ No newline at end of file diff --git a/documentation/developer/html/d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph.png b/documentation/developer/html/d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph.png new file mode 100755 index 0000000..0380b8b Binary files /dev/null and b/documentation/developer/html/d9/d16/group__dma__access_g7af2715950a0ab51937a63c38756b85b_cgraph.png differ diff --git a/documentation/developer/html/d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph.map b/documentation/developer/html/d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph.map new file mode 100755 index 0000000..8459c93 --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph.md5 b/documentation/developer/html/d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph.md5 new file mode 100755 index 0000000..44665fa --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph.md5 @@ -0,0 +1 @@ +e1e918e87469897698a8599843626d92 \ No newline at end of file diff --git a/documentation/developer/html/d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph.png b/documentation/developer/html/d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph.png new file mode 100755 index 0000000..7802fd2 Binary files /dev/null and b/documentation/developer/html/d9/d16/group__dma__access_g9ff1639ada54f14994b7d199fc2ad984_cgraph.png differ diff --git a/documentation/developer/html/d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph.map b/documentation/developer/html/d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph.map new file mode 100755 index 0000000..c118d0e --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph.md5 b/documentation/developer/html/d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph.md5 new file mode 100755 index 0000000..9e81e2e --- /dev/null +++ b/documentation/developer/html/d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph.md5 @@ -0,0 +1 @@ +18bba259ab770d041c2d242f88f75d76 \ No newline at end of file diff --git a/documentation/developer/html/d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph.png b/documentation/developer/html/d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph.png new file mode 100755 index 0000000..80b714a Binary files /dev/null and b/documentation/developer/html/d9/d16/group__dma__access_ge07f4b35da50be472772f9d3a426669e_cgraph.png differ diff --git a/documentation/developer/html/d9/d19/moc__error__class_8c.html b/documentation/developer/html/d9/d19/moc__error__class_8c.html new file mode 100755 index 0000000..1c1f3ac --- /dev/null +++ b/documentation/developer/html/d9/d19/moc__error__class_8c.html @@ -0,0 +1,48 @@ + + +MPI On Cell (Documentation): src/noarch/system/moc_error_class.c File Reference + + + + + +
+

src/noarch/system/moc_error_class.c File Reference

+

+#include <stdlib.h>
+#include <string.h>
+#include <moc.h>
+#include <internal/imoc.h>
+ +

+

+Include dependency graph for moc_error_class.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Error_class (int errorcode, int *errorclass)
 Converts an error code into an error class.
+

+
Generated on Thu Feb 12 13:50:15 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/d21/moc__wtick__spu_8c__incl.map b/documentation/developer/html/d9/d21/moc__wtick__spu_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/d9/d21/moc__wtick__spu_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/d9/d21/moc__wtick__spu_8c__incl.md5 b/documentation/developer/html/d9/d21/moc__wtick__spu_8c__incl.md5 new file mode 100755 index 0000000..d634240 --- /dev/null +++ b/documentation/developer/html/d9/d21/moc__wtick__spu_8c__incl.md5 @@ -0,0 +1 @@ +ad35160ce49654b6db0ef5abb18637c0 \ No newline at end of file diff --git a/documentation/developer/html/d9/d21/moc__wtick__spu_8c__incl.png b/documentation/developer/html/d9/d21/moc__wtick__spu_8c__incl.png new file mode 100755 index 0000000..8bc656f Binary files /dev/null and b/documentation/developer/html/d9/d21/moc__wtick__spu_8c__incl.png differ diff --git a/documentation/developer/html/d9/d36/moc__datatype__ppu_8h-source.html b/documentation/developer/html/d9/d36/moc__datatype__ppu_8h-source.html new file mode 100755 index 0000000..f3fb9f5 --- /dev/null +++ b/documentation/developer/html/d9/d36/moc__datatype__ppu_8h-source.html @@ -0,0 +1,87 @@ + + +MPI On Cell (Documentation): include/ppu/moc_datatype_ppu.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/d39/moc__dma__spu_8h__dep__incl.map b/documentation/developer/html/d9/d39/moc__dma__spu_8h__dep__incl.map new file mode 100755 index 0000000..8a7e1a2 --- /dev/null +++ b/documentation/developer/html/d9/d39/moc__dma__spu_8h__dep__incl.map @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/d9/d39/moc__dma__spu_8h__dep__incl.md5 b/documentation/developer/html/d9/d39/moc__dma__spu_8h__dep__incl.md5 new file mode 100755 index 0000000..0308aa4 --- /dev/null +++ b/documentation/developer/html/d9/d39/moc__dma__spu_8h__dep__incl.md5 @@ -0,0 +1 @@ +1a33b6c77a6c189893850508b011234e \ No newline at end of file diff --git a/documentation/developer/html/d9/d39/moc__dma__spu_8h__dep__incl.png b/documentation/developer/html/d9/d39/moc__dma__spu_8h__dep__incl.png new file mode 100755 index 0000000..2f94b10 Binary files /dev/null and b/documentation/developer/html/d9/d39/moc__dma__spu_8h__dep__incl.png differ diff --git a/documentation/developer/html/d9/d44/imoc__dma-put__spu_8c-source.html b/documentation/developer/html/d9/d44/imoc__dma-put__spu_8c-source.html new file mode 100755 index 0000000..9a7248a --- /dev/null +++ b/documentation/developer/html/d9/d44/imoc__dma-put__spu_8c-source.html @@ -0,0 +1,83 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-put_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/d63/moc__bsend__spu_8c-source.html b/documentation/developer/html/d9/d63/moc__bsend__spu_8c-source.html new file mode 100755 index 0000000..a26aa49 --- /dev/null +++ b/documentation/developer/html/d9/d63/moc__bsend__spu_8c-source.html @@ -0,0 +1,133 @@ + + +MPI On Cell (Documentation): src/spu/communication/moc_bsend_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/d79/moc__error__string__spu_8c.html b/documentation/developer/html/d9/d79/moc__error__string__spu_8c.html new file mode 100755 index 0000000..a1842f3 --- /dev/null +++ b/documentation/developer/html/d9/d79/moc__error__string__spu_8c.html @@ -0,0 +1,55 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_error_string_spu.c File Reference + + + + + +
+

src/spu/system/moc_error_string_spu.c File Reference

+

+#include <stdlib.h>
+#include <string.h>
+#include <moc.h>
+#include <internal/imoc.h>
+ +

+

+Include dependency graph for moc_error_string_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + +

SPU-only

#define ERROR_STRINGS_COUNT   28
 error-message count
error_strings_t error_strings []
 stores the error-messages

Functions

int MOC_Error_string (int errorcode, char *string, int *resultlen)
 Returns an error-text for a given error code.
+

+
Generated on Thu Feb 12 13:50:41 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/d82/moc__dma-wait__spu_8c__incl.map b/documentation/developer/html/d9/d82/moc__dma-wait__spu_8c__incl.map new file mode 100755 index 0000000..e2e0baa --- /dev/null +++ b/documentation/developer/html/d9/d82/moc__dma-wait__spu_8c__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/documentation/developer/html/d9/d82/moc__dma-wait__spu_8c__incl.md5 b/documentation/developer/html/d9/d82/moc__dma-wait__spu_8c__incl.md5 new file mode 100755 index 0000000..bfd7c23 --- /dev/null +++ b/documentation/developer/html/d9/d82/moc__dma-wait__spu_8c__incl.md5 @@ -0,0 +1 @@ +ca51acb4578d1e559fec35b0650c47ff \ No newline at end of file diff --git a/documentation/developer/html/d9/d82/moc__dma-wait__spu_8c__incl.png b/documentation/developer/html/d9/d82/moc__dma-wait__spu_8c__incl.png new file mode 100755 index 0000000..6ef692a Binary files /dev/null and b/documentation/developer/html/d9/d82/moc__dma-wait__spu_8c__incl.png differ diff --git a/documentation/developer/html/d9/d89/structimoc__issend__request__struct.html b/documentation/developer/html/d9/d89/structimoc__issend__request__struct.html new file mode 100755 index 0000000..7b1cc12 --- /dev/null +++ b/documentation/developer/html/d9/d89/structimoc__issend__request__struct.html @@ -0,0 +1,152 @@ + + +MPI On Cell (Documentation): imoc_issend_request_struct Struct Reference + + + + + +
+

imoc_issend_request_struct Struct Reference

#include <moc.h> +

+

+Collaboration diagram for imoc_issend_request_struct:
+
+

Collaboration graph
+
[legend]
+

Detailed Description

+ +

Definition at line 73 of file moc.h.

+ + + + + + + + + + + + + +

Data Fields

uint8_t mid
uint8_t isFinished
uint8_t source
uint8_t tag
uint32_t message_size
+

Field Documentation

+ +
+
+ + + + +
uint8_t imoc_issend_request_struct::mid
+
+
+ +

+ +

Definition at line 75 of file moc.h.

+ +

Referenced by MOC_ISsend(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+ +
+ +

+ +

Definition at line 76 of file moc.h.

+ +

Referenced by MOC_ISend(), MOC_ISsend(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+ +
+ +

+ +

Definition at line 77 of file moc.h.

+ +

Referenced by MOC_ISend(), MOC_ISsend(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+
+ + + + +
uint8_t imoc_issend_request_struct::tag
+
+
+ +

+ +

Definition at line 78 of file moc.h.

+ +

Referenced by MOC_ISend(), MOC_ISsend(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+ +
+ +

+ +

Definition at line 79 of file moc.h.

+ +

Referenced by MOC_ISend(), MOC_ISsend(), MOC_Test(), and MOC_Wait().

+ +
+

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:18 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/d8a/moc_8h__incl.map b/documentation/developer/html/d9/d8a/moc_8h__incl.map new file mode 100755 index 0000000..df7d64f --- /dev/null +++ b/documentation/developer/html/d9/d8a/moc_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/d9/d8a/moc_8h__incl.md5 b/documentation/developer/html/d9/d8a/moc_8h__incl.md5 new file mode 100755 index 0000000..6f3d1e2 --- /dev/null +++ b/documentation/developer/html/d9/d8a/moc_8h__incl.md5 @@ -0,0 +1 @@ +fa3e8b968e7f40166eeffd57b0e37104 \ No newline at end of file diff --git a/documentation/developer/html/d9/d8a/moc_8h__incl.png b/documentation/developer/html/d9/d8a/moc_8h__incl.png new file mode 100755 index 0000000..9784df7 Binary files /dev/null and b/documentation/developer/html/d9/d8a/moc_8h__incl.png differ diff --git a/documentation/developer/html/d9/d96/moc__send__recv__replace_8c-source.html b/documentation/developer/html/d9/d96/moc__send__recv__replace_8c-source.html new file mode 100755 index 0000000..d25da71 --- /dev/null +++ b/documentation/developer/html/d9/d96/moc__send__recv__replace_8c-source.html @@ -0,0 +1,39 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_send_recv_replace.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/da9/moc__translate__ls__ea__spu_8c__incl.map b/documentation/developer/html/d9/da9/moc__translate__ls__ea__spu_8c__incl.map new file mode 100755 index 0000000..3d2b01f --- /dev/null +++ b/documentation/developer/html/d9/da9/moc__translate__ls__ea__spu_8c__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/documentation/developer/html/d9/da9/moc__translate__ls__ea__spu_8c__incl.md5 b/documentation/developer/html/d9/da9/moc__translate__ls__ea__spu_8c__incl.md5 new file mode 100755 index 0000000..dfd3751 --- /dev/null +++ b/documentation/developer/html/d9/da9/moc__translate__ls__ea__spu_8c__incl.md5 @@ -0,0 +1 @@ +51fb91ed8f22cd0000378466a0512759 \ No newline at end of file diff --git a/documentation/developer/html/d9/da9/moc__translate__ls__ea__spu_8c__incl.png b/documentation/developer/html/d9/da9/moc__translate__ls__ea__spu_8c__incl.png new file mode 100755 index 0000000..adac92d Binary files /dev/null and b/documentation/developer/html/d9/da9/moc__translate__ls__ea__spu_8c__incl.png differ diff --git a/documentation/developer/html/d9/daa/moc__get__proc__name__spu_8c__incl.map b/documentation/developer/html/d9/daa/moc__get__proc__name__spu_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/d9/daa/moc__get__proc__name__spu_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/d9/daa/moc__get__proc__name__spu_8c__incl.md5 b/documentation/developer/html/d9/daa/moc__get__proc__name__spu_8c__incl.md5 new file mode 100755 index 0000000..38a8656 --- /dev/null +++ b/documentation/developer/html/d9/daa/moc__get__proc__name__spu_8c__incl.md5 @@ -0,0 +1 @@ +23fa98af21847af12fb45ab8fb172990 \ No newline at end of file diff --git a/documentation/developer/html/d9/daa/moc__get__proc__name__spu_8c__incl.png b/documentation/developer/html/d9/daa/moc__get__proc__name__spu_8c__incl.png new file mode 100755 index 0000000..d364ee3 Binary files /dev/null and b/documentation/developer/html/d9/daa/moc__get__proc__name__spu_8c__incl.png differ diff --git a/documentation/developer/html/d9/dab/moc__recv__spu_8c.html b/documentation/developer/html/d9/dab/moc__recv__spu_8c.html new file mode 100755 index 0000000..842bcf4 --- /dev/null +++ b/documentation/developer/html/d9/dab/moc__recv__spu_8c.html @@ -0,0 +1,53 @@ + + +MPI On Cell (Documentation): src/spu/communication/moc_recv_spu.c File Reference + + + + + +
+

src/spu/communication/moc_recv_spu.c File Reference

+

+#include <string.h>
+#include <stdio.h>
+#include <spu_mfcio.h>
+#include <moc.h>
+#include <spu/moc_datatype_spu.h>
+#include <internal/imoc.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+#include <internal/spu/imoc_core_spu.h>
+ +

+

+Include dependency graph for moc_recv_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Recv (void *buf, int count, MOC_Datatype datatype, int source, int tag, MOC_Comm comm, MOC_Status *status)
 Performs a blocking standard mode receive operation.
+

+
Generated on Thu Feb 12 13:50:34 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/db3/imoc_8h.html b/documentation/developer/html/d9/db3/imoc_8h.html new file mode 100755 index 0000000..9ddade9 --- /dev/null +++ b/documentation/developer/html/d9/db3/imoc_8h.html @@ -0,0 +1,102 @@ + + +MPI On Cell (Documentation): include/internal/imoc.h File Reference + + + + + +
+

include/internal/imoc.h File Reference

+

+#include <stdint.h>
+#include "../moc.h"
+#include "imoc_core.h"
+ +

+

+Include dependency graph for imoc.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  error_strings_struct
 Error-Strings structure. More...
struct  moc_internal_buffer_node_struct
 Node of linked list holding information about allocated buffer-space. More...

Defines

Constants for MOC_Request.request_type
#define MOC_REQ_TYPE_DMA   0
 MOC_Request is associated with a DMA-Communication.
#define MOC_REQ_TYPE_ISSEND   1
 MOC_Request is associated with aISsend-Communication.
Internal constants
#define MEMCPY_GET_TRESHOLD   156
 Defines a treshold, when to use memcpy and when to use DMA in a get-operation on the PPU.
#define MEMCPY_PUT_TRESHOLD   2210
 Defines a treshold, when to use memcpy and when to use DMA in a put-operation on the PPU.

Typedefs

typedef struct error_strings_struct error_strings_t
 Error-Strings structure.
typedef struct
+moc_internal_buffer_node_struct 
moc_internal_buffer_node_t
 Node of linked list holding information about allocated buffer-space.

Functions

uint64_t IMOC_bmalloc (uint32_t size, uint8_t mid)
 Allocate buffer-space.
Internal shared functions
moc_message_envelope_t * IMOC_get_entry (int source, int tag, MOC_Comm comm, int isSpecial, MOC_Status *status)
 Get the next valid message-envelope from "source" with specified "tag" and "comm".
int IMOC_getFreeEntry (moc_message_envelope_t *pqueue, uint8_t tag, MOC_Comm comm, int isSpecial, int *index)
 Get next free entry in message-queue (a local copy of the message-queue has to be used).
int IMOC_getFreeMID (int *mid)
 Get free message-ID.
int IMOC_waitForMessageCompletion (uint8_t mid)
 Wait till message with message-ID mid has been received.
int IMOC_testForMessageCompletion (uint8_t mid, uint8_t *status)
 Tests if message with message-ID mid has been received.
+

+
Generated on Thu Feb 12 13:49:49 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/dd3/moc__comm__rank_8c-source.html b/documentation/developer/html/d9/dd3/moc__comm__rank_8c-source.html new file mode 100755 index 0000000..89ba9db --- /dev/null +++ b/documentation/developer/html/d9/dd3/moc__comm__rank_8c-source.html @@ -0,0 +1,48 @@ + + +MPI On Cell (Documentation): src/noarch/system/moc_comm_rank.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/dd3/moc__error__class_8c__incl.map b/documentation/developer/html/d9/dd3/moc__error__class_8c__incl.map new file mode 100755 index 0000000..e793a43 --- /dev/null +++ b/documentation/developer/html/d9/dd3/moc__error__class_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/d9/dd3/moc__error__class_8c__incl.md5 b/documentation/developer/html/d9/dd3/moc__error__class_8c__incl.md5 new file mode 100755 index 0000000..26a412b --- /dev/null +++ b/documentation/developer/html/d9/dd3/moc__error__class_8c__incl.md5 @@ -0,0 +1 @@ +9dd65016b995c223932fe70725d90896 \ No newline at end of file diff --git a/documentation/developer/html/d9/dd3/moc__error__class_8c__incl.png b/documentation/developer/html/d9/dd3/moc__error__class_8c__incl.png new file mode 100755 index 0000000..a9c6593 Binary files /dev/null and b/documentation/developer/html/d9/dd3/moc__error__class_8c__incl.png differ diff --git a/documentation/developer/html/d9/dee/moc__get__max__spu__ppu_8c.html b/documentation/developer/html/d9/dee/moc__get__max__spu__ppu_8c.html new file mode 100755 index 0000000..e8fab9e --- /dev/null +++ b/documentation/developer/html/d9/dee/moc__get__max__spu__ppu_8c.html @@ -0,0 +1,46 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_get_max_spu_ppu.c File Reference + + + + + +
+

src/ppu/system/moc_get_max_spu_ppu.c File Reference

+

+#include <moc.h>
+#include <libspe2.h>
+ +

+

+Include dependency graph for moc_get_max_spu_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Get_max_spu_count (int *count)
 Returns the number of SPUs.
+

+
Generated on Thu Feb 12 13:50:29 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/df3/imoc__spe__thread__ppu_8c-source.html b/documentation/developer/html/d9/df3/imoc__spe__thread__ppu_8c-source.html new file mode 100755 index 0000000..805ad9f --- /dev/null +++ b/documentation/developer/html/d9/df3/imoc__spe__thread__ppu_8c-source.html @@ -0,0 +1,118 @@ + + +MPI On Cell (Documentation): src/ppu/internal/imoc_spe_thread_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/d9/df9/ppu_2moc_8h-source.html b/documentation/developer/html/d9/df9/ppu_2moc_8h-source.html new file mode 100755 index 0000000..3fd0cbc --- /dev/null +++ b/documentation/developer/html/d9/df9/ppu_2moc_8h-source.html @@ -0,0 +1,151 @@ + + +MPI On Cell (Documentation): include/ppu/moc.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d16/moc__error__codes_8h__dep__incl.map b/documentation/developer/html/da/d16/moc__error__codes_8h__dep__incl.map new file mode 100755 index 0000000..9baf653 --- /dev/null +++ b/documentation/developer/html/da/d16/moc__error__codes_8h__dep__incl.map @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/da/d16/moc__error__codes_8h__dep__incl.md5 b/documentation/developer/html/da/d16/moc__error__codes_8h__dep__incl.md5 new file mode 100755 index 0000000..a2daea9 --- /dev/null +++ b/documentation/developer/html/da/d16/moc__error__codes_8h__dep__incl.md5 @@ -0,0 +1 @@ +16a833ab90eadb24247f9e4042882cf0 \ No newline at end of file diff --git a/documentation/developer/html/da/d16/moc__error__codes_8h__dep__incl.png b/documentation/developer/html/da/d16/moc__error__codes_8h__dep__incl.png new file mode 100755 index 0000000..30fa894 Binary files /dev/null and b/documentation/developer/html/da/d16/moc__error__codes_8h__dep__incl.png differ diff --git a/documentation/developer/html/da/d19/moc__bcast_8c-source.html b/documentation/developer/html/da/d19/moc__bcast_8c-source.html new file mode 100755 index 0000000..dd5ebaf --- /dev/null +++ b/documentation/developer/html/da/d19/moc__bcast_8c-source.html @@ -0,0 +1,64 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_bcast.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d1a/moc__set__buffer__size__ppu_8c-source.html b/documentation/developer/html/da/d1a/moc__set__buffer__size__ppu_8c-source.html new file mode 100755 index 0000000..1842669 --- /dev/null +++ b/documentation/developer/html/da/d1a/moc__set__buffer__size__ppu_8c-source.html @@ -0,0 +1,30 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_set_buffer_size_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d29/moc__finalize__spu_8c-source.html b/documentation/developer/html/da/d29/moc__finalize__spu_8c-source.html new file mode 100755 index 0000000..44d955a --- /dev/null +++ b/documentation/developer/html/da/d29/moc__finalize__spu_8c-source.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_finalize_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d2e/group__internal__collective.html b/documentation/developer/html/da/d2e/group__internal__collective.html new file mode 100755 index 0000000..648808c --- /dev/null +++ b/documentation/developer/html/da/d2e/group__internal__collective.html @@ -0,0 +1,45 @@ + + +MPI On Cell (Documentation): Collective Communication + + + + + +
+

Collective Communication
+ +[Developer Documentation] +

+

+

+Collaboration diagram for Collective Communication:
+
+
+ +
+
+Currently there are only two operations implemented.

+MOC_Bcast

+The root node sends normal messages using the reserved tag MOC_BCAST_TAG, which is received by all other nodes.

+MOC_Barrier

+All but the process with the highest rank send a special-message (special-flag set) to the latter process. This process then sends another special-message back to the others. After that the function returns on all calling processes. +

+ + +
+

+
Generated on Thu Feb 12 13:51:17 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d2e/group__internal__collective.png b/documentation/developer/html/da/d2e/group__internal__collective.png new file mode 100755 index 0000000..b91d9fa Binary files /dev/null and b/documentation/developer/html/da/d2e/group__internal__collective.png differ diff --git a/documentation/developer/html/da/d35/moc__dma-test__spu_8c-source.html b/documentation/developer/html/da/d35/moc__dma-test__spu_8c-source.html new file mode 100755 index 0000000..3ce94f4 --- /dev/null +++ b/documentation/developer/html/da/d35/moc__dma-test__spu_8c-source.html @@ -0,0 +1,35 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-test_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d3c/moc__error__string__spu_8c__incl.map b/documentation/developer/html/da/d3c/moc__error__string__spu_8c__incl.map new file mode 100755 index 0000000..e793a43 --- /dev/null +++ b/documentation/developer/html/da/d3c/moc__error__string__spu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/da/d3c/moc__error__string__spu_8c__incl.md5 b/documentation/developer/html/da/d3c/moc__error__string__spu_8c__incl.md5 new file mode 100755 index 0000000..5047761 --- /dev/null +++ b/documentation/developer/html/da/d3c/moc__error__string__spu_8c__incl.md5 @@ -0,0 +1 @@ +868a14cf30d00c5d13fc0fc5550e07dd \ No newline at end of file diff --git a/documentation/developer/html/da/d3c/moc__error__string__spu_8c__incl.png b/documentation/developer/html/da/d3c/moc__error__string__spu_8c__incl.png new file mode 100755 index 0000000..c37779a Binary files /dev/null and b/documentation/developer/html/da/d3c/moc__error__string__spu_8c__incl.png differ diff --git a/documentation/developer/html/da/d3c/moc__iprobe_8c-source.html b/documentation/developer/html/da/d3c/moc__iprobe_8c-source.html new file mode 100755 index 0000000..c80cd7a --- /dev/null +++ b/documentation/developer/html/da/d3c/moc__iprobe_8c-source.html @@ -0,0 +1,47 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_iprobe.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d41/doxygen__main_8doxygen.html b/documentation/developer/html/da/d41/doxygen__main_8doxygen.html new file mode 100755 index 0000000..3b30541 --- /dev/null +++ b/documentation/developer/html/da/d41/doxygen__main_8doxygen.html @@ -0,0 +1,31 @@ + + +MPI On Cell (Documentation): include/doxygen_main.doxygen File Reference + + + + + +
+

include/doxygen_main.doxygen File Reference

+

+ +

+Go to the source code of this file. + +
+

+
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d4a/moc__dma-put__ppu_8c-source.html b/documentation/developer/html/da/d4a/moc__dma-put__ppu_8c-source.html new file mode 100755 index 0000000..3046507 --- /dev/null +++ b/documentation/developer/html/da/d4a/moc__dma-put__ppu_8c-source.html @@ -0,0 +1,52 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-put_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d4d/moc__get__avail__spu__ppu_8c__incl.map b/documentation/developer/html/da/d4d/moc__get__avail__spu__ppu_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/da/d4d/moc__get__avail__spu__ppu_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/da/d4d/moc__get__avail__spu__ppu_8c__incl.md5 b/documentation/developer/html/da/d4d/moc__get__avail__spu__ppu_8c__incl.md5 new file mode 100755 index 0000000..c2f6a22 --- /dev/null +++ b/documentation/developer/html/da/d4d/moc__get__avail__spu__ppu_8c__incl.md5 @@ -0,0 +1 @@ +1fb4a54964643896cdd541bf1b9f2836 \ No newline at end of file diff --git a/documentation/developer/html/da/d4d/moc__get__avail__spu__ppu_8c__incl.png b/documentation/developer/html/da/d4d/moc__get__avail__spu__ppu_8c__incl.png new file mode 100755 index 0000000..3265141 Binary files /dev/null and b/documentation/developer/html/da/d4d/moc__get__avail__spu__ppu_8c__incl.png differ diff --git a/documentation/developer/html/da/d50/moc__error__string__spu_8c-source.html b/documentation/developer/html/da/d50/moc__error__string__spu_8c-source.html new file mode 100755 index 0000000..3f12f1c --- /dev/null +++ b/documentation/developer/html/da/d50/moc__error__string__spu_8c-source.html @@ -0,0 +1,110 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_error_string_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d63/doxygen__pages_8doxygen.html b/documentation/developer/html/da/d63/doxygen__pages_8doxygen.html new file mode 100755 index 0000000..3da242f --- /dev/null +++ b/documentation/developer/html/da/d63/doxygen__pages_8doxygen.html @@ -0,0 +1,31 @@ + + +MPI On Cell (Documentation): include/doxygen_pages.doxygen File Reference + + + + + +
+

include/doxygen_pages.doxygen File Reference

+

+ +

+Go to the source code of this file. + +
+

+
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d67/imoc__core__spu_8c.html b/documentation/developer/html/da/d67/imoc__core__spu_8c.html new file mode 100755 index 0000000..dce1dc9 --- /dev/null +++ b/documentation/developer/html/da/d67/imoc__core__spu_8c.html @@ -0,0 +1,62 @@ + + +MPI On Cell (Documentation): src/spu/internal/imoc_core_spu.c File Reference + + + + + +
+

src/spu/internal/imoc_core_spu.c File Reference

+

+#include <internal/spu/imoc_core_spu.h>
+ +

+

+Include dependency graph for imoc_core_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + +

Variables

moc_node_handle_spu_t node_handle
+


Variable Documentation

+ +
+ +
+ +

+ +

Definition at line 3 of file imoc_core_spu.c.

+ +
+

+

+
Generated on Thu Feb 12 13:50:40 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d6c/moc__get__version_8c.html b/documentation/developer/html/da/d6c/moc__get__version_8c.html new file mode 100755 index 0000000..554bd9f --- /dev/null +++ b/documentation/developer/html/da/d6c/moc__get__version_8c.html @@ -0,0 +1,45 @@ + + +MPI On Cell (Documentation): src/noarch/system/moc_get_version.c File Reference + + + + + +
+

src/noarch/system/moc_get_version.c File Reference

+

+#include <moc.h>
+ +

+

+Include dependency graph for moc_get_version.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Get_version (int *version, int *subversion)
 Returns the major and minor version of this MOC-implementation.
+

+
Generated on Thu Feb 12 13:50:16 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/d6f/moc__ssend__spu_8c__incl.map b/documentation/developer/html/da/d6f/moc__ssend__spu_8c__incl.map new file mode 100755 index 0000000..e26a352 --- /dev/null +++ b/documentation/developer/html/da/d6f/moc__ssend__spu_8c__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/documentation/developer/html/da/d6f/moc__ssend__spu_8c__incl.md5 b/documentation/developer/html/da/d6f/moc__ssend__spu_8c__incl.md5 new file mode 100755 index 0000000..a4f8583 --- /dev/null +++ b/documentation/developer/html/da/d6f/moc__ssend__spu_8c__incl.md5 @@ -0,0 +1 @@ +abb8ccfeec3aaeffc0dca908c656ee8e \ No newline at end of file diff --git a/documentation/developer/html/da/d6f/moc__ssend__spu_8c__incl.png b/documentation/developer/html/da/d6f/moc__ssend__spu_8c__incl.png new file mode 100755 index 0000000..f977fb4 Binary files /dev/null and b/documentation/developer/html/da/d6f/moc__ssend__spu_8c__incl.png differ diff --git a/documentation/developer/html/da/d71/moc__finalize__spu_8c__incl.map b/documentation/developer/html/da/d71/moc__finalize__spu_8c__incl.map new file mode 100755 index 0000000..f074271 --- /dev/null +++ b/documentation/developer/html/da/d71/moc__finalize__spu_8c__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/documentation/developer/html/da/d71/moc__finalize__spu_8c__incl.md5 b/documentation/developer/html/da/d71/moc__finalize__spu_8c__incl.md5 new file mode 100755 index 0000000..1c05ad7 --- /dev/null +++ b/documentation/developer/html/da/d71/moc__finalize__spu_8c__incl.md5 @@ -0,0 +1 @@ +417373cd4da11683822040b6b089d135 \ No newline at end of file diff --git a/documentation/developer/html/da/d71/moc__finalize__spu_8c__incl.png b/documentation/developer/html/da/d71/moc__finalize__spu_8c__incl.png new file mode 100755 index 0000000..7af5b78 Binary files /dev/null and b/documentation/developer/html/da/d71/moc__finalize__spu_8c__incl.png differ diff --git a/documentation/developer/html/da/d83/imoc__dma-iget__ppu_8c__incl.map b/documentation/developer/html/da/d83/imoc__dma-iget__ppu_8c__incl.map new file mode 100755 index 0000000..9878894 --- /dev/null +++ b/documentation/developer/html/da/d83/imoc__dma-iget__ppu_8c__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/documentation/developer/html/da/d83/imoc__dma-iget__ppu_8c__incl.md5 b/documentation/developer/html/da/d83/imoc__dma-iget__ppu_8c__incl.md5 new file mode 100755 index 0000000..44e0951 --- /dev/null +++ b/documentation/developer/html/da/d83/imoc__dma-iget__ppu_8c__incl.md5 @@ -0,0 +1 @@ +d9d0192576f814f22d01121fa4b2965b \ No newline at end of file diff --git a/documentation/developer/html/da/d83/imoc__dma-iget__ppu_8c__incl.png b/documentation/developer/html/da/d83/imoc__dma-iget__ppu_8c__incl.png new file mode 100755 index 0000000..8987f6a Binary files /dev/null and b/documentation/developer/html/da/d83/imoc__dma-iget__ppu_8c__incl.png differ diff --git a/documentation/developer/html/da/d91/imoc__wait__message_8c.html b/documentation/developer/html/da/d91/imoc__wait__message_8c.html new file mode 100755 index 0000000..cdc7889 --- /dev/null +++ b/documentation/developer/html/da/d91/imoc__wait__message_8c.html @@ -0,0 +1,47 @@ + + +MPI On Cell (Documentation): src/noarch/internal/communication/imoc_wait_message.c File Reference + + + + + +
+

src/noarch/internal/communication/imoc_wait_message.c File Reference

+

+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for imoc_wait_message.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_waitForMessageCompletion (uint8_t mid)
 Wait till message with message-ID mid has been received.
+

+
Generated on Thu Feb 12 13:50:13 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/daa/moc__dma-put__ppu_8c__incl.map b/documentation/developer/html/da/daa/moc__dma-put__ppu_8c__incl.map new file mode 100755 index 0000000..2a24ed3 --- /dev/null +++ b/documentation/developer/html/da/daa/moc__dma-put__ppu_8c__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/documentation/developer/html/da/daa/moc__dma-put__ppu_8c__incl.md5 b/documentation/developer/html/da/daa/moc__dma-put__ppu_8c__incl.md5 new file mode 100755 index 0000000..85805ea --- /dev/null +++ b/documentation/developer/html/da/daa/moc__dma-put__ppu_8c__incl.md5 @@ -0,0 +1 @@ +7063fb05ad3ad3df4ab52f0297409412 \ No newline at end of file diff --git a/documentation/developer/html/da/daa/moc__dma-put__ppu_8c__incl.png b/documentation/developer/html/da/daa/moc__dma-put__ppu_8c__incl.png new file mode 100755 index 0000000..94d0f11 Binary files /dev/null and b/documentation/developer/html/da/daa/moc__dma-put__ppu_8c__incl.png differ diff --git a/documentation/developer/html/da/daf/moc__send__recv__replace_8c__incl.map b/documentation/developer/html/da/daf/moc__send__recv__replace_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/da/daf/moc__send__recv__replace_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/da/daf/moc__send__recv__replace_8c__incl.md5 b/documentation/developer/html/da/daf/moc__send__recv__replace_8c__incl.md5 new file mode 100755 index 0000000..7e4fbde --- /dev/null +++ b/documentation/developer/html/da/daf/moc__send__recv__replace_8c__incl.md5 @@ -0,0 +1 @@ +da155ec0cf4ed8bc826f6bb1a3ee645c \ No newline at end of file diff --git a/documentation/developer/html/da/daf/moc__send__recv__replace_8c__incl.png b/documentation/developer/html/da/daf/moc__send__recv__replace_8c__incl.png new file mode 100755 index 0000000..7726710 Binary files /dev/null and b/documentation/developer/html/da/daf/moc__send__recv__replace_8c__incl.png differ diff --git a/documentation/developer/html/da/db1/imoc__dma-put__spu_8c.html b/documentation/developer/html/da/db1/imoc__dma-put__spu_8c.html new file mode 100755 index 0000000..678d851 --- /dev/null +++ b/documentation/developer/html/da/db1/imoc__dma-put__spu_8c.html @@ -0,0 +1,49 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-put_spu.c File Reference + + + + + +
+

src/spu/internal/dma/imoc_dma-put_spu.c File Reference

+

+#include <spu_mfcio.h>
+#include <string.h>
+#include <moc.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+ +

+

+Include dependency graph for imoc_dma-put_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_put_data (void *source, uint64_t target, uint32_t size)
 Internal wrapper-function for a blocking DMA-put operation.
+

+
Generated on Thu Feb 12 13:50:39 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/dd2/moc__dma-wait__spu_8c-source.html b/documentation/developer/html/da/dd2/moc__dma-wait__spu_8c-source.html new file mode 100755 index 0000000..6de1df5 --- /dev/null +++ b/documentation/developer/html/da/dd2/moc__dma-wait__spu_8c-source.html @@ -0,0 +1,35 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-wait_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/ddb/moc__get__proc__name__ppu_8c.html b/documentation/developer/html/da/ddb/moc__get__proc__name__ppu_8c.html new file mode 100755 index 0000000..5977efb --- /dev/null +++ b/documentation/developer/html/da/ddb/moc__get__proc__name__ppu_8c.html @@ -0,0 +1,45 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_get_proc_name_ppu.c File Reference + + + + + +
+

src/ppu/system/moc_get_proc_name_ppu.c File Reference

+

+#include <moc.h>
+ +

+

+Include dependency graph for moc_get_proc_name_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Get_processor_name (char *name, int *resultlen)
 Gets the name of the processor.
+

+
Generated on Thu Feb 12 13:50:29 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/dea/moc__dma-iget__spu_8c.html b/documentation/developer/html/da/dea/moc__dma-iget__spu_8c.html new file mode 100755 index 0000000..106e07c --- /dev/null +++ b/documentation/developer/html/da/dea/moc__dma-iget__spu_8c.html @@ -0,0 +1,51 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-iget_spu.c File Reference + + + + + +
+

src/spu/dma/moc_dma-iget_spu.c File Reference

+

+#include <spu_mfcio.h>
+#include <string.h>
+#include <moc.h>
+#include <spu/moc_dma_spu.h>
+#include <internal/imoc.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+ +

+

+Include dependency graph for moc_dma-iget_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_IGet_data (void *target, uint64_t source, int count, MOC_Datatype datatype, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-get operation.
+

+
Generated on Thu Feb 12 13:50:35 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/df0/group__p2p__status.html b/documentation/developer/html/da/df0/group__p2p__status.html new file mode 100755 index 0000000..6e3d6ea --- /dev/null +++ b/documentation/developer/html/da/df0/group__p2p__status.html @@ -0,0 +1,129 @@ + + +MPI On Cell (Documentation): Return Status + + + + + +
+

Return Status
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Return Status:
+
+
+ +
+
+

Detailed Description

+Receiving operations return a status-object holding information about the message. +

+There are three Fields of the status-Struct which are predefined by the MPI-Standard: MOC_SOURCE gives the message-source, MOC_TAG gives the message-tag and MOC_ERROR gives an error-code (not implemented by MOC at the moment). To get the number of element the function MOC_Get_count should be used. +

+ + + + + + + + + + + + + + +

Data Structures

struct  MOC_Status_struct
 Structure holding information about a received message. More...

Typedefs

typedef struct MOC_Status_struct MOC_Status
 Structure holding information about a received message.

Functions

int MOC_Get_count (MOC_Status *status, MOC_Datatype datatype, int *count)
 Gets the number of received elements which is encoded in MOC_Status.
+


Typedef Documentation

+ +
+
+ + + + +
typedef struct MOC_Status_struct MOC_Status
+
+
+ +

+Structure holding information about a received message. +

+ +

+

+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Get_count (MOC_Status *  status,
MOC_Datatype  datatype,
int *  count 
)
+
+
+ +

+Gets the number of received elements which is encoded in MOC_Status. +

+

Parameters:
+ + + + +
status in status-object
datatype in Type of received elements
count out Number of received elements
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 3 of file moc_get_count.c.

+ +

References MOC_Status_struct::message_size, and MOC_ERR_ARG.

+ +
+

+

+
Generated on Thu Feb 12 13:50:49 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/da/df0/group__p2p__status.png b/documentation/developer/html/da/df0/group__p2p__status.png new file mode 100755 index 0000000..149367e Binary files /dev/null and b/documentation/developer/html/da/df0/group__p2p__status.png differ diff --git a/documentation/developer/html/db/d02/moc__barrier__ppu_8c__incl.map b/documentation/developer/html/db/d02/moc__barrier__ppu_8c__incl.map new file mode 100755 index 0000000..6db45c3 --- /dev/null +++ b/documentation/developer/html/db/d02/moc__barrier__ppu_8c__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/documentation/developer/html/db/d02/moc__barrier__ppu_8c__incl.md5 b/documentation/developer/html/db/d02/moc__barrier__ppu_8c__incl.md5 new file mode 100755 index 0000000..a8ea989 --- /dev/null +++ b/documentation/developer/html/db/d02/moc__barrier__ppu_8c__incl.md5 @@ -0,0 +1 @@ +836ad8b50716351a0c6ff483fbb63173 \ No newline at end of file diff --git a/documentation/developer/html/db/d02/moc__barrier__ppu_8c__incl.png b/documentation/developer/html/db/d02/moc__barrier__ppu_8c__incl.png new file mode 100755 index 0000000..4f5a386 Binary files /dev/null and b/documentation/developer/html/db/d02/moc__barrier__ppu_8c__incl.png differ diff --git a/documentation/developer/html/db/d17/structmoc__request__struct.html b/documentation/developer/html/db/d17/structmoc__request__struct.html new file mode 100755 index 0000000..f91d62d --- /dev/null +++ b/documentation/developer/html/db/d17/structmoc__request__struct.html @@ -0,0 +1,136 @@ + + +MPI On Cell (Documentation): moc_request_struct Struct Reference + + + + + +
+

moc_request_struct Struct Reference
+ +[Non-Blocking Communication] +

#include <moc.h> +

+

+Collaboration diagram for moc_request_struct:
+
+

Collaboration graph
+ + +
[legend]
+

Detailed Description

+Communication-Request (Handle). +

Definition at line 569 of file moc.h.

+ + + + + + + + + + + + + +

Data Fields

int request_type
union {
   imoc_dma_request   dma_data
   imoc_issend_request   issend_request
} request_data
+

Field Documentation

+ +
+ +
+ +

+ +

Definition at line 571 of file moc.h.

+ +

Referenced by MOC_IGet_data(), MOC_IPut_data(), MOC_ISend(), MOC_ISsend(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+ +
+ +

+ +

Definition at line 574 of file moc.h.

+ +

Referenced by MOC_IGet_data(), MOC_IPut_data(), MOC_Test(), MOC_Test_data(), MOC_Wait(), and MOC_Wait_data().

+ +
+

+ +

+ +
+ +

+ +

Definition at line 575 of file moc.h.

+ +

Referenced by MOC_ISend(), MOC_ISsend(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/d33/imoc__get__entry_8c.html b/documentation/developer/html/db/d33/imoc__get__entry_8c.html new file mode 100755 index 0000000..aa6305d --- /dev/null +++ b/documentation/developer/html/db/d33/imoc__get__entry_8c.html @@ -0,0 +1,49 @@ + + +MPI On Cell (Documentation): src/noarch/internal/communication/imoc_get_entry.c File Reference + + + + + +
+

src/noarch/internal/communication/imoc_get_entry.c File Reference

+

+#include <stdio.h>
+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/imoc_macros.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for imoc_get_entry.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

moc_message_envelope_t * IMOC_get_entry (int source, int tag, MOC_Comm comm, int isSpecial, MOC_Status *status)
 Get the next valid message-envelope from "source" with specified "tag" and "comm".
+

+
Generated on Thu Feb 12 13:50:10 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/d38/imoc__dma-wait__spu_8c.html b/documentation/developer/html/db/d38/imoc__dma-wait__spu_8c.html new file mode 100755 index 0000000..87499fc --- /dev/null +++ b/documentation/developer/html/db/d38/imoc__dma-wait__spu_8c.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-wait_spu.c File Reference + + + + + +
+

src/spu/internal/dma/imoc_dma-wait_spu.c File Reference

+

+#include <string.h>
+#include <stdint.h>
+#include <free_align.h>
+#include <spu_mfcio.h>
+#include <moc.h>
+#include <internal/spu/imoc_dma_spu.h>
+ +

+

+Include dependency graph for imoc_dma-wait_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_wait_dma (imoc_dma_request *request)
 Waits till a IMOC_iget_data or IMOC_iput_data is completed.
+

+
Generated on Thu Feb 12 13:50:40 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/d3c/moc_8h__dep__incl.map b/documentation/developer/html/db/d3c/moc_8h__dep__incl.map new file mode 100755 index 0000000..ff19e98 --- /dev/null +++ b/documentation/developer/html/db/d3c/moc_8h__dep__incl.map @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/db/d3c/moc_8h__dep__incl.md5 b/documentation/developer/html/db/d3c/moc_8h__dep__incl.md5 new file mode 100755 index 0000000..c81a6b1 --- /dev/null +++ b/documentation/developer/html/db/d3c/moc_8h__dep__incl.md5 @@ -0,0 +1 @@ +fb3091502d024ebff14ab8822c3c8d87 \ No newline at end of file diff --git a/documentation/developer/html/db/d3c/moc_8h__dep__incl.png b/documentation/developer/html/db/d3c/moc_8h__dep__incl.png new file mode 100755 index 0000000..7450287 Binary files /dev/null and b/documentation/developer/html/db/d3c/moc_8h__dep__incl.png differ diff --git a/documentation/developer/html/db/d43/imoc__test__message_8c.html b/documentation/developer/html/db/d43/imoc__test__message_8c.html new file mode 100755 index 0000000..df36529 --- /dev/null +++ b/documentation/developer/html/db/d43/imoc__test__message_8c.html @@ -0,0 +1,47 @@ + + +MPI On Cell (Documentation): src/noarch/internal/communication/imoc_test_message.c File Reference + + + + + +
+

src/noarch/internal/communication/imoc_test_message.c File Reference

+

+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for imoc_test_message.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_testForMessageCompletion (uint8_t mid, uint8_t *status)
 Tests if message with message-ID mid has been received.
+

+
Generated on Thu Feb 12 13:50:13 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/d45/imoc__core__ppu_8h-source.html b/documentation/developer/html/db/d45/imoc__core__ppu_8h-source.html new file mode 100755 index 0000000..1da6c06 --- /dev/null +++ b/documentation/developer/html/db/d45/imoc__core__ppu_8h-source.html @@ -0,0 +1,154 @@ + + +MPI On Cell (Documentation): include/internal/ppu/imoc_core_ppu.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/d55/moc__send_8c.html b/documentation/developer/html/db/d55/moc__send_8c.html new file mode 100755 index 0000000..ddfa90f --- /dev/null +++ b/documentation/developer/html/db/d55/moc__send_8c.html @@ -0,0 +1,52 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_send.c File Reference + + + + + +
+

src/noarch/communication/moc_send.c File Reference

+

+#include <string.h>
+#include <stdio.h>
+#include <moc.h>
+#include <internal/imoc.h>
+#include <ppu/moc_datatype_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <internal/ppu/imoc_macros_ppu.h>
+ +

+

+Include dependency graph for moc_send.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Send (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking standard mode send operation.
+

+
Generated on Thu Feb 12 13:50:07 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/d62/moc__dma__ppu_8h.html b/documentation/developer/html/db/d62/moc__dma__ppu_8h.html new file mode 100755 index 0000000..e48cf7b --- /dev/null +++ b/documentation/developer/html/db/d62/moc__dma__ppu_8h.html @@ -0,0 +1,75 @@ + + +MPI On Cell (Documentation): include/ppu/moc_dma_ppu.h File Reference + + + + + +
+

include/ppu/moc_dma_ppu.h File Reference

+

+#include <stdint.h>
+#include "../moc.h"
+#include "moc_datatype_ppu.h"
+ +

+

+Include dependency graph for moc_dma_ppu.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + +

Functions

int MOC_Wait_data (MOC_Request *request)
 Waits till a MOC_IGet_data or IMOC_IPut_data is completed.
int MOC_Test_data (MOC_Request *request, int *flag)
 Tests if a MOC_IGet_data or IMOC_IPut_data is completed.
PPU-only
int MOC_Get_data (void *target, uint32_t source, int count, MOC_Datatype datatype, int dest)
 Wrapper-function for a blocking DMA-get operation.
int MOC_Put_data (void *source, uint32_t target, int count, MOC_Datatype datatype, int src)
 Wrapper-function for a blocking DMA-put operation.
int MOC_IGet_data (void *target, uint32_t source, int count, MOC_Datatype datatype, int dest, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-get operation.
int MOC_IPut_data (void *source, uint32_t target, int count, MOC_Datatype datatype, int src, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-put operation.
int MOC_Translate_EA_to_LS (uint64_t ea, int rank, uint32_t *ls)
 Translates an effective-address of a SPU into the corresponding local-store address.
+

+
Generated on Thu Feb 12 13:50:03 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/d66/structmoc__node__handle__ppu__struct__coll__graph.map b/documentation/developer/html/db/d66/structmoc__node__handle__ppu__struct__coll__graph.map new file mode 100755 index 0000000..03b479f --- /dev/null +++ b/documentation/developer/html/db/d66/structmoc__node__handle__ppu__struct__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/db/d66/structmoc__node__handle__ppu__struct__coll__graph.md5 b/documentation/developer/html/db/d66/structmoc__node__handle__ppu__struct__coll__graph.md5 new file mode 100755 index 0000000..0f154e3 --- /dev/null +++ b/documentation/developer/html/db/d66/structmoc__node__handle__ppu__struct__coll__graph.md5 @@ -0,0 +1 @@ +3609408cc2a32902b189bc9ffaa3df00 \ No newline at end of file diff --git a/documentation/developer/html/db/d66/structmoc__node__handle__ppu__struct__coll__graph.png b/documentation/developer/html/db/d66/structmoc__node__handle__ppu__struct__coll__graph.png new file mode 100755 index 0000000..640ad0b Binary files /dev/null and b/documentation/developer/html/db/d66/structmoc__node__handle__ppu__struct__coll__graph.png differ diff --git a/documentation/developer/html/db/d7f/moc__dma-test__ppu_8c__incl.map b/documentation/developer/html/db/d7f/moc__dma-test__ppu_8c__incl.map new file mode 100755 index 0000000..86d59b5 --- /dev/null +++ b/documentation/developer/html/db/d7f/moc__dma-test__ppu_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/db/d7f/moc__dma-test__ppu_8c__incl.md5 b/documentation/developer/html/db/d7f/moc__dma-test__ppu_8c__incl.md5 new file mode 100755 index 0000000..d0f1fd5 --- /dev/null +++ b/documentation/developer/html/db/d7f/moc__dma-test__ppu_8c__incl.md5 @@ -0,0 +1 @@ +8637558fb801bc14aa6fbe13c538bd14 \ No newline at end of file diff --git a/documentation/developer/html/db/d7f/moc__dma-test__ppu_8c__incl.png b/documentation/developer/html/db/d7f/moc__dma-test__ppu_8c__incl.png new file mode 100755 index 0000000..a14e564 Binary files /dev/null and b/documentation/developer/html/db/d7f/moc__dma-test__ppu_8c__incl.png differ diff --git a/documentation/developer/html/db/d81/moc__translate__ea__ls__ppu_8c__incl.map b/documentation/developer/html/db/d81/moc__translate__ea__ls__ppu_8c__incl.map new file mode 100755 index 0000000..3be5295 --- /dev/null +++ b/documentation/developer/html/db/d81/moc__translate__ea__ls__ppu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/db/d81/moc__translate__ea__ls__ppu_8c__incl.md5 b/documentation/developer/html/db/d81/moc__translate__ea__ls__ppu_8c__incl.md5 new file mode 100755 index 0000000..84e305d --- /dev/null +++ b/documentation/developer/html/db/d81/moc__translate__ea__ls__ppu_8c__incl.md5 @@ -0,0 +1 @@ +fc165bd5bd6fae535ae7e4488718e7cc \ No newline at end of file diff --git a/documentation/developer/html/db/d81/moc__translate__ea__ls__ppu_8c__incl.png b/documentation/developer/html/db/d81/moc__translate__ea__ls__ppu_8c__incl.png new file mode 100755 index 0000000..7dee728 Binary files /dev/null and b/documentation/developer/html/db/d81/moc__translate__ea__ls__ppu_8c__incl.png differ diff --git a/documentation/developer/html/db/d82/moc__ssend__ppu_8c__incl.map b/documentation/developer/html/db/d82/moc__ssend__ppu_8c__incl.map new file mode 100755 index 0000000..4a74edd --- /dev/null +++ b/documentation/developer/html/db/d82/moc__ssend__ppu_8c__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/db/d82/moc__ssend__ppu_8c__incl.md5 b/documentation/developer/html/db/d82/moc__ssend__ppu_8c__incl.md5 new file mode 100755 index 0000000..0810fdc --- /dev/null +++ b/documentation/developer/html/db/d82/moc__ssend__ppu_8c__incl.md5 @@ -0,0 +1 @@ +6a2a77a95cd5eae87c00c30fba339858 \ No newline at end of file diff --git a/documentation/developer/html/db/d82/moc__ssend__ppu_8c__incl.png b/documentation/developer/html/db/d82/moc__ssend__ppu_8c__incl.png new file mode 100755 index 0000000..3cde4c2 Binary files /dev/null and b/documentation/developer/html/db/d82/moc__ssend__ppu_8c__incl.png differ diff --git a/documentation/developer/html/db/da3/moc__send__recv_8c-source.html b/documentation/developer/html/db/da3/moc__send__recv_8c-source.html new file mode 100755 index 0000000..31f455c --- /dev/null +++ b/documentation/developer/html/db/da3/moc__send__recv_8c-source.html @@ -0,0 +1,42 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_send_recv.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/dae/ppu_2moc_8h.html b/documentation/developer/html/db/dae/ppu_2moc_8h.html new file mode 100755 index 0000000..addb3be --- /dev/null +++ b/documentation/developer/html/db/dae/ppu_2moc_8h.html @@ -0,0 +1,100 @@ + + +MPI On Cell (Documentation): include/ppu/moc.h File Reference + + + + + +
+

include/ppu/moc.h File Reference

+

+#include "moc_dma_ppu.h"
+#include "moc_datatype_ppu.h"
+#include "../moc.h"
+#include <stdint.h>
+#include <libspe2.h>
+ +

+

+Include dependency graph for moc.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define MOC_SPU_THREAD_MAX   8
 Maximum number of possible SPU-threads.

Functions

PPU-only
int MOC_Get_avail_spu_count (int *count)
 Returns the number of available SPUs.
int MOC_Get_max_spu_count (int *count)
 Returns the number of SPUs.
int MOC_Add_spu_thread (spe_program_handle_t *phandle, void *argp)
 Adds a SPU-Thread.
int MOC_Set_buffer_size (uint32_t size)
 Sets the size of the buffer used for buffered communication.
int MOC_Set_queue_size (uint8_t size)
 Sets the size of the message-queues.
int MOC_Init (int *argc, char ***argv)
 Initialize the MPI execution environment.
+


Define Documentation

+ +
+
+ + + + +
#define MOC_SPU_THREAD_MAX   8
+
+
+ +

+Maximum number of possible SPU-threads. +

+ +

Definition at line 17 of file moc.h.

+ +

Referenced by MOC_Add_spu_thread().

+ +
+

+

+
Generated on Thu Feb 12 13:49:57 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/db1/imoc__dma-put__ppu_8c-source.html b/documentation/developer/html/db/db1/imoc__dma-put__ppu_8c-source.html new file mode 100755 index 0000000..27b0fb8 --- /dev/null +++ b/documentation/developer/html/db/db1/imoc__dma-put__ppu_8c-source.html @@ -0,0 +1,99 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-put_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/db7/imoc__macros__ppu_8h-source.html b/documentation/developer/html/db/db7/imoc__macros__ppu_8h-source.html new file mode 100755 index 0000000..b8d3dc5 --- /dev/null +++ b/documentation/developer/html/db/db7/imoc__macros__ppu_8h-source.html @@ -0,0 +1,70 @@ + + +MPI On Cell (Documentation): include/internal/ppu/imoc_macros_ppu.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/dbc/moc__bsend__ppu_8c__incl.map b/documentation/developer/html/db/dbc/moc__bsend__ppu_8c__incl.map new file mode 100755 index 0000000..4a74edd --- /dev/null +++ b/documentation/developer/html/db/dbc/moc__bsend__ppu_8c__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/db/dbc/moc__bsend__ppu_8c__incl.md5 b/documentation/developer/html/db/dbc/moc__bsend__ppu_8c__incl.md5 new file mode 100755 index 0000000..63b4624 --- /dev/null +++ b/documentation/developer/html/db/dbc/moc__bsend__ppu_8c__incl.md5 @@ -0,0 +1 @@ +3809b9d7bfda7ef837c49530cb15fd5b \ No newline at end of file diff --git a/documentation/developer/html/db/dbc/moc__bsend__ppu_8c__incl.png b/documentation/developer/html/db/dbc/moc__bsend__ppu_8c__incl.png new file mode 100755 index 0000000..56067b7 Binary files /dev/null and b/documentation/developer/html/db/dbc/moc__bsend__ppu_8c__incl.png differ diff --git a/documentation/developer/html/db/dc2/group__broadcast.html b/documentation/developer/html/db/dc2/group__broadcast.html new file mode 100755 index 0000000..544732f --- /dev/null +++ b/documentation/developer/html/db/dc2/group__broadcast.html @@ -0,0 +1,173 @@ + + +MPI On Cell (Documentation): Collective Communication + + + + + +
+

Collective Communication
+ +[End-User Documentation] +

+

+

+Collaboration diagram for Collective Communication:
+
+
+ +
+
+

Detailed Description

+Communication that involves a group of processes. +

+A collective operation is normally executed by having all processes in the group call the communication routine, with matching arguments. Since there are no means for creating groups currently implemented, the only available groups are MOC_COMM_WORLD and MOC_COMM_SELF. +

+ + + + + + + + + +

Functions

int MOC_Bcast (void *buffer, int count, MOC_Datatype datatype, int root, MOC_Comm comm)
 Broadcasts a message from the process with rank "root" to all other processes of the group.
int MOC_Barrier (MOC_Comm comm)
 Blocks the caller until all processes in the communicator have called it; that is, the call returns at any process only after all members of the communicator have entered the call.
+


Function Documentation

+ +
+
+ + + + + + + + + +
int MOC_Barrier (MOC_Comm  comm  ) 
+
+
+ +

+Blocks the caller until all processes in the communicator have called it; that is, the call returns at any process only after all members of the communicator have entered the call. +

+

Parameters:
+ + +
comm in communicator of message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 11 of file moc_barrier_ppu.c.

+ +

References __attribute__(), moc_node_handle_ppu_struct::comm_size, moc_message_envelope_struct::flags, IMOC_BARRIER_TAG, IMOC_EA_REMOTE_QUEUE, IMOC_EA_REMOTE_QUEUE_ENTRY, IMOC_get_entry(), IMOC_getFreeEntry(), IMOC_LS_REMOTE_QUEUE, MEMCPY_GET_TRESHOLD, MOC_COMM_SELF, MOC_COMM_WORLD, MOC_ERR_COMM, MOC_ERR_INTERN, moc_ppu_thread_count, moc_spu_thread_list, node_handle, moc_node_handle_ppu_struct::queue_size, moc_node_handle_ppu_struct::rank, moc_spu_thread_struct::speid, and moc_message_envelope_struct::value.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Bcast (void *  buffer,
int  count,
MOC_Datatype  datatype,
int  root,
MOC_Comm  comm 
)
+
+
+ +

+Broadcasts a message from the process with rank "root" to all other processes of the group. +

+

Note:
The broadcast-message can also be received by a MOC_Recv using MOC_BCAST_TAG.
+
Parameters:
+ + + + + + +
buffer inout starting address of buffer
count in number of elements to be send or received
datatype in Type of elements to be send or received
root in rank of the process who sends the broadcast-message
comm in communicator of message
+
+ +

+Sending branch

+Receiving Branch +

Definition at line 9 of file moc_bcast.c.

+ +

References MOC_BCAST_TAG, MOC_COMM_SELF, MOC_ISend(), MOC_Recv(), MOC_Wait(), node_handle, and moc_node_handle_ppu_struct::rank.

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +
+

+

+
Generated on Thu Feb 12 13:50:57 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/db/dc2/group__broadcast.png b/documentation/developer/html/db/dc2/group__broadcast.png new file mode 100755 index 0000000..37db439 Binary files /dev/null and b/documentation/developer/html/db/dc2/group__broadcast.png differ diff --git a/documentation/developer/html/db/dc2/group__broadcast_g110b00d5a4d9f970ddf8e9bd4c2d8834_cgraph.map b/documentation/developer/html/db/dc2/group__broadcast_g110b00d5a4d9f970ddf8e9bd4c2d8834_cgraph.map new file mode 100755 index 0000000..19ce092 --- /dev/null +++ b/documentation/developer/html/db/dc2/group__broadcast_g110b00d5a4d9f970ddf8e9bd4c2d8834_cgraph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/db/dc2/group__broadcast_g110b00d5a4d9f970ddf8e9bd4c2d8834_cgraph.md5 b/documentation/developer/html/db/dc2/group__broadcast_g110b00d5a4d9f970ddf8e9bd4c2d8834_cgraph.md5 new file mode 100755 index 0000000..f92d3fb --- /dev/null +++ b/documentation/developer/html/db/dc2/group__broadcast_g110b00d5a4d9f970ddf8e9bd4c2d8834_cgraph.md5 @@ -0,0 +1 @@ +874ae12f880a127d785396263f9a5601 \ No newline at end of file diff --git a/documentation/developer/html/db/dc2/group__broadcast_g110b00d5a4d9f970ddf8e9bd4c2d8834_cgraph.png b/documentation/developer/html/db/dc2/group__broadcast_g110b00d5a4d9f970ddf8e9bd4c2d8834_cgraph.png new file mode 100755 index 0000000..d4d9196 Binary files /dev/null and b/documentation/developer/html/db/dc2/group__broadcast_g110b00d5a4d9f970ddf8e9bd4c2d8834_cgraph.png differ diff --git a/documentation/developer/html/db/dc2/group__broadcast_gfd25e9a19a1ad4032fdf3703531167d6_cgraph.map b/documentation/developer/html/db/dc2/group__broadcast_gfd25e9a19a1ad4032fdf3703531167d6_cgraph.map new file mode 100755 index 0000000..d385528 --- /dev/null +++ b/documentation/developer/html/db/dc2/group__broadcast_gfd25e9a19a1ad4032fdf3703531167d6_cgraph.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/db/dc2/group__broadcast_gfd25e9a19a1ad4032fdf3703531167d6_cgraph.md5 b/documentation/developer/html/db/dc2/group__broadcast_gfd25e9a19a1ad4032fdf3703531167d6_cgraph.md5 new file mode 100755 index 0000000..b93b063 --- /dev/null +++ b/documentation/developer/html/db/dc2/group__broadcast_gfd25e9a19a1ad4032fdf3703531167d6_cgraph.md5 @@ -0,0 +1 @@ +f849291fe0c99be7e9ef7dcbdb3e84df \ No newline at end of file diff --git a/documentation/developer/html/db/dc2/group__broadcast_gfd25e9a19a1ad4032fdf3703531167d6_cgraph.png b/documentation/developer/html/db/dc2/group__broadcast_gfd25e9a19a1ad4032fdf3703531167d6_cgraph.png new file mode 100755 index 0000000..ba1da5e Binary files /dev/null and b/documentation/developer/html/db/dc2/group__broadcast_gfd25e9a19a1ad4032fdf3703531167d6_cgraph.png differ diff --git a/documentation/developer/html/db/dcc/moc__dma__spu_8h__incl.map b/documentation/developer/html/db/dcc/moc__dma__spu_8h__incl.map new file mode 100755 index 0000000..dc73f80 --- /dev/null +++ b/documentation/developer/html/db/dcc/moc__dma__spu_8h__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/documentation/developer/html/db/dcc/moc__dma__spu_8h__incl.md5 b/documentation/developer/html/db/dcc/moc__dma__spu_8h__incl.md5 new file mode 100755 index 0000000..adca93c --- /dev/null +++ b/documentation/developer/html/db/dcc/moc__dma__spu_8h__incl.md5 @@ -0,0 +1 @@ +c9f0fe3c463ffceadf808af79de34c81 \ No newline at end of file diff --git a/documentation/developer/html/db/dcc/moc__dma__spu_8h__incl.png b/documentation/developer/html/db/dcc/moc__dma__spu_8h__incl.png new file mode 100755 index 0000000..fa94bc6 Binary files /dev/null and b/documentation/developer/html/db/dcc/moc__dma__spu_8h__incl.png differ diff --git a/documentation/developer/html/db/dd9/imoc__core__spu_8h-source.html b/documentation/developer/html/db/dd9/imoc__core__spu_8h-source.html new file mode 100755 index 0000000..110aa8c --- /dev/null +++ b/documentation/developer/html/db/dd9/imoc__core__spu_8h-source.html @@ -0,0 +1,75 @@ + + +MPI On Cell (Documentation): include/internal/spu/imoc_core_spu.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/d02/moc__issend__ppu_8c.html b/documentation/developer/html/dc/d02/moc__issend__ppu_8c.html new file mode 100755 index 0000000..b9f0d13 --- /dev/null +++ b/documentation/developer/html/dc/d02/moc__issend__ppu_8c.html @@ -0,0 +1,51 @@ + + +MPI On Cell (Documentation): src/ppu/communication/moc_issend_ppu.c File Reference + + + + + +
+

src/ppu/communication/moc_issend_ppu.c File Reference

+

+#include <stdio.h>
+#include <string.h>
+#include <moc.h>
+#include <ppu/moc_datatype_ppu.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_macros_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_issend_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_ISsend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, MOC_Request *request)
 Performs a non-blocking synchronous mode send operation.
+

+
Generated on Thu Feb 12 13:50:17 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/d05/moc__dma__ppu_8h__dep__incl.map b/documentation/developer/html/dc/d05/moc__dma__ppu_8h__dep__incl.map new file mode 100755 index 0000000..a2a87c6 --- /dev/null +++ b/documentation/developer/html/dc/d05/moc__dma__ppu_8h__dep__incl.map @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/dc/d05/moc__dma__ppu_8h__dep__incl.md5 b/documentation/developer/html/dc/d05/moc__dma__ppu_8h__dep__incl.md5 new file mode 100755 index 0000000..e22432b --- /dev/null +++ b/documentation/developer/html/dc/d05/moc__dma__ppu_8h__dep__incl.md5 @@ -0,0 +1 @@ +1be9c80386a69d64ea8e64d9b05d9f94 \ No newline at end of file diff --git a/documentation/developer/html/dc/d05/moc__dma__ppu_8h__dep__incl.png b/documentation/developer/html/dc/d05/moc__dma__ppu_8h__dep__incl.png new file mode 100755 index 0000000..8f26a96 Binary files /dev/null and b/documentation/developer/html/dc/d05/moc__dma__ppu_8h__dep__incl.png differ diff --git a/documentation/developer/html/dc/d3a/ppu_2moc_8h__incl.map b/documentation/developer/html/dc/d3a/ppu_2moc_8h__incl.map new file mode 100755 index 0000000..b8bdf56 --- /dev/null +++ b/documentation/developer/html/dc/d3a/ppu_2moc_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/documentation/developer/html/dc/d3a/ppu_2moc_8h__incl.md5 b/documentation/developer/html/dc/d3a/ppu_2moc_8h__incl.md5 new file mode 100755 index 0000000..0075277 --- /dev/null +++ b/documentation/developer/html/dc/d3a/ppu_2moc_8h__incl.md5 @@ -0,0 +1 @@ +ec702f27817282faca09de912a5914e4 \ No newline at end of file diff --git a/documentation/developer/html/dc/d3a/ppu_2moc_8h__incl.png b/documentation/developer/html/dc/d3a/ppu_2moc_8h__incl.png new file mode 100755 index 0000000..7d8dc4e Binary files /dev/null and b/documentation/developer/html/dc/d3a/ppu_2moc_8h__incl.png differ diff --git a/documentation/developer/html/dc/d54/moc__wtime__ppu_8c.html b/documentation/developer/html/dc/d54/moc__wtime__ppu_8c.html new file mode 100755 index 0000000..1926a4a --- /dev/null +++ b/documentation/developer/html/dc/d54/moc__wtime__ppu_8c.html @@ -0,0 +1,47 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_wtime_ppu.c File Reference + + + + + +
+

src/ppu/system/moc_wtime_ppu.c File Reference

+

+#include <moc.h>
+#include <time.h>
+#include <sys/time.h>
+ +

+

+Include dependency graph for moc_wtime_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

double MOC_Wtime (void)
 Returns a floating-point number of seconds, representing elapsed wall-clock time since some time in the past.
+

+
Generated on Thu Feb 12 13:50:32 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/d59/moc__barrier__spu_8c.html b/documentation/developer/html/dc/d59/moc__barrier__spu_8c.html new file mode 100755 index 0000000..f04f831 --- /dev/null +++ b/documentation/developer/html/dc/d59/moc__barrier__spu_8c.html @@ -0,0 +1,72 @@ + + +MPI On Cell (Documentation): src/spu/communication/moc_barrier_spu.c File Reference + + + + + +
+

src/spu/communication/moc_barrier_spu.c File Reference

+

+#include <stdio.h>
+#include <string.h>
+#include <spu_mfcio.h>
+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/imoc_macros.h>
+#include "internal/spu/imoc_core_spu.h"
+ +

+

+Include dependency graph for moc_barrier_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + +

Defines

#define IMOC_BARRIER_TAG   1

Functions

int MOC_Barrier (MOC_Comm comm)
 Blocks the caller until all processes in the communicator have called it; that is, the call returns at any process only after all members of the communicator have entered the call.
+


Define Documentation

+ +
+
+ + + + +
#define IMOC_BARRIER_TAG   1
+
+
+ +

+ +

Definition at line 10 of file moc_barrier_spu.c.

+ +
+

+

+
Generated on Thu Feb 12 13:50:32 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/d5d/moc__barrier__ppu_8c-source.html b/documentation/developer/html/dc/d5d/moc__barrier__ppu_8c-source.html new file mode 100755 index 0000000..4c55169 --- /dev/null +++ b/documentation/developer/html/dc/d5d/moc__barrier__ppu_8c-source.html @@ -0,0 +1,97 @@ + + +MPI On Cell (Documentation): src/ppu/communication/moc_barrier_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/d6e/group__p2p__datatype.html b/documentation/developer/html/dc/d6e/group__p2p__datatype.html new file mode 100755 index 0000000..46589ac --- /dev/null +++ b/documentation/developer/html/dc/d6e/group__p2p__datatype.html @@ -0,0 +1,722 @@ + + +MPI On Cell (Documentation): Datatypes + + + + + +
+

Datatypes
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Datatypes:
+
+
+ +
+
+

Detailed Description

+Datatypes supported by MOC. +

+There are the normal datatypes defined by C (char, short, int, ...) and special vector-datatypes used by the Cell Broadband Engine. For more information see "C/C++ Language Extensions for Cell Broadband Engine Architecture - Version 2.5" chapter 1.1. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

PPU & SPU

typedef uint8_t MOC_Datatype
 Typedef defining MOC_Datatype.
#define MOC_BYTE   ((MOC_Datatype)0+0)
 MOC_Byte is a special datatype.
#define MOC_CHAR   ((MOC_Datatype)0+1)
 C-Datatype char.
#define MOC_UNSIGNED_CHAR   ((MOC_Datatype)0+2)
 C-Datatype unsigned char.
#define MOC_SHORT   ((MOC_Datatype)16+0)
 C-Datatype short.
#define MOC_UNSIGNED_SHORT   ((MOC_Datatype)16+1)
 C-Datatype unsigned short.
#define MOC_INT   ((MOC_Datatype)32+0)
 C-Datatype int.
#define MOC_UNSIGNED   ((MOC_Datatype)32+1)
 C-Datatype unsigned int.
#define MOC_LONG_LONG   ((MOC_Datatype)64+0)
 C-Datatype long long.
#define MOC_UNSIGNED_LONG_LONG   ((MOC_Datatype)64+1)
 C-Datatype unsigned long long.
#define MOC_FLOAT   ((MOC_Datatype)32+2)
 C-Datatype float.
#define MOC_DOUBLE   ((MOC_Datatype)64+5)
 C-Datatype double.
#define MOC_VEC_UCHAR16   ((MOC_Datatype)128+0)
 Cell-specific Datatype vector unsigned char (vec_uchar16).
#define MOC_VEC_USHORT8   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector unsigned short (vec_ushort8).
#define MOC_VEC_UINT4   ((MOC_Datatype)128+2)
 Cell-specific Datatype vector unsigned int (vec_uint4).
#define MOC_VEC_CHAR16   ((MOC_Datatype)128+4)
 Cell-specific Datatype vector signed char (vec_char16).
#define MOC_VEC_SHORT8   ((MOC_Datatype)128+3)
 Cell-specific Datatype vector signed short (vec_short8).
#define MOC_VEC_INT4   ((MOC_Datatype)128+5)
 Cell-specific Datatype vector signed int (vec_int4).
#define MOC_VEC_FLOAT4   ((MOC_Datatype)128+6)
 Cell-specific Datatype vector float (vec_float4).

PPU-only

#define MOC_LONG   ((MOC_Datatype)64+2)
 C-Datatype long.
#define MOC_UNSIGNED_LONG   ((MOC_Datatype)64+3)
 C-Datatype unsigned long.
#define MOC_VEC_BCHAR16   ((MOC_Datatype)128+0)
 Cell-specific Datatype vector bool char (vec_bchar16).
#define MOC_VEC_BSHORT8   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector bool short (vec_bshort8).
#define MOC_VEC_PIXEL8   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector pixel (vec_pixel8).
#define MOC_VEC_BINT4   ((MOC_Datatype)128+2)
 Cell-specific Datatype vector bool int (vec_bint4).

SPU-only

#define MOC_LONG   ((MOC_Datatype)32+2)
 C-Datatype long.
#define MOC_UNSIGNED_LONG   ((MOC_Datatype)32+3)
 C-Datatype unsigned long.
#define MOC_VEC_ULLONG2   ((MOC_Datatype)128+0)
 Cell-specific Datatype vector unsigned long long (vec_ullong2).
#define MOC_VEC_LLONG2   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector signed long long (vec_llong2).
#define MOC_VEC_DOUBLE2   ((MOC_Datatype)128+2)
 Cell-specific Datatype vector double (vec_double2).
+


Define Documentation

+ +
+
+ + + + +
#define MOC_BYTE   ((MOC_Datatype)0+0)
+
+
+ +

+MOC_Byte is a special datatype. +

+It can match any datatype. It has a size of 1 byte. +

Definition at line 38 of file moc_datatype.h.

+ +

Referenced by MOC_Recv().

+ +
+

+ +

+
+ + + + +
#define MOC_CHAR   ((MOC_Datatype)0+1)
+
+
+ +

+C-Datatype char. +

+It has a size of 1 byte. +

Definition at line 44 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_DOUBLE   ((MOC_Datatype)64+5)
+
+
+ +

+C-Datatype double. +

+It has a size of 8 byte. +

Definition at line 98 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_FLOAT   ((MOC_Datatype)32+2)
+
+
+ +

+C-Datatype float. +

+It has a size of 4 byte. +

Definition at line 92 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_INT   ((MOC_Datatype)32+0)
+
+
+ +

+C-Datatype int. +

+It has a size of 4 byte. +

Definition at line 68 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_LONG   ((MOC_Datatype)32+2)
+
+
+ +

+C-Datatype long. +

+It has a size of 4 byte.

Attention:
On the PPU long has a size of 8 byte. So if you are trying to send data of type long from the PPU to a SPU or vice versa there will be an error.
+ +

Definition at line 22 of file moc_datatype_spu.h.

+ +
+

+ +

+
+ + + + +
#define MOC_LONG   ((MOC_Datatype)64+2)
+
+
+ +

+C-Datatype long. +

+It has a size of 8 byte.

Attention:
On the SPU long has a size of 4 byte. So if you are trying to send data of type long from the PPU to a SPU or vice versa there will be an error.
+ +

Definition at line 21 of file moc_datatype_ppu.h.

+ +
+

+ +

+
+ + + + +
#define MOC_LONG_LONG   ((MOC_Datatype)64+0)
+
+
+ +

+C-Datatype long long. +

+It has a size of 8 byte. +

Definition at line 80 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_SHORT   ((MOC_Datatype)16+0)
+
+
+ +

+C-Datatype short. +

+It has a size of 2 byte. +

Definition at line 56 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_UNSIGNED   ((MOC_Datatype)32+1)
+
+
+ +

+C-Datatype unsigned int. +

+It has a size of 4 byte. +

Definition at line 74 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_UNSIGNED_CHAR   ((MOC_Datatype)0+2)
+
+
+ +

+C-Datatype unsigned char. +

+It has a size of 1 byte. +

Definition at line 50 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_UNSIGNED_LONG   ((MOC_Datatype)32+3)
+
+
+ +

+C-Datatype unsigned long. +

+It has a size of 4 byte.

Attention:
On the SPU unsigned long has a size of 8 byte. So if you are trying to send data of type long from the PPU to a SPU or vice versa there will be an error.
+ +

Definition at line 31 of file moc_datatype_spu.h.

+ +
+

+ +

+
+ + + + +
#define MOC_UNSIGNED_LONG   ((MOC_Datatype)64+3)
+
+
+ +

+C-Datatype unsigned long. +

+It has a size of 8 byte.

Attention:
On the SPU unsigned long has a size of 4 byte. So if you are trying to send data of type long from the PPU to a SPU or vice versa there will be an error.
+ +

Definition at line 30 of file moc_datatype_ppu.h.

+ +
+

+ +

+
+ + + + +
#define MOC_UNSIGNED_LONG_LONG   ((MOC_Datatype)64+1)
+
+
+ +

+C-Datatype unsigned long long. +

+It has a size of 8 byte. +

Definition at line 86 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_UNSIGNED_SHORT   ((MOC_Datatype)16+1)
+
+
+ +

+C-Datatype unsigned short. +

+It has a size of 2 byte. +

Definition at line 62 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_BCHAR16   ((MOC_Datatype)128+0)
+
+
+ +

+Cell-specific Datatype vector bool char (vec_bchar16). +

+It has a size of 16 byte.

Note:
PPU-only. Is mapped to the SPU-Datatype vector unsigned char.
+ +

Definition at line 39 of file moc_datatype_ppu.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_BINT4   ((MOC_Datatype)128+2)
+
+
+ +

+Cell-specific Datatype vector bool int (vec_bint4). +

+It has a size of 16 byte.

Note:
PPU-only. Is mapped to the SPU-Datatype vector unsigned int.
+ +

Definition at line 60 of file moc_datatype_ppu.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_BSHORT8   ((MOC_Datatype)128+1)
+
+
+ +

+Cell-specific Datatype vector bool short (vec_bshort8). +

+It has a size of 16 byte.

Note:
PPU-only. Is mapped to the SPU-Datatype vector unsigned short.
+ +

Definition at line 46 of file moc_datatype_ppu.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_CHAR16   ((MOC_Datatype)128+4)
+
+
+ +

+Cell-specific Datatype vector signed char (vec_char16). +

+It has a size of 16 byte. +

Definition at line 123 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_DOUBLE2   ((MOC_Datatype)128+2)
+
+
+ +

+Cell-specific Datatype vector double (vec_double2). +

+It has a size of 16 byte.

Note:
SPU-only. Is mapped to the PPU-Datatype vector bool int.
+ +

Definition at line 54 of file moc_datatype_spu.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_FLOAT4   ((MOC_Datatype)128+6)
+
+
+ +

+Cell-specific Datatype vector float (vec_float4). +

+It has a size of 16 byte. +

Definition at line 142 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_INT4   ((MOC_Datatype)128+5)
+
+
+ +

+Cell-specific Datatype vector signed int (vec_int4). +

+It has a size of 16 byte. +

Definition at line 135 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_LLONG2   ((MOC_Datatype)128+1)
+
+
+ +

+Cell-specific Datatype vector signed long long (vec_llong2). +

+It has a size of 16 byte.

Note:
SPU-only. Is mapped to the PPU-Datatype vector bool short.
+ +

Definition at line 47 of file moc_datatype_spu.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_PIXEL8   ((MOC_Datatype)128+1)
+
+
+ +

+Cell-specific Datatype vector pixel (vec_pixel8). +

+It has a size of 16 byte.

Note:
PPU-only. Is mapped to the SPU-Datatype vector unsigned short.
+ +

Definition at line 53 of file moc_datatype_ppu.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_SHORT8   ((MOC_Datatype)128+3)
+
+
+ +

+Cell-specific Datatype vector signed short (vec_short8). +

+It has a size of 16 byte. +

Definition at line 129 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_UCHAR16   ((MOC_Datatype)128+0)
+
+
+ +

+Cell-specific Datatype vector unsigned char (vec_uchar16). +

+It has a size of 16 byte. +

Definition at line 105 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_UINT4   ((MOC_Datatype)128+2)
+
+
+ +

+Cell-specific Datatype vector unsigned int (vec_uint4). +

+It has a size of 16 byte. +

Definition at line 117 of file moc_datatype.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_ULLONG2   ((MOC_Datatype)128+0)
+
+
+ +

+Cell-specific Datatype vector unsigned long long (vec_ullong2). +

+It has a size of 16 byte.

Note:
SPU-only. Is mapped to the PPU-Datatype vector bool char.
+ +

Definition at line 40 of file moc_datatype_spu.h.

+ +
+

+ +

+
+ + + + +
#define MOC_VEC_USHORT8   ((MOC_Datatype)128+1)
+
+
+ +

+Cell-specific Datatype vector unsigned short (vec_ushort8). +

+It has a size of 16 byte. +

Definition at line 111 of file moc_datatype.h.

+ +
+

+


Typedef Documentation

+ +
+
+ + + + +
typedef uint8_t MOC_Datatype
+
+
+ +

+Typedef defining MOC_Datatype. +

+One byte is used to encode the Data-Type. The first four msb hold the size in byte / 2 ( if ((datatype & 0xF0)>>4) == 0 then size = 1 else size = ((datatype & 0xF0)>>4)*2 ) and the four lsb hold an id. The combination of id and size is used to uniquely identify a datatype (or rather a group of datatypes belonging together). +

Definition at line 32 of file moc_datatype.h.

+ +
+

+

+
Generated on Thu Feb 12 13:50:49 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/d6e/group__p2p__datatype.png b/documentation/developer/html/dc/d6e/group__p2p__datatype.png new file mode 100755 index 0000000..0bdda77 Binary files /dev/null and b/documentation/developer/html/dc/d6e/group__p2p__datatype.png differ diff --git a/documentation/developer/html/dc/d78/imoc__dma-get__spu_8c-source.html b/documentation/developer/html/dc/d78/imoc__dma-get__spu_8c-source.html new file mode 100755 index 0000000..20a40d2 --- /dev/null +++ b/documentation/developer/html/dc/d78/imoc__dma-get__spu_8c-source.html @@ -0,0 +1,92 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-get_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/d91/moc__add__spu__thread__ppu_8c__incl.map b/documentation/developer/html/dc/d91/moc__add__spu__thread__ppu_8c__incl.map new file mode 100755 index 0000000..95f125a --- /dev/null +++ b/documentation/developer/html/dc/d91/moc__add__spu__thread__ppu_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/dc/d91/moc__add__spu__thread__ppu_8c__incl.md5 b/documentation/developer/html/dc/d91/moc__add__spu__thread__ppu_8c__incl.md5 new file mode 100755 index 0000000..f4d9765 --- /dev/null +++ b/documentation/developer/html/dc/d91/moc__add__spu__thread__ppu_8c__incl.md5 @@ -0,0 +1 @@ +cb968ff311914c8c151e4fc717786b88 \ No newline at end of file diff --git a/documentation/developer/html/dc/d91/moc__add__spu__thread__ppu_8c__incl.png b/documentation/developer/html/dc/d91/moc__add__spu__thread__ppu_8c__incl.png new file mode 100755 index 0000000..f62d970 Binary files /dev/null and b/documentation/developer/html/dc/d91/moc__add__spu__thread__ppu_8c__incl.png differ diff --git a/documentation/developer/html/dc/d92/moc__bcast_8c__incl.map b/documentation/developer/html/dc/d92/moc__bcast_8c__incl.map new file mode 100755 index 0000000..511b41f --- /dev/null +++ b/documentation/developer/html/dc/d92/moc__bcast_8c__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/documentation/developer/html/dc/d92/moc__bcast_8c__incl.md5 b/documentation/developer/html/dc/d92/moc__bcast_8c__incl.md5 new file mode 100755 index 0000000..51ac41c --- /dev/null +++ b/documentation/developer/html/dc/d92/moc__bcast_8c__incl.md5 @@ -0,0 +1 @@ +7bbe54ddea98d5d6ddba57dc3c3831c4 \ No newline at end of file diff --git a/documentation/developer/html/dc/d92/moc__bcast_8c__incl.png b/documentation/developer/html/dc/d92/moc__bcast_8c__incl.png new file mode 100755 index 0000000..a76f067 Binary files /dev/null and b/documentation/developer/html/dc/d92/moc__bcast_8c__incl.png differ diff --git a/documentation/developer/html/dc/d92/moc__ssend__spu_8c-source.html b/documentation/developer/html/dc/d92/moc__ssend__spu_8c-source.html new file mode 100755 index 0000000..c9bd8a8 --- /dev/null +++ b/documentation/developer/html/dc/d92/moc__ssend__spu_8c-source.html @@ -0,0 +1,123 @@ + + +MPI On Cell (Documentation): src/spu/communication/moc_ssend_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/d9b/imoc__core__spu_8c-source.html b/documentation/developer/html/dc/d9b/imoc__core__spu_8c-source.html new file mode 100755 index 0000000..a64763f --- /dev/null +++ b/documentation/developer/html/dc/d9b/imoc__core__spu_8c-source.html @@ -0,0 +1,26 @@ + + +MPI On Cell (Documentation): src/spu/internal/imoc_core_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/dad/moc__datatype__ppu_8h__incl.map b/documentation/developer/html/dc/dad/moc__datatype__ppu_8h__incl.map new file mode 100755 index 0000000..bacd368 --- /dev/null +++ b/documentation/developer/html/dc/dad/moc__datatype__ppu_8h__incl.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/dc/dad/moc__datatype__ppu_8h__incl.md5 b/documentation/developer/html/dc/dad/moc__datatype__ppu_8h__incl.md5 new file mode 100755 index 0000000..e683312 --- /dev/null +++ b/documentation/developer/html/dc/dad/moc__datatype__ppu_8h__incl.md5 @@ -0,0 +1 @@ +0cc6f5c997d9dad19f3982cef489bb8e \ No newline at end of file diff --git a/documentation/developer/html/dc/dad/moc__datatype__ppu_8h__incl.png b/documentation/developer/html/dc/dad/moc__datatype__ppu_8h__incl.png new file mode 100755 index 0000000..2178c38 Binary files /dev/null and b/documentation/developer/html/dc/dad/moc__datatype__ppu_8h__incl.png differ diff --git a/documentation/developer/html/dc/db7/moc__recv__ppu_8c.html b/documentation/developer/html/dc/db7/moc__recv__ppu_8c.html new file mode 100755 index 0000000..e62d1f2 --- /dev/null +++ b/documentation/developer/html/dc/db7/moc__recv__ppu_8c.html @@ -0,0 +1,52 @@ + + +MPI On Cell (Documentation): src/ppu/communication/moc_recv_ppu.c File Reference + + + + + +
+

src/ppu/communication/moc_recv_ppu.c File Reference

+

+#include <string.h>
+#include <stdio.h>
+#include <moc.h>
+#include <ppu/moc_datatype_ppu.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_macros_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_recv_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Recv (void *buf, int count, MOC_Datatype datatype, int source, int tag, MOC_Comm comm, MOC_Status *status)
 Performs a blocking standard mode receive operation.
+

+
Generated on Thu Feb 12 13:50:18 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/db8/moc__dma__ppu_8h__incl.map b/documentation/developer/html/dc/db8/moc__dma__ppu_8h__incl.map new file mode 100755 index 0000000..bebfa8f --- /dev/null +++ b/documentation/developer/html/dc/db8/moc__dma__ppu_8h__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/documentation/developer/html/dc/db8/moc__dma__ppu_8h__incl.md5 b/documentation/developer/html/dc/db8/moc__dma__ppu_8h__incl.md5 new file mode 100755 index 0000000..65b6a45 --- /dev/null +++ b/documentation/developer/html/dc/db8/moc__dma__ppu_8h__incl.md5 @@ -0,0 +1 @@ +a7ae4374e69090e2613f2ccf78f570b2 \ No newline at end of file diff --git a/documentation/developer/html/dc/db8/moc__dma__ppu_8h__incl.png b/documentation/developer/html/dc/db8/moc__dma__ppu_8h__incl.png new file mode 100755 index 0000000..737f8d1 Binary files /dev/null and b/documentation/developer/html/dc/db8/moc__dma__ppu_8h__incl.png differ diff --git a/documentation/developer/html/dc/dc0/group__internal__main.html b/documentation/developer/html/dc/dc0/group__internal__main.html new file mode 100755 index 0000000..0134946 --- /dev/null +++ b/documentation/developer/html/dc/dc0/group__internal__main.html @@ -0,0 +1,69 @@ + + +MPI On Cell (Documentation): Developer Documentation + + + + + +
+

Developer Documentation

+

+

+Collaboration diagram for Developer Documentation:
+
+
+ +
+
+

Detailed Description

+This section deals with the internal design and functionality. +

+For correct understanding knowledge about the functionality of the Cell Broadband Engine is needed. So you should read the official CBE documentation before you continue.

+

Note:
Because we had only access to a playstation, we cannot guarantee correct execution on another CBE-machine than a playstation 3.
+ +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+


Modules

 Implementation-Core
 This section deals with the data-structures and the basic concepts which form the core of this implementation.
 Environmental Management
 Internals about Startup & Shutdown and Error-Handling.
 Groups, Context and Communicators
 At the moment user-defined groups and communicators are not implemented and maybe never will be.
 Point-to-Point Communication
 Internals about Point-to-Point Communication.
 Collective Communication
 Internals about Collective Communication.
+

+
Generated on Thu Feb 12 13:51:03 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/dc0/group__internal__main.png b/documentation/developer/html/dc/dc0/group__internal__main.png new file mode 100755 index 0000000..d5d79e9 Binary files /dev/null and b/documentation/developer/html/dc/dc0/group__internal__main.png differ diff --git a/documentation/developer/html/dc/dc2/moc__get__max__spu__ppu_8c__incl.map b/documentation/developer/html/dc/dc2/moc__get__max__spu__ppu_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/dc/dc2/moc__get__max__spu__ppu_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/dc/dc2/moc__get__max__spu__ppu_8c__incl.md5 b/documentation/developer/html/dc/dc2/moc__get__max__spu__ppu_8c__incl.md5 new file mode 100755 index 0000000..769c3e2 --- /dev/null +++ b/documentation/developer/html/dc/dc2/moc__get__max__spu__ppu_8c__incl.md5 @@ -0,0 +1 @@ +3d5a94654e0aa76164308de2731d31e3 \ No newline at end of file diff --git a/documentation/developer/html/dc/dc2/moc__get__max__spu__ppu_8c__incl.png b/documentation/developer/html/dc/dc2/moc__get__max__spu__ppu_8c__incl.png new file mode 100755 index 0000000..d276082 Binary files /dev/null and b/documentation/developer/html/dc/dc2/moc__get__max__spu__ppu_8c__incl.png differ diff --git a/documentation/developer/html/dc/dc3/imoc_8h__dep__incl.map b/documentation/developer/html/dc/dc3/imoc_8h__dep__incl.map new file mode 100755 index 0000000..823ce8f --- /dev/null +++ b/documentation/developer/html/dc/dc3/imoc_8h__dep__incl.map @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/dc/dc3/imoc_8h__dep__incl.md5 b/documentation/developer/html/dc/dc3/imoc_8h__dep__incl.md5 new file mode 100755 index 0000000..e056e4d --- /dev/null +++ b/documentation/developer/html/dc/dc3/imoc_8h__dep__incl.md5 @@ -0,0 +1 @@ +36688bd4de03ac2f5f3df935dcda75b0 \ No newline at end of file diff --git a/documentation/developer/html/dc/dc3/imoc_8h__dep__incl.png b/documentation/developer/html/dc/dc3/imoc_8h__dep__incl.png new file mode 100755 index 0000000..c7a1dcd Binary files /dev/null and b/documentation/developer/html/dc/dc3/imoc_8h__dep__incl.png differ diff --git a/documentation/developer/html/dc/dcb/spu_2moc_8h-source.html b/documentation/developer/html/dc/dcb/spu_2moc_8h-source.html new file mode 100755 index 0000000..4dd5227 --- /dev/null +++ b/documentation/developer/html/dc/dcb/spu_2moc_8h-source.html @@ -0,0 +1,70 @@ + + +MPI On Cell (Documentation): include/spu/moc.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/dd0/moc__add__spu__thread__ppu_8c.html b/documentation/developer/html/dc/dd0/moc__add__spu__thread__ppu_8c.html new file mode 100755 index 0000000..47c8371 --- /dev/null +++ b/documentation/developer/html/dc/dd0/moc__add__spu__thread__ppu_8c.html @@ -0,0 +1,52 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_add_spu_thread_ppu.c File Reference + + + + + +
+

src/ppu/system/moc_add_spu_thread_ppu.c File Reference

+

+#include <malloc_align.h>
+#include <free_align.h>
+#include <stdlib.h>
+#include <string.h>
+#include <moc.h>
+#include <ppu/moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_add_spu_thread_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Add_spu_thread (spe_program_handle_t *phandle, void *argp)
 Adds a SPU-Thread.
+

+
Generated on Thu Feb 12 13:50:27 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/ddb/imoc__dma-tags__ppu_8c__incl.map b/documentation/developer/html/dc/ddb/imoc__dma-tags__ppu_8c__incl.map new file mode 100755 index 0000000..0968bb1 --- /dev/null +++ b/documentation/developer/html/dc/ddb/imoc__dma-tags__ppu_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/dc/ddb/imoc__dma-tags__ppu_8c__incl.md5 b/documentation/developer/html/dc/ddb/imoc__dma-tags__ppu_8c__incl.md5 new file mode 100755 index 0000000..d7c1cb9 --- /dev/null +++ b/documentation/developer/html/dc/ddb/imoc__dma-tags__ppu_8c__incl.md5 @@ -0,0 +1 @@ +1e97bb43d561f2309dcd1a29b95a5e5e \ No newline at end of file diff --git a/documentation/developer/html/dc/ddb/imoc__dma-tags__ppu_8c__incl.png b/documentation/developer/html/dc/ddb/imoc__dma-tags__ppu_8c__incl.png new file mode 100755 index 0000000..a6874d7 Binary files /dev/null and b/documentation/developer/html/dc/ddb/imoc__dma-tags__ppu_8c__incl.png differ diff --git a/documentation/developer/html/dc/de8/moc__dma-iput__spu_8c.html b/documentation/developer/html/dc/de8/moc__dma-iput__spu_8c.html new file mode 100755 index 0000000..98741fa --- /dev/null +++ b/documentation/developer/html/dc/de8/moc__dma-iput__spu_8c.html @@ -0,0 +1,52 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-iput_spu.c File Reference + + + + + +
+

src/spu/dma/moc_dma-iput_spu.c File Reference

+

+#include <spu_mfcio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <moc.h>
+#include <spu/moc_dma_spu.h>
+#include <internal/imoc.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+ +

+

+Include dependency graph for moc_dma-iput_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_IPut_data (void *source, uint64_t target, int count, MOC_Datatype datatype, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-put operation.
+

+
Generated on Thu Feb 12 13:50:35 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/df1/group__internal__spu__thread.html b/documentation/developer/html/dc/df1/group__internal__spu__thread.html new file mode 100755 index 0000000..3cfb0bf --- /dev/null +++ b/documentation/developer/html/dc/df1/group__internal__spu__thread.html @@ -0,0 +1,344 @@ + + +MPI On Cell (Documentation): SPU-Thread Management + + + + + +
+

SPU-Thread Management
+ +[Startup & Shutdown] +

+

+

+Collaboration diagram for SPU-Thread Management:
+
+
+ +
+
+

Detailed Description

+This section deals about the creation and management of SPU-threads. +

+

Note:
PPU only
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  moc_spu_thread_struct
 SPU-Thread structure. More...

Typedefs

typedef struct
+moc_spu_thread_struct 
moc_spu_thread_t
 SPU-Thread structure.

Functions

void * moc_spe_pthread_func (void *arg)
 PThread-function for creating SPU-Threads.

Variables

uint8_t moc_spu_thread_count
 actual number of SPU-Threads.
uint8_t moc_ppu_thread_count
 actual number of PPU-Threads.
uint32_t moc_spu_buffer_size
 init buffer size
uint8_t moc_spu_queue_size
 init message-queue size
moc_spu_thread_t moc_spu_thread_list [MOC_SPU_THREAD_MAX]
 array of SPU-Threads.
uint8_t moc_spu_thread_count = 0
 Holds the value of currently configured SPU-Threads.
uint8_t moc_ppu_thread_count = 0
 Holds the value of currently configured PPU-Threads.
moc_spu_thread_t moc_spu_thread_list [MOC_SPU_THREAD_MAX]
 Holds information about the SPU-Threads.
uint32_t moc_spu_buffer_size = MOC_BUFFER_SIZE
uint8_t moc_spu_queue_size = MOC_QUEUE_SIZE
+


Typedef Documentation

+ +
+
+ + + + +
typedef struct moc_spu_thread_struct moc_spu_thread_t
+
+
+ +

+SPU-Thread structure. +

+

Note:
PPU only
+Stores information about the SPU-Threads the managing PPU-Process needs to know. typedef of moc_spu_thread_struct +
+

+


Function Documentation

+ +
+
+ + + + + + + + + +
void * moc_spe_pthread_func (void *  arg  ) 
+
+
+ +

+PThread-function for creating SPU-Threads. +

+ +

Definition at line 37 of file imoc_spe_thread_ppu.c.

+ +

References moc_spu_thread_struct::argp, moc_spu_thread_struct::envp, moc_spu_thread_struct::rank, moc_spu_thread_struct::spe_entry_adress, moc_spu_thread_struct::speid, and moc_spu_thread_struct::stop_info.

+ +

Referenced by MOC_Init().

+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+


Variable Documentation

+ +
+
+ + + + +
uint8_t moc_ppu_thread_count = 0
+
+
+ +

+Holds the value of currently configured PPU-Threads. +

+ +

Definition at line 24 of file imoc_spe_thread_ppu.c.

+ +
+

+ +

+
+ + + + +
uint8_t moc_ppu_thread_count
+
+
+ +

+actual number of PPU-Threads. +

+

Note:
PPU only
+ +

Definition at line 106 of file imoc_core_ppu.h.

+ +

Referenced by IMOC_get_data(), IMOC_iget_data(), IMOC_iput_data(), IMOC_put_data(), IMOC_test_dma(), IMOC_wait_dma(), MOC_Barrier(), MOC_Bsend(), MOC_Init(), MOC_ISsend(), MOC_Recv(), MOC_Ssend(), and MOC_Translate_EA_to_LS().

+ +
+

+ +

+
+ + + + +
uint32_t moc_spu_buffer_size = MOC_BUFFER_SIZE
+
+
+ +

+ +

Definition at line 33 of file imoc_spe_thread_ppu.c.

+ +
+

+ +

+
+ + + + +
uint32_t moc_spu_buffer_size
+
+
+ +

+init buffer size +

+ +

Definition at line 111 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Init(), and MOC_Set_buffer_size().

+ +
+

+ +

+
+ + + + +
uint8_t moc_spu_queue_size = MOC_QUEUE_SIZE
+
+
+ +

+ +

Definition at line 35 of file imoc_spe_thread_ppu.c.

+ +
+

+ +

+
+ + + + +
uint8_t moc_spu_queue_size
+
+
+ +

+init message-queue size +

+ +

Definition at line 116 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Init(), and MOC_Set_queue_size().

+ +
+

+ +

+
+ + + + +
uint8_t moc_spu_thread_count = 0
+
+
+ +

+Holds the value of currently configured SPU-Threads. +

+ +

Definition at line 19 of file imoc_spe_thread_ppu.c.

+ +
+

+ +

+
+ + + + +
uint8_t moc_spu_thread_count
+
+
+ +

+actual number of SPU-Threads. +

+

Note:
PPU only
+ +

Definition at line 98 of file imoc_core_ppu.h.

+ +

Referenced by MOC_Add_spu_thread(), MOC_Finalize(), and MOC_Init().

+ +
+

+ +

+
+ + + + +
moc_spu_thread_t moc_spu_thread_list[MOC_SPU_THREAD_MAX]
+
+
+ +

+Holds information about the SPU-Threads. +

+order of indices is equal to order of ranks. +

Definition at line 31 of file imoc_spe_thread_ppu.c.

+ +
+

+ +

+

+
Generated on Thu Feb 12 13:51:06 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dc/df1/group__internal__spu__thread.png b/documentation/developer/html/dc/df1/group__internal__spu__thread.png new file mode 100755 index 0000000..d1abc47 Binary files /dev/null and b/documentation/developer/html/dc/df1/group__internal__spu__thread.png differ diff --git a/documentation/developer/html/dc/df1/group__internal__spu__thread_g669046500ec44affc79468b12ddaaf92_icgraph.map b/documentation/developer/html/dc/df1/group__internal__spu__thread_g669046500ec44affc79468b12ddaaf92_icgraph.map new file mode 100755 index 0000000..d09cd75 --- /dev/null +++ b/documentation/developer/html/dc/df1/group__internal__spu__thread_g669046500ec44affc79468b12ddaaf92_icgraph.map @@ -0,0 +1 @@ + diff --git a/documentation/developer/html/dc/df1/group__internal__spu__thread_g669046500ec44affc79468b12ddaaf92_icgraph.md5 b/documentation/developer/html/dc/df1/group__internal__spu__thread_g669046500ec44affc79468b12ddaaf92_icgraph.md5 new file mode 100755 index 0000000..452228d --- /dev/null +++ b/documentation/developer/html/dc/df1/group__internal__spu__thread_g669046500ec44affc79468b12ddaaf92_icgraph.md5 @@ -0,0 +1 @@ +9c7372553d37b2f8a184e7a9c0bca186 \ No newline at end of file diff --git a/documentation/developer/html/dc/df1/group__internal__spu__thread_g669046500ec44affc79468b12ddaaf92_icgraph.png b/documentation/developer/html/dc/df1/group__internal__spu__thread_g669046500ec44affc79468b12ddaaf92_icgraph.png new file mode 100755 index 0000000..a0f9ea2 Binary files /dev/null and b/documentation/developer/html/dc/df1/group__internal__spu__thread_g669046500ec44affc79468b12ddaaf92_icgraph.png differ diff --git a/documentation/developer/html/dd/d07/imoc__dma-iput__ppu_8c-source.html b/documentation/developer/html/dd/d07/imoc__dma-iput__ppu_8c-source.html new file mode 100755 index 0000000..8be6602 --- /dev/null +++ b/documentation/developer/html/dd/d07/imoc__dma-iput__ppu_8c-source.html @@ -0,0 +1,122 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-iput_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/d14/moc__get__proc__name__ppu_8c-source.html b/documentation/developer/html/dd/d14/moc__get__proc__name__ppu_8c-source.html new file mode 100755 index 0000000..f099ec5 --- /dev/null +++ b/documentation/developer/html/dd/d14/moc__get__proc__name__ppu_8c-source.html @@ -0,0 +1,34 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_get_proc_name_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/d18/imoc__get__free__mid_8c-source.html b/documentation/developer/html/dd/d18/imoc__get__free__mid_8c-source.html new file mode 100755 index 0000000..2074b69 --- /dev/null +++ b/documentation/developer/html/dd/d18/imoc__get__free__mid_8c-source.html @@ -0,0 +1,44 @@ + + +MPI On Cell (Documentation): src/noarch/internal/communication/imoc_get_free_mid.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/d1f/imoc__test__message_8c-source.html b/documentation/developer/html/dd/d1f/imoc__test__message_8c-source.html new file mode 100755 index 0000000..4810033 --- /dev/null +++ b/documentation/developer/html/dd/d1f/imoc__test__message_8c-source.html @@ -0,0 +1,36 @@ + + +MPI On Cell (Documentation): src/noarch/internal/communication/imoc_test_message.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/d2b/moc__get__proc__name__ppu_8c__incl.map b/documentation/developer/html/dd/d2b/moc__get__proc__name__ppu_8c__incl.map new file mode 100755 index 0000000..5e0a798 --- /dev/null +++ b/documentation/developer/html/dd/d2b/moc__get__proc__name__ppu_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/documentation/developer/html/dd/d2b/moc__get__proc__name__ppu_8c__incl.md5 b/documentation/developer/html/dd/d2b/moc__get__proc__name__ppu_8c__incl.md5 new file mode 100755 index 0000000..9f925f2 --- /dev/null +++ b/documentation/developer/html/dd/d2b/moc__get__proc__name__ppu_8c__incl.md5 @@ -0,0 +1 @@ +b94f4dc9212b5004162272e5fa382b3c \ No newline at end of file diff --git a/documentation/developer/html/dd/d2b/moc__get__proc__name__ppu_8c__incl.png b/documentation/developer/html/dd/d2b/moc__get__proc__name__ppu_8c__incl.png new file mode 100755 index 0000000..c4a2c38 Binary files /dev/null and b/documentation/developer/html/dd/d2b/moc__get__proc__name__ppu_8c__incl.png differ diff --git a/documentation/developer/html/dd/d37/moc__issend__spu_8c-source.html b/documentation/developer/html/dd/d37/moc__issend__spu_8c-source.html new file mode 100755 index 0000000..d1613e1 --- /dev/null +++ b/documentation/developer/html/dd/d37/moc__issend__spu_8c-source.html @@ -0,0 +1,132 @@ + + +MPI On Cell (Documentation): src/spu/communication/moc_issend_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/d47/moc__iprobe_8c__incl.map b/documentation/developer/html/dd/d47/moc__iprobe_8c__incl.map new file mode 100755 index 0000000..e793a43 --- /dev/null +++ b/documentation/developer/html/dd/d47/moc__iprobe_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/dd/d47/moc__iprobe_8c__incl.md5 b/documentation/developer/html/dd/d47/moc__iprobe_8c__incl.md5 new file mode 100755 index 0000000..35edad4 --- /dev/null +++ b/documentation/developer/html/dd/d47/moc__iprobe_8c__incl.md5 @@ -0,0 +1 @@ +c515550ed0d38b02c37478a2ff0c55c9 \ No newline at end of file diff --git a/documentation/developer/html/dd/d47/moc__iprobe_8c__incl.png b/documentation/developer/html/dd/d47/moc__iprobe_8c__incl.png new file mode 100755 index 0000000..79012fd Binary files /dev/null and b/documentation/developer/html/dd/d47/moc__iprobe_8c__incl.png differ diff --git a/documentation/developer/html/dd/d4a/moc__send_8c-source.html b/documentation/developer/html/dd/d4a/moc__send_8c-source.html new file mode 100755 index 0000000..e4b85e4 --- /dev/null +++ b/documentation/developer/html/dd/d4a/moc__send_8c-source.html @@ -0,0 +1,58 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_send.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/d5a/moc__dma-test__spu_8c__incl.map b/documentation/developer/html/dd/d5a/moc__dma-test__spu_8c__incl.map new file mode 100755 index 0000000..e2e0baa --- /dev/null +++ b/documentation/developer/html/dd/d5a/moc__dma-test__spu_8c__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/documentation/developer/html/dd/d5a/moc__dma-test__spu_8c__incl.md5 b/documentation/developer/html/dd/d5a/moc__dma-test__spu_8c__incl.md5 new file mode 100755 index 0000000..2ae2889 --- /dev/null +++ b/documentation/developer/html/dd/d5a/moc__dma-test__spu_8c__incl.md5 @@ -0,0 +1 @@ +b3a5c48e1217ce31b88f7e3aed4d3f37 \ No newline at end of file diff --git a/documentation/developer/html/dd/d5a/moc__dma-test__spu_8c__incl.png b/documentation/developer/html/dd/d5a/moc__dma-test__spu_8c__incl.png new file mode 100755 index 0000000..9a24781 Binary files /dev/null and b/documentation/developer/html/dd/d5a/moc__dma-test__spu_8c__incl.png differ diff --git a/documentation/developer/html/dd/d7a/structMOC__Status__struct.html b/documentation/developer/html/dd/d7a/structMOC__Status__struct.html new file mode 100755 index 0000000..c5e684d --- /dev/null +++ b/documentation/developer/html/dd/d7a/structMOC__Status__struct.html @@ -0,0 +1,170 @@ + + +MPI On Cell (Documentation): MOC_Status_struct Struct Reference + + + + + +
+

MOC_Status_struct Struct Reference
+ +[Return Status] +

#include <moc.h> +

+

+Collaboration diagram for MOC_Status_struct:
+
+

Collaboration graph
+
[legend]
+

Detailed Description

+Structure holding information about a received message. +

Definition at line 225 of file moc.h.

+ + + + + + + + + + + + + + + + + + +

Data Fields

uint8_t MOC_SOURCE
 message-source
uint8_t MOC_TAG
 message-tag
int MOC_ERROR
 error-code
int message_size
 message-size in byte (internal-variable)
uint8_t mid
 message-ID (internal-variable)
+

Field Documentation

+ +
+
+ + + + +
uint8_t MOC_Status_struct::MOC_SOURCE
+
+
+ +

+message-source +

+ +

Definition at line 227 of file moc.h.

+ +

Referenced by IMOC_get_entry(), MOC_Iprobe(), MOC_Probe(), MOC_Recv(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+
+ + + + +
uint8_t MOC_Status_struct::MOC_TAG
+
+
+ +

+message-tag +

+ +

Definition at line 228 of file moc.h.

+ +

Referenced by MOC_Iprobe(), MOC_Probe(), MOC_Recv(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+ +
+ +

+error-code +

+ +

Definition at line 229 of file moc.h.

+ +

Referenced by MOC_Iprobe(), MOC_Probe(), MOC_Recv(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+ +
+ +

+message-size in byte (internal-variable) +

+ +

Definition at line 230 of file moc.h.

+ +

Referenced by MOC_Get_count(), MOC_Iprobe(), MOC_Probe(), MOC_Recv(), MOC_Test(), and MOC_Wait().

+ +
+

+ +

+
+ + + + +
uint8_t MOC_Status_struct::mid
+
+
+ +

+message-ID (internal-variable) +

+ +

Definition at line 231 of file moc.h.

+ +

Referenced by MOC_Iprobe(), MOC_Probe(), and MOC_Recv().

+ +
+

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/d7b/structmoc__message__envelope__struct__coll__graph.map b/documentation/developer/html/dd/d7b/structmoc__message__envelope__struct__coll__graph.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/developer/html/dd/d7b/structmoc__message__envelope__struct__coll__graph.md5 b/documentation/developer/html/dd/d7b/structmoc__message__envelope__struct__coll__graph.md5 new file mode 100755 index 0000000..df96f7f --- /dev/null +++ b/documentation/developer/html/dd/d7b/structmoc__message__envelope__struct__coll__graph.md5 @@ -0,0 +1 @@ +695ff923aff305726526b24e44e28da1 \ No newline at end of file diff --git a/documentation/developer/html/dd/d7b/structmoc__message__envelope__struct__coll__graph.png b/documentation/developer/html/dd/d7b/structmoc__message__envelope__struct__coll__graph.png new file mode 100755 index 0000000..97b509f Binary files /dev/null and b/documentation/developer/html/dd/d7b/structmoc__message__envelope__struct__coll__graph.png differ diff --git a/documentation/developer/html/dd/d90/moc__dma-get__ppu_8c-source.html b/documentation/developer/html/dd/d90/moc__dma-get__ppu_8c-source.html new file mode 100755 index 0000000..6716cf9 --- /dev/null +++ b/documentation/developer/html/dd/d90/moc__dma-get__ppu_8c-source.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-get_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/d9a/imoc__get__free__mid_8c.html b/documentation/developer/html/dd/d9a/imoc__get__free__mid_8c.html new file mode 100755 index 0000000..baf796d --- /dev/null +++ b/documentation/developer/html/dd/d9a/imoc__get__free__mid_8c.html @@ -0,0 +1,47 @@ + + +MPI On Cell (Documentation): src/noarch/internal/communication/imoc_get_free_mid.c File Reference + + + + + +
+

src/noarch/internal/communication/imoc_get_free_mid.c File Reference

+

+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for imoc_get_free_mid.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_getFreeMID (int *mid)
 Get free message-ID.
+

+
Generated on Thu Feb 12 13:50:11 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/d9c/moc__dma__spu_8h.html b/documentation/developer/html/dd/d9c/moc__dma__spu_8h.html new file mode 100755 index 0000000..3976695 --- /dev/null +++ b/documentation/developer/html/dd/d9c/moc__dma__spu_8h.html @@ -0,0 +1,75 @@ + + +MPI On Cell (Documentation): include/spu/moc_dma_spu.h File Reference + + + + + +
+

include/spu/moc_dma_spu.h File Reference

+

+#include <stdint.h>
+#include "moc_datatype_spu.h"
+#include "../moc.h"
+ +

+

+Include dependency graph for moc_dma_spu.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + +

Functions

int MOC_Test_data (MOC_Request *request, int *flag)
 Tests if a MOC_IGet_data or IMOC_IPut_data is completed.
int MOC_Wait_data (MOC_Request *request)
 Waits till a MOC_IGet_data or IMOC_IPut_data is completed.
SPU-only
int MOC_Get_data (void *target, uint64_t source, int count, MOC_Datatype datatype)
 Wrapper-function for a blocking DMA-get operation.
int MOC_Put_data (void *source, uint64_t target, int count, MOC_Datatype datatype)
 Wrapper-function for a blocking DMA-put operation.
int MOC_IGet_data (void *target, uint64_t source, int count, MOC_Datatype datatype, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-get operation.
int MOC_IPut_data (void *source, uint64_t target, int count, MOC_Datatype datatype, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-put operation.
int MOC_Translate_LS_to_EA (void *ls, uint64_t *ea)
 Translates a local-store address of the calling SPU into the corresponding effective-address.
+

+
Generated on Thu Feb 12 13:50:05 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/dad/moc__dma-put__spu_8c__incl.map b/documentation/developer/html/dd/dad/moc__dma-put__spu_8c__incl.map new file mode 100755 index 0000000..503cd3c --- /dev/null +++ b/documentation/developer/html/dd/dad/moc__dma-put__spu_8c__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/documentation/developer/html/dd/dad/moc__dma-put__spu_8c__incl.md5 b/documentation/developer/html/dd/dad/moc__dma-put__spu_8c__incl.md5 new file mode 100755 index 0000000..90a7d65 --- /dev/null +++ b/documentation/developer/html/dd/dad/moc__dma-put__spu_8c__incl.md5 @@ -0,0 +1 @@ +42499955540ac6f891c496a754ec8a43 \ No newline at end of file diff --git a/documentation/developer/html/dd/dad/moc__dma-put__spu_8c__incl.png b/documentation/developer/html/dd/dad/moc__dma-put__spu_8c__incl.png new file mode 100755 index 0000000..e868f9a Binary files /dev/null and b/documentation/developer/html/dd/dad/moc__dma-put__spu_8c__incl.png differ diff --git a/documentation/developer/html/dd/db1/imoc__dma-wait__spu_8c-source.html b/documentation/developer/html/dd/db1/imoc__dma-wait__spu_8c-source.html new file mode 100755 index 0000000..09d88af --- /dev/null +++ b/documentation/developer/html/dd/db1/imoc__dma-wait__spu_8c-source.html @@ -0,0 +1,43 @@ + + +MPI On Cell (Documentation): src/spu/internal/dma/imoc_dma-wait_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/db2/imoc__dma__ppu_8h__incl.map b/documentation/developer/html/dd/db2/imoc__dma__ppu_8h__incl.map new file mode 100755 index 0000000..812e032 --- /dev/null +++ b/documentation/developer/html/dd/db2/imoc__dma__ppu_8h__incl.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/dd/db2/imoc__dma__ppu_8h__incl.md5 b/documentation/developer/html/dd/db2/imoc__dma__ppu_8h__incl.md5 new file mode 100755 index 0000000..9cfc446 --- /dev/null +++ b/documentation/developer/html/dd/db2/imoc__dma__ppu_8h__incl.md5 @@ -0,0 +1 @@ +a4b9cf358029449fc4362e77e22a8dd2 \ No newline at end of file diff --git a/documentation/developer/html/dd/db2/imoc__dma__ppu_8h__incl.png b/documentation/developer/html/dd/db2/imoc__dma__ppu_8h__incl.png new file mode 100755 index 0000000..eea9cd3 Binary files /dev/null and b/documentation/developer/html/dd/db2/imoc__dma__ppu_8h__incl.png differ diff --git a/documentation/developer/html/dd/db2/moc__add__spu__thread__ppu_8c-source.html b/documentation/developer/html/dd/db2/moc__add__spu__thread__ppu_8c-source.html new file mode 100755 index 0000000..5ab1c87 --- /dev/null +++ b/documentation/developer/html/dd/db2/moc__add__spu__thread__ppu_8c-source.html @@ -0,0 +1,58 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_add_spu_thread_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/dc0/structmoc__internal__buffer__node__struct.html b/documentation/developer/html/dd/dc0/structmoc__internal__buffer__node__struct.html new file mode 100755 index 0000000..82d5fc6 --- /dev/null +++ b/documentation/developer/html/dd/dc0/structmoc__internal__buffer__node__struct.html @@ -0,0 +1,99 @@ + + +MPI On Cell (Documentation): moc_internal_buffer_node_struct Struct Reference + + + + + +
+

moc_internal_buffer_node_struct Struct Reference
+ +[Buffer-Management] +

#include <imoc.h> +

+

+Collaboration diagram for moc_internal_buffer_node_struct:
+
+

Collaboration graph
+
[legend]
+

Detailed Description

+Node of linked list holding information about allocated buffer-space. +

Definition at line 180 of file imoc.h.

+ + + + + + + + + +

Data Fields

struct
+moc_internal_buffer_node_struct * 
next_node
 Pointer to next entry.
uint8_t mid
 Message-ID of message using buffer-space.
+

Field Documentation

+ +
+ +
+ +

+Pointer to next entry. +

+ +

Definition at line 182 of file imoc.h.

+ +

Referenced by __attribute__(), IMOC_bmalloc(), and MOC_Finalize().

+ +
+

+ +

+ +
+ +

+Message-ID of message using buffer-space. +

+Information about the used buffer-space is stored in the appropriate message-status-entry (mid is index of entry). +

Definition at line 184 of file imoc.h.

+ +

Referenced by __attribute__(), and IMOC_bmalloc().

+ +
+

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:19 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/dcb/moc__init__ppu_8c-source.html b/documentation/developer/html/dd/dcb/moc__init__ppu_8c-source.html new file mode 100755 index 0000000..9a8499f --- /dev/null +++ b/documentation/developer/html/dd/dcb/moc__init__ppu_8c-source.html @@ -0,0 +1,148 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_init_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/dd5/moc__dma-iput__ppu_8c-source.html b/documentation/developer/html/dd/dd5/moc__dma-iput__ppu_8c-source.html new file mode 100755 index 0000000..a9dc3ab --- /dev/null +++ b/documentation/developer/html/dd/dd5/moc__dma-iput__ppu_8c-source.html @@ -0,0 +1,57 @@ + + +MPI On Cell (Documentation): src/ppu/dma/moc_dma-iput_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/dec/imoc__core__ppu_8h__dep__incl.map b/documentation/developer/html/dd/dec/imoc__core__ppu_8h__dep__incl.map new file mode 100755 index 0000000..70d2ff2 --- /dev/null +++ b/documentation/developer/html/dd/dec/imoc__core__ppu_8h__dep__incl.map @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/dd/dec/imoc__core__ppu_8h__dep__incl.md5 b/documentation/developer/html/dd/dec/imoc__core__ppu_8h__dep__incl.md5 new file mode 100755 index 0000000..2964673 --- /dev/null +++ b/documentation/developer/html/dd/dec/imoc__core__ppu_8h__dep__incl.md5 @@ -0,0 +1 @@ +72cde4c29b56cd1e60a469396f10741c \ No newline at end of file diff --git a/documentation/developer/html/dd/dec/imoc__core__ppu_8h__dep__incl.png b/documentation/developer/html/dd/dec/imoc__core__ppu_8h__dep__incl.png new file mode 100755 index 0000000..af92bdb Binary files /dev/null and b/documentation/developer/html/dd/dec/imoc__core__ppu_8h__dep__incl.png differ diff --git a/documentation/developer/html/dd/df5/structmoc__message__status__struct.html b/documentation/developer/html/dd/df5/structmoc__message__status__struct.html new file mode 100755 index 0000000..60990ca --- /dev/null +++ b/documentation/developer/html/dd/df5/structmoc__message__status__struct.html @@ -0,0 +1,304 @@ + + +MPI On Cell (Documentation): moc_message_status_struct Struct Reference + + + + + +
+

moc_message_status_struct Struct Reference
+ +[Implementation-Core] +

#include <imoc_core.h> +

+

+Collaboration diagram for moc_message_status_struct:
+
+

Collaboration graph
+
[legend]
+

Detailed Description

+Message-status structure. +

+Is used to store information about the message-status and the buffer used in the message-status-array. +

Definition at line 125 of file imoc_core.h.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

uint32_t buffer_offset
 allocated buffer-offset from buffer-base
uint32_t message_size
 size of message in byte
uint32_t error_value
 optional error-code of message
union {
   struct {
      unsigned int   valid: 1
 Is this entry valid?
      unsigned int   outstanding: 1
 Message is not yet received?
      unsigned int   buffer_used: 1
 Is Bufferspace used?
      unsigned int   reserved: 5
 reserved
   }   bits
 flag-struct
   uint8_t   value
 union-value
} flags
 flag-union
uint8_t reserved [3]
 reserved
+

Field Documentation

+ +
+ +
+ +

+allocated buffer-offset from buffer-base +

+ +

Definition at line 127 of file imoc_core.h.

+ +

Referenced by IMOC_bmalloc().

+ +
+

+ +

+ +
+ +

+size of message in byte +

+ +

Definition at line 128 of file imoc_core.h.

+ +

Referenced by IMOC_bmalloc().

+ +
+

+ +

+ +
+ +

+optional error-code of message +

+ +

Definition at line 129 of file imoc_core.h.

+ +
+

+ +

+
+ + + + +
unsigned int moc_message_status_struct::valid
+
+
+ +

+Is this entry valid? +

+ +

Definition at line 134 of file imoc_core.h.

+ +
+

+ +

+
+ + + + +
unsigned int moc_message_status_struct::outstanding
+
+
+ +

+Message is not yet received? +

+ +

Definition at line 135 of file imoc_core.h.

+ +
+

+ +

+
+ + + + +
unsigned int moc_message_status_struct::buffer_used
+
+
+ +

+Is Bufferspace used? +

+ +

Definition at line 136 of file imoc_core.h.

+ +
+

+ +

+
+ + + + +
unsigned int moc_message_status_struct::reserved
+
+
+ +

+reserved +

+ +

Definition at line 137 of file imoc_core.h.

+ +
+

+ +

+ +

+ +
+ +

+union-value +

+ +

Definition at line 139 of file imoc_core.h.

+ +

Referenced by MOC_Wait().

+ +
+

+ +

+ +

+
+ + + + +
uint8_t moc_message_status_struct::reserved[3]
+
+
+ +

+reserved +

+ +

Definition at line 141 of file imoc_core.h.

+ +
+

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:20 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/df8/group__internal__core.html b/documentation/developer/html/dd/df8/group__internal__core.html new file mode 100755 index 0000000..5201366 --- /dev/null +++ b/documentation/developer/html/dd/df8/group__internal__core.html @@ -0,0 +1,380 @@ + + +MPI On Cell (Documentation): Implementation-Core + + + + + +
+

Implementation-Core
+ +[Developer Documentation] +

+

+

+Collaboration diagram for Implementation-Core:
+
+
+ +
+
+

Detailed Description

+This section deals with the data-structures and the basic concepts which form the core of this implementation. +

+

+Data-Structures

+Basically there are four data-structures. moc_message_envelope_struct holds meta-information about a message and moc_message_status_struct holds information about used buffer-space and provide means for a receiving proccess to send some information back to the sending process.

+moc_process_struct stores information every node needs to know about the other nodes to successfully communicate with them.

+The forth data-structure (actually there are two) moc_node_handle_ppu_struct respectively moc_node_handle_spu_struct holds information a node know about itself and the execution environment.

+Concepts

+Every node has (N-1) queues for incoming messages, where N is the overall number of node. Each queue is exclusively used by a specific remote node to write meta-data about the message to be send into it (queue-entries are of type moc_message_envelope_struct). Because there are several independend queues and no global time is available, an exact order of all incoming messages cannot be guaranteed. Corrent ordering can only be guaranteed for messages from the same source-node. The queues are implemented in form of a big array which is divided in (N-1) equally sized pieces.

+Furthermore every node has an array of size (N-1)*m where m is the size of a message-queue (entries are of type moc_message_status_struct). This array is used for buffer-management and to report the status of a message back to the sender. Every message currently under progress has a message-id which is unique in respect to the sending-node. This message-id is equal to the index of the corresponding entry of the status-array.

+In order to communicate with other nodes every node also keeps a list of all nodes in the execution environment (entries are of type moc_process_struct).

+Pointers to the own arrays and some further information a node needs to know (e.g. own rank) is stored in the globally accessible variable node_handle. +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Modules

 Address-Macros
 Predefined Macros for calculating Addresses of Message-Queue and Status-Array.
 Test-Macros
 Predefined Macros for testing the validity of parameters.

Data Structures

struct  moc_message_envelope_struct
 Message-envelope structure. More...
struct  moc_message_status_struct
 Message-status structure. More...
struct  moc_process_struct
 Process-information structure. More...
struct  moc_node_handle_ppu_struct
 Node-handle structure. More...
struct  moc_node_handle_spu_struct
 Node-handle structure. More...

PPU & SPU

typedef struct
+moc_message_envelope_struct 
moc_message_envelope_t
 Message-envelope structure.
typedef struct
+moc_message_status_struct 
moc_message_status_t
 Message-status structure.
typedef struct moc_process_struct moc_process_t
 Process-information structure.
#define MOC_QUEUE_SIZE   4
 Default size of the message-queues.
#define MOC_BUFFER_SIZE   2048
 Default size of the buffers used for buffered communication.
#define IMOC_MESSAGE_CHANNEL_DMA   0
 Constant for moc_message_envelope_t.flags.channel.
#define IMOC_MESSAGE_CHANNEL_ENV   1
 Constant for moc_message_envelope_t.flags.channel.
#define MOC_PPU_PROCESS   0
 Constant for moc_process_struct.type.
#define MOC_SPU_PROCESS   1
 Constant for moc_process_struct.type.

PPU only

typedef struct
+moc_node_handle_ppu_struct 
moc_node_handle_ppu_t
 Node-handle structure.
moc_node_handle_ppu_t node_handle
 Information each node knowns about himself and the world.

SPU only

typedef struct
+moc_node_handle_spu_struct 
moc_node_handle_spu_t
 Node-handle structure.
moc_node_handle_spu_t node_handle
 Information each node knowns about himself and the world.
+


Define Documentation

+ +
+
+ + + + +
#define IMOC_MESSAGE_CHANNEL_DMA   0
+
+
+ +

+Constant for moc_message_envelope_t.flags.channel. +

+Message is transported via a DMA-Call. +

Definition at line 108 of file imoc_core.h.

+ +

Referenced by MOC_Bsend(), MOC_ISsend(), MOC_Recv(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + +
#define IMOC_MESSAGE_CHANNEL_ENV   1
+
+
+ +

+Constant for moc_message_envelope_t.flags.channel. +

+Message is embedded in message-envelope. +

Definition at line 116 of file imoc_core.h.

+ +

Referenced by MOC_Bsend(), MOC_ISsend(), MOC_Recv(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + +
#define MOC_BUFFER_SIZE   2048
+
+
+ +

+Default size of the buffers used for buffered communication. +

+ +

Definition at line 68 of file imoc_core.h.

+ +
+

+ +

+
+ + + + +
#define MOC_PPU_PROCESS   0
+
+
+ +

+Constant for moc_process_struct.type. +

+ +

Definition at line 148 of file imoc_core.h.

+ +

Referenced by MOC_Init().

+ +
+

+ +

+
+ + + + +
#define MOC_QUEUE_SIZE   4
+
+
+ +

+Default size of the message-queues. +

+ +

Definition at line 63 of file imoc_core.h.

+ +
+

+ +

+
+ + + + +
#define MOC_SPU_PROCESS   1
+
+
+ +

+Constant for moc_process_struct.type. +

+ +

Definition at line 153 of file imoc_core.h.

+ +

Referenced by MOC_Init().

+ +
+

+


Typedef Documentation

+ +
+ +
+ +

+Message-envelope structure. +

+Is used to store meta-data about the message in the message-queues of the receiving process. +

+

+ +

+ +
+ +

+Message-status structure. +

+Is used to store information about the message-status and the buffer used in the message-status-array. +

+

+ +

+ +
+ +

+Node-handle structure. +

+

Note:
PPU only
+Information each node knowns about himself and the world. typedef of moc_node_handle_ppu_struct +
+

+ +

+ +
+ +

+Node-handle structure. +

+

Note:
SPU only
+Information each node knowns about himself and the world. typedef of moc_node_handle_spu_struct +
+

+ +

+
+ + + + +
typedef struct moc_process_struct moc_process_t
+
+
+ +

+Process-information structure. +

+Stores information about a MOC-Process. This information is used for communication between the processes. +

+

+


Variable Documentation

+ +
+ +
+ +

+Information each node knowns about himself and the world. +

+

Note:
SPU only
+ +

Definition at line 47 of file imoc_core_spu.h.

+ +
+

+ +

+

+
Generated on Thu Feb 12 13:51:03 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/df8/group__internal__core.png b/documentation/developer/html/dd/df8/group__internal__core.png new file mode 100755 index 0000000..50fef91 Binary files /dev/null and b/documentation/developer/html/dd/df8/group__internal__core.png differ diff --git a/documentation/developer/html/dd/dfd/moc__dma-get__spu_8c-source.html b/documentation/developer/html/dd/dfd/moc__dma-get__spu_8c-source.html new file mode 100755 index 0000000..519ac9f --- /dev/null +++ b/documentation/developer/html/dd/dfd/moc__dma-get__spu_8c-source.html @@ -0,0 +1,49 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-get_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dd/dfe/structerror__strings__struct.html b/documentation/developer/html/dd/dfe/structerror__strings__struct.html new file mode 100755 index 0000000..d2af687 --- /dev/null +++ b/documentation/developer/html/dd/dfe/structerror__strings__struct.html @@ -0,0 +1,96 @@ + + +MPI On Cell (Documentation): error_strings_struct Struct Reference + + + + + +
+

error_strings_struct Struct Reference
+ +[Error-Handling] +

#include <imoc.h> +

+

+Collaboration diagram for error_strings_struct:
+
+

Collaboration graph
+
[legend]
+

Detailed Description

+Error-Strings structure. +

+stores the error-string to a given error-code +

Definition at line 145 of file imoc.h.

+ + + + + + + + + +

Data Fields

int error_code
 error-code
char * text
 error-text
+

Field Documentation

+ +
+ +
+ +

+error-code +

+ +

Definition at line 147 of file imoc.h.

+ +
+

+ +

+
+ + + + +
char* error_strings_struct::text
+
+
+ +

+error-text +

+ +

Definition at line 148 of file imoc.h.

+ +
+

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:18 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/d0b/moc__get__max__spu__ppu_8c-source.html b/documentation/developer/html/de/d0b/moc__get__max__spu__ppu_8c-source.html new file mode 100755 index 0000000..7c7f347 --- /dev/null +++ b/documentation/developer/html/de/d0b/moc__get__max__spu__ppu_8c-source.html @@ -0,0 +1,33 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_get_max_spu_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/d1b/group__environment__main.html b/documentation/developer/html/de/d1b/group__environment__main.html new file mode 100755 index 0000000..8f81d8e --- /dev/null +++ b/documentation/developer/html/de/d1b/group__environment__main.html @@ -0,0 +1,65 @@ + + +MPI On Cell (Documentation): Environmental Management + + + + + +
+

Environmental Management
+ +[End-User Documentation] +

+

+

+Collaboration diagram for Environmental Management:
+
+
+ +
+
+

Detailed Description

+This chapter discusses routines for getting and, where appropriate, setting various parameters that relate to the MPI implementation and the execution environment (such as error handling, startup&shutdown and Time). +

+ +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + +

+


Modules

 Startup & Shutdown
 Functions to start and terminate the MOC-execution environment.
 Implementation Information
 Functions to return some information about the execution environment and the MOC-implementation.
 Error-Handling
 This section describes how errors are handled.
 Timers and Synchronization
 Functions to measure time.
+

+
Generated on Thu Feb 12 13:50:44 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/d1b/group__environment__main.png b/documentation/developer/html/de/d1b/group__environment__main.png new file mode 100755 index 0000000..45bb245 Binary files /dev/null and b/documentation/developer/html/de/d1b/group__environment__main.png differ diff --git a/documentation/developer/html/de/d33/moc__wait_8c-source.html b/documentation/developer/html/de/d33/moc__wait_8c-source.html new file mode 100755 index 0000000..5c14ab9 --- /dev/null +++ b/documentation/developer/html/de/d33/moc__wait_8c-source.html @@ -0,0 +1,74 @@ + + +MPI On Cell (Documentation): src/noarch/communication/moc_wait.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/d4d/moc__error__string__ppu_8c.html b/documentation/developer/html/de/d4d/moc__error__string__ppu_8c.html new file mode 100755 index 0000000..26d5cdd --- /dev/null +++ b/documentation/developer/html/de/d4d/moc__error__string__ppu_8c.html @@ -0,0 +1,55 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_error_string_ppu.c File Reference + + + + + +
+

src/ppu/system/moc_error_string_ppu.c File Reference

+

+#include <stdlib.h>
+#include <string.h>
+#include <moc.h>
+#include <internal/imoc.h>
+ +

+

+Include dependency graph for moc_error_string_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + +

PPU-only

#define ERROR_STRINGS_COUNT   28
 error-message count
error_strings_t error_strings []
 stores the error-messages

Functions

int MOC_Error_string (int errorcode, char *string, int *resultlen)
 Returns an error-text for a given error code.
+

+
Generated on Thu Feb 12 13:50:27 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/d76/moc__issend__spu_8c.html b/documentation/developer/html/de/d76/moc__issend__spu_8c.html new file mode 100755 index 0000000..306f530 --- /dev/null +++ b/documentation/developer/html/de/d76/moc__issend__spu_8c.html @@ -0,0 +1,53 @@ + + +MPI On Cell (Documentation): src/spu/communication/moc_issend_spu.c File Reference + + + + + +
+

src/spu/communication/moc_issend_spu.c File Reference

+

+#include <string.h>
+#include <stdio.h>
+#include <spu_mfcio.h>
+#include <moc.h>
+#include <spu/moc_datatype_spu.h>
+#include <internal/imoc.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+#include <internal/spu/imoc_core_spu.h>
+ +

+

+Include dependency graph for moc_issend_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_ISsend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, MOC_Request *request)
 Performs a non-blocking synchronous mode send operation.
+

+
Generated on Thu Feb 12 13:50:33 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/d84/group__p2p__buffered.html b/documentation/developer/html/de/d84/group__p2p__buffered.html new file mode 100755 index 0000000..d38bad4 --- /dev/null +++ b/documentation/developer/html/de/d84/group__p2p__buffered.html @@ -0,0 +1,145 @@ + + +MPI On Cell (Documentation): Buffered Communication + + + + + +
+

Buffered Communication
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Buffered Communication:
+
+
+ +
+
+

Detailed Description

+Blocking sending of messages with the use of an intermediate buffer. +

+The blocking buffered send-operation returns if the send-buffer can be safely reused (after the data has been copied into the intermediate buffer). +

+ + + + + + +

Functions

int MOC_Bsend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking buffered mode send operation.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Bsend (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  tag,
MOC_Comm  comm 
)
+
+
+ +

+Performs a blocking buffered mode send operation. +

+

Note:
This routine blocks until the send-buffer is free.
+
Parameters:
+ + + + + + + +
buf in Pointer to buffer where data is stored
count in Number of elements to be send (not equal to actual byte-value)
datatype in Type of elements to be send
dest in Rank of receiving process
tag in Tag of message
comm in communicator of message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +

Definition at line 10 of file moc_bsend_ppu.c.

+ +

References __attribute__(), moc_message_status_struct::bits, moc_message_status_struct::flags, IMOC_bmalloc(), IMOC_EA_REMOTE_QUEUE, IMOC_EA_REMOTE_QUEUE_ENTRY, IMOC_getFreeEntry(), IMOC_getFreeMID(), IMOC_LS_REMOTE_QUEUE, IMOC_MESSAGE_CHANNEL_DMA, IMOC_MESSAGE_CHANNEL_ENV, IMOC_put_data(), IMOC_TEST_ALIGNMENT, IMOC_TEST_BUFFER, IMOC_TEST_BYTECOUNT, IMOC_TEST_COMM_SEND, IMOC_TEST_PROC_NULL, IMOC_TEST_PROC_SELF, IMOC_TEST_RANK, IMOC_TEST_TAG_SEND, MEMCPY_GET_TRESHOLD, MOC_ERR_INTERN, MOC_ERR_NO_BUFFER, moc_ppu_thread_count, moc_spu_thread_list, node_handle, moc_node_handle_ppu_struct::queue_size, and moc_node_handle_ppu_struct::status_array_base.

+ +

Referenced by MOC_ISend(), and MOC_Send().

+ +

+

+Here is the call graph for this function:
+
+

+ + +
+ +

+

+Here is the caller graph for this function:
+
+

+ + +
+ +
+

+

+
Generated on Thu Feb 12 13:50:52 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/d84/group__p2p__buffered.png b/documentation/developer/html/de/d84/group__p2p__buffered.png new file mode 100755 index 0000000..c33afd1 Binary files /dev/null and b/documentation/developer/html/de/d84/group__p2p__buffered.png differ diff --git a/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_cgraph.map b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_cgraph.map new file mode 100755 index 0000000..f3d0307 --- /dev/null +++ b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_cgraph.md5 b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_cgraph.md5 new file mode 100755 index 0000000..660d08c --- /dev/null +++ b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_cgraph.md5 @@ -0,0 +1 @@ +982ceb266004ec02527643c9d5bf5f05 \ No newline at end of file diff --git a/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_cgraph.png b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_cgraph.png new file mode 100755 index 0000000..99a2c25 Binary files /dev/null and b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_cgraph.png differ diff --git a/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_icgraph.map b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_icgraph.map new file mode 100755 index 0000000..56ed3cc --- /dev/null +++ b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_icgraph.md5 b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_icgraph.md5 new file mode 100755 index 0000000..105b25e --- /dev/null +++ b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_icgraph.md5 @@ -0,0 +1 @@ +f83d2d4aba5eb4378e78e0d6220b5f50 \ No newline at end of file diff --git a/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_icgraph.png b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_icgraph.png new file mode 100755 index 0000000..6019133 Binary files /dev/null and b/documentation/developer/html/de/d84/group__p2p__buffered_g307bf844e1416c7c021e4a3468209d0b_icgraph.png differ diff --git a/documentation/developer/html/de/d9d/moc__init__spu_8c-source.html b/documentation/developer/html/de/d9d/moc__init__spu_8c-source.html new file mode 100755 index 0000000..964d0e1 --- /dev/null +++ b/documentation/developer/html/de/d9d/moc__init__spu_8c-source.html @@ -0,0 +1,91 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_init_spu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/db4/group__internal__p2p__blocking.html b/documentation/developer/html/de/db4/group__internal__p2p__blocking.html new file mode 100755 index 0000000..27a0a52 --- /dev/null +++ b/documentation/developer/html/de/db4/group__internal__p2p__blocking.html @@ -0,0 +1,55 @@ + + +MPI On Cell (Documentation): Blocking Communication + + + + + +
+

Blocking Communication
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Blocking Communication:
+
+
+ +
+
+

Detailed Description

+Internals about blocking Point-to-Point Communication. +

+ +

+ + + + + + + +

+

+ + + +

+


Modules

 Synchronous Communication
 Internals about blocking synchronous Communication.
 Buffered Communication
 Internals about blocking buffered Communication.
+

+
Generated on Thu Feb 12 13:51:15 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/db4/group__internal__p2p__blocking.png b/documentation/developer/html/de/db4/group__internal__p2p__blocking.png new file mode 100755 index 0000000..d44127b Binary files /dev/null and b/documentation/developer/html/de/db4/group__internal__p2p__blocking.png differ diff --git a/documentation/developer/html/de/dbb/imoc__get__entry_8c-source.html b/documentation/developer/html/de/dbb/imoc__get__entry_8c-source.html new file mode 100755 index 0000000..c6f7a5e --- /dev/null +++ b/documentation/developer/html/de/dbb/imoc__get__entry_8c-source.html @@ -0,0 +1,113 @@ + + +MPI On Cell (Documentation): src/noarch/internal/communication/imoc_get_entry.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/dc2/imoc__core__spu_8h__dep__incl.map b/documentation/developer/html/de/dc2/imoc__core__spu_8h__dep__incl.map new file mode 100755 index 0000000..63653ce --- /dev/null +++ b/documentation/developer/html/de/dc2/imoc__core__spu_8h__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/documentation/developer/html/de/dc2/imoc__core__spu_8h__dep__incl.md5 b/documentation/developer/html/de/dc2/imoc__core__spu_8h__dep__incl.md5 new file mode 100755 index 0000000..c928d77 --- /dev/null +++ b/documentation/developer/html/de/dc2/imoc__core__spu_8h__dep__incl.md5 @@ -0,0 +1 @@ +64a2193bfba67e5340aa29bd7d6e5649 \ No newline at end of file diff --git a/documentation/developer/html/de/dc2/imoc__core__spu_8h__dep__incl.png b/documentation/developer/html/de/dc2/imoc__core__spu_8h__dep__incl.png new file mode 100755 index 0000000..d33eff9 Binary files /dev/null and b/documentation/developer/html/de/dc2/imoc__core__spu_8h__dep__incl.png differ diff --git a/documentation/developer/html/de/de1/imoc__dma__ppu_8h-source.html b/documentation/developer/html/de/de1/imoc__dma__ppu_8h-source.html new file mode 100755 index 0000000..1edaf54 --- /dev/null +++ b/documentation/developer/html/de/de1/imoc__dma__ppu_8h-source.html @@ -0,0 +1,170 @@ + + +MPI On Cell (Documentation): include/internal/ppu/imoc_dma_ppu.h Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/de3/moc__finalize__ppu_8c__incl.map b/documentation/developer/html/de/de3/moc__finalize__ppu_8c__incl.map new file mode 100755 index 0000000..95f125a --- /dev/null +++ b/documentation/developer/html/de/de3/moc__finalize__ppu_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/de/de3/moc__finalize__ppu_8c__incl.md5 b/documentation/developer/html/de/de3/moc__finalize__ppu_8c__incl.md5 new file mode 100755 index 0000000..7044ae9 --- /dev/null +++ b/documentation/developer/html/de/de3/moc__finalize__ppu_8c__incl.md5 @@ -0,0 +1 @@ +20109350fb29469ea9a475f2f27089f4 \ No newline at end of file diff --git a/documentation/developer/html/de/de3/moc__finalize__ppu_8c__incl.png b/documentation/developer/html/de/de3/moc__finalize__ppu_8c__incl.png new file mode 100755 index 0000000..7562821 Binary files /dev/null and b/documentation/developer/html/de/de3/moc__finalize__ppu_8c__incl.png differ diff --git a/documentation/developer/html/de/df9/imoc__dma__ppu_8h.html b/documentation/developer/html/de/df9/imoc__dma__ppu_8h.html new file mode 100755 index 0000000..09b944a --- /dev/null +++ b/documentation/developer/html/de/df9/imoc__dma__ppu_8h.html @@ -0,0 +1,77 @@ + + +MPI On Cell (Documentation): include/internal/ppu/imoc_dma_ppu.h File Reference + + + + + +
+

include/internal/ppu/imoc_dma_ppu.h File Reference

+

+#include <stdint.h>
+#include "../../moc.h"
+ +

+

+Include dependency graph for imoc_dma_ppu.h:
+
+

+ + +
+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Functions

PPU-only
int IMOC_get_data (void *target, uint64_t source, uint32_t size, int dest)
 Internal wrapper-function for a blocking DMA-get operation.
int IMOC_put_data (void *source, uint64_t target, uint32_t size, int dest)
 Internal wrapper-function for a blocking DMA-put operation.
int IMOC_iget_data (void *target, uint64_t source, uint32_t size, uint32_t dest, imoc_dma_request *request)
 Internal wrapper-function for a non-blocking DMA-get operation.
int IMOC_iput_data (void *source, uint64_t target, uint32_t size, uint32_t dest, imoc_dma_request *request)
 Internal wrapper-function for a non-blocking DMA-put operation.
int IMOC_wait_dma (imoc_dma_request *request)
 Waits till a IMOC_iget_data or IMOC_iput_data is completed.
int IMOC_test_dma (imoc_dma_request *request, int *flag)
 Tests if a IMOC_iget_data or IMOC_iput_data is completed.
int moc_tag_reserve (unsigned int speid)
 Reserves a tag on the ppu, for communication with a given spu.
int moc_tag_release (unsigned int speid, int tag)
 Releases a reserved tag.
+

+
Generated on Thu Feb 12 13:49:53 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/de/dfe/structmoc__node__handle__spu__struct__coll__graph.map b/documentation/developer/html/de/dfe/structmoc__node__handle__spu__struct__coll__graph.map new file mode 100755 index 0000000..c132d5c --- /dev/null +++ b/documentation/developer/html/de/dfe/structmoc__node__handle__spu__struct__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/documentation/developer/html/de/dfe/structmoc__node__handle__spu__struct__coll__graph.md5 b/documentation/developer/html/de/dfe/structmoc__node__handle__spu__struct__coll__graph.md5 new file mode 100755 index 0000000..9933b40 --- /dev/null +++ b/documentation/developer/html/de/dfe/structmoc__node__handle__spu__struct__coll__graph.md5 @@ -0,0 +1 @@ +041b270713124795f4bebb4d6b6bd407 \ No newline at end of file diff --git a/documentation/developer/html/de/dfe/structmoc__node__handle__spu__struct__coll__graph.png b/documentation/developer/html/de/dfe/structmoc__node__handle__spu__struct__coll__graph.png new file mode 100755 index 0000000..69a0b42 Binary files /dev/null and b/documentation/developer/html/de/dfe/structmoc__node__handle__spu__struct__coll__graph.png differ diff --git a/documentation/developer/html/de/dff/imoc__get__entry_8c__incl.map b/documentation/developer/html/de/dff/imoc__get__entry_8c__incl.map new file mode 100755 index 0000000..d466ca1 --- /dev/null +++ b/documentation/developer/html/de/dff/imoc__get__entry_8c__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/documentation/developer/html/de/dff/imoc__get__entry_8c__incl.md5 b/documentation/developer/html/de/dff/imoc__get__entry_8c__incl.md5 new file mode 100755 index 0000000..c1089b5 --- /dev/null +++ b/documentation/developer/html/de/dff/imoc__get__entry_8c__incl.md5 @@ -0,0 +1 @@ +3eb934685841085c980002717eab711e \ No newline at end of file diff --git a/documentation/developer/html/de/dff/imoc__get__entry_8c__incl.png b/documentation/developer/html/de/dff/imoc__get__entry_8c__incl.png new file mode 100755 index 0000000..e160d6b Binary files /dev/null and b/documentation/developer/html/de/dff/imoc__get__entry_8c__incl.png differ diff --git a/documentation/developer/html/df/d10/imoc__dma-iput__ppu_8c.html b/documentation/developer/html/df/d10/imoc__dma-iput__ppu_8c.html new file mode 100755 index 0000000..b137df2 --- /dev/null +++ b/documentation/developer/html/df/d10/imoc__dma-iput__ppu_8c.html @@ -0,0 +1,51 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-iput_ppu.c File Reference + + + + + +
+

src/ppu/internal/dma/imoc_dma-iput_ppu.c File Reference

+

+#include <string.h>
+#include <stdlib.h>
+#include <moc.h>
+#include <ppu/moc_dma_ppu.h>
+#include <internal/imoc_macros.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for imoc_dma-iput_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_iput_data (void *source, uint64_t target, uint32_t size, uint32_t dest, imoc_dma_request *request)
 Internal wrapper-function for a non-blocking DMA-put operation.
+

+
Generated on Thu Feb 12 13:50:24 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/d18/imoc__spe__thread__ppu_8c__incl.map b/documentation/developer/html/df/d18/imoc__spe__thread__ppu_8c__incl.map new file mode 100755 index 0000000..95f125a --- /dev/null +++ b/documentation/developer/html/df/d18/imoc__spe__thread__ppu_8c__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/documentation/developer/html/df/d18/imoc__spe__thread__ppu_8c__incl.md5 b/documentation/developer/html/df/d18/imoc__spe__thread__ppu_8c__incl.md5 new file mode 100755 index 0000000..855f3c0 --- /dev/null +++ b/documentation/developer/html/df/d18/imoc__spe__thread__ppu_8c__incl.md5 @@ -0,0 +1 @@ +9c68851e50668bea3450d17f574565ce \ No newline at end of file diff --git a/documentation/developer/html/df/d18/imoc__spe__thread__ppu_8c__incl.png b/documentation/developer/html/df/d18/imoc__spe__thread__ppu_8c__incl.png new file mode 100755 index 0000000..f7e7f23 Binary files /dev/null and b/documentation/developer/html/df/d18/imoc__spe__thread__ppu_8c__incl.png differ diff --git a/documentation/developer/html/df/d1a/moc__set__queue__size__ppu_8c-source.html b/documentation/developer/html/df/d1a/moc__set__queue__size__ppu_8c-source.html new file mode 100755 index 0000000..2aedb54 --- /dev/null +++ b/documentation/developer/html/df/d1a/moc__set__queue__size__ppu_8c-source.html @@ -0,0 +1,30 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_set_queue_size_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/d20/imoc__get__free__entry_8c.html b/documentation/developer/html/df/d20/imoc__get__free__entry_8c.html new file mode 100755 index 0000000..91c2367 --- /dev/null +++ b/documentation/developer/html/df/d20/imoc__get__free__entry_8c.html @@ -0,0 +1,47 @@ + + +MPI On Cell (Documentation): src/noarch/internal/communication/imoc_get_free_entry.c File Reference + + + + + +
+

src/noarch/internal/communication/imoc_get_free_entry.c File Reference

+

+#include <moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for imoc_get_free_entry.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_getFreeEntry (moc_message_envelope_t *pqueue, uint8_t tag, MOC_Comm comm, int isSpecial, int *index)
 Get next free entry in message-queue (a local copy of the message-queue has to be used).
+

+
Generated on Thu Feb 12 13:50:10 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/d50/moc__wtick__spu_8c.html b/documentation/developer/html/df/d50/moc__wtick__spu_8c.html new file mode 100755 index 0000000..8378216 --- /dev/null +++ b/documentation/developer/html/df/d50/moc__wtick__spu_8c.html @@ -0,0 +1,45 @@ + + +MPI On Cell (Documentation): src/spu/system/moc_wtick_spu.c File Reference + + + + + +
+

src/spu/system/moc_wtick_spu.c File Reference

+

+#include <moc.h>
+ +

+

+Include dependency graph for moc_wtick_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

double MOC_Wtick (void)
 Returns the resolution of Moc_Wtime in seconds.
+

+
Generated on Thu Feb 12 13:50:42 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/d5c/moc__error__codes_8h.html b/documentation/developer/html/df/d5c/moc__error__codes_8h.html new file mode 100755 index 0000000..f4f4f92 --- /dev/null +++ b/documentation/developer/html/df/d5c/moc__error__codes_8h.html @@ -0,0 +1,131 @@ + + +MPI On Cell (Documentation): include/moc_error_codes.h File Reference + + + + + +
+

include/moc_error_codes.h File Reference

+

+ +

+

+This graph shows which files directly or indirectly include this file:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

MPI_ERROR-CLASSES
Error-classes defined by the MPI-standard.

+Every error-code returned by a MOC-function should belong to an error-class or be an error-class itself. This enables implementation-independend error-handling.

+Value-range: 0 = MOC_SUCCESS < MOC_ERR_... <= MOC_ERR_LASTCODE

#define MOC_SUCCESS   0
 No error.
#define MOC_ERR_BUFFER   1000
 Invalid buffer pointer.
#define MOC_ERR_COUNT   2000
 Invalid count argument.
#define MOC_ERR_TYPE   3000
 Invalid datatype argument.
#define MOC_ERR_TAG   4000
 Invalid tag argument.
#define MOC_ERR_COMM   5000
 Invalid communicator.
#define MOC_ERR_RANK   6000
 Invalid rank.
#define MOC_ERR_REQUEST   7000
 Invalid request (handle).
#define MOC_ERR_ROOT   8000
 Invalid root.
#define MOC_ERR_GROUP   9000
 Invalid group.
#define MOC_ERR_OP   10000
 Invalid operation.
#define MOC_ERR_TOPOLOGY   11000
 Invalid topology.
#define MOC_ERR_DIMS   12000
 Invalid dimension argument.
#define MOC_ERR_ARG   13000
 Invalid argument of some other kind.
#define MOC_ERR_UNKNOWN   14000
 Unknown error.
#define MOC_ERR_TRUNCATE   15000
 Message truncated on receive.
#define MOC_ERR_OTHER   16000
 Known error not in this list.
#define MOC_ERR_INTERN   17000
 Internal MOC (implementation) error.
#define MOC_ERR_IN_STATUS   18000
 Error code is in status.
#define MOC_ERR_PENDING   19000
 Pending request.
#define MOC_ERR_LASTCODE   20000
 Last error code.
MOC-Error-Codes
Implementation dependent Error-Codes.

#define MOC_ERR_NOT_IMPLEMENTED   17001
 Function not implemented.
#define MOC_ERR_BUFFER_OVERFLOW   17002
 Internal Buffer Overflow.
#define MOC_ERR_NO_MEMORY   17003
 Insufficient Memory.
#define MOC_ERR_NO_BUFFER   17004
 Insufficient Buffer-Space.
#define MOC_ERR_MESSAGE_EXHAUSTED   17005
 No further messages possible.
#define MOC_ERR_BAD_ALIGNMENT   16001
 Base-Adress of Buffer isn't 16-byte aligned.
#define MOC_ERR_BAD_SIZE   16002
 Bad Size (probably no multiple of 16).
+

+
Generated on Thu Feb 12 13:50:00 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/d69/imoc__core__ppu_8c.html b/documentation/developer/html/df/d69/imoc__core__ppu_8c.html new file mode 100755 index 0000000..6c60b68 --- /dev/null +++ b/documentation/developer/html/df/d69/imoc__core__ppu_8c.html @@ -0,0 +1,62 @@ + + +MPI On Cell (Documentation): src/ppu/internal/imoc_core_ppu.c File Reference + + + + + +
+

src/ppu/internal/imoc_core_ppu.c File Reference

+

+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for imoc_core_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + +

Variables

moc_node_handle_ppu_t node_handle
+


Variable Documentation

+ +
+ +
+ +

+ +

Definition at line 3 of file imoc_core_ppu.c.

+ +
+

+

+
Generated on Thu Feb 12 13:50:26 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/d7b/imoc__core__ppu_8h__incl.map b/documentation/developer/html/df/d7b/imoc__core__ppu_8h__incl.map new file mode 100755 index 0000000..f522142 --- /dev/null +++ b/documentation/developer/html/df/d7b/imoc__core__ppu_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/documentation/developer/html/df/d7b/imoc__core__ppu_8h__incl.md5 b/documentation/developer/html/df/d7b/imoc__core__ppu_8h__incl.md5 new file mode 100755 index 0000000..f7e924d --- /dev/null +++ b/documentation/developer/html/df/d7b/imoc__core__ppu_8h__incl.md5 @@ -0,0 +1 @@ +ce3f23d6b5753b3bae3dccbc247f07ca \ No newline at end of file diff --git a/documentation/developer/html/df/d7b/imoc__core__ppu_8h__incl.png b/documentation/developer/html/df/d7b/imoc__core__ppu_8h__incl.png new file mode 100755 index 0000000..402cb96 Binary files /dev/null and b/documentation/developer/html/df/d7b/imoc__core__ppu_8h__incl.png differ diff --git a/documentation/developer/html/df/d8a/moc__get__count_8c.html b/documentation/developer/html/df/d8a/moc__get__count_8c.html new file mode 100755 index 0000000..c9a9fe3 --- /dev/null +++ b/documentation/developer/html/df/d8a/moc__get__count_8c.html @@ -0,0 +1,45 @@ + + +MPI On Cell (Documentation): src/noarch/system/moc_get_count.c File Reference + + + + + +
+

src/noarch/system/moc_get_count.c File Reference

+

+#include <moc.h>
+ +

+

+Include dependency graph for moc_get_count.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Get_count (MOC_Status *status, MOC_Datatype datatype, int *count)
 Gets the number of received elements which is encoded in MOC_Status.
+

+
Generated on Thu Feb 12 13:50:15 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/d8b/imoc__dma-wait__ppu_8c.html b/documentation/developer/html/df/d8b/imoc__dma-wait__ppu_8c.html new file mode 100755 index 0000000..acd2037 --- /dev/null +++ b/documentation/developer/html/df/d8b/imoc__dma-wait__ppu_8c.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): src/ppu/internal/dma/imoc_dma-wait_ppu.c File Reference + + + + + +
+

src/ppu/internal/dma/imoc_dma-wait_ppu.c File Reference

+

+#include <string.h>
+#include <stdint.h>
+#include <free_align.h>
+#include <moc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+#include <internal/ppu/imoc_dma_ppu.h>
+ +

+

+Include dependency graph for imoc_dma-wait_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int IMOC_wait_dma (imoc_dma_request *request)
 Waits till a IMOC_iget_data or IMOC_iput_data is completed.
+

+
Generated on Thu Feb 12 13:50:26 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/da0/imoc__core_8h__dep__incl.map b/documentation/developer/html/df/da0/imoc__core_8h__dep__incl.map new file mode 100755 index 0000000..e785bca --- /dev/null +++ b/documentation/developer/html/df/da0/imoc__core_8h__dep__incl.map @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/developer/html/df/da0/imoc__core_8h__dep__incl.md5 b/documentation/developer/html/df/da0/imoc__core_8h__dep__incl.md5 new file mode 100755 index 0000000..2c98e5e --- /dev/null +++ b/documentation/developer/html/df/da0/imoc__core_8h__dep__incl.md5 @@ -0,0 +1 @@ +20ebedf003a82fe315d4db2b405cfcba \ No newline at end of file diff --git a/documentation/developer/html/df/da0/imoc__core_8h__dep__incl.png b/documentation/developer/html/df/da0/imoc__core_8h__dep__incl.png new file mode 100755 index 0000000..749d464 Binary files /dev/null and b/documentation/developer/html/df/da0/imoc__core_8h__dep__incl.png differ diff --git a/documentation/developer/html/df/dac/imoc__spe__thread__ppu_8c.html b/documentation/developer/html/df/dac/imoc__spe__thread__ppu_8c.html new file mode 100755 index 0000000..1ebe7c8 --- /dev/null +++ b/documentation/developer/html/df/dac/imoc__spe__thread__ppu_8c.html @@ -0,0 +1,66 @@ + + +MPI On Cell (Documentation): src/ppu/internal/imoc_spe_thread_ppu.c File Reference + + + + + +
+

src/ppu/internal/imoc_spe_thread_ppu.c File Reference

+

+#include <malloc_align.h>
+#include <free_align.h>
+#include <stdlib.h>
+#include <string.h>
+#include <moc.h>
+#include <ppu/moc.h>
+#include <internal/imoc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for imoc_spe_thread_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + +

Functions

void * moc_spe_pthread_func (void *arg)
 PThread-function for creating SPU-Threads.

Variables

uint8_t moc_spu_thread_count = 0
 Holds the value of currently configured SPU-Threads.
uint8_t moc_ppu_thread_count = 0
 Holds the value of currently configured PPU-Threads.
moc_spu_thread_t moc_spu_thread_list [MOC_SPU_THREAD_MAX]
 Holds information about the SPU-Threads.
uint32_t moc_spu_buffer_size = MOC_BUFFER_SIZE
uint8_t moc_spu_queue_size = MOC_QUEUE_SIZE
+

+
Generated on Thu Feb 12 13:50:27 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/dbf/moc__set__queue__size__ppu_8c.html b/documentation/developer/html/df/dbf/moc__set__queue__size__ppu_8c.html new file mode 100755 index 0000000..88e284a --- /dev/null +++ b/documentation/developer/html/df/dbf/moc__set__queue__size__ppu_8c.html @@ -0,0 +1,45 @@ + + +MPI On Cell (Documentation): src/ppu/system/moc_set_queue_size_ppu.c File Reference + + + + + +
+

src/ppu/system/moc_set_queue_size_ppu.c File Reference

+

+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_set_queue_size_ppu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Set_queue_size (uint8_t size)
 Sets the size of the message-queues.
+

+
Generated on Thu Feb 12 13:50:31 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/dc6/structmoc__request__struct__coll__graph.map b/documentation/developer/html/df/dc6/structmoc__request__struct__coll__graph.map new file mode 100755 index 0000000..8af9d1d --- /dev/null +++ b/documentation/developer/html/df/dc6/structmoc__request__struct__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/documentation/developer/html/df/dc6/structmoc__request__struct__coll__graph.md5 b/documentation/developer/html/df/dc6/structmoc__request__struct__coll__graph.md5 new file mode 100755 index 0000000..bc2e489 --- /dev/null +++ b/documentation/developer/html/df/dc6/structmoc__request__struct__coll__graph.md5 @@ -0,0 +1 @@ +f58269acc35740f5f29227001693772f \ No newline at end of file diff --git a/documentation/developer/html/df/dc6/structmoc__request__struct__coll__graph.png b/documentation/developer/html/df/dc6/structmoc__request__struct__coll__graph.png new file mode 100755 index 0000000..1a2dd49 Binary files /dev/null and b/documentation/developer/html/df/dc6/structmoc__request__struct__coll__graph.png differ diff --git a/documentation/developer/html/df/dd4/structmoc__message__envelope__struct.html b/documentation/developer/html/df/dd4/structmoc__message__envelope__struct.html new file mode 100755 index 0000000..8f77148 --- /dev/null +++ b/documentation/developer/html/df/dd4/structmoc__message__envelope__struct.html @@ -0,0 +1,422 @@ + + +MPI On Cell (Documentation): moc_message_envelope_struct Struct Reference + + + + + +
+

moc_message_envelope_struct Struct Reference
+ +[Implementation-Core] +

#include <imoc_core.h> +

+

+Collaboration diagram for moc_message_envelope_struct:
+
+

Collaboration graph
+
[legend]
+

Detailed Description

+Message-envelope structure. +

+Is used to store meta-data about the message in the message-queues of the receiving process. +

Definition at line 76 of file imoc_core.h.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

uint8_t id
 Message-ID.
uint8_t tag
 Message-tag.
uint8_t communicator
 Communicator of message.
union {
   struct {
      unsigned int   valid: 1
 Is the message valid?
      unsigned int   signal_back: 1
 Should the status be reported back to the sending process.
      unsigned int   special: 1
 Is this message a special message?
      unsigned int   collaborative: 1
 Is this message part of a collaborative communication?
      unsigned int   channel: 2
 Which channel is used to transport the message?
      unsigned int   in_mm: 1
 Are the data in Main-Memory?
      unsigned int   keep_valid: 1
 Should the message-status-entry be invalidated?
   }   bits
 flag-struct
   uint8_t   value
 union-value
} flags
 flag-union
unsigned int size: 24
 Message-size in byte.
unsigned int datatype: 8
 Data-type of message-entries.
uint64_t message_address
 Effective address of message-data.
+

Field Documentation

+ +
+
+ + + + +
uint8_t moc_message_envelope_struct::id
+
+
+ +

+Message-ID. +

+Also index of message-status-array +

Definition at line 78 of file imoc_core.h.

+ +

Referenced by MOC_Iprobe(), MOC_Probe(), and MOC_Recv().

+ +
+

+ +

+ +
+ +

+Message-tag. +

+ +

Definition at line 79 of file imoc_core.h.

+ +

Referenced by IMOC_get_entry(), MOC_Iprobe(), and MOC_Probe().

+ +
+

+ +

+ +
+ +

+Communicator of message. +

+ +

Definition at line 80 of file imoc_core.h.

+ +

Referenced by IMOC_get_entry().

+ +
+

+ +

+
+ + + + +
unsigned int moc_message_envelope_struct::valid
+
+
+ +

+Is the message valid? +

+ +

Definition at line 85 of file imoc_core.h.

+ +
+

+ +

+ +
+ +

+Should the status be reported back to the sending process. +

+ +

Definition at line 86 of file imoc_core.h.

+ +
+

+ +

+
+ + + + +
unsigned int moc_message_envelope_struct::special
+
+
+ +

+Is this message a special message? +

+ +

Definition at line 88 of file imoc_core.h.

+ +
+

+ +

+ +
+ +

+Is this message part of a collaborative communication? +

+ +

Definition at line 89 of file imoc_core.h.

+ +
+

+ +

+
+ + + + +
unsigned int moc_message_envelope_struct::channel
+
+
+ +

+Which channel is used to transport the message? +

+ +

Definition at line 91 of file imoc_core.h.

+ +
+

+ +

+
+ + + + +
unsigned int moc_message_envelope_struct::in_mm
+
+
+ +

+Are the data in Main-Memory? +

+ +

Definition at line 92 of file imoc_core.h.

+ +
+

+ +

+
+ + + + +
unsigned int moc_message_envelope_struct::keep_valid
+
+
+ +

+Should the message-status-entry be invalidated? +

+ +

Definition at line 93 of file imoc_core.h.

+ +
+

+ +

+
+ + + + +
struct { ... } moc_message_envelope_struct::bits
+
+
+ +

+flag-struct +

+ +

Referenced by IMOC_get_entry(), IMOC_getFreeEntry(), and MOC_Recv().

+ +
+

+ +

+ +
+ +

+union-value +

+ +

Definition at line 95 of file imoc_core.h.

+ +

Referenced by MOC_Barrier(), and MOC_Recv().

+ +
+

+ +

+
+ + + + +
union { ... } moc_message_envelope_struct::flags
+
+
+ +

+flag-union +

+ +

Referenced by IMOC_get_entry(), MOC_Barrier(), and MOC_Recv().

+ +
+

+ +

+
+ + + + +
unsigned int moc_message_envelope_struct::size
+
+
+ +

+Message-size in byte. +

+ +

Definition at line 97 of file imoc_core.h.

+ +

Referenced by MOC_Iprobe(), MOC_Probe(), and MOC_Recv().

+ +
+

+ +

+
+ + + + +
unsigned int moc_message_envelope_struct::datatype
+
+
+ +

+Data-type of message-entries. +

+ +

Definition at line 98 of file imoc_core.h.

+ +

Referenced by MOC_Recv().

+ +
+

+ +

+ +
+ +

+Effective address of message-data. +

+ +

Definition at line 99 of file imoc_core.h.

+ +

Referenced by MOC_Recv().

+ +
+

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:19 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/ddc/moc__dma-put__spu_8c.html b/documentation/developer/html/df/ddc/moc__dma-put__spu_8c.html new file mode 100755 index 0000000..5a8ed08 --- /dev/null +++ b/documentation/developer/html/df/ddc/moc__dma-put__spu_8c.html @@ -0,0 +1,49 @@ + + +MPI On Cell (Documentation): src/spu/dma/moc_dma-put_spu.c File Reference + + + + + +
+

src/spu/dma/moc_dma-put_spu.c File Reference

+

+#include <spu_mfcio.h>
+#include <string.h>
+#include <moc.h>
+#include <internal/imoc_macros.h>
+#include <internal/spu/imoc_dma_spu.h>
+ +

+

+Include dependency graph for moc_dma-put_spu.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Put_data (void *source, uint64_t target, int count, MOC_Datatype datatype)
 Wrapper-function for a blocking DMA-put operation.
+

+
Generated on Thu Feb 12 13:50:36 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/ddd/moc__comm__size_8c.html b/documentation/developer/html/df/ddd/moc__comm__size_8c.html new file mode 100755 index 0000000..3f59775 --- /dev/null +++ b/documentation/developer/html/df/ddd/moc__comm__size_8c.html @@ -0,0 +1,46 @@ + + +MPI On Cell (Documentation): src/noarch/system/moc_comm_size.c File Reference + + + + + +
+

src/noarch/system/moc_comm_size.c File Reference

+

+#include <moc.h>
+#include <internal/ppu/imoc_core_ppu.h>
+ +

+

+Include dependency graph for moc_comm_size.c:
+
+

+ + +
+ +

+Go to the source code of this file. + + + + + +

Functions

int MOC_Comm_size (MOC_Comm comm, int *size)
 Determines the size of the group associated with a communictor.
+

+
Generated on Thu Feb 12 13:50:15 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/dde/structmoc__node__handle__spu__struct.html b/documentation/developer/html/df/dde/structmoc__node__handle__spu__struct.html new file mode 100755 index 0000000..be689e5 --- /dev/null +++ b/documentation/developer/html/df/dde/structmoc__node__handle__spu__struct.html @@ -0,0 +1,253 @@ + + +MPI On Cell (Documentation): moc_node_handle_spu_struct Struct Reference + + + + + +
+

moc_node_handle_spu_struct Struct Reference
+ +[Implementation-Core] +

#include <imoc_core_spu.h> +

+

+Collaboration diagram for moc_node_handle_spu_struct:
+
+

Collaboration graph
+ + +
[legend]
+

Detailed Description

+Node-handle structure. +

+

Note:
SPU only
+Information each node knowns about himself and the world. +

Definition at line 26 of file imoc_core_spu.h.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

uint8_t rank
 rank of node
uint8_t comm_size
 number of overall processes
uint8_t queue_size
 Size of a message-queue.
uint64_t ls_base
 Effective address of own local-store.
volatile moc_message_envelope_t * message_queue_base
 base-address of own message-queues
volatile moc_message_status_t * status_array_base
 base-address of own message-status-array
uint64_t buffer_base
 base-address of own buffer
uint32_t buffer_size
 size of own buffer
volatile moc_process_t * moc_process_list
 list of all other MOC-processes (index is rank of process)
+

Field Documentation

+ +
+ +
+ +

+rank of node +

+ +

Definition at line 28 of file imoc_core_spu.h.

+ +
+

+ +

+ +
+ +

+number of overall processes +

+ +

Definition at line 29 of file imoc_core_spu.h.

+ +
+

+ +

+ +
+ +

+Size of a message-queue. +

+ +

Definition at line 30 of file imoc_core_spu.h.

+ +
+

+ +

+ +
+ +

+Effective address of own local-store. +

+ +

Definition at line 31 of file imoc_core_spu.h.

+ +
+

+ +

+ +
+ +

+base-address of own message-queues +

+ +

Definition at line 32 of file imoc_core_spu.h.

+ +
+

+ +

+ +
+ +

+base-address of own message-status-array +

+ +

Definition at line 33 of file imoc_core_spu.h.

+ +
+

+ +

+ +
+ +

+base-address of own buffer +

+ +

Definition at line 34 of file imoc_core_spu.h.

+ +
+

+ +

+ +
+ +

+size of own buffer +

+ +

Definition at line 35 of file imoc_core_spu.h.

+ +
+

+ +

+ +
+ +

+list of all other MOC-processes (index is rank of process) +

+ +

Definition at line 36 of file imoc_core_spu.h.

+ +
+

+


The documentation for this struct was generated from the following file: +
+
Generated on Thu Feb 12 13:51:21 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/ddf/group__internal__am.html b/documentation/developer/html/df/ddf/group__internal__am.html new file mode 100755 index 0000000..ef4f59b --- /dev/null +++ b/documentation/developer/html/df/ddf/group__internal__am.html @@ -0,0 +1,288 @@ + + +MPI On Cell (Documentation): Address-Macros + + + + + +
+

Address-Macros
+ +[Implementation-Core] +

+

+

+Collaboration diagram for Address-Macros:
+
+
+ +
+
+

Detailed Description

+Predefined Macros for calculating Addresses of Message-Queue and Status-Array. +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

PPU & SPU

#define IMOC_EA_REMOTE_QUEUE(proc)   ( (proc > node_handle.rank) ? node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank : node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1) )
 Effective base-address of own remote queue at node 'rank'.
#define IMOC_LOCAL_QUEUE(proc)   ( (proc < node_handle.rank) ? node_handle.message_queue_base+node_handle.queue_size*(proc) : node_handle.message_queue_base+node_handle.queue_size*(proc-1) )
 Effective Base-Address of local queue responsible for node 'rank'.
#define IMOC_EA_REMOTE_QUEUE_ENTRY(proc, index)   ( (proc > node_handle.rank) ? node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank+sizeof(moc_message_envelope_t)*(index) : node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1)+sizeof(moc_message_envelope_t)*(index) )
 Effective base-address of own remote queue-entry at node 'rank'.
#define IMOC_LOCAL_QUEUE_ENTRY(proc, index)   ( (proc < node_handle.rank) ? node_handle.message_queue_base+node_handle.queue_size*(proc)+(index) : node_handle.message_queue_base+node_handle.queue_size*(proc-1)+(index) )
 Effective Base-Address of local queue-entry responsible for node 'rank'.
#define IMOC_EA_REMOTE_STATUS_ENTRY(id, rank)   ( node_handle.moc_process_list[rank].stat_array_base+sizeof(moc_message_status_t)*(id) )
 Effective Address of remote status-array entry at node 'rank'.

PPU-only

#define IMOC_LS_REMOTE_QUEUE(proc)   ( (proc > node_handle.rank) ? moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank : moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1) )
 LS-Address of own remote queue at node 'rank'.
#define IMOC_LS_REMOTE_QUEUE_ENTRY(proc, index)   ( (proc > node_handle.rank) ? moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank+sizeof(moc_message_envelope_t)*(index) : moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1)+sizeof(moc_message_envelope_t)*(index) )
 LS-Address of own remote queue-entry at node 'rank'.
#define IMOC_LS_REMOTE_STATUS_ENTRY(id, rank)   ( moc_spu_thread_list[rank-moc_ppu_thread_count].status_base_in_ls+sizeof(moc_message_status_t)*(id) )
 Effective Address of remote status-array entry at node 'rank'.
+


Define Documentation

+ +
+
+ + + + + + + + + +
#define IMOC_EA_REMOTE_QUEUE (proc   )    ( (proc > node_handle.rank) ? node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank : node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1) )
+
+
+ +

+Effective base-address of own remote queue at node 'rank'. +

+Address is of type uint64_t +

Definition at line 19 of file imoc_macros.h.

+ +

Referenced by MOC_Barrier(), MOC_Bsend(), MOC_ISsend(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + + + + + + + + + +
#define IMOC_EA_REMOTE_QUEUE_ENTRY (proc,
index   )    ( (proc > node_handle.rank) ? node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank+sizeof(moc_message_envelope_t)*(index) : node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1)+sizeof(moc_message_envelope_t)*(index) )
+
+
+ +

+Effective base-address of own remote queue-entry at node 'rank'. +

+Address is of type uint64_t +

Definition at line 34 of file imoc_macros.h.

+ +

Referenced by MOC_Barrier(), MOC_Bsend(), MOC_ISsend(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + + + + + + + + + +
#define IMOC_EA_REMOTE_STATUS_ENTRY (id,
rank   )    ( node_handle.moc_process_list[rank].stat_array_base+sizeof(moc_message_status_t)*(id) )
+
+
+ +

+Effective Address of remote status-array entry at node 'rank'. +

+Address is of type uint64_t +

Definition at line 49 of file imoc_macros.h.

+ +

Referenced by MOC_Recv().

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_LOCAL_QUEUE (proc   )    ( (proc < node_handle.rank) ? node_handle.message_queue_base+node_handle.queue_size*(proc) : node_handle.message_queue_base+node_handle.queue_size*(proc-1) )
+
+
+ +

+Effective Base-Address of local queue responsible for node 'rank'. +

+Address is of type moc_message_envelope_t* +

Definition at line 26 of file imoc_macros.h.

+ +

Referenced by IMOC_get_entry().

+ +
+

+ +

+
+ + + + + + + + + + + + +
#define IMOC_LOCAL_QUEUE_ENTRY (proc,
index   )    ( (proc < node_handle.rank) ? node_handle.message_queue_base+node_handle.queue_size*(proc)+(index) : node_handle.message_queue_base+node_handle.queue_size*(proc-1)+(index) )
+
+
+ +

+Effective Base-Address of local queue-entry responsible for node 'rank'. +

+Address is of type moc_message_envelope_t* +

Definition at line 41 of file imoc_macros.h.

+ +
+

+ +

+
+ + + + + + + + + +
#define IMOC_LS_REMOTE_QUEUE (proc   )    ( (proc > node_handle.rank) ? moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank : moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1) )
+
+
+ +

+LS-Address of own remote queue at node 'rank'. +

+Address is of type uint32_t. +

Definition at line 25 of file imoc_macros_ppu.h.

+ +

Referenced by MOC_Barrier(), MOC_Bsend(), MOC_ISsend(), and MOC_Ssend().

+ +
+

+ +

+
+ + + + + + + + + + + + +
#define IMOC_LS_REMOTE_QUEUE_ENTRY (proc,
index   )    ( (proc > node_handle.rank) ? moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank+sizeof(moc_message_envelope_t)*(index) : moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1)+sizeof(moc_message_envelope_t)*(index) )
+
+
+ +

+LS-Address of own remote queue-entry at node 'rank'. +

+Address is of type uint32_t. +

Definition at line 33 of file imoc_macros_ppu.h.

+ +
+

+ +

+
+ + + + + + + + + + + + +
#define IMOC_LS_REMOTE_STATUS_ENTRY (id,
rank   )    ( moc_spu_thread_list[rank-moc_ppu_thread_count].status_base_in_ls+sizeof(moc_message_status_t)*(id) )
+
+
+ +

+Effective Address of remote status-array entry at node 'rank'. +

+Address is of type uint32_t +

Definition at line 42 of file imoc_macros_ppu.h.

+ +
+

+

+
Generated on Thu Feb 12 13:51:03 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/df/ddf/group__internal__am.png b/documentation/developer/html/df/ddf/group__internal__am.png new file mode 100755 index 0000000..5cc3161 Binary files /dev/null and b/documentation/developer/html/df/ddf/group__internal__am.png differ diff --git a/documentation/developer/html/df/df8/moc__issend__ppu_8c-source.html b/documentation/developer/html/df/df8/moc__issend__ppu_8c-source.html new file mode 100755 index 0000000..e6f6ccb --- /dev/null +++ b/documentation/developer/html/df/df8/moc__issend__ppu_8c-source.html @@ -0,0 +1,138 @@ + + +MPI On Cell (Documentation): src/ppu/communication/moc_issend_ppu.c Source File + + + + + +
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/dma-vs-moc-bw.png b/documentation/developer/html/dma-vs-moc-bw.png new file mode 100755 index 0000000..044c792 Binary files /dev/null and b/documentation/developer/html/dma-vs-moc-bw.png differ diff --git a/documentation/developer/html/dma-vs-moc-lat.png b/documentation/developer/html/dma-vs-moc-lat.png new file mode 100755 index 0000000..bae5770 Binary files /dev/null and b/documentation/developer/html/dma-vs-moc-lat.png differ diff --git a/documentation/developer/html/doxygen.css b/documentation/developer/html/doxygen.css new file mode 100755 index 0000000..22c4843 --- /dev/null +++ b/documentation/developer/html/doxygen.css @@ -0,0 +1,473 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +BODY,TD { + font-size: 90%; +} +H1 { + text-align: center; + font-size: 160%; +} +H2 { + font-size: 120%; +} +H3 { + font-size: 100%; +} +CAPTION { + font-weight: bold +} +DIV.qindex { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navpath { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { + text-decoration: none; + background-color: #6666cc; + color: #ffffff +} +A.el { + text-decoration: none; + font-weight: bold +} +A.elRef { + font-weight: bold +} +A.code:link { + text-decoration: none; + font-weight: normal; + color: #0000FF +} +A.code:visited { + text-decoration: none; + font-weight: normal; + color: #0000FF +} +A.codeRef:link { + font-weight: normal; + color: #0000FF +} +A.codeRef:visited { + font-weight: normal; + color: #0000FF +} +A:hover { + text-decoration: none; + background-color: #f2f2ff +} +DL.el { + margin-left: -1cm +} +.fragment { + font-family: monospace, fixed; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px +} + +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { + margin-left: 16px; + font-style: italic; + font-size: 90% +} +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #e8eef2; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #e8eef2; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { + text-align: center; +} +IMG.formulaDsp { +} +IMG.formulaInl { + vertical-align: middle; +} +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +SPAN.vhdldigit { color: #ff00ff } +SPAN.vhdlchar { color: #000000 } +SPAN.vhdlkeyword { color: #700070 } +SPAN.vhdllogic { color: #ff0000 } + +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { + color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +TD.tiny { + font-size: 75%; +} +a { + color: #1A41A8; +} +a:visited { + color: #2A3798; +} +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; +} +TH.dirtab { + background: #e8eef2; + font-weight: bold; +} +HR { + height: 1px; + border: none; + border-top: 1px solid black; +} + +/* Style for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #606060; + font-weight: normal; + margin-left: 3px; +} +.memnav { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +.memitem { + padding: 4px; + background-color: #eef3f5; + border-width: 1px; + border-style: solid; + border-color: #dedeee; + -moz-border-radius: 8px 8px 8px 8px; +} +.memname { + white-space: nowrap; + font-weight: bold; +} +.memdoc{ + padding-left: 10px; +} +.memproto { + background-color: #d5e1e8; + width: 100%; + border-width: 1px; + border-style: solid; + border-color: #84b0c7; + font-weight: bold; + -moz-border-radius: 8px 8px 8px 8px; +} +.paramkey { + text-align: right; +} +.paramtype { + white-space: nowrap; +} +.paramname { + color: #602020; + font-style: italic; + white-space: nowrap; +} +/* End Styling for detailed member documentation */ + +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin:0.5em; +} +/* these are for tree view when used as main index */ +.directory { + font-size: 9pt; + font-weight: bold; +} +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +/* The following two styles can be used to replace the root node title */ +/* with an image of your choice. Simply uncomment the next two styles, */ +/* specify the name of your image and be sure to set 'height' to the */ +/* proper pixel height of your image. */ + +/* .directory h3.swap { */ +/* height: 61px; */ +/* background-repeat: no-repeat; */ +/* background-image: url("yourimage.gif"); */ +/* } */ +/* .directory h3.swap span { */ +/* display: none; */ +/* } */ + +.directory > h3 { + margin-top: 0; +} +.directory p { + margin: 0px; + white-space: nowrap; +} +.directory div { + display: none; + margin: 0px; +} +.directory img { + vertical-align: -30%; +} +/* these are for tree view when not used as main index */ +.directory-alt { + font-size: 100%; + font-weight: bold; +} +.directory-alt h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} +.directory-alt > h3 { + margin-top: 0; +} +.directory-alt p { + margin: 0px; + white-space: nowrap; +} +.directory-alt div { + display: none; + margin: 0px; +} +.directory-alt img { + vertical-align: -30%; +} + diff --git a/documentation/developer/html/doxygen.png b/documentation/developer/html/doxygen.png new file mode 100755 index 0000000..f0a274b Binary files /dev/null and b/documentation/developer/html/doxygen.png differ diff --git a/documentation/developer/html/files.html b/documentation/developer/html/files.html new file mode 100755 index 0000000..5759b4d --- /dev/null +++ b/documentation/developer/html/files.html @@ -0,0 +1,129 @@ + + +MPI On Cell (Documentation): File Index + + + + + +
+

File List

Here is a list of all files with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
include/doxygen_main.doxygen [code]
include/doxygen_pages.doxygen [code]
include/moc.h [code]
include/moc_datatype.h [code]
include/moc_error_codes.h [code]
include/internal/doxygen_internal_main.doxygen [code]
include/internal/imoc.h [code]
include/internal/imoc_core.h [code]
include/internal/imoc_macros.h [code]
include/internal/ppu/imoc_core_ppu.h [code]
include/internal/ppu/imoc_dma_ppu.h [code]
include/internal/ppu/imoc_macros_ppu.h [code]
include/internal/spu/imoc_core_spu.h [code]
include/internal/spu/imoc_dma_spu.h [code]
include/ppu/moc.h [code]
include/ppu/moc_datatype_ppu.h [code]
include/ppu/moc_dma_ppu.h [code]
include/spu/moc.h [code]
include/spu/moc_datatype_spu.h [code]
include/spu/moc_dma_spu.h [code]
src/noarch/communication/moc_bcast.c [code]
src/noarch/communication/moc_iprobe.c [code]
src/noarch/communication/moc_isend.c [code]
src/noarch/communication/moc_probe.c [code]
src/noarch/communication/moc_send.c [code]
src/noarch/communication/moc_send_recv.c [code]
src/noarch/communication/moc_send_recv_replace.c [code]
src/noarch/communication/moc_test.c [code]
src/noarch/communication/moc_wait.c [code]
src/noarch/internal/imoc_buffer_malloc.c [code]
src/noarch/internal/communication/imoc_get_entry.c [code]
src/noarch/internal/communication/imoc_get_free_entry.c [code]
src/noarch/internal/communication/imoc_get_free_mid.c [code]
src/noarch/internal/communication/imoc_test_message.c [code]
src/noarch/internal/communication/imoc_wait_message.c [code]
src/noarch/system/moc_comm_rank.c [code]
src/noarch/system/moc_comm_size.c [code]
src/noarch/system/moc_error_class.c [code]
src/noarch/system/moc_get_count.c [code]
src/noarch/system/moc_get_version.c [code]
src/ppu/communication/moc_barrier_ppu.c [code]
src/ppu/communication/moc_bsend_ppu.c [code]
src/ppu/communication/moc_issend_ppu.c [code]
src/ppu/communication/moc_recv_ppu.c [code]
src/ppu/communication/moc_ssend_ppu.c [code]
src/ppu/dma/moc_dma-get_ppu.c [code]
src/ppu/dma/moc_dma-iget_ppu.c [code]
src/ppu/dma/moc_dma-iput_ppu.c [code]
src/ppu/dma/moc_dma-put_ppu.c [code]
src/ppu/dma/moc_dma-test_ppu.c [code]
src/ppu/dma/moc_dma-wait_ppu.c [code]
src/ppu/dma/moc_translate_ea_ls_ppu.c [code]
src/ppu/internal/imoc_core_ppu.c [code]
src/ppu/internal/imoc_spe_thread_ppu.c [code]
src/ppu/internal/dma/imoc_dma-get_ppu.c [code]
src/ppu/internal/dma/imoc_dma-iget_ppu.c [code]
src/ppu/internal/dma/imoc_dma-iput_ppu.c [code]
src/ppu/internal/dma/imoc_dma-put_ppu.c [code]
src/ppu/internal/dma/imoc_dma-tags_ppu.c [code]
src/ppu/internal/dma/imoc_dma-test_ppu.c [code]
src/ppu/internal/dma/imoc_dma-wait_ppu.c [code]
src/ppu/system/moc_add_spu_thread_ppu.c [code]
src/ppu/system/moc_error_string_ppu.c [code]
src/ppu/system/moc_finalize_ppu.c [code]
src/ppu/system/moc_get_avail_spu_ppu.c [code]
src/ppu/system/moc_get_max_spu_ppu.c [code]
src/ppu/system/moc_get_proc_name_ppu.c [code]
src/ppu/system/moc_init_ppu.c [code]
src/ppu/system/moc_set_buffer_size_ppu.c [code]
src/ppu/system/moc_set_queue_size_ppu.c [code]
src/ppu/system/moc_wtick_ppu.c [code]
src/ppu/system/moc_wtime_ppu.c [code]
src/spu/communication/moc_barrier_spu.c [code]
src/spu/communication/moc_bsend_spu.c [code]
src/spu/communication/moc_issend_spu.c [code]
src/spu/communication/moc_recv_spu.c [code]
src/spu/communication/moc_ssend_spu.c [code]
src/spu/dma/moc_dma-get_spu.c [code]
src/spu/dma/moc_dma-iget_spu.c [code]
src/spu/dma/moc_dma-iput_spu.c [code]
src/spu/dma/moc_dma-put_spu.c [code]
src/spu/dma/moc_dma-test_spu.c [code]
src/spu/dma/moc_dma-wait_spu.c [code]
src/spu/dma/moc_translate_ls_ea_spu.c [code]
src/spu/internal/imoc_core_spu.c [code]
src/spu/internal/dma/imoc_dma-get_spu.c [code]
src/spu/internal/dma/imoc_dma-iget_spu.c [code]
src/spu/internal/dma/imoc_dma-iput_spu.c [code]
src/spu/internal/dma/imoc_dma-put_spu.c [code]
src/spu/internal/dma/imoc_dma-test_spu.c [code]
src/spu/internal/dma/imoc_dma-wait_spu.c [code]
src/spu/system/moc_error_string_spu.c [code]
src/spu/system/moc_finalize_spu.c [code]
src/spu/system/moc_get_proc_name_spu.c [code]
src/spu/system/moc_init_spu.c [code]
src/spu/system/moc_wtick_spu.c [code]
src/spu/system/moc_wtime_spu.c [code]
+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/ftv2blank.png b/documentation/developer/html/ftv2blank.png new file mode 100755 index 0000000..493c3c0 Binary files /dev/null and b/documentation/developer/html/ftv2blank.png differ diff --git a/documentation/developer/html/ftv2doc.png b/documentation/developer/html/ftv2doc.png new file mode 100755 index 0000000..f72999f Binary files /dev/null and b/documentation/developer/html/ftv2doc.png differ diff --git a/documentation/developer/html/ftv2folderclosed.png b/documentation/developer/html/ftv2folderclosed.png new file mode 100755 index 0000000..d6d0634 Binary files /dev/null and b/documentation/developer/html/ftv2folderclosed.png differ diff --git a/documentation/developer/html/ftv2folderopen.png b/documentation/developer/html/ftv2folderopen.png new file mode 100755 index 0000000..bbe2c91 Binary files /dev/null and b/documentation/developer/html/ftv2folderopen.png differ diff --git a/documentation/developer/html/ftv2lastnode.png b/documentation/developer/html/ftv2lastnode.png new file mode 100755 index 0000000..e7b9ba9 Binary files /dev/null and b/documentation/developer/html/ftv2lastnode.png differ diff --git a/documentation/developer/html/ftv2link.png b/documentation/developer/html/ftv2link.png new file mode 100755 index 0000000..14f3fed Binary files /dev/null and b/documentation/developer/html/ftv2link.png differ diff --git a/documentation/developer/html/ftv2mlastnode.png b/documentation/developer/html/ftv2mlastnode.png new file mode 100755 index 0000000..09ceb6a Binary files /dev/null and b/documentation/developer/html/ftv2mlastnode.png differ diff --git a/documentation/developer/html/ftv2mnode.png b/documentation/developer/html/ftv2mnode.png new file mode 100755 index 0000000..3254c05 Binary files /dev/null and b/documentation/developer/html/ftv2mnode.png differ diff --git a/documentation/developer/html/ftv2node.png b/documentation/developer/html/ftv2node.png new file mode 100755 index 0000000..c9f06a5 Binary files /dev/null and b/documentation/developer/html/ftv2node.png differ diff --git a/documentation/developer/html/ftv2plastnode.png b/documentation/developer/html/ftv2plastnode.png new file mode 100755 index 0000000..0b07e00 Binary files /dev/null and b/documentation/developer/html/ftv2plastnode.png differ diff --git a/documentation/developer/html/ftv2pnode.png b/documentation/developer/html/ftv2pnode.png new file mode 100755 index 0000000..2001b79 Binary files /dev/null and b/documentation/developer/html/ftv2pnode.png differ diff --git a/documentation/developer/html/ftv2vertline.png b/documentation/developer/html/ftv2vertline.png new file mode 100755 index 0000000..b330f3a Binary files /dev/null and b/documentation/developer/html/ftv2vertline.png differ diff --git a/documentation/developer/html/functions.html b/documentation/developer/html/functions.html new file mode 100755 index 0000000..5475f17 --- /dev/null +++ b/documentation/developer/html/functions.html @@ -0,0 +1,243 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+Here is a list of all struct and union fields with links to the structures/unions they belong to: +

+

- a -

+

- b -

+

- c -

+

- d -

+

- e -

+

- f -

+

- i -

+

- k -

+

- l -

+

- m -

+

- n -

+

- o -

+

- p -

+

- q -

+

- r -

+

- s -

+

- t -

+

- v -

+
+
Generated on Thu Feb 12 13:51:17 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/functions_vars.html b/documentation/developer/html/functions_vars.html new file mode 100755 index 0000000..f5f099b --- /dev/null +++ b/documentation/developer/html/functions_vars.html @@ -0,0 +1,243 @@ + + +MPI On Cell (Documentation): Data Fields - Variables + + + + + +
+  +

+

- a -

+

- b -

+

- c -

+

- d -

+

- e -

+

- f -

+

- i -

+

- k -

+

- l -

+

- m -

+

- n -

+

- o -

+

- p -

+

- q -

+

- r -

+

- s -

+

- t -

+

- v -

+
+
Generated on Thu Feb 12 13:51:17 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/globals.html b/documentation/developer/html/globals.html new file mode 100755 index 0000000..a9b64d7 --- /dev/null +++ b/documentation/developer/html/globals.html @@ -0,0 +1,56 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

+

- _ -

+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/globals_0x62.html b/documentation/developer/html/globals_0x62.html new file mode 100755 index 0000000..c19e916 --- /dev/null +++ b/documentation/developer/html/globals_0x62.html @@ -0,0 +1,56 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

+

- b -

+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/globals_0x65.html b/documentation/developer/html/globals_0x65.html new file mode 100755 index 0000000..0cbd467 --- /dev/null +++ b/documentation/developer/html/globals_0x65.html @@ -0,0 +1,62 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

+

- e -

+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/globals_0x69.html b/documentation/developer/html/globals_0x69.html new file mode 100755 index 0000000..bcdc065 --- /dev/null +++ b/documentation/developer/html/globals_0x69.html @@ -0,0 +1,148 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

+

- i -

+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/globals_0x6d.html b/documentation/developer/html/globals_0x6d.html new file mode 100755 index 0000000..31d1d59 --- /dev/null +++ b/documentation/developer/html/globals_0x6d.html @@ -0,0 +1,392 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

+

- m -

+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/globals_0x6e.html b/documentation/developer/html/globals_0x6e.html new file mode 100755 index 0000000..04dbac2 --- /dev/null +++ b/documentation/developer/html/globals_0x6e.html @@ -0,0 +1,59 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

+

- n -

+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/globals_0x74.html b/documentation/developer/html/globals_0x74.html new file mode 100755 index 0000000..bf18f84 --- /dev/null +++ b/documentation/developer/html/globals_0x74.html @@ -0,0 +1,56 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to: +

+

- t -

+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/globals_defs.html b/documentation/developer/html/globals_defs.html new file mode 100755 index 0000000..3fe75b8 --- /dev/null +++ b/documentation/developer/html/globals_defs.html @@ -0,0 +1,260 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+  +

+

- e -

+

- i -

+

- m -

+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/globals_func.html b/documentation/developer/html/globals_func.html new file mode 100755 index 0000000..c08d473 --- /dev/null +++ b/documentation/developer/html/globals_func.html @@ -0,0 +1,244 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+  +

+

- _ -

+

- i -

+

- m -

+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/globals_type.html b/documentation/developer/html/globals_type.html new file mode 100755 index 0000000..284479a --- /dev/null +++ b/documentation/developer/html/globals_type.html @@ -0,0 +1,71 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+  +

+

+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/globals_vars.html b/documentation/developer/html/globals_vars.html new file mode 100755 index 0000000..21605d8 --- /dev/null +++ b/documentation/developer/html/globals_vars.html @@ -0,0 +1,70 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+  +

+

+
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/graph_legend.dot b/documentation/developer/html/graph_legend.dot new file mode 100755 index 0000000..1f7c6e4 --- /dev/null +++ b/documentation/developer/html/graph_legend.dot @@ -0,0 +1,23 @@ +digraph G +{ + bgcolor="transparent"; + edge [fontname="FreeSans",fontsize=10,labelfontname="FreeSans",labelfontsize=10]; + node [fontname="FreeSans",fontsize=10,shape=record]; + Node9 [shape="box",label="Inherited",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",fillcolor="grey75",style="filled" fontcolor="black"]; + Node10 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans"]; + Node10 [shape="box",label="PublicBase",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classPublicBase.html"]; + Node11 -> Node10 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans"]; + Node11 [shape="box",label="Truncated",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="red",URL="$classTruncated.html"]; + Node13 -> Node9 [dir=back,color="darkgreen",fontsize=10,style="solid",fontname="FreeSans"]; + Node13 [shape="box",label="ProtectedBase",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classProtectedBase.html"]; + Node14 -> Node9 [dir=back,color="firebrick4",fontsize=10,style="solid",fontname="FreeSans"]; + Node14 [shape="box",label="PrivateBase",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classPrivateBase.html"]; + Node15 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans"]; + Node15 [shape="box",label="Undocumented",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="grey75"]; + Node16 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans"]; + Node16 [shape="box",label="Templ< int >",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classTempl.html"]; + Node17 -> Node16 [dir=back,color="orange",fontsize=10,style="dashed",label="< int >",fontname="FreeSans"]; + Node17 [shape="box",label="Templ< T >",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classTempl.html"]; + Node18 -> Node9 [dir=back,color="darkorchid3",fontsize=10,style="dashed",label="m_usedClass",fontname="FreeSans"]; + Node18 [shape="box",label="Used",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classUsed.html"]; +} diff --git a/documentation/developer/html/graph_legend.html b/documentation/developer/html/graph_legend.html new file mode 100755 index 0000000..a47a60f --- /dev/null +++ b/documentation/developer/html/graph_legend.html @@ -0,0 +1,86 @@ + + +MPI On Cell (Documentation): Graph Legend + + + + + +
+

Graph Legend

This page explains how to interpret the graphs that are generated by doxygen.

+Consider the following example:

/*! Invisible class because of truncation */
+class Invisible { };
+
+/*! Truncated class, inheritance relation is hidden */
+class Truncated : public Invisible { };
+
+/* Class not documented with doxygen comments */
+class Undocumented { };
+
+/*! Class that is inherited using public inheritance */
+class PublicBase : public Truncated { };
+
+/*! A template class */
+template<class T> class Templ { };
+
+/*! Class that is inherited using protected inheritance */
+class ProtectedBase { };
+
+/*! Class that is inherited using private inheritance */
+class PrivateBase { };
+
+/*! Class that is used by the Inherited class */
+class Used { };
+
+/*! Super class that inherits a number of other classes */
+class Inherited : public PublicBase,
+                  protected ProtectedBase,
+                  private PrivateBase,
+                  public Undocumented,
+                  public Templ<int>
+{
+  private:
+    Used *m_usedClass;
+};
+
If the MAX_DOT_GRAPH_HEIGHT tag in the configuration file is set to 240 this will result in the following graph:

+

+graph_legend.png +
+

+The boxes in the above graph have the following meaning:

+The arrows have the following meaning: +
+
Generated on Thu Feb 12 13:51:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/graph_legend.png b/documentation/developer/html/graph_legend.png new file mode 100755 index 0000000..23e64a9 Binary files /dev/null and b/documentation/developer/html/graph_legend.png differ diff --git a/documentation/developer/html/index.html b/documentation/developer/html/index.html new file mode 100755 index 0000000..cfead44 --- /dev/null +++ b/documentation/developer/html/index.html @@ -0,0 +1,11 @@ + + +MPI On Cell (Documentation) + + + + + <a href="main.html">Frames are disabled. Click here to go to the main page.</a> + + + diff --git a/documentation/developer/html/isyncronous_communication_1.png b/documentation/developer/html/isyncronous_communication_1.png new file mode 100755 index 0000000..6f59d27 Binary files /dev/null and b/documentation/developer/html/isyncronous_communication_1.png differ diff --git a/documentation/developer/html/latency-b.png b/documentation/developer/html/latency-b.png new file mode 100755 index 0000000..a47320c Binary files /dev/null and b/documentation/developer/html/latency-b.png differ diff --git a/documentation/developer/html/latency-kb.png b/documentation/developer/html/latency-kb.png new file mode 100755 index 0000000..ac97329 Binary files /dev/null and b/documentation/developer/html/latency-kb.png differ diff --git a/documentation/developer/html/main.html b/documentation/developer/html/main.html new file mode 100755 index 0000000..939b724 --- /dev/null +++ b/documentation/developer/html/main.html @@ -0,0 +1,35 @@ + + +MPI On Cell (Documentation): MPI On Cell + + + + + +
+

MPI On Cell

+

+The idea of this project is to implement a message passing library for work on the Cell BE. The main idea behind such an implementation would be to help the programmer by adding an layer of abstraction between the very low level libraries by IBM and give him the possibility to work with an interface he is more familiar with. To achieve this we decided to try to keep very closely to the standard provided by the Message Passing Interface (MPI), so that programmers knowing how to write MPI programmers can easily work with our library. Because of the very special nature of the Cell, it might not be possible to keep 100% true to the standard, but we try to introduce changes only when absolutely necessary and of great benefit, because of some specialties of the Cell's hardware.

+

Table of Content
+
End-User Documentation
+
Restrictions of the Cell-Architecture
+
Violations of the MPI-Standard
+
Performance Measurements
+
Summary & Conclusions
+
+
Developer Documentation
+
+
Generated on Thu Feb 12 13:49:47 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/modules.html b/documentation/developer/html/modules.html new file mode 100755 index 0000000..0c18272 --- /dev/null +++ b/documentation/developer/html/modules.html @@ -0,0 +1,83 @@ + + +MPI On Cell (Documentation): Module Index + + + + + +
+

Modules

Here is a list of all modules: +
+
Generated on Thu Feb 12 13:51:17 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/performance.html b/documentation/developer/html/performance.html new file mode 100755 index 0000000..d84cfd1 --- /dev/null +++ b/documentation/developer/html/performance.html @@ -0,0 +1,64 @@ + + +MPI On Cell (Documentation): Performance Measurements + + + + + +
+

Performance Measurements

The measurements were taken on a Playstation 3 running Yellow Dog Linux release 6.0 using Cell SDK 3.1.

+To measure send-receive operations ping-pongs were used and to measure DMA-calls the time till the used DMA-tag is marked to have no pending calls is used. The stated latencies in the pictures above are one-way latencies.

+Send-Receive performance

+The following two figures show latency and bandwidth achieved by our implementation. The theoretical maximum bandwidth is 25 GByte/s and synchronous send between SPUs is at a close range to this limit if the data-size is large enough. There is also a big difference between SPU-SPU and SPU-PPU operations. The reason for this is the fact that the PPU cannot handle DMA-operations itself but only remote-control the SPU's Memory Flow Controller. And as you will see later the main-memory performance of the PPU is much lower than that of the SPUs. Because we use ping-pongs there is no way to determine differences in sending from or to the PPU, but other measurements indicate such differences.

+

+latency-kb.png +
+

+

+bandwidth-kb.png +
+

+The following figure shows the latency of send-receive operations at a lower scale than the first figure. If you look at the latency of synchronous send operations then you can see that there is a big start-up latency and only a very small data-size dependend latency. So there's only a very small time-difference between sending 10 byte and 1 Kbyte, but there is naturally a difference in throughput.

+

+latency-b.png +
+

+Send-Recv vs. DMA performance

+The following two figures demonstrate the difference in performance of send-recv operations and DMA-calls. The performance of DMA-calls reaches it's peak much earlier than send-recv and the peak-value is higher than that of send-recv even though the difference is not much. So DMA is a lot faster than send-recv especially for small messages, but for big messages the difference is much lower. It seems that it is always better to use DMA, but keep in mind that in practical applications calculation time easily exceeds communication time.

+

+dma-vs-moc-lat.png +
+

+

+dma-vs-moc-bw.png +
+

+SPU- vs PPU-initiated transfer

+The following figure shows the difference between SPU- and PPU-initiated DMA-calls. As you can see the highest performance can be achieved by using SPU-SPU DMA-calls. There is also hardly any difference between put and get operations. DMA-operations between SPU and main-memory achieves lower performance and there is a difference between put and get operations. PPU to SPU DMA calls have the lowest performance with small transfer sizes, but if the transfer-size is big enough they are faster than SPU-main-memory transfers. The lowest performance has a memcopy on the PPU, which also explains the bad performance of buffered send between SPU and PPU.

+

+spu-ppu-dma-bw-kb.png +
+

+DMA vs. memcpy

+The official Cell documentation states that it is also possible to use memcpy to transfer data from the PPU to a SPU. However one should use DMA, because it is always faster. If you look at the following figure, this is not always true. If the data-size is small enough memcpy is faster.

+

+ppu-transfer-bw-b.png +
+
+
Generated on Thu Feb 12 13:50:43 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/ppu-transfer-bw-b.png b/documentation/developer/html/ppu-transfer-bw-b.png new file mode 100755 index 0000000..c0c38b7 Binary files /dev/null and b/documentation/developer/html/ppu-transfer-bw-b.png differ diff --git a/documentation/developer/html/restrictions.html b/documentation/developer/html/restrictions.html new file mode 100755 index 0000000..d7471fd --- /dev/null +++ b/documentation/developer/html/restrictions.html @@ -0,0 +1,41 @@ + + +MPI On Cell (Documentation): Restrictions of the Cell-Architecture + + + + + +
+

Restrictions of the Cell-Architecture

+

+CBE Architecture

+There are some restriction caused by the CBE architecture. Programming a SPU can be compared to programming a microcontroller: +
+

+Memory-Alignment

+All Buffers used in send- or receive-functions have to be aligned at a 16-byte boundary (for better performance a 128-byte alignment is recommended). This restriction cannot be circumvented.

+

+

+Transfer-Size

+DMA-calls only transfer data in chunks of 16 bytes. Send-receive operations and DMA-get-operations provided by this library hide this restriction by the use of intermediate buffers. But you should keep this restriction in mind because to gain maximum performance the size of data to be transfered should be a multiple of 16 bytes.
+
Generated on Thu Feb 12 13:50:43 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/developer/html/spu-ppu-dma-bw-kb.png b/documentation/developer/html/spu-ppu-dma-bw-kb.png new file mode 100755 index 0000000..62b201f Binary files /dev/null and b/documentation/developer/html/spu-ppu-dma-bw-kb.png differ diff --git a/documentation/developer/html/synchronous_communication_1.png b/documentation/developer/html/synchronous_communication_1.png new file mode 100755 index 0000000..90270ee Binary files /dev/null and b/documentation/developer/html/synchronous_communication_1.png differ diff --git a/documentation/developer/html/tab_b.gif b/documentation/developer/html/tab_b.gif new file mode 100755 index 0000000..0d62348 Binary files /dev/null and b/documentation/developer/html/tab_b.gif differ diff --git a/documentation/developer/html/tab_l.gif b/documentation/developer/html/tab_l.gif new file mode 100755 index 0000000..9b1e633 Binary files /dev/null and b/documentation/developer/html/tab_l.gif differ diff --git a/documentation/developer/html/tab_r.gif b/documentation/developer/html/tab_r.gif new file mode 100755 index 0000000..ce9dd9f Binary files /dev/null and b/documentation/developer/html/tab_r.gif differ diff --git a/documentation/developer/html/tabs.css b/documentation/developer/html/tabs.css new file mode 100755 index 0000000..95f00a9 --- /dev/null +++ b/documentation/developer/html/tabs.css @@ -0,0 +1,102 @@ +/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ + +DIV.tabs +{ + float : left; + width : 100%; + background : url("tab_b.gif") repeat-x bottom; + margin-bottom : 4px; +} + +DIV.tabs UL +{ + margin : 0px; + padding-left : 10px; + list-style : none; +} + +DIV.tabs LI, DIV.tabs FORM +{ + display : inline; + margin : 0px; + padding : 0px; +} + +DIV.tabs FORM +{ + float : right; +} + +DIV.tabs A +{ + float : left; + background : url("tab_r.gif") no-repeat right top; + border-bottom : 1px solid #84B0C7; + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + +DIV.tabs A:hover +{ + background-position: 100% -150px; +} + +DIV.tabs A:link, DIV.tabs A:visited, +DIV.tabs A:active, DIV.tabs A:hover +{ + color: #1A419D; +} + +DIV.tabs SPAN +{ + float : left; + display : block; + background : url("tab_l.gif") no-repeat left top; + padding : 5px 9px; + white-space : nowrap; +} + +DIV.tabs INPUT +{ + float : right; + display : inline; + font-size : 1em; +} + +DIV.tabs TD +{ + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + + + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +DIV.tabs SPAN {float : none;} +/* End IE5-Mac hack */ + +DIV.tabs A:hover SPAN +{ + background-position: 0% -150px; +} + +DIV.tabs LI.current A +{ + background-position: 100% -150px; + border-width : 0px; +} + +DIV.tabs LI.current SPAN +{ + background-position: 0% -150px; + padding-bottom : 6px; +} + +DIV.navpath +{ + background : none; + border : none; + border-bottom : 1px solid #84B0C7; +} diff --git a/documentation/developer/html/tree.html b/documentation/developer/html/tree.html new file mode 100755 index 0000000..6ece066 --- /dev/null +++ b/documentation/developer/html/tree.html @@ -0,0 +1,252 @@ + + + + + + + TreeView + + + + +
+

MPI On Cell (Documentation)

+
+

o+MPI On Cell

+ +

o+Modules

+ +

o+Data Structures

+ +

o*Data Fields

+

o+File List

+
+

|o*include/doxygen_main.doxygen

+

|o*include/doxygen_pages.doxygen

+

|o*include/moc.h

+

|o*include/moc_datatype.h

+

|o*include/moc_error_codes.h

+

|o*include/internal/doxygen_internal_main.doxygen

+

|o*include/internal/imoc.h

+

|o*include/internal/imoc_core.h

+

|o*include/internal/imoc_macros.h

+

|o*include/internal/ppu/imoc_core_ppu.h

+

|o*include/internal/ppu/imoc_dma_ppu.h

+

|o*include/internal/ppu/imoc_macros_ppu.h

+

|o*include/internal/spu/imoc_core_spu.h

+

|o*include/internal/spu/imoc_dma_spu.h

+

|o*include/ppu/moc.h

+

|o*include/ppu/moc_datatype_ppu.h

+

|o*include/ppu/moc_dma_ppu.h

+

|o*include/spu/moc.h

+

|o*include/spu/moc_datatype_spu.h

+

|o*include/spu/moc_dma_spu.h

+

|o*src/noarch/communication/moc_bcast.c

+

|o*src/noarch/communication/moc_iprobe.c

+

|o*src/noarch/communication/moc_isend.c

+

|o*src/noarch/communication/moc_probe.c

+

|o*src/noarch/communication/moc_send.c

+

|o*src/noarch/communication/moc_send_recv.c

+

|o*src/noarch/communication/moc_send_recv_replace.c

+

|o*src/noarch/communication/moc_test.c

+

|o*src/noarch/communication/moc_wait.c

+

|o*src/noarch/internal/imoc_buffer_malloc.c

+

|o*src/noarch/internal/communication/imoc_get_entry.c

+

|o*src/noarch/internal/communication/imoc_get_free_entry.c

+

|o*src/noarch/internal/communication/imoc_get_free_mid.c

+

|o*src/noarch/internal/communication/imoc_test_message.c

+

|o*src/noarch/internal/communication/imoc_wait_message.c

+

|o*src/noarch/system/moc_comm_rank.c

+

|o*src/noarch/system/moc_comm_size.c

+

|o*src/noarch/system/moc_error_class.c

+

|o*src/noarch/system/moc_get_count.c

+

|o*src/noarch/system/moc_get_version.c

+

|o*src/ppu/communication/moc_barrier_ppu.c

+

|o*src/ppu/communication/moc_bsend_ppu.c

+

|o*src/ppu/communication/moc_issend_ppu.c

+

|o*src/ppu/communication/moc_recv_ppu.c

+

|o*src/ppu/communication/moc_ssend_ppu.c

+

|o*src/ppu/dma/moc_dma-get_ppu.c

+

|o*src/ppu/dma/moc_dma-iget_ppu.c

+

|o*src/ppu/dma/moc_dma-iput_ppu.c

+

|o*src/ppu/dma/moc_dma-put_ppu.c

+

|o*src/ppu/dma/moc_dma-test_ppu.c

+

|o*src/ppu/dma/moc_dma-wait_ppu.c

+

|o*src/ppu/dma/moc_translate_ea_ls_ppu.c

+

|o*src/ppu/internal/imoc_core_ppu.c

+

|o*src/ppu/internal/imoc_spe_thread_ppu.c

+

|o*src/ppu/internal/dma/imoc_dma-get_ppu.c

+

|o*src/ppu/internal/dma/imoc_dma-iget_ppu.c

+

|o*src/ppu/internal/dma/imoc_dma-iput_ppu.c

+

|o*src/ppu/internal/dma/imoc_dma-put_ppu.c

+

|o*src/ppu/internal/dma/imoc_dma-tags_ppu.c

+

|o*src/ppu/internal/dma/imoc_dma-test_ppu.c

+

|o*src/ppu/internal/dma/imoc_dma-wait_ppu.c

+

|o*src/ppu/system/moc_add_spu_thread_ppu.c

+

|o*src/ppu/system/moc_error_string_ppu.c

+

|o*src/ppu/system/moc_finalize_ppu.c

+

|o*src/ppu/system/moc_get_avail_spu_ppu.c

+

|o*src/ppu/system/moc_get_max_spu_ppu.c

+

|o*src/ppu/system/moc_get_proc_name_ppu.c

+

|o*src/ppu/system/moc_init_ppu.c

+

|o*src/ppu/system/moc_set_buffer_size_ppu.c

+

|o*src/ppu/system/moc_set_queue_size_ppu.c

+

|o*src/ppu/system/moc_wtick_ppu.c

+

|o*src/ppu/system/moc_wtime_ppu.c

+

|o*src/spu/communication/moc_barrier_spu.c

+

|o*src/spu/communication/moc_bsend_spu.c

+

|o*src/spu/communication/moc_issend_spu.c

+

|o*src/spu/communication/moc_recv_spu.c

+

|o*src/spu/communication/moc_ssend_spu.c

+

|o*src/spu/dma/moc_dma-get_spu.c

+

|o*src/spu/dma/moc_dma-iget_spu.c

+

|o*src/spu/dma/moc_dma-iput_spu.c

+

|o*src/spu/dma/moc_dma-put_spu.c

+

|o*src/spu/dma/moc_dma-test_spu.c

+

|o*src/spu/dma/moc_dma-wait_spu.c

+

|o*src/spu/dma/moc_translate_ls_ea_spu.c

+

|o*src/spu/internal/imoc_core_spu.c

+

|o*src/spu/internal/dma/imoc_dma-get_spu.c

+

|o*src/spu/internal/dma/imoc_dma-iget_spu.c

+

|o*src/spu/internal/dma/imoc_dma-iput_spu.c

+

|o*src/spu/internal/dma/imoc_dma-put_spu.c

+

|o*src/spu/internal/dma/imoc_dma-test_spu.c

+

|o*src/spu/internal/dma/imoc_dma-wait_spu.c

+

|o*src/spu/system/moc_error_string_spu.c

+

|o*src/spu/system/moc_finalize_spu.c

+

|o*src/spu/system/moc_get_proc_name_spu.c

+

|o*src/spu/system/moc_init_spu.c

+

|o*src/spu/system/moc_wtick_spu.c

+

|\*src/spu/system/moc_wtime_spu.c

+
+

\*Globals

+
+
+ diff --git a/documentation/developer/html/violations.html b/documentation/developer/html/violations.html new file mode 100755 index 0000000..77486c2 --- /dev/null +++ b/documentation/developer/html/violations.html @@ -0,0 +1,49 @@ + + +MPI On Cell (Documentation): Violations of the MPI-Standard + + + + + +
+

Violations of the MPI-Standard

+

+Prefix of functions:

+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.

+

+

+Application Startup

+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.

+

+

+Order of received messages:

+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.

+

+

+Number of usable message-tag

+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.

+

+

+Number of simultaneous pending send-receive operations

+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.

+

+

+MPI_Init:

+The parameters of the init-function for the SPU does not match the parameters defined by the MPI-standard (see MOC_Init (SPU))
+
Generated on Thu Feb 12 13:50:43 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/doxygen_developer.config b/documentation/doxygen_developer.config new file mode 100755 index 0000000..2881427 --- /dev/null +++ b/documentation/doxygen_developer.config @@ -0,0 +1,262 @@ +# Doxyfile 1.5.6 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "MPI On Cell (Documentation)" +PROJECT_NUMBER = +OUTPUT_DIRECTORY = documentation/developer +CREATE_SUBDIRS = YES +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = YES +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +TYPEDEF_HIDES_STRUCT = NO +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = NO +GENERATE_TESTLIST = NO +GENERATE_BUGLIST = NO +GENERATE_DEPRECATEDLIST= NO +ENABLED_SECTIONS = full +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +SHOW_FILES = YES +SHOW_NAMESPACES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = include/moc_doxygen_main.h \ + include \ + src +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c \ + *.h \ + *.C \ + *.H \ + *.doxygen +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = documentation/pics +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = NO +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +HTML_DYNAMIC_SECTIONS = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +FORMULA_FONTSIZE = 10 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +MSCGEN_PATH = +HIDE_UNDOC_RELATIONS = NO +HAVE_DOT = YES +DOT_FONTNAME = FreeSans +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = YES +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = YES +CALLER_GRAPH = YES +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = YES +DOT_MULTI_TARGETS = YES +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/documentation/doxygen_enduser.config b/documentation/doxygen_enduser.config new file mode 100755 index 0000000..298ee0e --- /dev/null +++ b/documentation/doxygen_enduser.config @@ -0,0 +1,261 @@ +# Doxyfile 1.5.6 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "MPI On Cell (Documentation)" +PROJECT_NUMBER = +OUTPUT_DIRECTORY = documentation/enduser +CREATE_SUBDIRS = YES +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = YES +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +TYPEDEF_HIDES_STRUCT = NO +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = NO +GENERATE_TESTLIST = NO +GENERATE_BUGLIST = NO +GENERATE_DEPRECATEDLIST= NO +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = NO +SHOW_DIRECTORIES = NO +SHOW_FILES = NO +SHOW_NAMESPACES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = include/moc_doxygen_main.h \ + include +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c \ + *.h \ + *.C \ + *.H \ + *.doxygen +RECURSIVE = YES +EXCLUDE = include/internal +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = documentation/pics +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = NO +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = NO +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +HTML_DYNAMIC_SECTIONS = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +FORMULA_FONTSIZE = 10 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +MSCGEN_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +DOT_FONTNAME = FreeSans +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = YES +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = NO +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = NO +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = YES +DOT_MULTI_TARGETS = YES +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/documentation/enduser/html/annotated.html b/documentation/enduser/html/annotated.html new file mode 100755 index 0000000..9e79277 --- /dev/null +++ b/documentation/enduser/html/annotated.html @@ -0,0 +1,33 @@ + + +MPI On Cell (Documentation): Data Structures + + + + + +
+

Data Structures

Here are the data structures with brief descriptions: + + +
moc_request_structCommunication-Request (Handle)
MOC_Status_structStructure holding information about a received message
+
+
Generated on Thu Feb 12 13:48:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/bandwidth-kb.png b/documentation/enduser/html/bandwidth-kb.png new file mode 100755 index 0000000..02e32c4 Binary files /dev/null and b/documentation/enduser/html/bandwidth-kb.png differ diff --git a/documentation/enduser/html/conclusion.html b/documentation/enduser/html/conclusion.html new file mode 100755 index 0000000..d7c2f63 --- /dev/null +++ b/documentation/enduser/html/conclusion.html @@ -0,0 +1,27 @@ + + +MPI On Cell (Documentation): Summary & Conclusions + + + + + +
+

Summary & Conclusions

MPI wasn't designed for the Cell Broadband Engine. A common MPI-node has one or more normal CPUs and several GBytes of RAM. The Cell Broadband Engine features a normal CPU (the PPU) and several special processing units with only a very limited amount of memory. The SPUs support only one thread per SPU and a complex handling of system-calls is needed. Because of this there are several restrictions in implementing MPI on the Cell Broadband Engine.

+Nevertheless MPI on Cell makes sense. It greatly simlifies programming on the Cell Broadband Engine, features a public API which is well known and widely used and message passing operations are generally easier to use than DMA (DMA needs memory-addresses and explicit synchronization, whereas MPI only needs the ranks of participating processes and features implicit synchronization).

+But message parsing operations cannot replace DMA. Both methods of communication have their advantages and disadvantages and they complement one another. So this library additionally features some easy to use DMA operations, if someone wants to gain maximum performance. Using DMA alltogether with send-recv especially speeds up application with a lot of communication going on between SPUs and PPU.

+
Generated on Thu Feb 12 13:48:16 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d0/d64/group__p2p__main.html b/documentation/enduser/html/d0/d64/group__p2p__main.html new file mode 100755 index 0000000..30ce158 --- /dev/null +++ b/documentation/enduser/html/d0/d64/group__p2p__main.html @@ -0,0 +1,369 @@ + + +MPI On Cell (Documentation): Point-to-Point Communication + + + + + +
+

Point-to-Point Communication
+ +[End-User Documentation] +

+

+

+Collaboration diagram for Point-to-Point Communication:
+
+
+ +
+
+

Detailed Description

+Sending and receiving of messages by processes is the basic MPI communication mechanism. +

+The basic point-to-point communication operations are send and receive.

+MOC_Send uses either buffered or synchronous send depending on the message-size (Short messages are transmitted using buffered send and long messages are transmitted using synchronous send).

+MOC_Recv receives all messages irrespective wether buffered or synchronous communication is used.

+

Note:
Because there are separate message-queues for each remote process and no distinct global ordering of messages, there may be some situation where a message from a process may never be received. This may occur when MOC_Recv, MOC_Probe and MOC_IProbe are used with MOC_ANY_SOURCE, because then there is the possibility that new messages are received before a specific message from a process with a higher rank than the other senders. This may also occur with lower possibility when using MOC_ANY_TAG between messages from the same sender but with other tags.
+ +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + +

Modules

 Return Status
 Receiving operations return a status-object holding information about the message.
 Datatypes
 Datatypes supported by MOC.
 Synchronous Communication
 Direct blocking sending of messages without any intermediate buffer.
 Buffered Communication
 Blocking sending of messages with the use of an intermediate buffer.
 Send-Receive
 The send-receive operations combine in one call the sending of a message to one destination and the receiving of another message, from another process.
 Non-Blocking Communication
 Non-blocking sending and receiving messages.

Defines

+#define MOC_SEND_TRESHOLD   4096
 Indicates, at which message-size MOC_Send switches to synchronous send.

Functions

int MOC_Send (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking standard mode send operation.
int MOC_Recv (void *buf, int count, MOC_Datatype datatype, int source, int tag, MOC_Comm comm, MOC_Status *status)
 Performs a blocking standard mode receive operation.
int MOC_Probe (int source, int tag, MOC_Comm comm, MOC_Status *status)
 Waits till a message is received and returns information without actually receiving the message.
int MOC_Iprobe (int source, int tag, MOC_Comm comm, int *flag, MOC_Status *status)
 Tests if a message is available and returns information without actually receiving the message.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Iprobe (int  source,
int  tag,
MOC_Comm  comm,
int *  flag,
MOC_Status *  status 
)
+
+
+ +

+Tests if a message is available and returns information without actually receiving the message. +

+

Parameters:
+ + + + + + +
source in source of message
tag in message-tag
comm in communicator
flag out boolean value telling if a message is available
status out status-object holding information about message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Probe (int  source,
int  tag,
MOC_Comm  comm,
MOC_Status *  status 
)
+
+
+ +

+Waits till a message is received and returns information without actually receiving the message. +

+

Parameters:
+ + + + + +
source in source of message
tag in message-tag
comm in communicator
status out status-object holding information about message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Recv (void *  buf,
int  count,
MOC_Datatype  datatype,
int  source,
int  tag,
MOC_Comm  comm,
MOC_Status *  status 
)
+
+
+ +

+Performs a blocking standard mode receive operation. +

+

Note:
This routine blocks until the message is received.
+
Parameters:
+ + + + + + + + +
buf inout Buffer into which data should be stored
count in Number of elements in receive buffer (not equal to actual byte-value)
datatype in Datatype of each receive buffer element
source in Rank of source
tag in Tag of message
comm in Communicator of message
status inout Object holding status-information (has to be allocated by user)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Send (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  tag,
MOC_Comm  comm 
)
+
+
+ +

+Performs a blocking standard mode send operation. +

+

Note:
This routine may block until the message is received.
+
Parameters:
+ + + + + + + +
buf in Pointer to buffer where data is stored
count in Number of elements to be send (not equal to actual byte-value)
datatype in Type of elements to be send
dest in Rank of receiving process
tag in Tag of message
comm in communicator of message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+

+
Generated on Thu Feb 12 13:48:19 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d0/d64/group__p2p__main.png b/documentation/enduser/html/d0/d64/group__p2p__main.png new file mode 100755 index 0000000..8e71b90 Binary files /dev/null and b/documentation/enduser/html/d0/d64/group__p2p__main.png differ diff --git a/documentation/enduser/html/d1/dd1/group__comm__mgt.html b/documentation/enduser/html/d1/dd1/group__comm__mgt.html new file mode 100755 index 0000000..1d96f23 --- /dev/null +++ b/documentation/enduser/html/d1/dd1/group__comm__mgt.html @@ -0,0 +1,172 @@ + + +MPI On Cell (Documentation): Communicator Management + + + + + +
+

Communicator Management
+ +[Groups, Context and Communicators] +

+

+

+Collaboration diagram for Communicator Management:
+
+
+ +
+
+

Detailed Description

+Funktions for managing communicators. +

+Because of reasons already stated (see Groups, Context and Communicators) there is no support for user-defined communicators. So this section is limited to functions which return the size of a specific communicator or the rank of the calling process. +

+ + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define MOC_COMM_NULL   0
 Specifies a null communicator.
+#define MOC_COMM_WORLD   1
 Specifies a constant that contains all of the processes.
+#define MOC_COMM_SELF   2
 Specifies a constant that contains only the calling process.

Typedefs

typedef int MOC_Comm
 Communicator-Handle.

Functions

int MOC_Comm_rank (MOC_Comm comm, int *rank)
 Determines the rank of the calling process in the communicator.
int MOC_Comm_size (MOC_Comm comm, int *size)
 Determines the size of the group associated with a communictor.
+


Typedef Documentation

+ +
+
+ + + + +
typedef int MOC_Comm
+
+
+ +

+Communicator-Handle. +

+Masks the actual type which is used to encode the communicator. Char is used and therefore the maximum number of possible communicators is limited to 256. But because there are three predefined communicators (MPI_COMM_NULL, MPI_COMM_WORLD and MPI_COMM_SELF) only 253 user-defined communicators are possible. +

+

+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int MOC_Comm_rank (MOC_Comm  comm,
int *  rank 
)
+
+
+ +

+Determines the rank of the calling process in the communicator. +

+

Parameters:
+ + + +
comm in commicator-handle
rank out rank of the calling process in group of comm
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_COMM Invalid communicator. A common error is to use a null communicator in a call.
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Comm_size (MOC_Comm  comm,
int *  size 
)
+
+
+ +

+Determines the size of the group associated with a communictor. +

+

Parameters:
+ + + +
comm in commicator-handle
size out number of processes in the group of comm
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_COMM Invalid communicator. A common error is to use a null communicator in a call.
+
+ +
+

+

+
Generated on Thu Feb 12 13:48:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d1/dd1/group__comm__mgt.png b/documentation/enduser/html/d1/dd1/group__comm__mgt.png new file mode 100755 index 0000000..682638b Binary files /dev/null and b/documentation/enduser/html/d1/dd1/group__comm__mgt.png differ diff --git a/documentation/enduser/html/d1/df0/group__comm__main.html b/documentation/enduser/html/d1/df0/group__comm__main.html new file mode 100755 index 0000000..ec79f69 --- /dev/null +++ b/documentation/enduser/html/d1/df0/group__comm__main.html @@ -0,0 +1,52 @@ + + +MPI On Cell (Documentation): Groups, Context and Communicators + + + + + +
+

Groups, Context and Communicators
+ +[End-User Documentation] +

+

+

+Collaboration diagram for Groups, Context and Communicators:
+
+
+ +
+
+

Detailed Description

+The MOC communicator specifies a group of processes inside which a communication occurs. +

+Initially there is a single communicator, MPI_COMM_WORLD, which contains all of the processes involved in the computation.

+Currently there is no support for creating and managing user-defined groups and communicators and probably never will be. The local storage of a SPU is very small and also the maximal number of nodes is limited to a small number and so there is doubt if the benefits will be greater than the overhead introduced by supporting user-defined groups and communicators.

+Only the predefined communicators MOC_COMM_WORLD, MOC_COMM_SELF and MOC_COMM_NULL are available.

+The only operations which are currently implemented are MOC_Comm_size and MOC_Comm_rank. +

+ + + + + + + +

+


Modules

 Communicator Management
 Funktions for managing communicators.
+

+
Generated on Thu Feb 12 13:48:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d1/df0/group__comm__main.png b/documentation/enduser/html/d1/df0/group__comm__main.png new file mode 100755 index 0000000..4ae014f Binary files /dev/null and b/documentation/enduser/html/d1/df0/group__comm__main.png differ diff --git a/documentation/enduser/html/d2/ded/group__p2p__sendrecv.html b/documentation/enduser/html/d2/ded/group__p2p__sendrecv.html new file mode 100755 index 0000000..fcd0a59 --- /dev/null +++ b/documentation/enduser/html/d2/ded/group__p2p__sendrecv.html @@ -0,0 +1,258 @@ + + +MPI On Cell (Documentation): Send-Receive + + + + + +
+

Send-Receive
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Send-Receive:
+
+
+ +
+
+

Detailed Description

+The send-receive operations combine in one call the sending of a message to one destination and the receiving of another message, from another process. +

+A message sent by a send-receive operation can be received by a regular receive operation or probed by a probe operation; a send-receive operation can receive a message sent by a regular send operation. +

+ + + + + + + + + +

Functions

int MOC_Sendrecv (void *sendbuf, int sendcount, MOC_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MOC_Datatype recvtype, int source, int recvtag, MOC_Comm comm, MOC_Status *status)
 Execute a blocking send and receive operation.
int MOC_Sendrecv_replace (void *buf, int count, MOC_Datatype datatype, int dest, int sendtag, int source, int recvtag, MOC_Comm comm, MOC_Status *status)
 Execute a blocking send and receive.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Sendrecv (void *  sendbuf,
int  sendcount,
MOC_Datatype  sendtype,
int  dest,
int  sendtag,
void *  recvbuf,
int  recvcount,
MOC_Datatype  recvtype,
int  source,
int  recvtag,
MOC_Comm  comm,
MOC_Status *  status 
)
+
+
+ +

+Execute a blocking send and receive operation. +

+Both send and receive use the same communicator, but possibly different tags. The send buffer and receive buffers may be disjoint, and may have different lengths and datatypes.

+

Parameters:
+ + + + + + + + + + + + + +
sendbuf in Pointer to buffer where data is stored
sendcount in Number of elements to be send (not equal to actual byte-value)
sendtype in Type of elements to be send
dest in Rank of receiving process
sendtag in Tag of message to be send
recvbuf inout Buffer into which data should be stored
recvcount in Number of elements in receive buffer (not equal to actual byte-value)
recvtype in Datatype of each receive buffer element
source in Rank of source
recvtag in Tag of message to be received
comm in Communicator of message
status inout Object holding status-information (has to be allocated by user)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Sendrecv_replace (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  sendtag,
int  source,
int  recvtag,
MOC_Comm  comm,
MOC_Status *  status 
)
+
+
+ +

+Execute a blocking send and receive. +

+The same buffer is used both for the send and for the receive, so that the message sent is replaced by the message received.

+

Parameters:
+ + + + + + + + + + +
buf inout Pointer to buffer
count in Number of elements (not equal to actual byte-value)
datatype in Type of elements
dest in Rank of receiving process
sendtag in Tag of message to be send
source in Rank of source
recvtag in Tag of message to be received
comm in Communicator of message
status inout Object holding status-information (has to be allocated by user)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+

+
Generated on Thu Feb 12 13:48:21 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d2/ded/group__p2p__sendrecv.png b/documentation/enduser/html/d2/ded/group__p2p__sendrecv.png new file mode 100755 index 0000000..3bda184 Binary files /dev/null and b/documentation/enduser/html/d2/ded/group__p2p__sendrecv.png differ diff --git a/documentation/enduser/html/d3/d9e/group__end__user.html b/documentation/enduser/html/d3/d9e/group__end__user.html new file mode 100755 index 0000000..71c5802 --- /dev/null +++ b/documentation/enduser/html/d3/d9e/group__end__user.html @@ -0,0 +1,67 @@ + + +MPI On Cell (Documentation): End-User Documentation + + + + + +
+

End-User Documentation

+

+

+Collaboration diagram for End-User Documentation:
+
+
+ +
+
+

Detailed Description

+This section describes the public API provided by the MOC-library. +

+If some things remain unclear, consult the official MPI-standard (Version 1.3).

+This library uses Direct Memory Access (DMA) provided by the Cell Broadband Engine. So the use of other DMA operations than provided of this library is discouraged, because it may interfere with this library. One exceptions are signals. We don't use signals at all at the moment, so one can savely use signal. +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+


Modules

 Environmental Management
 This chapter discusses routines for getting and, where appropriate, setting various parameters that relate to the MPI implementation and the execution environment (such as error handling, startup&shutdown and Time).
 Point-to-Point Communication
 Sending and receiving of messages by processes is the basic MPI communication mechanism.
 Collective Communication
 Communication that involves a group of processes.
 Direct Memory Access
 Functions which use DMA to transfer Data.
 Groups, Context and Communicators
 The MOC communicator specifies a group of processes inside which a communication occurs.
+

+
Generated on Thu Feb 12 13:48:16 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d3/d9e/group__end__user.png b/documentation/enduser/html/d3/d9e/group__end__user.png new file mode 100755 index 0000000..8397aa5 Binary files /dev/null and b/documentation/enduser/html/d3/d9e/group__end__user.png differ diff --git a/documentation/enduser/html/d5/dc2/group__p2p__synch.html b/documentation/enduser/html/d5/dc2/group__p2p__synch.html new file mode 100755 index 0000000..6375764 --- /dev/null +++ b/documentation/enduser/html/d5/dc2/group__p2p__synch.html @@ -0,0 +1,120 @@ + + +MPI On Cell (Documentation): Synchronous Communication + + + + + +
+

Synchronous Communication
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Synchronous Communication:
+
+
+ +
+
+

Detailed Description

+Direct blocking sending of messages without any intermediate buffer. +

+The blocking synchronous send-operation returns only when the receiver has completely received the message. +

+ + + + + + +

Functions

int MOC_Ssend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking synchronous mode send operation.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Ssend (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  tag,
MOC_Comm  comm 
)
+
+
+ +

+Performs a blocking synchronous mode send operation. +

+

Note:
This routine blocks until the message is received.
+
Parameters:
+ + + + + + + +
buf in Pointer to buffer where data is stored
count in Number of elements to be send (not equal to actual byte-value)
datatype in Type of elements to be send
dest in Rank of receiving process
tag in Tag of message
comm in communicator of message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+

+
Generated on Thu Feb 12 13:48:20 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d5/dc2/group__p2p__synch.png b/documentation/enduser/html/d5/dc2/group__p2p__synch.png new file mode 100755 index 0000000..c575760 Binary files /dev/null and b/documentation/enduser/html/d5/dc2/group__p2p__synch.png differ diff --git a/documentation/enduser/html/d7/d62/group__p2p__imm.html b/documentation/enduser/html/d7/d62/group__p2p__imm.html new file mode 100755 index 0000000..6de8e97 --- /dev/null +++ b/documentation/enduser/html/d7/d62/group__p2p__imm.html @@ -0,0 +1,337 @@ + + +MPI On Cell (Documentation): Non-Blocking Communication + + + + + +
+

Non-Blocking Communication
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Non-Blocking Communication:
+
+
+ +
+
+

Detailed Description

+Non-blocking sending and receiving messages. +

+Because of restrictions of the Cell Broadband Engine non-blocking communication can only be provided with a lot of limitations. In fact the only operation where non-blocking communication make sense is synchronous send.

+MOC_ISend uses blocking buffered send or non-blocking synchronous send according to the message size.

+

Note:
Every non-blocking communication operation has to be finished using MOC_Test or MOC_Wait, otherwise resources are no freed and some data are not copied correctly.
+ +

+ + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  moc_request_struct
 Communication-Request (Handle). More...

Typedefs

typedef struct moc_request_struct MOC_Request
 Communication-Request (Handle).

Functions

int MOC_ISend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, MOC_Request *request)
 Performs a non-blocking standard mode send operation.
int MOC_ISsend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, MOC_Request *request)
 Performs a non-blocking synchronous mode send operation.
int MOC_Test (MOC_Request *request, int *flag, MOC_Status *status)
 Tests, if a non-blocking communication has been completed.
int MOC_Wait (MOC_Request *request, MOC_Status *status)
 Wait till a non-blocking communication has been completed.
+


Typedef Documentation

+ +
+
+ + + + +
typedef struct moc_request_struct MOC_Request
+
+
+ +

+Communication-Request (Handle). +

+< Communication-Request (Handle) +

+

+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_ISend (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  tag,
MOC_Comm  comm,
MOC_Request *  request 
)
+
+
+ +

+Performs a non-blocking standard mode send operation. +

+

Note:
This routine returns as soon as possible.
+
Parameters:
+ + + + + + + + +
buf in Pointer to buffer where data is stored
count in Number of elements to be send (not equal to actual byte-value)
datatype in Type of elements to be send
dest in Rank of receiving process
tag in Tag of message
comm in communicator of message
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_ISsend (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  tag,
MOC_Comm  comm,
MOC_Request *  request 
)
+
+
+ +

+Performs a non-blocking synchronous mode send operation. +

+

Note:
This routine returns as soon as possible (After the message-envelope has been written into the receiver's message-queue).
+
Parameters:
+ + + + + + + + +
buf in Pointer to buffer where data is stored
count in Number of elements to be send (not equal to actual byte-value)
datatype in Type of elements to be send
dest in Rank of receiving process
tag in Tag of message
comm in communicator of message
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Test (MOC_Request *  request,
int *  flag,
MOC_Status *  status 
)
+
+
+ +

+Tests, if a non-blocking communication has been completed. +

+

Parameters:
+ + + + +
request in Communication-Request (Handle)
flag out true, if communication-request has been completed
status out Object holding status-information
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Wait (MOC_Request *  request,
MOC_Status *  status 
)
+
+
+ +

+Wait till a non-blocking communication has been completed. +

+

Parameters:
+ + + +
request in Communication-Request (Handle)
status out Object holding status-information
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+

+
Generated on Thu Feb 12 13:48:21 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d7/d62/group__p2p__imm.png b/documentation/enduser/html/d7/d62/group__p2p__imm.png new file mode 100755 index 0000000..2151885 Binary files /dev/null and b/documentation/enduser/html/d7/d62/group__p2p__imm.png differ diff --git a/documentation/enduser/html/d8/d8f/group__environment__information.html b/documentation/enduser/html/d8/d8f/group__environment__information.html new file mode 100755 index 0000000..ec8295e --- /dev/null +++ b/documentation/enduser/html/d8/d8f/group__environment__information.html @@ -0,0 +1,150 @@ + + +MPI On Cell (Documentation): Implementation Information + + + + + +
+

Implementation Information
+ +[Environmental Management] +

+

+

+Collaboration diagram for Implementation Information:
+
+
+ +
+
+

Detailed Description

+Functions to return some information about the execution environment and the MOC-implementation. +

+ +

+ + + + + + + + + + + + + + + + + + + +

Defines

+#define MOC_VERSION   0
 Major version-number of this MOC-Implementation.
+#define MOC_SUBVERSION   9
 Minor version-number of this MOC-Implementation.
+#define MOC_MAX_PROCESSOR_NAME   4
 The maximum length of the string returned by MOC_Get_processor_name.

Functions

int MOC_Get_processor_name (char *name, int *resultlen)
 Gets the name of the processor.
int MOC_Get_version (int *version, int *subversion)
 Returns the major and minor version of this MOC-implementation.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int MOC_Get_processor_name (char *  name,
int *  resultlen 
)
+
+
+ +

+Gets the name of the processor. +

+

Note:
This function returns "SPU" if the calling process is running on a SPU otherwise it's running on the "PPU".
+
Parameters:
+ + + +
name out Specifies the processor-type the calling process is runnning on
resultlen out Length (in characters) of the name
+
+
Return values:
+ + +
MOC_SUCCESS No error; MPI routine completed successfully.
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Get_version (int *  version,
int *  subversion 
)
+
+
+ +

+Returns the major and minor version of this MOC-implementation. +

+

Note:
Can be called before MOC_Init and after MOC_Finalize.
+
Parameters:
+ + + +
version out Major version of this MOC-implementation
subversion out Minor version of this MOC-implementation
+
+
Return values:
+ + +
MOC_SUCCESS Function returned successfully
+
+ +
+

+

+
Generated on Thu Feb 12 13:48:17 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d8/d8f/group__environment__information.png b/documentation/enduser/html/d8/d8f/group__environment__information.png new file mode 100755 index 0000000..7f2f4af Binary files /dev/null and b/documentation/enduser/html/d8/d8f/group__environment__information.png differ diff --git a/documentation/enduser/html/d8/d9a/group__environment__startup.html b/documentation/enduser/html/d8/d9a/group__environment__startup.html new file mode 100755 index 0000000..eaf8eff --- /dev/null +++ b/documentation/enduser/html/d8/d9a/group__environment__startup.html @@ -0,0 +1,381 @@ + + +MPI On Cell (Documentation): Startup & Shutdown + + + + + +
+

Startup & Shutdown
+ +[Environmental Management] +

+

+

+Collaboration diagram for Startup & Shutdown:
+
+
+ +
+
+

Detailed Description

+Functions to start and terminate the MOC-execution environment. +

+To be able to communicate with other processes every MOC-process needs to setup his MOC-Environment before any MOC-function can be called (there are some exceptions though).

+The PPU-process has a special role, because he is the one who starts the SPU-processes. SPU-processes can be added to the MOC-environment by calling MOC_Add_spu_thread with the appropriate SPU-thread-handle (This implementation only supports the embedded binary concept where the SPU-binary is embedded into the PPU-binary and accessed via a handle). The order of calling determines the rank of the SPU-processes. To get the number of total and available SPUs the functions MOC_Get_avail_spu_count and MOC_Get_max_spu_count can be used.

+The buffer-size and the size of the message-queues can be set before calling MOC_Init on the PPU using MOC_Set_buffer_size and MOC_Set_queue_size.

+MOC_Init only returns after all processes have called this function and have set up their environment.

+If the MOC-environment isn't needed anymore, MOC_Finalize should be called by all MOC-processes. MOC_Finalize only returns after all MOC-processes have called this functions and have shutdown their environments. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

PPU & SPU

int MOC_Finalize (void)
 Terminates MPI execution environment.

PPU-only

int MOC_Get_avail_spu_count (int *count)
 Returns the number of available SPUs.
int MOC_Get_max_spu_count (int *count)
 Returns the number of SPUs.
int MOC_Add_spu_thread (spe_program_handle_t *phandle, void *argp)
 Adds a SPU-Thread.
int MOC_Set_buffer_size (uint32_t size)
 Sets the size of the buffer used for buffered communication.
int MOC_Set_queue_size (uint8_t size)
 Sets the size of the message-queues.
int MOC_Init (int *argc, char ***argv)
 Initialize the MPI execution environment.

SPU-only

int MOC_Init (unsigned long long argp, int length, void *buffer)
 Initialize the MPI execution environment.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int MOC_Add_spu_thread (spe_program_handle_t *  phandle,
void *  argp 
)
+
+
+ +

+Adds a SPU-Thread. +

+

Attention:
PPU-only
+
Note:
Must be called before calling MOC_Init

+The order of executions defines the order of the ranks of the SPU-Threads

+
Parameters:
+ + + +
phandle in Handle of the SPE-Program
argp in Pointer to some user-defined information in the main-memory
+
+
Return values:
+ + + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_BUFFER_OVERFLOW A Buffer-Overflow occured. Mosst likely you tried to add more SPU-threads than defined by MOC_SPU_THREAD_MAX.
MOC_ERR_INTERN Internal Error
+
+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Finalize (void   ) 
+
+
+ +

+Terminates MPI execution environment. +

+

Note:
All processes must call this routine before exiting.
+
Return values:
+ + +
MOC_SUCCESS No error; MPI routine completed successfully.
+
+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Get_avail_spu_count (int *  count  ) 
+
+
+ +

+Returns the number of available SPUs. +

+

Attention:
PPU-only
+
Note:
Must be called before MOC_Init

+This function should return the count of free SPUs. But this doesn't really works. To get the available SPU-count the function spe_cpu_info_get() from libspe2 with SPE_COUNT_USABLE_SPES-flag is used. However this function can only detect if a SPU-thread is used by the calling function. There seems to be no means to detect SPU-thread used by other applications.

+
Parameters:
+ + +
count out number of available SPUs
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Get_max_spu_count (int *  count  ) 
+
+
+ +

+Returns the number of SPUs. +

+

Attention:
PPU-only
+
Note:
Must be called before MOC_Init
+
Parameters:
+ + +
count out SPU-count
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Init (unsigned long long  argp,
int  length,
void *  buffer 
)
+
+
+ +

+Initialize the MPI execution environment. +

+

+

Attention:
SPU-only function
+
Note:
All processes must call this routine before executing any MOC-routine.
+
Parameters:
+ + + + +
argp in Pointer to user-defined information in the main-memory
length in Length of the user-defined information in bytes
buffer out Buffer into which the user-defined information should be copied
+
+
Return values:
+ + + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_NO_MEMORY Insufficient Memory.
MOC_ERR_INTERN Internal Error
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Init (int *  argc,
char ***  argv 
)
+
+
+ +

+Initialize the MPI execution environment. +

+

Attention:
PPU-only function
+
Note:
All processes must call this routine before executing any MOC-routine.
+
Parameters:
+ + + +
argc in Pointer to the number of arguments
argv in Pointer to the argument vector
+
+
Return values:
+ + + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_NO_MEMORY Insufficient Memory.
MOC_ERR_INTERN Internal Error
+
+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Set_buffer_size (uint32_t  size  ) 
+
+
+ +

+Sets the size of the buffer used for buffered communication. +

+

Attention:
PPU-only
+
Note:
Must be called before MOC_Init
+
Parameters:
+ + +
size buffer-size
+
+
Returns:
0 if success, otherwise error-code
+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Set_queue_size (uint8_t  size  ) 
+
+
+ +

+Sets the size of the message-queues. +

+

Attention:
PPU-only
+
Note:
Must be called before MOC_Init
+
Parameters:
+ + +
size queue-size
+
+
Returns:
0 if success, otherwise error-code
+ +
+

+

+
Generated on Thu Feb 12 13:48:17 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d8/d9a/group__environment__startup.png b/documentation/enduser/html/d8/d9a/group__environment__startup.png new file mode 100755 index 0000000..0b38fe5 Binary files /dev/null and b/documentation/enduser/html/d8/d9a/group__environment__startup.png differ diff --git a/documentation/enduser/html/d8/da1/group__environment__error.html b/documentation/enduser/html/d8/da1/group__environment__error.html new file mode 100755 index 0000000..637d246 --- /dev/null +++ b/documentation/enduser/html/d8/da1/group__environment__error.html @@ -0,0 +1,270 @@ + + +MPI On Cell (Documentation): Error-Handling + + + + + +
+

Error-Handling
+ +[Environmental Management] +

+

+

+Collaboration diagram for Error-Handling:
+
+
+ +
+
+

Detailed Description

+This section describes how errors are handled. +

+Every function should return an integer if possible. This integer should be MOC_SUCCESS if the operation teminated successfully otherwise an error-code telling the reason of the error is returned.

+Every function should return an integer if possible. This integer should be MOC_SUCCESS if the operation teminated successfully otherwise an error-code telling the reason of the error is returned.

+For more information see Chapter 7.2 of the MPI 1.3 Standard. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

MPI_ERROR-CLASSES

Error-classes defined by the MPI-standard.

+Every error-code returned by a MOC-function should belong to an error-class or be an error-class itself. This enables implementation-independend error-handling.

+Value-range: 0 = MOC_SUCCESS < MOC_ERR_... <= MOC_ERR_LASTCODE

+#define MOC_SUCCESS   0
 No error.
+#define MOC_ERR_BUFFER   1000
 Invalid buffer pointer.
+#define MOC_ERR_COUNT   2000
 Invalid count argument.
+#define MOC_ERR_TYPE   3000
 Invalid datatype argument.
+#define MOC_ERR_TAG   4000
 Invalid tag argument.
+#define MOC_ERR_COMM   5000
 Invalid communicator.
+#define MOC_ERR_RANK   6000
 Invalid rank.
+#define MOC_ERR_REQUEST   7000
 Invalid request (handle).
+#define MOC_ERR_ROOT   8000
 Invalid root.
+#define MOC_ERR_GROUP   9000
 Invalid group.
+#define MOC_ERR_OP   10000
 Invalid operation.
+#define MOC_ERR_TOPOLOGY   11000
 Invalid topology.
+#define MOC_ERR_DIMS   12000
 Invalid dimension argument.
+#define MOC_ERR_ARG   13000
 Invalid argument of some other kind.
+#define MOC_ERR_UNKNOWN   14000
 Unknown error.
+#define MOC_ERR_TRUNCATE   15000
 Message truncated on receive.
+#define MOC_ERR_OTHER   16000
 Known error not in this list.
+#define MOC_ERR_INTERN   17000
 Internal MOC (implementation) error.
+#define MOC_ERR_IN_STATUS   18000
 Error code is in status.
+#define MOC_ERR_PENDING   19000
 Pending request.
+#define MOC_ERR_LASTCODE   20000
 Last error code.

MOC-Error-Codes

Implementation dependent Error-Codes.

+#define MOC_ERR_NOT_IMPLEMENTED   17001
 Function not implemented.
+#define MOC_ERR_BUFFER_OVERFLOW   17002
 Internal Buffer Overflow.
+#define MOC_ERR_NO_MEMORY   17003
 Insufficient Memory.
+#define MOC_ERR_NO_BUFFER   17004
 Insufficient Buffer-Space.
+#define MOC_ERR_MESSAGE_EXHAUSTED   17005
 No further messages possible.
+#define MOC_ERR_BAD_ALIGNMENT   16001
 Base-Adress of Buffer isn't 16-byte aligned.
+#define MOC_ERR_BAD_SIZE   16002
 Bad Size (probably no multiple of 16).

Defines

+#define MOC_MAX_ERROR_STRING   255
 Maximal length of error-text.

Functions

int MOC_Error_string (int errorcode, char *string, int *resultlen)
 Returns an error-text for a given error code.
int MOC_Error_class (int errorcode, int *errorclass)
 Converts an error code into an error class.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int MOC_Error_class (int  errorcode,
int *  errorclass 
)
+
+
+ +

+Converts an error code into an error class. +

+

Parameters:
+ + + +
errorcode in Error code returned by an MPI routine
errorclass out Error class associated with errorcode
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_COMM Invalid argument. Most likely an error-code out of range.
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Error_string (int  errorcode,
char *  string,
int *  resultlen 
)
+
+
+ +

+Returns an error-text for a given error code. +

+The error-text is already terminated by '\0'.

+

Parameters:
+ + + + +
errorcode in Error code returned by an MPI routine
string out Text that corresponds to the errorcode
resultlen out Length of string
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
MOC_ERR_ARG Invalid argument. Most likely an error-code out of range.
+
+ +
+

+

+
Generated on Thu Feb 12 13:48:18 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d8/da1/group__environment__error.png b/documentation/enduser/html/d8/da1/group__environment__error.png new file mode 100755 index 0000000..7384bf6 Binary files /dev/null and b/documentation/enduser/html/d8/da1/group__environment__error.png differ diff --git a/documentation/enduser/html/d8/da6/group__environment__timer.html b/documentation/enduser/html/d8/da6/group__environment__timer.html new file mode 100755 index 0000000..798b17a --- /dev/null +++ b/documentation/enduser/html/d8/da6/group__environment__timer.html @@ -0,0 +1,97 @@ + + +MPI On Cell (Documentation): Timers and Synchronization + + + + + +
+

Timers and Synchronization
+ +[Environmental Management] +

+

+

+Collaboration diagram for Timers and Synchronization:
+
+
+ +
+
+

Detailed Description

+Functions to measure time. +

+On the PPU gettimeofday from time.h is used. On the SPU either also gettimeofday or the spu-timer-library is used depending on the configuration during compilation of the MOC-library. When gettimeofday is used on the SPU the time is global in the MOC-environment with the disadvantage that the SPU-threads get their times from the PPU using DMA causing inaccuracy and delays. +

+ + + + + + + + + +

Functions

double MOC_Wtime (void)
 Returns a floating-point number of seconds, representing elapsed wall-clock time since some time in the past.
double MOC_Wtick (void)
 Returns the resolution of Moc_Wtime in seconds.
+


Function Documentation

+ +
+
+ + + + + + + + + +
double MOC_Wtick (void   ) 
+
+
+ +

+Returns the resolution of Moc_Wtime in seconds. +

+

Returns:
resolution in seconds.
+ +
+

+ +

+
+ + + + + + + + + +
double MOC_Wtime (void   ) 
+
+
+ +

+Returns a floating-point number of seconds, representing elapsed wall-clock time since some time in the past. +

+

Returns:
wall-clock time in seconds.
+ +
+

+

+
Generated on Thu Feb 12 13:48:18 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d8/da6/group__environment__timer.png b/documentation/enduser/html/d8/da6/group__environment__timer.png new file mode 100755 index 0000000..7a44ace Binary files /dev/null and b/documentation/enduser/html/d8/da6/group__environment__timer.png differ diff --git a/documentation/enduser/html/d9/d16/group__dma__access.html b/documentation/enduser/html/d9/d16/group__dma__access.html new file mode 100755 index 0000000..c8cecf1 --- /dev/null +++ b/documentation/enduser/html/d9/d16/group__dma__access.html @@ -0,0 +1,755 @@ + + +MPI On Cell (Documentation): Direct Memory Access + + + + + +
+

Direct Memory Access
+ +[End-User Documentation] +

+

+

+Collaboration diagram for Direct Memory Access:
+
+
+ +
+
+

Detailed Description

+Functions which use DMA to transfer Data. +

+The operations defined in this section provide simple means to use Direct Memory Access (DMA).

+The MPI-standard assumes a distributed memory architecture, where active participation of the sending and the receiving processes is required. But the Cell Broadband Engine is a distributed shared memory architecture which provides a common address space and DMA-Operations enabling processes to write data directly into the memory of an remote process without active participation of the receiving process. DMA is faster than Send-Receive but more complicated to handle, and so there are some functions provided to enable the advantages of DMA and to hide as much complexity as possible. So the user doesn't have to care about the upper-limit of an DMA-transfer and in get-operations the data-size doesn't have to be a multiple of 16-byte. However the data-address should be at least 16-byte aligned and in put-operations the data-size has to be a multiple of 16-byte.

+There are two kind of addresses. Local-store addresses are used on the SPUs and are only valid in context of a specific SPU. Effective addresses define a common address-space and are used on the PPU. Functions to translate between those address types are provided.

+DMA-operations can be blocking or non-blocking. The status of non-blocking DMA-calls can be requested by using MOC_Test and MOC_Wait.

+

Note:
Every non-blocking DMA operation has to be finished using MOC_Test or MOC_Wait, otherwise resources are no freed and some data are not copied correctly.
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

PPU-only

int MOC_Get_data (void *target, uint32_t source, int count, MOC_Datatype datatype, int dest)
 Wrapper-function for a blocking DMA-get operation.
int MOC_Put_data (void *source, uint32_t target, int count, MOC_Datatype datatype, int src)
 Wrapper-function for a blocking DMA-put operation.
int MOC_IGet_data (void *target, uint32_t source, int count, MOC_Datatype datatype, int dest, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-get operation.
int MOC_IPut_data (void *source, uint32_t target, int count, MOC_Datatype datatype, int src, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-put operation.
int MOC_Translate_EA_to_LS (uint64_t ea, int rank, uint32_t *ls)
 Translates an effective-address of a SPU into the corresponding local-store address.

SPU-only

int MOC_Get_data (void *target, uint64_t source, int count, MOC_Datatype datatype)
 Wrapper-function for a blocking DMA-get operation.
int MOC_Put_data (void *source, uint64_t target, int count, MOC_Datatype datatype)
 Wrapper-function for a blocking DMA-put operation.
int MOC_IGet_data (void *target, uint64_t source, int count, MOC_Datatype datatype, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-get operation.
int MOC_IPut_data (void *source, uint64_t target, int count, MOC_Datatype datatype, MOC_Request *request)
 Wrapper-function for a non-blocking DMA-put operation.
int MOC_Translate_LS_to_EA (void *ls, uint64_t *ea)
 Translates a local-store address of the calling SPU into the corresponding effective-address.

Functions

int MOC_Wait_data (MOC_Request *request)
 Waits till a MOC_IGet_data or IMOC_IPut_data is completed.
int MOC_Test_data (MOC_Request *request, int *flag)
 Tests if a MOC_IGet_data or IMOC_IPut_data is completed.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Get_data (void *  target,
uint64_t  source,
int  count,
MOC_Datatype  datatype 
)
+
+
+ +

+Wrapper-function for a blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned.

+

Parameters:
+ + + + + +
target out pointer to buffer
source in ea-address of data
count in size of data in byte
datatype in Type of Elements
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Get_data (void *  target,
uint32_t  source,
int  count,
MOC_Datatype  datatype,
int  dest 
)
+
+
+ +

+Wrapper-function for a blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned.

+

Parameters:
+ + + + + + +
target out pointer to buffer
source in local-store address of data
count in size of data in byte
datatype in Type of Elements
dest in rank of source spe
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_IGet_data (void *  target,
uint64_t  source,
int  count,
MOC_Datatype  datatype,
MOC_Request *  request 
)
+
+
+ +

+Wrapper-function for a non-blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.

+

Parameters:
+ + + + + + +
target out pointer to buffer
source in ea-address of data
count in size of data in byte
datatype in Type of Elements
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_IGet_data (void *  target,
uint32_t  source,
int  count,
MOC_Datatype  datatype,
int  dest,
MOC_Request *  request 
)
+
+
+ +

+Wrapper-function for a non-blocking DMA-get operation. +

+Data can be of any size, constraints of low-level DMA-functions are dealt by this function. However data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.

+

Parameters:
+ + + + + + + +
target out pointer to buffer
source in local-store address of data
count in size of data in byte
datatype in Type of Elements
dest in rank of source spe
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_IPut_data (void *  source,
uint64_t  target,
int  count,
MOC_Datatype  datatype,
MOC_Request *  request 
)
+
+
+ +

+Wrapper-function for a non-blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.

+

Parameters:
+ + + + + + +
source in pointer to data
target in ea-address of buffer
count in size of data in byte
datatype in Type of Elements
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_IPut_data (void *  source,
uint32_t  target,
int  count,
MOC_Datatype  datatype,
int  src,
MOC_Request *  request 
)
+
+
+ +

+Wrapper-function for a non-blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned. Operation-completion can be derived with MOC_Test and MOC_Wait.

+

Parameters:
+ + + + + + + +
source in pointer to data
target in local-store address of buffer
count in size of data in byte
datatype in Type of Elements
src in rank of source-SPE
request out communication request (handle)
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Put_data (void *  source,
uint64_t  target,
int  count,
MOC_Datatype  datatype 
)
+
+
+ +

+Wrapper-function for a blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned.

+

Parameters:
+ + + + + +
source in pointer to data
target in ea-address of buffer
count in size of data in byte
datatype in Type of Elements
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Put_data (void *  source,
uint32_t  target,
int  count,
MOC_Datatype  datatype,
int  src 
)
+
+
+ +

+Wrapper-function for a blocking DMA-put operation. +

+Data-size should be a multiple of 16 because of low-level constraints, but there is no upper limit of transfer-size. Data-addresses have to be at least 16-byte aligned.

+

Parameters:
+ + + + + + +
source in pointer to data
target in local-store address of buffer
count in size of data in byte
datatype in Type of Elements
src in rank of source-SPE
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Test_data (MOC_Request *  request,
int *  flag 
)
+
+
+ +

+Tests if a MOC_IGet_data or IMOC_IPut_data is completed. +

+

Parameters:
+ + + +
request in request-handle
flag out true if operation is completed
+
+
Returns:
0 when success otherwise error-code
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Translate_EA_to_LS (uint64_t  ea,
int  rank,
uint32_t *  ls 
)
+
+
+ +

+Translates an effective-address of a SPU into the corresponding local-store address. +

+

Parameters:
+ + + + +
ea in effective-address
rank in rank of SPU
ls out local-store address
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int MOC_Translate_LS_to_EA (void *  ls,
uint64_t *  ea 
)
+
+
+ +

+Translates a local-store address of the calling SPU into the corresponding effective-address. +

+

Parameters:
+ + + +
ls in local-store address
ea out effective-address
+
+ +
+

+ +

+
+ + + + + + + + + +
int MOC_Wait_data (MOC_Request *  request  ) 
+
+
+ +

+Waits till a MOC_IGet_data or IMOC_IPut_data is completed. +

+

Parameters:
+ + +
request in request-handle
+
+
Returns:
0 when success otherwise error-code
+ +
+

+

+
Generated on Thu Feb 12 13:48:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/d9/d16/group__dma__access.png b/documentation/enduser/html/d9/d16/group__dma__access.png new file mode 100755 index 0000000..9db69ae Binary files /dev/null and b/documentation/enduser/html/d9/d16/group__dma__access.png differ diff --git a/documentation/enduser/html/da/df0/group__p2p__status.html b/documentation/enduser/html/da/df0/group__p2p__status.html new file mode 100755 index 0000000..5d4a55b --- /dev/null +++ b/documentation/enduser/html/da/df0/group__p2p__status.html @@ -0,0 +1,107 @@ + + +MPI On Cell (Documentation): Return Status + + + + + +
+

Return Status
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Return Status:
+
+
+ +
+
+

Detailed Description

+Receiving operations return a status-object holding information about the message. +

+There are three Fields of the status-Struct which are predefined by the MPI-Standard: MOC_SOURCE gives the message-source, MOC_TAG gives the message-tag and MOC_ERROR gives an error-code (not implemented by MOC at the moment). To get the number of element the function MOC_Get_count should be used. +

+ + + + + + + + + + + + + + +

Data Structures

struct  MOC_Status_struct
 Structure holding information about a received message. More...

Typedefs

+typedef struct MOC_Status_struct MOC_Status
 Structure holding information about a received message.

Functions

int MOC_Get_count (MOC_Status *status, MOC_Datatype datatype, int *count)
 Gets the number of received elements which is encoded in MOC_Status.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Get_count (MOC_Status *  status,
MOC_Datatype  datatype,
int *  count 
)
+
+
+ +

+Gets the number of received elements which is encoded in MOC_Status. +

+

Parameters:
+ + + + +
status in status-object
datatype in Type of received elements
count out Number of received elements
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+

+
Generated on Thu Feb 12 13:48:19 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/da/df0/group__p2p__status.png b/documentation/enduser/html/da/df0/group__p2p__status.png new file mode 100755 index 0000000..149367e Binary files /dev/null and b/documentation/enduser/html/da/df0/group__p2p__status.png differ diff --git a/documentation/enduser/html/db/d17/structmoc__request__struct.html b/documentation/enduser/html/db/d17/structmoc__request__struct.html new file mode 100755 index 0000000..3526d04 --- /dev/null +++ b/documentation/enduser/html/db/d17/structmoc__request__struct.html @@ -0,0 +1,54 @@ + + +MPI On Cell (Documentation): moc_request_struct Struct Reference + + + + + +
+

moc_request_struct Struct Reference
+ +[Non-Blocking Communication] +

+Collaboration diagram for moc_request_struct:
+
+

Collaboration graph
+
[legend]
+

Detailed Description

+Communication-Request (Handle). + + + + + + + + + + + + +

Data Fields

+int request_type
+union {
   imoc_dma_request   dma_data
   imoc_issend_request   issend_request
} request_data
+
+
Generated on Thu Feb 12 13:48:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/db/dc2/group__broadcast.html b/documentation/enduser/html/db/dc2/group__broadcast.html new file mode 100755 index 0000000..4ee047c --- /dev/null +++ b/documentation/enduser/html/db/dc2/group__broadcast.html @@ -0,0 +1,143 @@ + + +MPI On Cell (Documentation): Collective Communication + + + + + +
+

Collective Communication
+ +[End-User Documentation] +

+

+

+Collaboration diagram for Collective Communication:
+
+
+ +
+
+

Detailed Description

+Communication that involves a group of processes. +

+A collective operation is normally executed by having all processes in the group call the communication routine, with matching arguments. Since there are no means for creating groups currently implemented, the only available groups are MOC_COMM_WORLD and MOC_COMM_SELF. +

+ + + + + + + + + +

Functions

int MOC_Bcast (void *buffer, int count, MOC_Datatype datatype, int root, MOC_Comm comm)
 Broadcasts a message from the process with rank "root" to all other processes of the group.
int MOC_Barrier (MOC_Comm comm)
 Blocks the caller until all processes in the communicator have called it; that is, the call returns at any process only after all members of the communicator have entered the call.
+


Function Documentation

+ +
+
+ + + + + + + + + +
int MOC_Barrier (MOC_Comm  comm  ) 
+
+
+ +

+Blocks the caller until all processes in the communicator have called it; that is, the call returns at any process only after all members of the communicator have entered the call. +

+

Parameters:
+ + +
comm in communicator of message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Bcast (void *  buffer,
int  count,
MOC_Datatype  datatype,
int  root,
MOC_Comm  comm 
)
+
+
+ +

+Broadcasts a message from the process with rank "root" to all other processes of the group. +

+

Note:
The broadcast-message can also be received by a MOC_Recv using MOC_BCAST_TAG.
+
Parameters:
+ + + + + + +
buffer inout starting address of buffer
count in number of elements to be send or received
datatype in Type of elements to be send or received
root in rank of the process who sends the broadcast-message
comm in communicator of message
+
+ +
+

+

+
Generated on Thu Feb 12 13:48:21 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/db/dc2/group__broadcast.png b/documentation/enduser/html/db/dc2/group__broadcast.png new file mode 100755 index 0000000..37db439 Binary files /dev/null and b/documentation/enduser/html/db/dc2/group__broadcast.png differ diff --git a/documentation/enduser/html/dc/d6e/group__p2p__datatype.html b/documentation/enduser/html/dc/d6e/group__p2p__datatype.html new file mode 100755 index 0000000..4670bc2 --- /dev/null +++ b/documentation/enduser/html/dc/d6e/group__p2p__datatype.html @@ -0,0 +1,659 @@ + + +MPI On Cell (Documentation): Datatypes + + + + + +
+

Datatypes
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Datatypes:
+
+
+ +
+
+

Detailed Description

+Datatypes supported by MOC. +

+There are the normal datatypes defined by C (char, short, int, ...) and special vector-datatypes used by the Cell Broadband Engine. For more information see "C/C++ Language Extensions for Cell Broadband Engine Architecture - Version 2.5" chapter 1.1. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

PPU & SPU

typedef uint8_t MOC_Datatype
 Typedef defining MOC_Datatype.
#define MOC_BYTE   ((MOC_Datatype)0+0)
 MOC_Byte is a special datatype.
#define MOC_CHAR   ((MOC_Datatype)0+1)
 C-Datatype char.
#define MOC_UNSIGNED_CHAR   ((MOC_Datatype)0+2)
 C-Datatype unsigned char.
#define MOC_SHORT   ((MOC_Datatype)16+0)
 C-Datatype short.
#define MOC_UNSIGNED_SHORT   ((MOC_Datatype)16+1)
 C-Datatype unsigned short.
#define MOC_INT   ((MOC_Datatype)32+0)
 C-Datatype int.
#define MOC_UNSIGNED   ((MOC_Datatype)32+1)
 C-Datatype unsigned int.
#define MOC_LONG_LONG   ((MOC_Datatype)64+0)
 C-Datatype long long.
#define MOC_UNSIGNED_LONG_LONG   ((MOC_Datatype)64+1)
 C-Datatype unsigned long long.
#define MOC_FLOAT   ((MOC_Datatype)32+2)
 C-Datatype float.
#define MOC_DOUBLE   ((MOC_Datatype)64+5)
 C-Datatype double.
#define MOC_VEC_UCHAR16   ((MOC_Datatype)128+0)
 Cell-specific Datatype vector unsigned char (vec_uchar16).
#define MOC_VEC_USHORT8   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector unsigned short (vec_ushort8).
#define MOC_VEC_UINT4   ((MOC_Datatype)128+2)
 Cell-specific Datatype vector unsigned int (vec_uint4).
#define MOC_VEC_CHAR16   ((MOC_Datatype)128+4)
 Cell-specific Datatype vector signed char (vec_char16).
#define MOC_VEC_SHORT8   ((MOC_Datatype)128+3)
 Cell-specific Datatype vector signed short (vec_short8).
#define MOC_VEC_INT4   ((MOC_Datatype)128+5)
 Cell-specific Datatype vector signed int (vec_int4).
#define MOC_VEC_FLOAT4   ((MOC_Datatype)128+6)
 Cell-specific Datatype vector float (vec_float4).

PPU-only

#define MOC_LONG   ((MOC_Datatype)64+2)
 C-Datatype long.
#define MOC_UNSIGNED_LONG   ((MOC_Datatype)64+3)
 C-Datatype unsigned long.
#define MOC_VEC_BCHAR16   ((MOC_Datatype)128+0)
 Cell-specific Datatype vector bool char (vec_bchar16).
#define MOC_VEC_BSHORT8   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector bool short (vec_bshort8).
#define MOC_VEC_PIXEL8   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector pixel (vec_pixel8).
#define MOC_VEC_BINT4   ((MOC_Datatype)128+2)
 Cell-specific Datatype vector bool int (vec_bint4).

SPU-only

#define MOC_LONG   ((MOC_Datatype)32+2)
 C-Datatype long.
#define MOC_UNSIGNED_LONG   ((MOC_Datatype)32+3)
 C-Datatype unsigned long.
#define MOC_VEC_ULLONG2   ((MOC_Datatype)128+0)
 Cell-specific Datatype vector unsigned long long (vec_ullong2).
#define MOC_VEC_LLONG2   ((MOC_Datatype)128+1)
 Cell-specific Datatype vector signed long long (vec_llong2).
#define MOC_VEC_DOUBLE2   ((MOC_Datatype)128+2)
 Cell-specific Datatype vector double (vec_double2).
+


Define Documentation

+ +
+
+ + + + +
#define MOC_BYTE   ((MOC_Datatype)0+0)
+
+
+ +

+MOC_Byte is a special datatype. +

+It can match any datatype. It has a size of 1 byte. +

+

+ +

+
+ + + + +
#define MOC_CHAR   ((MOC_Datatype)0+1)
+
+
+ +

+C-Datatype char. +

+It has a size of 1 byte. +

+

+ +

+
+ + + + +
#define MOC_DOUBLE   ((MOC_Datatype)64+5)
+
+
+ +

+C-Datatype double. +

+It has a size of 8 byte. +

+

+ +

+
+ + + + +
#define MOC_FLOAT   ((MOC_Datatype)32+2)
+
+
+ +

+C-Datatype float. +

+It has a size of 4 byte. +

+

+ +

+
+ + + + +
#define MOC_INT   ((MOC_Datatype)32+0)
+
+
+ +

+C-Datatype int. +

+It has a size of 4 byte. +

+

+ +

+
+ + + + +
#define MOC_LONG   ((MOC_Datatype)32+2)
+
+
+ +

+C-Datatype long. +

+It has a size of 4 byte.

Attention:
On the PPU long has a size of 8 byte. So if you are trying to send data of type long from the PPU to a SPU or vice versa there will be an error.
+ +
+

+ +

+
+ + + + +
#define MOC_LONG   ((MOC_Datatype)64+2)
+
+
+ +

+C-Datatype long. +

+It has a size of 8 byte.

Attention:
On the SPU long has a size of 4 byte. So if you are trying to send data of type long from the PPU to a SPU or vice versa there will be an error.
+ +
+

+ +

+
+ + + + +
#define MOC_LONG_LONG   ((MOC_Datatype)64+0)
+
+
+ +

+C-Datatype long long. +

+It has a size of 8 byte. +

+

+ +

+
+ + + + +
#define MOC_SHORT   ((MOC_Datatype)16+0)
+
+
+ +

+C-Datatype short. +

+It has a size of 2 byte. +

+

+ +

+
+ + + + +
#define MOC_UNSIGNED   ((MOC_Datatype)32+1)
+
+
+ +

+C-Datatype unsigned int. +

+It has a size of 4 byte. +

+

+ +

+
+ + + + +
#define MOC_UNSIGNED_CHAR   ((MOC_Datatype)0+2)
+
+
+ +

+C-Datatype unsigned char. +

+It has a size of 1 byte. +

+

+ +

+
+ + + + +
#define MOC_UNSIGNED_LONG   ((MOC_Datatype)32+3)
+
+
+ +

+C-Datatype unsigned long. +

+It has a size of 4 byte.

Attention:
On the SPU unsigned long has a size of 8 byte. So if you are trying to send data of type long from the PPU to a SPU or vice versa there will be an error.
+ +
+

+ +

+
+ + + + +
#define MOC_UNSIGNED_LONG   ((MOC_Datatype)64+3)
+
+
+ +

+C-Datatype unsigned long. +

+It has a size of 8 byte.

Attention:
On the SPU unsigned long has a size of 4 byte. So if you are trying to send data of type long from the PPU to a SPU or vice versa there will be an error.
+ +
+

+ +

+
+ + + + +
#define MOC_UNSIGNED_LONG_LONG   ((MOC_Datatype)64+1)
+
+
+ +

+C-Datatype unsigned long long. +

+It has a size of 8 byte. +

+

+ +

+
+ + + + +
#define MOC_UNSIGNED_SHORT   ((MOC_Datatype)16+1)
+
+
+ +

+C-Datatype unsigned short. +

+It has a size of 2 byte. +

+

+ +

+
+ + + + +
#define MOC_VEC_BCHAR16   ((MOC_Datatype)128+0)
+
+
+ +

+Cell-specific Datatype vector bool char (vec_bchar16). +

+It has a size of 16 byte.

Note:
PPU-only. Is mapped to the SPU-Datatype vector unsigned char.
+ +
+

+ +

+
+ + + + +
#define MOC_VEC_BINT4   ((MOC_Datatype)128+2)
+
+
+ +

+Cell-specific Datatype vector bool int (vec_bint4). +

+It has a size of 16 byte.

Note:
PPU-only. Is mapped to the SPU-Datatype vector unsigned int.
+ +
+

+ +

+
+ + + + +
#define MOC_VEC_BSHORT8   ((MOC_Datatype)128+1)
+
+
+ +

+Cell-specific Datatype vector bool short (vec_bshort8). +

+It has a size of 16 byte.

Note:
PPU-only. Is mapped to the SPU-Datatype vector unsigned short.
+ +
+

+ +

+
+ + + + +
#define MOC_VEC_CHAR16   ((MOC_Datatype)128+4)
+
+
+ +

+Cell-specific Datatype vector signed char (vec_char16). +

+It has a size of 16 byte. +

+

+ +

+
+ + + + +
#define MOC_VEC_DOUBLE2   ((MOC_Datatype)128+2)
+
+
+ +

+Cell-specific Datatype vector double (vec_double2). +

+It has a size of 16 byte.

Note:
SPU-only. Is mapped to the PPU-Datatype vector bool int.
+ +
+

+ +

+
+ + + + +
#define MOC_VEC_FLOAT4   ((MOC_Datatype)128+6)
+
+
+ +

+Cell-specific Datatype vector float (vec_float4). +

+It has a size of 16 byte. +

+

+ +

+
+ + + + +
#define MOC_VEC_INT4   ((MOC_Datatype)128+5)
+
+
+ +

+Cell-specific Datatype vector signed int (vec_int4). +

+It has a size of 16 byte. +

+

+ +

+
+ + + + +
#define MOC_VEC_LLONG2   ((MOC_Datatype)128+1)
+
+
+ +

+Cell-specific Datatype vector signed long long (vec_llong2). +

+It has a size of 16 byte.

Note:
SPU-only. Is mapped to the PPU-Datatype vector bool short.
+ +
+

+ +

+
+ + + + +
#define MOC_VEC_PIXEL8   ((MOC_Datatype)128+1)
+
+
+ +

+Cell-specific Datatype vector pixel (vec_pixel8). +

+It has a size of 16 byte.

Note:
PPU-only. Is mapped to the SPU-Datatype vector unsigned short.
+ +
+

+ +

+
+ + + + +
#define MOC_VEC_SHORT8   ((MOC_Datatype)128+3)
+
+
+ +

+Cell-specific Datatype vector signed short (vec_short8). +

+It has a size of 16 byte. +

+

+ +

+
+ + + + +
#define MOC_VEC_UCHAR16   ((MOC_Datatype)128+0)
+
+
+ +

+Cell-specific Datatype vector unsigned char (vec_uchar16). +

+It has a size of 16 byte. +

+

+ +

+
+ + + + +
#define MOC_VEC_UINT4   ((MOC_Datatype)128+2)
+
+
+ +

+Cell-specific Datatype vector unsigned int (vec_uint4). +

+It has a size of 16 byte. +

+

+ +

+
+ + + + +
#define MOC_VEC_ULLONG2   ((MOC_Datatype)128+0)
+
+
+ +

+Cell-specific Datatype vector unsigned long long (vec_ullong2). +

+It has a size of 16 byte.

Note:
SPU-only. Is mapped to the PPU-Datatype vector bool char.
+ +
+

+ +

+
+ + + + +
#define MOC_VEC_USHORT8   ((MOC_Datatype)128+1)
+
+
+ +

+Cell-specific Datatype vector unsigned short (vec_ushort8). +

+It has a size of 16 byte. +

+

+


Typedef Documentation

+ +
+
+ + + + +
typedef uint8_t MOC_Datatype
+
+
+ +

+Typedef defining MOC_Datatype. +

+One byte is used to encode the Data-Type. The first four msb hold the size in byte / 2 ( if ((datatype & 0xF0)>>4) == 0 then size = 1 else size = ((datatype & 0xF0)>>4)*2 ) and the four lsb hold an id. The combination of id and size is used to uniquely identify a datatype (or rather a group of datatypes belonging together). +

+

+

+
Generated on Thu Feb 12 13:48:19 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/dc/d6e/group__p2p__datatype.png b/documentation/enduser/html/dc/d6e/group__p2p__datatype.png new file mode 100755 index 0000000..0bdda77 Binary files /dev/null and b/documentation/enduser/html/dc/d6e/group__p2p__datatype.png differ diff --git a/documentation/enduser/html/dd/d7a/structMOC__Status__struct.html b/documentation/enduser/html/dd/d7a/structMOC__Status__struct.html new file mode 100755 index 0000000..474cd96 --- /dev/null +++ b/documentation/enduser/html/dd/d7a/structMOC__Status__struct.html @@ -0,0 +1,57 @@ + + +MPI On Cell (Documentation): MOC_Status_struct Struct Reference + + + + + +
+

MOC_Status_struct Struct Reference
+ +[Return Status] +


Detailed Description

+Structure holding information about a received message. + + + + + + + + + + + + + + + + + +

Data Fields

+uint8_t MOC_SOURCE
 message-source
+uint8_t MOC_TAG
 message-tag
+int MOC_ERROR
 error-code
+int message_size
 message-size in byte (internal-variable)
+uint8_t mid
 message-ID (internal-variable)
+
+
Generated on Thu Feb 12 13:48:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/de/d1b/group__environment__main.html b/documentation/enduser/html/de/d1b/group__environment__main.html new file mode 100755 index 0000000..0023e54 --- /dev/null +++ b/documentation/enduser/html/de/d1b/group__environment__main.html @@ -0,0 +1,64 @@ + + +MPI On Cell (Documentation): Environmental Management + + + + + +
+

Environmental Management
+ +[End-User Documentation] +

+

+

+Collaboration diagram for Environmental Management:
+
+
+ +
+
+

Detailed Description

+This chapter discusses routines for getting and, where appropriate, setting various parameters that relate to the MPI implementation and the execution environment (such as error handling, startup&shutdown and Time). +

+ +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + +

+


Modules

 Startup & Shutdown
 Functions to start and terminate the MOC-execution environment.
 Implementation Information
 Functions to return some information about the execution environment and the MOC-implementation.
 Error-Handling
 This section describes how errors are handled.
 Timers and Synchronization
 Functions to measure time.
+

+
Generated on Thu Feb 12 13:48:17 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/de/d1b/group__environment__main.png b/documentation/enduser/html/de/d1b/group__environment__main.png new file mode 100755 index 0000000..45bb245 Binary files /dev/null and b/documentation/enduser/html/de/d1b/group__environment__main.png differ diff --git a/documentation/enduser/html/de/d84/group__p2p__buffered.html b/documentation/enduser/html/de/d84/group__p2p__buffered.html new file mode 100755 index 0000000..1c00070 --- /dev/null +++ b/documentation/enduser/html/de/d84/group__p2p__buffered.html @@ -0,0 +1,120 @@ + + +MPI On Cell (Documentation): Buffered Communication + + + + + +
+

Buffered Communication
+ +[Point-to-Point Communication] +

+

+

+Collaboration diagram for Buffered Communication:
+
+
+ +
+
+

Detailed Description

+Blocking sending of messages with the use of an intermediate buffer. +

+The blocking buffered send-operation returns if the send-buffer can be safely reused (after the data has been copied into the intermediate buffer). +

+ + + + + + +

Functions

int MOC_Bsend (void *buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm)
 Performs a blocking buffered mode send operation.
+


Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int MOC_Bsend (void *  buf,
int  count,
MOC_Datatype  datatype,
int  dest,
int  tag,
MOC_Comm  comm 
)
+
+
+ +

+Performs a blocking buffered mode send operation. +

+

Note:
This routine blocks until the send-buffer is free.
+
Parameters:
+ + + + + + + +
buf in Pointer to buffer where data is stored
count in Number of elements to be send (not equal to actual byte-value)
datatype in Type of elements to be send
dest in Rank of receiving process
tag in Tag of message
comm in communicator of message
+
+
Return values:
+ + + +
MOC_SUCCESS No error; MPI routine completed successfully.
... error-code
+
+ +
+

+

+
Generated on Thu Feb 12 13:48:20 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/de/d84/group__p2p__buffered.png b/documentation/enduser/html/de/d84/group__p2p__buffered.png new file mode 100755 index 0000000..c33afd1 Binary files /dev/null and b/documentation/enduser/html/de/d84/group__p2p__buffered.png differ diff --git a/documentation/enduser/html/df/dc6/structmoc__request__struct__coll__graph.map b/documentation/enduser/html/df/dc6/structmoc__request__struct__coll__graph.map new file mode 100755 index 0000000..e69de29 diff --git a/documentation/enduser/html/df/dc6/structmoc__request__struct__coll__graph.md5 b/documentation/enduser/html/df/dc6/structmoc__request__struct__coll__graph.md5 new file mode 100755 index 0000000..77081da --- /dev/null +++ b/documentation/enduser/html/df/dc6/structmoc__request__struct__coll__graph.md5 @@ -0,0 +1 @@ +56b9dd35081b559eb10b0fd9b803a3b3 \ No newline at end of file diff --git a/documentation/enduser/html/df/dc6/structmoc__request__struct__coll__graph.png b/documentation/enduser/html/df/dc6/structmoc__request__struct__coll__graph.png new file mode 100755 index 0000000..d9a51e8 Binary files /dev/null and b/documentation/enduser/html/df/dc6/structmoc__request__struct__coll__graph.png differ diff --git a/documentation/enduser/html/dma-vs-moc-bw.png b/documentation/enduser/html/dma-vs-moc-bw.png new file mode 100755 index 0000000..044c792 Binary files /dev/null and b/documentation/enduser/html/dma-vs-moc-bw.png differ diff --git a/documentation/enduser/html/dma-vs-moc-lat.png b/documentation/enduser/html/dma-vs-moc-lat.png new file mode 100755 index 0000000..bae5770 Binary files /dev/null and b/documentation/enduser/html/dma-vs-moc-lat.png differ diff --git a/documentation/enduser/html/doxygen.css b/documentation/enduser/html/doxygen.css new file mode 100755 index 0000000..22c4843 --- /dev/null +++ b/documentation/enduser/html/doxygen.css @@ -0,0 +1,473 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +BODY,TD { + font-size: 90%; +} +H1 { + text-align: center; + font-size: 160%; +} +H2 { + font-size: 120%; +} +H3 { + font-size: 100%; +} +CAPTION { + font-weight: bold +} +DIV.qindex { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navpath { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { + text-decoration: none; + background-color: #6666cc; + color: #ffffff +} +A.el { + text-decoration: none; + font-weight: bold +} +A.elRef { + font-weight: bold +} +A.code:link { + text-decoration: none; + font-weight: normal; + color: #0000FF +} +A.code:visited { + text-decoration: none; + font-weight: normal; + color: #0000FF +} +A.codeRef:link { + font-weight: normal; + color: #0000FF +} +A.codeRef:visited { + font-weight: normal; + color: #0000FF +} +A:hover { + text-decoration: none; + background-color: #f2f2ff +} +DL.el { + margin-left: -1cm +} +.fragment { + font-family: monospace, fixed; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px +} + +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { + margin-left: 16px; + font-style: italic; + font-size: 90% +} +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #e8eef2; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #e8eef2; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { + text-align: center; +} +IMG.formulaDsp { +} +IMG.formulaInl { + vertical-align: middle; +} +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +SPAN.vhdldigit { color: #ff00ff } +SPAN.vhdlchar { color: #000000 } +SPAN.vhdlkeyword { color: #700070 } +SPAN.vhdllogic { color: #ff0000 } + +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { + color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +TD.tiny { + font-size: 75%; +} +a { + color: #1A41A8; +} +a:visited { + color: #2A3798; +} +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; +} +TH.dirtab { + background: #e8eef2; + font-weight: bold; +} +HR { + height: 1px; + border: none; + border-top: 1px solid black; +} + +/* Style for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #606060; + font-weight: normal; + margin-left: 3px; +} +.memnav { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +.memitem { + padding: 4px; + background-color: #eef3f5; + border-width: 1px; + border-style: solid; + border-color: #dedeee; + -moz-border-radius: 8px 8px 8px 8px; +} +.memname { + white-space: nowrap; + font-weight: bold; +} +.memdoc{ + padding-left: 10px; +} +.memproto { + background-color: #d5e1e8; + width: 100%; + border-width: 1px; + border-style: solid; + border-color: #84b0c7; + font-weight: bold; + -moz-border-radius: 8px 8px 8px 8px; +} +.paramkey { + text-align: right; +} +.paramtype { + white-space: nowrap; +} +.paramname { + color: #602020; + font-style: italic; + white-space: nowrap; +} +/* End Styling for detailed member documentation */ + +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin:0.5em; +} +/* these are for tree view when used as main index */ +.directory { + font-size: 9pt; + font-weight: bold; +} +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +/* The following two styles can be used to replace the root node title */ +/* with an image of your choice. Simply uncomment the next two styles, */ +/* specify the name of your image and be sure to set 'height' to the */ +/* proper pixel height of your image. */ + +/* .directory h3.swap { */ +/* height: 61px; */ +/* background-repeat: no-repeat; */ +/* background-image: url("yourimage.gif"); */ +/* } */ +/* .directory h3.swap span { */ +/* display: none; */ +/* } */ + +.directory > h3 { + margin-top: 0; +} +.directory p { + margin: 0px; + white-space: nowrap; +} +.directory div { + display: none; + margin: 0px; +} +.directory img { + vertical-align: -30%; +} +/* these are for tree view when not used as main index */ +.directory-alt { + font-size: 100%; + font-weight: bold; +} +.directory-alt h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} +.directory-alt > h3 { + margin-top: 0; +} +.directory-alt p { + margin: 0px; + white-space: nowrap; +} +.directory-alt div { + display: none; + margin: 0px; +} +.directory-alt img { + vertical-align: -30%; +} + diff --git a/documentation/enduser/html/doxygen.png b/documentation/enduser/html/doxygen.png new file mode 100755 index 0000000..f0a274b Binary files /dev/null and b/documentation/enduser/html/doxygen.png differ diff --git a/documentation/enduser/html/ftv2blank.png b/documentation/enduser/html/ftv2blank.png new file mode 100755 index 0000000..493c3c0 Binary files /dev/null and b/documentation/enduser/html/ftv2blank.png differ diff --git a/documentation/enduser/html/ftv2doc.png b/documentation/enduser/html/ftv2doc.png new file mode 100755 index 0000000..f72999f Binary files /dev/null and b/documentation/enduser/html/ftv2doc.png differ diff --git a/documentation/enduser/html/ftv2folderclosed.png b/documentation/enduser/html/ftv2folderclosed.png new file mode 100755 index 0000000..d6d0634 Binary files /dev/null and b/documentation/enduser/html/ftv2folderclosed.png differ diff --git a/documentation/enduser/html/ftv2folderopen.png b/documentation/enduser/html/ftv2folderopen.png new file mode 100755 index 0000000..bbe2c91 Binary files /dev/null and b/documentation/enduser/html/ftv2folderopen.png differ diff --git a/documentation/enduser/html/ftv2lastnode.png b/documentation/enduser/html/ftv2lastnode.png new file mode 100755 index 0000000..e7b9ba9 Binary files /dev/null and b/documentation/enduser/html/ftv2lastnode.png differ diff --git a/documentation/enduser/html/ftv2link.png b/documentation/enduser/html/ftv2link.png new file mode 100755 index 0000000..14f3fed Binary files /dev/null and b/documentation/enduser/html/ftv2link.png differ diff --git a/documentation/enduser/html/ftv2mlastnode.png b/documentation/enduser/html/ftv2mlastnode.png new file mode 100755 index 0000000..09ceb6a Binary files /dev/null and b/documentation/enduser/html/ftv2mlastnode.png differ diff --git a/documentation/enduser/html/ftv2mnode.png b/documentation/enduser/html/ftv2mnode.png new file mode 100755 index 0000000..3254c05 Binary files /dev/null and b/documentation/enduser/html/ftv2mnode.png differ diff --git a/documentation/enduser/html/ftv2node.png b/documentation/enduser/html/ftv2node.png new file mode 100755 index 0000000..c9f06a5 Binary files /dev/null and b/documentation/enduser/html/ftv2node.png differ diff --git a/documentation/enduser/html/ftv2plastnode.png b/documentation/enduser/html/ftv2plastnode.png new file mode 100755 index 0000000..0b07e00 Binary files /dev/null and b/documentation/enduser/html/ftv2plastnode.png differ diff --git a/documentation/enduser/html/ftv2pnode.png b/documentation/enduser/html/ftv2pnode.png new file mode 100755 index 0000000..2001b79 Binary files /dev/null and b/documentation/enduser/html/ftv2pnode.png differ diff --git a/documentation/enduser/html/ftv2vertline.png b/documentation/enduser/html/ftv2vertline.png new file mode 100755 index 0000000..b330f3a Binary files /dev/null and b/documentation/enduser/html/ftv2vertline.png differ diff --git a/documentation/enduser/html/functions.html b/documentation/enduser/html/functions.html new file mode 100755 index 0000000..b758716 --- /dev/null +++ b/documentation/enduser/html/functions.html @@ -0,0 +1,49 @@ + + +MPI On Cell (Documentation): Data Fields + + + + + +
+Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: +

+

+
+
Generated on Thu Feb 12 13:48:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/functions_vars.html b/documentation/enduser/html/functions_vars.html new file mode 100755 index 0000000..53ebd55 --- /dev/null +++ b/documentation/enduser/html/functions_vars.html @@ -0,0 +1,49 @@ + + +MPI On Cell (Documentation): Data Fields - Variables + + + + + +
+  +

+

+
+
Generated on Thu Feb 12 13:48:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/graph_legend.dot b/documentation/enduser/html/graph_legend.dot new file mode 100755 index 0000000..1f7c6e4 --- /dev/null +++ b/documentation/enduser/html/graph_legend.dot @@ -0,0 +1,23 @@ +digraph G +{ + bgcolor="transparent"; + edge [fontname="FreeSans",fontsize=10,labelfontname="FreeSans",labelfontsize=10]; + node [fontname="FreeSans",fontsize=10,shape=record]; + Node9 [shape="box",label="Inherited",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",fillcolor="grey75",style="filled" fontcolor="black"]; + Node10 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans"]; + Node10 [shape="box",label="PublicBase",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classPublicBase.html"]; + Node11 -> Node10 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans"]; + Node11 [shape="box",label="Truncated",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="red",URL="$classTruncated.html"]; + Node13 -> Node9 [dir=back,color="darkgreen",fontsize=10,style="solid",fontname="FreeSans"]; + Node13 [shape="box",label="ProtectedBase",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classProtectedBase.html"]; + Node14 -> Node9 [dir=back,color="firebrick4",fontsize=10,style="solid",fontname="FreeSans"]; + Node14 [shape="box",label="PrivateBase",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classPrivateBase.html"]; + Node15 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans"]; + Node15 [shape="box",label="Undocumented",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="grey75"]; + Node16 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans"]; + Node16 [shape="box",label="Templ< int >",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classTempl.html"]; + Node17 -> Node16 [dir=back,color="orange",fontsize=10,style="dashed",label="< int >",fontname="FreeSans"]; + Node17 [shape="box",label="Templ< T >",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classTempl.html"]; + Node18 -> Node9 [dir=back,color="darkorchid3",fontsize=10,style="dashed",label="m_usedClass",fontname="FreeSans"]; + Node18 [shape="box",label="Used",fontsize=10,height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classUsed.html"]; +} diff --git a/documentation/enduser/html/graph_legend.html b/documentation/enduser/html/graph_legend.html new file mode 100755 index 0000000..5bb147f --- /dev/null +++ b/documentation/enduser/html/graph_legend.html @@ -0,0 +1,85 @@ + + +MPI On Cell (Documentation): Graph Legend + + + + + +
+

Graph Legend

This page explains how to interpret the graphs that are generated by doxygen.

+Consider the following example:

/*! Invisible class because of truncation */
+class Invisible { };
+
+/*! Truncated class, inheritance relation is hidden */
+class Truncated : public Invisible { };
+
+/* Class not documented with doxygen comments */
+class Undocumented { };
+
+/*! Class that is inherited using public inheritance */
+class PublicBase : public Truncated { };
+
+/*! A template class */
+template<class T> class Templ { };
+
+/*! Class that is inherited using protected inheritance */
+class ProtectedBase { };
+
+/*! Class that is inherited using private inheritance */
+class PrivateBase { };
+
+/*! Class that is used by the Inherited class */
+class Used { };
+
+/*! Super class that inherits a number of other classes */
+class Inherited : public PublicBase,
+                  protected ProtectedBase,
+                  private PrivateBase,
+                  public Undocumented,
+                  public Templ<int>
+{
+  private:
+    Used *m_usedClass;
+};
+
If the MAX_DOT_GRAPH_HEIGHT tag in the configuration file is set to 240 this will result in the following graph:

+

+graph_legend.png +
+

+The boxes in the above graph have the following meaning:

+The arrows have the following meaning: +
+
Generated on Thu Feb 12 13:48:23 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/graph_legend.png b/documentation/enduser/html/graph_legend.png new file mode 100755 index 0000000..23e64a9 Binary files /dev/null and b/documentation/enduser/html/graph_legend.png differ diff --git a/documentation/enduser/html/index.html b/documentation/enduser/html/index.html new file mode 100755 index 0000000..cfead44 --- /dev/null +++ b/documentation/enduser/html/index.html @@ -0,0 +1,11 @@ + + +MPI On Cell (Documentation) + + + + + <a href="main.html">Frames are disabled. Click here to go to the main page.</a> + + + diff --git a/documentation/enduser/html/latency-b.png b/documentation/enduser/html/latency-b.png new file mode 100755 index 0000000..a47320c Binary files /dev/null and b/documentation/enduser/html/latency-b.png differ diff --git a/documentation/enduser/html/latency-kb.png b/documentation/enduser/html/latency-kb.png new file mode 100755 index 0000000..ac97329 Binary files /dev/null and b/documentation/enduser/html/latency-kb.png differ diff --git a/documentation/enduser/html/main.html b/documentation/enduser/html/main.html new file mode 100755 index 0000000..b586d7f --- /dev/null +++ b/documentation/enduser/html/main.html @@ -0,0 +1,32 @@ + + +MPI On Cell (Documentation): MPI On Cell + + + + + +
+

MPI On Cell

+

+The idea of this project is to implement a message passing library for work on the Cell BE. The main idea behind such an implementation would be to help the programmer by adding an layer of abstraction between the very low level libraries by IBM and give him the possibility to work with an interface he is more familiar with. To achieve this we decided to try to keep very closely to the standard provided by the Message Passing Interface (MPI), so that programmers knowing how to write MPI programmers can easily work with our library. Because of the very special nature of the Cell, it might not be possible to keep 100% true to the standard, but we try to introduce changes only when absolutely necessary and of great benefit, because of some specialties of the Cell's hardware.

+

Table of Content
+
End-User Documentation
+
Restrictions of the Cell-Architecture
+
Violations of the MPI-Standard
+
Performance Measurements
+
Summary & Conclusions
+
+
Generated on Thu Feb 12 13:48:16 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/modules.html b/documentation/enduser/html/modules.html new file mode 100755 index 0000000..bd375bf --- /dev/null +++ b/documentation/enduser/html/modules.html @@ -0,0 +1,50 @@ + + +MPI On Cell (Documentation): Module Index + + + + + +
+

Modules

Here is a list of all modules: +
+
Generated on Thu Feb 12 13:48:22 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/performance.html b/documentation/enduser/html/performance.html new file mode 100755 index 0000000..bd48a1b --- /dev/null +++ b/documentation/enduser/html/performance.html @@ -0,0 +1,63 @@ + + +MPI On Cell (Documentation): Performance Measurements + + + + + +
+

Performance Measurements

The measurements were taken on a Playstation 3 running Yellow Dog Linux release 6.0 using Cell SDK 3.1.

+To measure send-receive operations ping-pongs were used and to measure DMA-calls the time till the used DMA-tag is marked to have no pending calls is used. The stated latencies in the pictures above are one-way latencies.

+Send-Receive performance

+The following two figures show latency and bandwidth achieved by our implementation. The theoretical maximum bandwidth is 25 GByte/s and synchronous send between SPUs is at a close range to this limit if the data-size is large enough. There is also a big difference between SPU-SPU and SPU-PPU operations. The reason for this is the fact that the PPU cannot handle DMA-operations itself but only remote-control the SPU's Memory Flow Controller. And as you will see later the main-memory performance of the PPU is much lower than that of the SPUs. Because we use ping-pongs there is no way to determine differences in sending from or to the PPU, but other measurements indicate such differences.

+

+latency-kb.png +
+

+

+bandwidth-kb.png +
+

+The following figure shows the latency of send-receive operations at a lower scale than the first figure. If you look at the latency of synchronous send operations then you can see that there is a big start-up latency and only a very small data-size dependend latency. So there's only a very small time-difference between sending 10 byte and 1 Kbyte, but there is naturally a difference in throughput.

+

+latency-b.png +
+

+Send-Recv vs. DMA performance

+The following two figures demonstrate the difference in performance of send-recv operations and DMA-calls. The performance of DMA-calls reaches it's peak much earlier than send-recv and the peak-value is higher than that of send-recv even though the difference is not much. So DMA is a lot faster than send-recv especially for small messages, but for big messages the difference is much lower. It seems that it is always better to use DMA, but keep in mind that in practical applications calculation time easily exceeds communication time.

+

+dma-vs-moc-lat.png +
+

+

+dma-vs-moc-bw.png +
+

+SPU- vs PPU-initiated transfer

+The following figure shows the difference between SPU- and PPU-initiated DMA-calls. As you can see the highest performance can be achieved by using SPU-SPU DMA-calls. There is also hardly any difference between put and get operations. DMA-operations between SPU and main-memory achieves lower performance and there is a difference between put and get operations. PPU to SPU DMA calls have the lowest performance with small transfer sizes, but if the transfer-size is big enough they are faster than SPU-main-memory transfers. The lowest performance has a memcopy on the PPU, which also explains the bad performance of buffered send between SPU and PPU.

+

+spu-ppu-dma-bw-kb.png +
+

+DMA vs. memcpy

+The official Cell documentation states that it is also possible to use memcpy to transfer data from the PPU to a SPU. However one should use DMA, because it is always faster. If you look at the following figure, this is not always true. If the data-size is small enough memcpy is faster.

+

+ppu-transfer-bw-b.png +
+
+
Generated on Thu Feb 12 13:48:16 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/ppu-transfer-bw-b.png b/documentation/enduser/html/ppu-transfer-bw-b.png new file mode 100755 index 0000000..c0c38b7 Binary files /dev/null and b/documentation/enduser/html/ppu-transfer-bw-b.png differ diff --git a/documentation/enduser/html/restrictions.html b/documentation/enduser/html/restrictions.html new file mode 100755 index 0000000..8f8c0cf --- /dev/null +++ b/documentation/enduser/html/restrictions.html @@ -0,0 +1,40 @@ + + +MPI On Cell (Documentation): Restrictions of the Cell-Architecture + + + + + +
+

Restrictions of the Cell-Architecture

+

+CBE Architecture

+There are some restriction caused by the CBE architecture. Programming a SPU can be compared to programming a microcontroller: +
+

+Memory-Alignment

+All Buffers used in send- or receive-functions have to be aligned at a 16-byte boundary (for better performance a 128-byte alignment is recommended). This restriction cannot be circumvented.

+

+

+Transfer-Size

+DMA-calls only transfer data in chunks of 16 bytes. Send-receive operations and DMA-get-operations provided by this library hide this restriction by the use of intermediate buffers. But you should keep this restriction in mind because to gain maximum performance the size of data to be transfered should be a multiple of 16 bytes.
+
Generated on Thu Feb 12 13:48:16 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/enduser/html/spu-ppu-dma-bw-kb.png b/documentation/enduser/html/spu-ppu-dma-bw-kb.png new file mode 100755 index 0000000..62b201f Binary files /dev/null and b/documentation/enduser/html/spu-ppu-dma-bw-kb.png differ diff --git a/documentation/enduser/html/tab_b.gif b/documentation/enduser/html/tab_b.gif new file mode 100755 index 0000000..0d62348 Binary files /dev/null and b/documentation/enduser/html/tab_b.gif differ diff --git a/documentation/enduser/html/tab_l.gif b/documentation/enduser/html/tab_l.gif new file mode 100755 index 0000000..9b1e633 Binary files /dev/null and b/documentation/enduser/html/tab_l.gif differ diff --git a/documentation/enduser/html/tab_r.gif b/documentation/enduser/html/tab_r.gif new file mode 100755 index 0000000..ce9dd9f Binary files /dev/null and b/documentation/enduser/html/tab_r.gif differ diff --git a/documentation/enduser/html/tabs.css b/documentation/enduser/html/tabs.css new file mode 100755 index 0000000..95f00a9 --- /dev/null +++ b/documentation/enduser/html/tabs.css @@ -0,0 +1,102 @@ +/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ + +DIV.tabs +{ + float : left; + width : 100%; + background : url("tab_b.gif") repeat-x bottom; + margin-bottom : 4px; +} + +DIV.tabs UL +{ + margin : 0px; + padding-left : 10px; + list-style : none; +} + +DIV.tabs LI, DIV.tabs FORM +{ + display : inline; + margin : 0px; + padding : 0px; +} + +DIV.tabs FORM +{ + float : right; +} + +DIV.tabs A +{ + float : left; + background : url("tab_r.gif") no-repeat right top; + border-bottom : 1px solid #84B0C7; + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + +DIV.tabs A:hover +{ + background-position: 100% -150px; +} + +DIV.tabs A:link, DIV.tabs A:visited, +DIV.tabs A:active, DIV.tabs A:hover +{ + color: #1A419D; +} + +DIV.tabs SPAN +{ + float : left; + display : block; + background : url("tab_l.gif") no-repeat left top; + padding : 5px 9px; + white-space : nowrap; +} + +DIV.tabs INPUT +{ + float : right; + display : inline; + font-size : 1em; +} + +DIV.tabs TD +{ + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + + + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +DIV.tabs SPAN {float : none;} +/* End IE5-Mac hack */ + +DIV.tabs A:hover SPAN +{ + background-position: 0% -150px; +} + +DIV.tabs LI.current A +{ + background-position: 100% -150px; + border-width : 0px; +} + +DIV.tabs LI.current SPAN +{ + background-position: 0% -150px; + padding-bottom : 6px; +} + +DIV.navpath +{ + background : none; + border : none; + border-bottom : 1px solid #84B0C7; +} diff --git a/documentation/enduser/html/tree.html b/documentation/enduser/html/tree.html new file mode 100755 index 0000000..c6e59fd --- /dev/null +++ b/documentation/enduser/html/tree.html @@ -0,0 +1,109 @@ + + + + + + + TreeView + + + + +
+

MPI On Cell (Documentation)

+
+

o+MPI On Cell

+ +

o+Modules

+ +

o+Data Structures

+ +

\*Data Fields

+
+
+ diff --git a/documentation/enduser/html/violations.html b/documentation/enduser/html/violations.html new file mode 100755 index 0000000..a11c037 --- /dev/null +++ b/documentation/enduser/html/violations.html @@ -0,0 +1,48 @@ + + +MPI On Cell (Documentation): Violations of the MPI-Standard + + + + + +
+

Violations of the MPI-Standard

+

+Prefix of functions:

+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.

+

+

+Application Startup

+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.

+

+

+Order of received messages:

+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.

+

+

+Number of usable message-tag

+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.

+

+

+Number of simultaneous pending send-receive operations

+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.

+

+

+MPI_Init:

+The parameters of the init-function for the SPU does not match the parameters defined by the MPI-standard (see MOC_Init (SPU))
+
Generated on Thu Feb 12 13:48:16 2009 for MPI On Cell (Documentation) by  + +doxygen 1.5.6
+ + diff --git a/documentation/pics/bandwidth-kb.png b/documentation/pics/bandwidth-kb.png new file mode 100755 index 0000000..02e32c4 Binary files /dev/null and b/documentation/pics/bandwidth-kb.png differ diff --git a/documentation/pics/buffered_communication_1.png b/documentation/pics/buffered_communication_1.png new file mode 100755 index 0000000..88ca88e Binary files /dev/null and b/documentation/pics/buffered_communication_1.png differ diff --git a/documentation/pics/dma-vs-moc-bw.png b/documentation/pics/dma-vs-moc-bw.png new file mode 100755 index 0000000..044c792 Binary files /dev/null and b/documentation/pics/dma-vs-moc-bw.png differ diff --git a/documentation/pics/dma-vs-moc-lat.png b/documentation/pics/dma-vs-moc-lat.png new file mode 100755 index 0000000..bae5770 Binary files /dev/null and b/documentation/pics/dma-vs-moc-lat.png differ diff --git a/documentation/pics/isyncronous_communication_1.png b/documentation/pics/isyncronous_communication_1.png new file mode 100755 index 0000000..6f59d27 Binary files /dev/null and b/documentation/pics/isyncronous_communication_1.png differ diff --git a/documentation/pics/latency-b.png b/documentation/pics/latency-b.png new file mode 100755 index 0000000..a47320c Binary files /dev/null and b/documentation/pics/latency-b.png differ diff --git a/documentation/pics/latency-kb.png b/documentation/pics/latency-kb.png new file mode 100755 index 0000000..ac97329 Binary files /dev/null and b/documentation/pics/latency-kb.png differ diff --git a/documentation/pics/ppu-transfer-bw-b.png b/documentation/pics/ppu-transfer-bw-b.png new file mode 100755 index 0000000..c0c38b7 Binary files /dev/null and b/documentation/pics/ppu-transfer-bw-b.png differ diff --git a/documentation/pics/spu-ppu-dma-bw-kb.png b/documentation/pics/spu-ppu-dma-bw-kb.png new file mode 100755 index 0000000..62b201f Binary files /dev/null and b/documentation/pics/spu-ppu-dma-bw-kb.png differ diff --git a/documentation/pics/synchronous_communication_1.png b/documentation/pics/synchronous_communication_1.png new file mode 100755 index 0000000..90270ee Binary files /dev/null and b/documentation/pics/synchronous_communication_1.png differ diff --git a/examples/jacobi/Makefile b/examples/jacobi/Makefile new file mode 100755 index 0000000..f02186c --- /dev/null +++ b/examples/jacobi/Makefile @@ -0,0 +1,15 @@ +######################################################################## +# Target +######################################################################## + +DIRS = src/spu src/ppu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/jacobi/src/ppu/Makefile b/examples/jacobi/src/ppu/Makefile new file mode 100755 index 0000000..151cf4d --- /dev/null +++ b/examples/jacobi/src/ppu/Makefile @@ -0,0 +1,25 @@ +######################################################################## +# Target +######################################################################## + +PROGRAM_ppu64 = ../../test_jacobi + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I../../../../include/ppu +LDFLAGS = -L../../../../lib/ppu +IMPORTS = -lmoc_ppu -lspe2 ../spu/test_jacobi_spu.a + + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/jacobi/src/ppu/test_jacobi_ppu.c b/examples/jacobi/src/ppu/test_jacobi_ppu.c new file mode 100755 index 0000000..1b9d878 --- /dev/null +++ b/examples/jacobi/src/ppu/test_jacobi_ppu.c @@ -0,0 +1,83 @@ +#include +#include +#include +#include + +extern spe_program_handle_t test_jacobi_spu; + +int main(int argc, char **argv) + { + int t, rank, size, rl, mspu, aspu, err, stringl, nothr; + char proc[4]; + + int n __attribute__((__aligned__(16))); + int iterations __attribute__((__aligned__(16))); + float omega __attribute__((__aligned__(16))); + char string[255]; + + if (argc < 5) + { + printf("Usage: \"%s Matrix size Iterations Omega nothr\"\n", argv[0]); + return -1; + } + + n = atoi(argv[1]); + iterations = atoi(argv[2]); + omega = atof(argv[3]); + nothr = atoi(argv[4]); + + if (MOC_Get_max_spu_count(&mspu)) + { + printf("An error occured during MOC_Get_max_spu_count\n"); + return 0; + } + if (MOC_Get_avail_spu_count(&aspu)) + { + printf("An error occured during MOC_Get_avail_spu_count\n"); + return 0; + } + + // only use as many spus as specified + aspu = nothr; + for (t = 0; t < aspu; t++) + MOC_Add_spu_thread(&test_jacobi_spu, NULL); + + MOC_Init(NULL, NULL); + + MOC_Comm_rank(MOC_COMM_WORLD, &rank); + MOC_Comm_size(MOC_COMM_WORLD, &size); + MOC_Get_processor_name(proc, &rl); + + // sending input and other runtime specific data to spes + for (t = 0; t < aspu; t++) + { + err = MOC_Bsend(&n, sizeof(int), MOC_INT, t + 1, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string(err, string, &stringl); + printf("%i: ERROR-bsend1: %s (%i)\n", rank, string, err); + return 0; + } + + err = MOC_Bsend(&iterations, sizeof(int), MOC_INT, t + 1, 123, + MOC_COMM_WORLD); + if (err) + { + MOC_Error_string(err, string, &stringl); + printf("%i: ERROR-bsend2: %s (%i)\n", rank, string, err); + return 0; + } + + err = MOC_Bsend(&omega, sizeof(float), MOC_FLOAT, t + 1, 123, + MOC_COMM_WORLD); + if (err) + { + MOC_Error_string(err, string, &stringl); + printf("%i: ERROR-bsend3: %s (%i)\n", rank, string, err); + return 0; + } + } + + MOC_Finalize(); + return 0; + } diff --git a/examples/jacobi/src/spu/Makefile b/examples/jacobi/src/spu/Makefile new file mode 100755 index 0000000..8115d62 --- /dev/null +++ b/examples/jacobi/src/spu/Makefile @@ -0,0 +1,25 @@ +######################################################################## +# Target +######################################################################## + +PROGRAMS_spu := test_jacobi_spu +LIBRARY_embed64 := test_jacobi_spu.a + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I../../../../include/spu +LDFLAGS = -L../../../../lib/spu +IMPORTS = -lmoc_spu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/jacobi/src/spu/test_jacobi_spu.c b/examples/jacobi/src/spu/test_jacobi_spu.c new file mode 100755 index 0000000..e48b26c --- /dev/null +++ b/examples/jacobi/src/spu/test_jacobi_spu.c @@ -0,0 +1,242 @@ +#include +#include +#include +#include +#include +#include + +double gettime(void) + { + struct timeval time; + gettimeofday(&time, (void *) 0); + return (double) (time.tv_sec) + (double) time.tv_usec * 1.0e-6; + } + +void jacobi(float f1mO, float fOd4, float **f, float **u, float **uhelp, + int xn, int yn) + { + int i, j; + for (i = 1; i < yn - 1; i++) + { + for (j = 1; j < xn - 1; j++) + { + uhelp[i][j] = f1mO * u[i][j] + fOd4 * (f[i][j] + u[i - 1][j] + u[i + + 1][j] + u[i][j - 1] + u[i][j + 1]); + } + } + } + +int main() + { + int rank, size, rl, err, stringl; + unsigned int off1; + unsigned int i, j, n, xn, yn, iter, iterations, tag_id, matrix_size; + float f1mO, fOd4, omega; + float **f, **u, **uhelp, **utemp; + double time; + char string[255]; + + MOC_Status status; + + char proc[4]; + + iter = 0; + utemp = NULL; + tag_id = 0; + + MOC_Init(0, 0, NULL); + + MOC_Comm_rank(MOC_COMM_WORLD, &rank); + MOC_Comm_size(MOC_COMM_WORLD, &size); + MOC_Get_processor_name(proc, &rl); + + //recieve input and other runtime specific data from ppe + err = MOC_Recv(&n, sizeof(int), MOC_INT, 0, 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string(err, string, &stringl); + printf("%i: ERROR-initial-recv1: %s (%i)\n", rank, string, err); + return 0; + } + + err = MOC_Recv(&iterations, sizeof(int), MOC_INT, 0, 123, MOC_COMM_WORLD, + &status); + if (err) + { + MOC_Error_string(err, string, &stringl); + printf("%i: ERROR-initial-recv2: %s (%i)\n", rank, string, err); + return 0; + } + + err = MOC_Recv(&omega, sizeof(float), MOC_FLOAT, 0, 123, MOC_COMM_WORLD, + &status); + if (err) + { + MOC_Error_string(err, string, &stringl); + printf("%i: ERROR-initial-recv3: %s (%i)\n", rank, string, err); + return 0; + } + + //size also takes into account the ppe, not useful for calculations regarding the splitting of the workload + size = size - 1; + xn = n + 2; + yn = (n / size) + 2; + matrix_size = xn * sizeof(float); + //constants have to be declared only once, not in every iteration + f1mO = (1 - omega); + fOd4 = omega * 0.25; + + //help array for use in jacobi(...) is initialized here and apssed as argument. This is usefule for exchanging u and uhelp + //and saves performance because of only initializing it once + if ((f = (float**) malloc(yn * sizeof(float*))) == NULL) + { + printf("Error!! Array f not initialisable because: %s\n", strerror( + errno)); + return -1; + } + + if ((u = (float**) malloc(yn * sizeof(float*))) == NULL) + { + printf("Error!! Array u not initialisable because: %s\n", strerror( + errno)); + return -1; + } + + if ((uhelp = (float**) malloc(yn * sizeof(float*))) == NULL) + { + printf("Error!! Array uhelp not initialisable because: %s\n", strerror( + errno)); + exit(-1); + } + + for (i = 0; i < yn; i++) + { + if ((f[i] = (float*) malloc(sizeof(float) * xn)) == NULL) + { + printf("Error!! Array f[%d] not initialisable because: %s\n", i, + strerror(errno)); + return -1; + } + + if ((u[i] = (float*) malloc(sizeof(float) * xn)) == NULL) + { + printf("Error!! Array u[%d] not initialisable because: %s\n", i, + strerror(errno)); + return -1; + } + + if ((uhelp[i] = (float*) malloc(sizeof(float) * xn)) == NULL) + { + printf("Error!! Array uhelp[%d] not initialisable because: %s\n", + i, strerror(errno)); + exit(-1); + } + + //offset for calculation the position in the global array, as this determines the initialisation value + if (rank - 1 == 0) + off1 = i; + else + off1 = (i + (rank - 1) * (yn - 2)); + + for (j = 0; j < xn; j++) + { + f[i][j] = off1 * (off1 + 1) + j * (j + 1); + if ((off1 == 0) || (off1 == n + 2 - 1) || (j == 0) || (j == xn - 1)) + { + u[i][j] = f[i][j]; + uhelp[i][j] = f[i][j]; //uhelps margins have to be initialized as well because of altered exchange of u and uhelp + } + else + u[i][j] = 1.0; + } + } + + time = gettime(); + for (iter = 0; iter < iterations; iter++) + { + + jacobi(f1mO, fOd4, f, u, uhelp, xn, yn); + + //altered exchange algorithm. No backcopy, instead change pointers, far more efficient, + //helps reducing overhead to get better speedup, only difference from original algorithm, margins in uhelp have to be initialized + utemp = u; + u = uhelp; + uhelp = utemp; + + if (iter < iterations - 1) + { + if (rank > 1) + { + err = MOC_Ssend(u[1], matrix_size, MOC_FLOAT, rank - 1, 123, + MOC_COMM_WORLD); + if (err) + { + MOC_Error_string(err, string, &stringl); + printf("%i: ERROR-ssend1: %s (%i)\n", rank, string, err); + return 0; + } + + err = MOC_Recv(u[0], matrix_size, MOC_FLOAT, rank - 1, 124, + MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string(err, string, &stringl); + printf("%i: ERROR-recv1: %s (%i)\n", rank, string, err); + return 0; + } + } + + if (rank < size) + { + err = MOC_Recv(u[yn - 1], matrix_size, MOC_FLOAT, rank + 1, + 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string(err, string, &stringl); + printf("%i: ERROR-recv2: %s (%i)\n", rank, string, err); + return 0; + } + + err = MOC_Ssend(u[yn - 2], matrix_size, MOC_FLOAT, rank + 1, + 124, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string(err, string, &stringl); + printf("%i: ERROR-ssend2: %s (%i)\n", rank, string, err); + return 0; + } + } + } + } + + printf("Time for Calculations on SPE: %d = %lf\n", rank, gettime() - time); + + //print matrix in correct order + /* + sleep(1+rank); + if(rank == 1) + for(i=0;i +#include +#include +#include + +extern spe_program_handle_t test_jacobi_spu; +int main (int argc, char **argv) + { + int t, rank, size, rl, mspu, aspu, err, stringl, nothr; + char proc[4]; + + int n __attribute__((__aligned__(16))); + int iterations __attribute__((__aligned__(16))); + float omega __attribute__((__aligned__(16))); + int j; + char string[255]; + + if(argc < 5) + { + printf("Usage: \"%s Matrix size Iterations Omega nothr\"\n",argv[0]); + return -1; + } + + n = atoi(argv[1]); + iterations = atoi(argv[2]); + omega = atof(argv[3]); + nothr = atoi(argv[4]); + + if (MOC_Get_max_spu_count(&mspu)) + { + printf("An error occured during MOC_Get_max_spu_count\n"); + return 0; + } + if (MOC_Get_avail_spu_count(&aspu)) + { + printf("An error occured during MOC_Get_avail_spu_count\n"); + return 0; + } + + // only use as many spus as specified + aspu=nothr; + for (t = 0; t < aspu; t++) + MOC_Add_spu_thread ( &test_jacobi_spu, NULL ); + + MOC_Init(NULL, NULL); + + MOC_Comm_rank(MOC_COMM_WORLD, &rank); + MOC_Comm_size(MOC_COMM_WORLD, &size); + MOC_Get_processor_name( proc, &rl); + + // sending input and other runtime specific data to spes + for (t = 0; t < aspu; t++) + { + err = MOC_Bsend(&n, sizeof(int), MOC_INT, t+1, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-bsend1: %s (%i)\n", rank, string, err); + return 0; + } + + err = MOC_Bsend(&iterations, sizeof(int), MOC_INT, t+1, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-bsend2: %s (%i)\n", rank, string, err); + return 0; + } + + err = MOC_Bsend(&omega, sizeof(float), MOC_FLOAT, t+1, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-bsend3: %s (%i)\n", rank, string, err); + return 0; + } + } + for (j=0; j<3*(iterations-1); j++) + MOC_Barrier(MOC_COMM_WORLD); + + MOC_Finalize(); + return 0; + } diff --git a/examples/jacobi_hybrid/src/spu/Makefile b/examples/jacobi_hybrid/src/spu/Makefile new file mode 100755 index 0000000..8115d62 --- /dev/null +++ b/examples/jacobi_hybrid/src/spu/Makefile @@ -0,0 +1,25 @@ +######################################################################## +# Target +######################################################################## + +PROGRAMS_spu := test_jacobi_spu +LIBRARY_embed64 := test_jacobi_spu.a + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I../../../../include/spu +LDFLAGS = -L../../../../lib/spu +IMPORTS = -lmoc_spu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/jacobi_hybrid/src/spu/test_jacobi_spu.c b/examples/jacobi_hybrid/src/spu/test_jacobi_spu.c new file mode 100755 index 0000000..c7ad0d4 --- /dev/null +++ b/examples/jacobi_hybrid/src/spu/test_jacobi_spu.c @@ -0,0 +1,261 @@ +#include +#include +#include +#include +#include +#include + +double gettime(void) + { + struct timeval time; + gettimeofday(&time, (void *) 0); + return (double) (time.tv_sec) + (double) time.tv_usec * 1.0e-6; + } + +void jacobi(float f1mO, float fOd4, float **f, float **u, float **uhelp, + int xn, int yn) + { +int i,j; + for(i=1;i 1) + { + err = MOC_Bsend(&my_ls, sizeof(uint64_t), MOC_UNSIGNED_LONG_LONG, rank-1, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-ssend1: %s (%i)\n", rank, string, err); + return 0; + } + + err = MOC_Recv(&prev_ls, sizeof(uint64_t), MOC_UNSIGNED_LONG_LONG, rank-1, 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-recv1: %s (%i)\n", rank, string, err); + return 0; + } + } + +if(rank < size) + { + err = MOC_Recv(&next_ls, sizeof(uint64_t), MOC_UNSIGNED_LONG_LONG, rank+1, 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-recv1: %s (%i)\n", rank, string, err); + return 0; + } + + err = MOC_Bsend(&my_ls, sizeof(uint64_t), MOC_UNSIGNED_LONG_LONG, rank+1, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-ssend1: %s (%i)\n", rank, string, err); + return 0; + } + } + +//help array for use in jacobi(...) is initialized here and apssed as argument. This is usefule for exchanging u and uhelp +//and saves performance because of only initializing it once +if((f = (float**)malloc(yn * sizeof(float*))) == NULL) + { + printf("Error!! Array f not initialisable because: %s\n",strerror(errno)); + return -1; + } +if((u = (float**)malloc(yn * sizeof(float*))) == NULL) + { + printf("Error!! Array u not initialisable because: %s\n",strerror(errno)); + return -1; + } +if((uhelp = (float**)malloc(yn * sizeof(float*))) == NULL) + { + printf("Error!! Array uhelp not initialisable because: %s\n",strerror(errno)); + exit(-1); + } + +for(i=0;i 1) + { + + err = MOC_Put_data(u[1], prev_ls+(uint32_t)u[yn-1], matrix_size, MOC_FLOAT); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-ssend1: %s (%i)\n", rank, string, err); + return 0; + } + } + + MOC_Barrier(MOC_COMM_WORLD); + + if(rank < size) + { + err = MOC_Put_data(u[yn-2], next_ls+(uint32_t)u[0], matrix_size, MOC_FLOAT); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-ssend2: %s (%i)\n", rank, string, err); + return 0; + } + } + + MOC_Barrier(MOC_COMM_WORLD); + } + + } + +printf("Time for Calculations on SPE: %d = %lf\n", rank, gettime()-time); + +//print matrix in correct order +/* + sleep(1+rank); + if(rank == 1) + for(i=0;i +#include +#include +#include + +#include + +extern spe_program_handle_t matmult_spu; + +#define MASTER 0 + +void initMatrix(double** M, int x, int y, double value) + { + int i, j; + + for (i = 0; i < x; i++) + { + for (j = 0; j < y; j++) + M[i][j] = value; + } + } + +void initMatrixInc(double** M, int x, int y, double value, int offset) + { + int i, j; + + for (i = 0; i < x; i++) + { + for (j = 0; j < y; j++) + M[i][j] = (i+1) * value +( double)offset; + } + } + +int getChunkSize(int processes, int rank, int lines) + { + int result = lines/processes; + + if (lines%processes > rank) + result++; + + return result; + } + +int getOffset(int processes, int rank, int lines) + { + int result = 0; + int i; + + for (i = 0; i < rank; i++) + result += getChunkSize(processes, i, lines); + + return result; + } + +double vecMult(double* vec1, double* vec2, int size) + { + double result = 0.0; + int i; + + for (i = 0; i < size; i++) + result += vec1[i] * vec2[i]; + + return result; + } + +void printMatrix(double** M, int from_line, int to_line, int elements, int rank) + { + int i, j; + + for (i = from_line; i <= to_line; i++) + { + printf("RANK[%d] line %d", rank, i); + + for (j = 0; j < elements; j++) + { + printf("%6.1f ", M[i][j]); + //printf("[(%d, %d) %f] ", i, j, M[i][j]); + } + printf("\n"); + } + } + +int main() + { + struct timeval t; + struct timezone z; + + double sec = 0.0; + + gettimeofday(&t, &z); + sec =( double)t.tv_usec/1e6 + t.tv_sec; + + int n, m, p; //dimensions (m x n) * (n x p) = (m x p) + int i, j, k; //indeces + + int offset; + + double** A; // matrices + double** B; + double** C; + + int countNode,chunklastnode; + int testFlag; + int np, myrank, chunksize, mspu, aspu; + MOC_Status status; + int sendchunksize; + double startTime, computeTime, tmpTime, communicationTime; + + communicationTime = 0.0; + computeTime = 0.0; + chunklastnode=0; + + if (MOC_Get_max_spu_count(&mspu)) + { + printf("An error occured during MOC_Get_max_spu_count\n"); + return 0; + } + if (MOC_Get_avail_spu_count(&aspu)) + { + printf("An error occured during MOC_Get_avail_spu_count\n"); + return 0; + } + + printf("\nThere are %i of %i SPUs available.\n\n", aspu, mspu); + + MOC_Add_spu_thread ( &matmult_spu, NULL ); + MOC_Add_spu_thread ( &matmult_spu, NULL ); + MOC_Add_spu_thread ( &matmult_spu, NULL ); + MOC_Add_spu_thread ( &matmult_spu, NULL ); + MOC_Add_spu_thread ( &matmult_spu, NULL ); + MOC_Add_spu_thread ( &matmult_spu, NULL ); + + MOC_Set_buffer_size ( 500000 ); + + MOC_Init(NULL, NULL); + startTime = MOC_Wtime(); + + MOC_Comm_size(MOC_COMM_WORLD, &np); /*get #(processors)*/ + MOC_Comm_rank(MOC_COMM_WORLD, &myrank);/*find rank of this process*/ + + m=n=p=150; + + // B allocation each column is a vector!!!! + B = (double**)malloc( p * sizeof(double*) ); + + for(i = 0; i < p; i++ ) + { + B[i] = (double*)malloc( n * sizeof(double) ); + } + + initMatrix(B, p, n, 0.0); + + chunksize = getChunkSize(np, myrank, m); + + if( myrank == MASTER )///////////////////-- MASTER --//////////////////////// + + { + + initMatrix(B, p, n, 1.0); + printf("RANK[%d]: Adresse von b ist %d\n",myrank,B); + + for(countNode = 1; countNode < 7;countNode++) + { + + for(i = 0; i < p;i++) //broadcast B to SLAVES + + { + tmpTime = MOC_Wtime(); + + testFlag = MOC_Send(B[i], n, MOC_DOUBLE, countNode, MASTER, MOC_COMM_WORLD); + if(testFlag != 0) + i--; + + communicationTime += MOC_Wtime() - tmpTime; + + } + } + + A = (double**)malloc( m * sizeof(double*) ); + C = (double**)malloc( m * sizeof(double*) ); + + for(i = 0; i < m; i++) + { + A[i] = (double*)malloc( n * sizeof(double)); + C[i] = (double*)malloc( p * sizeof(double)); + } + + initMatrixInc(A, m, n, 1.0, 0); //init A with some values + initMatrix(C, m, p, 0.0); // init C with 0.0 + + for(i = 1; i < np; i++) // distribute A to SLAVES + + { + offset = getOffset(np, i, m); + sendchunksize = getChunkSize(np, i, m); + + for(k = 0; k < sendchunksize;k++) + { + tmpTime = MOC_Wtime(); + + testFlag = MOC_Send(A[k + offset], n,MOC_DOUBLE,i,i,MOC_COMM_WORLD); + + if(testFlag != 0) + k--; + communicationTime += MOC_Wtime() - tmpTime; + } + } + + computeTime = MOC_Wtime(); + + for(i = 0; i < chunksize; i++) //compute + + { + for(j = 0; j < p; j++) + C[i][j] = vecMult(A[i], B[j], n); + } + + computeTime = MOC_Wtime() - computeTime; + + for(i = 1; i < np; i++) //gather C chunks from SLAVES + + { + offset = getOffset(np, i, m); + sendchunksize = getChunkSize(np, i, m); + + for(k = 0; k < sendchunksize;k++) + { + tmpTime = MOC_Wtime(); + + MOC_Recv(C[k + offset], p, MOC_DOUBLE, i, i,MOC_COMM_WORLD,&status); + + communicationTime += MOC_Wtime() - tmpTime; + } + + } + + for(i = 0; i < m; i++) + free(A[i]); + free(A); + + for(i = 0; i < m; i++) + free(C[i]); + free(C); + + } + + for(i = 0; i < p; i++) + free(B[i]); + + free(B); + + printf("RANK[%d] Communication Time: %f\n", myrank, communicationTime); + printf("RANK[%d] Computation Time: %f\n", myrank, computeTime); + + MOC_Finalize(); + + gettimeofday(&t, &z); + sec = (double)t.tv_usec/1e6 + t.tv_sec - sec; + + printf("RANK[%d] Complete time = %f\n",myrank, sec); + + return 0; + } diff --git a/examples/matmult/src/spu/Makefile b/examples/matmult/src/spu/Makefile new file mode 100755 index 0000000..9266681 --- /dev/null +++ b/examples/matmult/src/spu/Makefile @@ -0,0 +1,29 @@ +######################################################################## +# Target +######################################################################## + +PROGRAMS_spu := matmult_spu +LIBRARY_embed64 := matmult_spu.a + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE += -I../../../../include/spu +LDFLAGS += -L../../../../lib/spu +IMPORTS += -lmoc_spu + +# Only necessary if the SPU-Decrementer is used as Time-Source for the SPUs +#LDFLAGS += -L/opt/cell/sysroot/opt/cell/sdk/prototype/usr/spu/lib +#IMPORTS += -lsputimer + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/matmult/src/spu/matmult_spu.c b/examples/matmult/src/spu/matmult_spu.c new file mode 100755 index 0000000..8c365d2 --- /dev/null +++ b/examples/matmult/src/spu/matmult_spu.c @@ -0,0 +1,209 @@ +#include +#include +#include +#include + +#include + +#define MASTER 0 + +void initMatrix(double** M, int x, int y, double value) + { + int i, j; + + for (i = 0; i < x; i++) + { + for (j = 0; j < y; j++) + M[i][j] = value; + } + } + +void initMatrixInc(double** M, int x, int y, double value, int offset) + { + int i, j; + + for (i = 0; i < x; i++) + { + for (j = 0; j < y; j++) + M[i][j] = (i+1) * value +( double)offset; + } + } + +int getChunkSize(int processes, int rank, int lines) + { + int result = lines/processes; + + if (lines%processes > rank) + result++; + + return result; + } + +int getOffset(int processes, int rank, int lines) + { + int result = 0; + int i; + + for (i = 0; i < rank; i++) + result += getChunkSize(processes, i, lines); + + return result; + } + +double vecMult(double* vec1, double* vec2, int size) + { + double result = 0.0; + int i; + + for (i = 0; i < size; i++) + result += vec1[i] * vec2[i]; + + return result; + } + +int main() + { + struct timeval t; + struct timezone z; + + double sec = 0.0; + + gettimeofday(&t, &z); + sec =( double)t.tv_usec/1e6 + t.tv_sec; + + int testFlag; + + int n, m, p; //dimensions (m x n) * (n x p) = (m x p) + int i, j, k; //indeces + + int offset; + + double** A; // matrices + double** B; + double** C; + + int np, myrank, chunksize; + MOC_Status status; + + double startTime, computeTime, tmpTime, communicationTime; + + communicationTime = 0.0; + computeTime = 0.0; + + MOC_Init( 0, 0, NULL); + + startTime = MOC_Wtime(); + + MOC_Comm_size(MOC_COMM_WORLD, &np); /*get #(processors)*/ + MOC_Comm_rank(MOC_COMM_WORLD, &myrank);/*find rank of this process*/ + + m = n = p = 150; + + // B allocation, each column is a vector!!!! + B = (double**)malloc( p * sizeof(double*) ); + + for(i = 0; i < p; i++ ) + { + B[i] = (double*)malloc( n * sizeof(double) ); + } + + initMatrix(B, p, n, 0.0); + + chunksize = getChunkSize(np, myrank, m); + printf("RANK[%d] chunksize: %d\n", myrank, chunksize); + + if(myrank > 0) + { + + tmpTime = MOC_Wtime(); + + communicationTime += MOC_Wtime() - tmpTime; + + for(i = 0; i < p;i++) //get Matrix B from MASTER + + { + tmpTime = MOC_Wtime(); + MOC_Recv(B[i], n ,MOC_DOUBLE,MASTER,MASTER,MOC_COMM_WORLD,&status); + communicationTime += MOC_Wtime() - tmpTime; + } + + printf("RANK[%d] has Matrix B\n", myrank); + + A = (double**)malloc(chunksize * sizeof(double)); //a chunk of A + for(i = 0; i < chunksize; i++) + A[i] = (double*)malloc(n * sizeof(double)); + + C = (double**)malloc(chunksize * sizeof(double)); //a chunk of A + for(i = 0; i < chunksize; i++) + C[i] = (double*)malloc(p * sizeof(double)); + + offset = getOffset(np, myrank, m); + + initMatrix(A, chunksize, n, 0.0); + initMatrix(C, chunksize, p, 0.0); + + printf("RANK[%d] empfange daten\n",myrank); + + for(k=0; k < chunksize; k++) // Recv chunk of A + + { + tmpTime = MOC_Wtime(); + + MOC_Recv(A[k],n ,MOC_DOUBLE,MASTER,myrank,MOC_COMM_WORLD,&status); + + communicationTime += MOC_Wtime() - tmpTime; + } + + computeTime = MOC_Wtime(); + printf("RANK[%d] bearbeite daten\n",myrank); + for(i = 0; i < chunksize; i++) // compute + + { + for(j = 0; j < p; j++) + { + C[i][j] = vecMult(A[i], B[j], n); + } + } + + computeTime = MOC_Wtime() - computeTime; + + printf("RANK[%d] sende daten\n",myrank); + for(k = 0; k < chunksize;k++) + { + tmpTime = MOC_Wtime(); + + testFlag = MOC_Send(C[k], p, MOC_DOUBLE, MASTER, myrank, MOC_COMM_WORLD); + if(testFlag != 0) + { + k--; + } + communicationTime += MOC_Wtime() - tmpTime; + } + + for(i = 0; i < chunksize; i++) + free(A[i]); + free(A); + + for(i = 0; i < chunksize; i++) + free(C[i]); + free(C); + + } + + for(i = 0; i < chunksize; i++) + free(B[i]); + + free(B); + + printf("RANK[%d] Communication Time: %f\n", myrank, communicationTime); + printf("RANK[%d] Computation Time: %f\n", myrank, computeTime); + + MOC_Finalize(); + + gettimeofday(&t, &z); + sec = (double)t.tv_usec/1e6 + t.tv_sec - sec; + + printf("RANK[%d] Complete time = %f\n",myrank, sec); + + return 0; + } diff --git a/examples/pi/Makefile b/examples/pi/Makefile new file mode 100755 index 0000000..115621b --- /dev/null +++ b/examples/pi/Makefile @@ -0,0 +1,16 @@ + +######################################################################## +# Target +######################################################################## + +DIRS = src/spu src/ppu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/pi/src/ppu/Makefile b/examples/pi/src/ppu/Makefile new file mode 100755 index 0000000..ca00a72 --- /dev/null +++ b/examples/pi/src/ppu/Makefile @@ -0,0 +1,26 @@ +######################################################################## +# Target +######################################################################## + +PROGRAM_ppu64 = ../../pi + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I../../../../include/ppu +LDFLAGS = -L../../../../lib/ppu +IMPORTS = -lmoc_ppu -lspe2 ../spu/pi_spu.a + + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif + diff --git a/examples/pi/src/ppu/pi_ppu.c b/examples/pi/src/ppu/pi_ppu.c new file mode 100755 index 0000000..fa5896b --- /dev/null +++ b/examples/pi/src/ppu/pi_ppu.c @@ -0,0 +1,81 @@ +#include +#include +#include +#include +//#include <../moc_status.h> +#define MASTER 0 + +extern spe_program_handle_t pi_spu; + +int main() + { + MOC_Status mpStatus; + int nNP, nRank, mspu, aspu; + double ldResult = 0.0; + double ldReceiveResult = 0.0; + double step; + double i, lFrom, lTo; + double dStart, dEnd; + + if (MOC_Get_max_spu_count(&mspu)) + { + printf("An error occured during MOC_Get_max_spu_count\n"); + return 0; + } + if (MOC_Get_avail_spu_count(&aspu)) + { + printf("An error occured during MOC_Get_avail_spu_count\n"); + return 0; + } + + printf("\nThere are %i of %i SPUs available.\n\n", aspu, mspu); + + MOC_Add_spu_thread ( &pi_spu, NULL ); + MOC_Add_spu_thread ( &pi_spu, NULL ); + MOC_Add_spu_thread ( &pi_spu, NULL ); + MOC_Add_spu_thread ( &pi_spu, NULL ); + MOC_Add_spu_thread ( &pi_spu, NULL ); + MOC_Add_spu_thread ( &pi_spu, NULL ); + + MOC_Set_buffer_size ( 500000); + + MOC_Init(NULL, NULL); + MOC_Comm_size(MOC_COMM_WORLD, &nNP); /*get #(processors)*/ + MOC_Comm_rank(MOC_COMM_WORLD, &nRank);/*find rank of this process*/ + + printf("[RANK-%d] processes: %d\n", nRank, nNP); + + dStart = MOC_Wtime(); + + // calculate range + lFrom = (1.0*nRank)/nNP; + lTo = lFrom + 1.0/nNP; + step = 0.0000001; + + // calculate pi + for (i = lFrom; i <= lTo; i+=step) + { + ldResult += step * 4./(1 + ((long double)i*i)); + } + dEnd = MOC_Wtime(); + + if (nRank==MASTER) + { + // receive results from slaves + for (i = 1; i < nNP; i++) + { + MOC_Recv(&ldReceiveResult, sizeof(double), MOC_BYTE,MOC_ANY_SOURCE, MOC_ANY_TAG, MOC_COMM_WORLD, &mpStatus); + ldResult += ldReceiveResult; + } + + dEnd = MOC_Wtime(); + printf("[RANK-%d] result %1.20f in %2.8f sec\r\n", nRank, ldResult, (dEnd-dStart)); + } + + MOC_Finalize(); // close MPI application + + return 0; +} + + + diff --git a/examples/pi/src/spu/Makefile b/examples/pi/src/spu/Makefile new file mode 100755 index 0000000..d3c8fd5 --- /dev/null +++ b/examples/pi/src/spu/Makefile @@ -0,0 +1,29 @@ +######################################################################## +# Target +######################################################################## + +PROGRAMS_spu := pi_spu +LIBRARY_embed64 := pi_spu.a + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE += -I../../../../include/spu +LDFLAGS += -L../../../../lib/spu +IMPORTS += -lmoc_spu + +# Only necessary if the SPU-Decrementer is used as Time-Source for the SPUs +LDFLAGS += -L/opt/cell/sysroot/opt/cell/sdk/prototype/usr/spu/lib +#IMPORTS += -lsputimer + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/pi/src/spu/pi_spu.c b/examples/pi/src/spu/pi_spu.c new file mode 100755 index 0000000..41b12db --- /dev/null +++ b/examples/pi/src/spu/pi_spu.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include +//#include <../moc_status.h> + +#define MASTER 0 + +int main() + { + int nNP, nRank; + double ldResult = 0.0; + double step; + double i, lFrom, lTo; + double dStart, dEnd; + + MOC_Init( 0, 0, NULL); + MOC_Comm_size(MOC_COMM_WORLD, &nNP); // get #(processes) + MOC_Comm_rank(MOC_COMM_WORLD, &nRank); // find rank of this process + + dStart = MOC_Wtime(); + + // calculate range + lFrom = (1.0*nRank)/nNP; + lTo = lFrom + 1.0/nNP; + step = 0.0000001; + + ldResult = 0.0; + + // calculate pi + for (i = lFrom; i <= lTo; i+=step) + ldResult += step * 4./(1 + ((long double)i*i)); + dEnd = MOC_Wtime(); + + if(nRank != MASTER) + { + // send result to master + MOC_Send(&ldResult, sizeof(double), MOC_BYTE, MASTER, 1,MOC_COMM_WORLD); + } + + MOC_Finalize(); // close MPI application + + return 0; +} + + + diff --git a/examples/ring_test/Makefile b/examples/ring_test/Makefile new file mode 100755 index 0000000..115621b --- /dev/null +++ b/examples/ring_test/Makefile @@ -0,0 +1,16 @@ + +######################################################################## +# Target +######################################################################## + +DIRS = src/spu src/ppu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/ring_test/src/ppu/Makefile b/examples/ring_test/src/ppu/Makefile new file mode 100755 index 0000000..71336f0 --- /dev/null +++ b/examples/ring_test/src/ppu/Makefile @@ -0,0 +1,26 @@ +######################################################################## +# Target +######################################################################## + +PROGRAM_ppu64 = ../../ring_test + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I../../../../include/ppu +LDFLAGS = -L../../../../lib/ppu +IMPORTS = -lmoc_ppu -lspe2 ../spu/ring_test_spu.a + + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif + diff --git a/examples/ring_test/src/ppu/ring_test_ppu.c b/examples/ring_test/src/ppu/ring_test_ppu.c new file mode 100755 index 0000000..4971488 --- /dev/null +++ b/examples/ring_test/src/ppu/ring_test_ppu.c @@ -0,0 +1,243 @@ +#include +#include +#include +#include + + + +extern spe_program_handle_t ring_test_spu; + + +int buffer_size = 16384*2+128*3+16+5; + +int max_iterations = 100; + + +int main() + { + int rank, size, rl, mspu, aspu, err, stringl, iteration = 0; + double start, stop; + char proc[4], *buffer1, *buffer2; + MOC_Status status; + char string[255]; + int t; + + if (MOC_Get_max_spu_count(&mspu)) + { + printf("An error occured during MOC_Get_max_spu_count\n"); + return 0; + } + if (MOC_Get_avail_spu_count(&aspu)) + { + printf("An error occured during MOC_Get_avail_spu_count\n"); + return 0; + } + + printf("\nThere are %i of %i SPUs available.\n\n", aspu, mspu); + + for ( t = 0; t < aspu; t++) + MOC_Add_spu_thread ( &ring_test_spu, NULL ); + + MOC_Set_buffer_size ( 500000 ); + + start = MOC_Wtime(); + + MOC_Init(NULL, NULL); + + MOC_Comm_rank(MOC_COMM_WORLD, &rank); + MOC_Comm_size(MOC_COMM_WORLD, &size); + MOC_Get_processor_name( proc, &rl); + + + if (rank == 0) + { + int t, integrity = 0; + double starttime, stoptime; + buffer1 = _malloc_align(buffer_size, 7); + buffer2 = _malloc_align(buffer_size, 7); + + + printf("\nRing-Test with synchronous send starting...\n"); + + starttime = MOC_Wtime(); + + for (iteration = 0; iteration < max_iterations; iteration++) + { + for (t = 0; t < 4; t++) + { + buffer1[t] = rand()%256; + } + err = MOC_Ssend(buffer1, 4, MOC_CHAR, 1, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-send: %s (%i)\n", rank, string, err); + } + + err = MOC_Recv(buffer2, 4, MOC_CHAR, size-1, 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-recv: %s (%i)\n", rank, string, err); + } + + integrity = 0; + for (t = 0; t < 4; t++) + { + if (buffer1[t] != buffer2[t]) + { + integrity++; + //printf("ssend: Fehler an Stelle %i\n", t); + } + } + if (integrity != 0) + printf("ssend: integrity-check failed (%i false bytes found).\n", integrity); + } + + stoptime = MOC_Wtime(); + printf("Ring-Test with synchronous send ended\n"); + printf("time needed for %i iterations with 4 bytes of data: %lf s\n", max_iterations, stoptime-starttime ); + + + printf("\nRing-Test with synchronous send starting...\n"); + + starttime = MOC_Wtime(); + + for (iteration = 0; iteration < max_iterations; iteration++) + { + for (t = 0; t < buffer_size; t++) + { + buffer1[t] = rand()%256; + } + err = MOC_Ssend(buffer1, buffer_size, MOC_CHAR, 1, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-send: %s (%i)\n", rank, string, err); + } + + err = MOC_Recv(buffer2, buffer_size, MOC_CHAR, size-1, 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-recv: %s (%i)\n", rank, string, err); + } + + integrity = 0; + for (t = 0; t < buffer_size; t++) + { + if (buffer1[t] != buffer2[t]) + { + integrity++; + //printf("ssend: Fehler an Stelle %i\n", t); + } + } + if (integrity != 0) + printf("ssend: integrity-check failed (%i false bytes found).\n", integrity); + //else + // printf("ssend: integrity-check passed\n"); + } + + stoptime = MOC_Wtime(); + printf("Ring-Test with synchronous send ended\n"); + printf("time needed for %i iterations with %i bytes of data: %lf s\n", max_iterations, buffer_size, stoptime-starttime ); + + + printf("\nRing-Test with buffered send starting...\n"); + + starttime = MOC_Wtime(); + + for (iteration = 0; iteration < max_iterations; iteration++) + { + for (t = 0; t < 4; t++) + { + buffer1[t] = rand()%256; + } + err = MOC_Bsend(buffer1, 4, MOC_CHAR, 1, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-send: %s (%i)\n", rank, string, err); + } + + err = MOC_Recv(buffer2, 4, MOC_CHAR, size-1, 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-recv: %s (%i)\n", rank, string, err); + } + + integrity = 0; + for (t = 0; t < 4; t++) + { + if (buffer1[t] != buffer2[t]) + { + integrity++; + printf("Fehler an Stelle %i\n", t); + } + } + if (integrity != 0) + printf("integrity-check failed (%i false bytes found).\n", integrity); + + } + + stoptime = MOC_Wtime(); + printf("Ring-Test with buffered send ended\n"); + printf("time needed for %i iterations with 4 bytes of data: %lf s\n\n", max_iterations, stoptime-starttime ); + + + + printf("\nRing-Test with buffered send starting...\n"); + + starttime = MOC_Wtime(); + + for (iteration = 0; iteration < max_iterations; iteration++) + { + integrity = 0; + for (t = 0; t < buffer_size; t++) + { + buffer1[t] = rand()%256; + } + err = MOC_Bsend(buffer1, buffer_size, MOC_CHAR, 1, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-send: %s (%i)\n", rank, string, err); + } + + err = MOC_Recv(buffer2, buffer_size, MOC_CHAR, size-1, 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-recv: %s (%i)\n", rank, string, err); + } + + integrity = 0; + for (t = 0; t < buffer_size; t++) + { + if (buffer1[t] != buffer2[t]) + { + integrity++; + printf("Fehler an Stelle %i\n", t); + } + } + if (integrity != 0) + printf("integrity-check failed (%i false bytes found).\n", integrity); + + } + + stoptime = MOC_Wtime(); + printf("Ring-Test with buffered send ended\n"); + printf("time needed for %i iterations with %i bytes of data: %lf s\n\n", max_iterations, buffer_size, stoptime-starttime ); + } + + + + MOC_Finalize(); + + stop = MOC_Wtime(); + printf("overall-duration: %lf\n", stop-start); + + return 0; + } + diff --git a/examples/ring_test/src/spu/Makefile b/examples/ring_test/src/spu/Makefile new file mode 100755 index 0000000..995cfb8 --- /dev/null +++ b/examples/ring_test/src/spu/Makefile @@ -0,0 +1,29 @@ +######################################################################## +# Target +######################################################################## + +PROGRAMS_spu := ring_test_spu +LIBRARY_embed64 := ring_test_spu.a + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE += -I../../../../include/spu +LDFLAGS += -L../../../../lib/spu +IMPORTS += -lmoc_spu + +# Only necessary if the SPU-Decrementer is used as Time-Source for the SPUs +LDFLAGS += -L/opt/cell/sysroot/opt/cell/sdk/prototype/usr/spu/lib +#IMPORTS += -lsputimer + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/ring_test/src/spu/ring_test_spu.c b/examples/ring_test/src/spu/ring_test_spu.c new file mode 100755 index 0000000..6270399 --- /dev/null +++ b/examples/ring_test/src/spu/ring_test_spu.c @@ -0,0 +1,108 @@ + +#include +#include +#include +#include + + + +//int buffer_size = 32933; +int buffer_size = 16384*2+128*3+16+5; +//int buffer_size = 4; + +int max_iterations = 100; + + +int main() + { + int rank, size, rl, err, stringl, iteration = 0; + char proc[4], *buffer1; + char string[255]; + MOC_Status status; + + + MOC_Init( 0, 0, NULL); + + MOC_Comm_rank(MOC_COMM_WORLD, &rank); + MOC_Comm_size(MOC_COMM_WORLD, &size); + MOC_Get_processor_name( proc, &rl); + + //printf("Process %i from %i running on %s: Hello World!\n ", rank, size, proc); + + + buffer1 = _malloc_align(buffer_size, 4); + + + for (iteration = 0; iteration < max_iterations; iteration++) + { + err = MOC_Recv(buffer1, 4, MOC_CHAR, rank-1, 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-recv: %s (%i)\n", rank, string, err); + } + err = MOC_Ssend(buffer1, 4, MOC_CHAR, (rank+1) % size, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-send: %s (%i)\n", rank, string, err); + } + } + + + for (iteration = 0; iteration < max_iterations; iteration++) + { + err = MOC_Recv(buffer1, buffer_size, MOC_CHAR, rank-1, 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-recv: %s (%i)\n", rank, string, err); + } + err = MOC_Ssend(buffer1, buffer_size, MOC_CHAR, (rank+1) % size, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-send: %s (%i)\n", rank, string, err); + } + } + + + for (iteration = 0; iteration < max_iterations; iteration++) + { + err = MOC_Recv(buffer1, 4, MOC_CHAR, rank-1, 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-recv: %s (%i)\n", rank, string, err); + } + err = MOC_Bsend(buffer1, 4, MOC_CHAR, (rank+1) % size, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-send: %s (%i)\n", rank, string, err); + } + + } + + for (iteration = 0; iteration < max_iterations; iteration++) + { + err = MOC_Recv(buffer1, buffer_size, MOC_CHAR, rank-1, 123, MOC_COMM_WORLD, &status); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-recv: %s (%i)\n", rank, string, err); + } + err = MOC_Bsend(buffer1, buffer_size, MOC_CHAR, (rank+1) % size, 123, MOC_COMM_WORLD); + if (err) + { + MOC_Error_string ( err, string, &stringl ); + printf("%i: ERROR-send: %s (%i)\n", rank, string, err); + } + + } + + + MOC_Finalize(); + + return 0; + } diff --git a/examples/saite_moc/Makefile b/examples/saite_moc/Makefile new file mode 100755 index 0000000..115621b --- /dev/null +++ b/examples/saite_moc/Makefile @@ -0,0 +1,16 @@ + +######################################################################## +# Target +######################################################################## + +DIRS = src/spu src/ppu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/saite_moc/src/ppu/Makefile b/examples/saite_moc/src/ppu/Makefile new file mode 100755 index 0000000..e70fe66 --- /dev/null +++ b/examples/saite_moc/src/ppu/Makefile @@ -0,0 +1,26 @@ +######################################################################## +# Target +######################################################################## + +PROGRAM_ppu64 = ../../simple_saite + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I../../../../include/ppu +LDFLAGS = -L../../../../lib/ppu +IMPORTS = -lmoc_ppu -lspe2 ../spu/simple_saite_spu.a + + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif + diff --git a/examples/saite_moc/src/ppu/simple_saite_ppu.c b/examples/saite_moc/src/ppu/simple_saite_ppu.c new file mode 100755 index 0000000..5967624 --- /dev/null +++ b/examples/saite_moc/src/ppu/simple_saite_ppu.c @@ -0,0 +1,148 @@ +#include +#include +#include +#include + +extern spe_program_handle_t simple_saite_spu; + +#define DELTA_X 1 +#define DELTA_T 1 +#define ITERATIONS 48000 +#define THREAD_COUNT 6 +#define ELEMENT_COUNT 1200*6+2 + +void populate_vector(double* vector) + { + int t; + for (t = 0; t < ELEMENT_COUNT; t++) + vector[t] = 0; + vector[ELEMENT_COUNT / 2 - 2 ]= 0.2; + vector[ELEMENT_COUNT/2-1] = 0.5; + vector[ELEMENT_COUNT/2] = 0.8; + vector[ELEMENT_COUNT/2+1] = 0.5; + vector[ELEMENT_COUNT/2+2] = 0.2; + } + +void process_result(double* vector) + { + + } + +int main() + { + int t, t2, rank, size, rl, mspu, aspu, temp1; + char proc[4]; + MOC_Status moc_status; + double start, ende; + + int thread_count, ept1, ept2; + double saite1[ELEMENT_COUNT] __attribute__((__aligned__(16))); + double saite2[ELEMENT_COUNT] __attribute__((__aligned__(16))); + double saite3[ELEMENT_COUNT] __attribute__((__aligned__(16))); + char param[16] __attribute__((__aligned__(16))); + + if (MOC_Get_max_spu_count(&mspu)) + { + printf("An error occured during MOC_Get_max_spu_count\n"); + return 0; + } + if (MOC_Get_avail_spu_count(&aspu)) + { + printf("An error occured during MOC_Get_avail_spu_count\n"); + return 0; + } + + printf("\nThere are %i of %i SPUs available. nb\n\n", aspu, mspu); + +#if (THREAD_COUNT == 0) + for (t = 0; t < aspu; t++) + MOC_Add_spu_thread ( &simple_saite_spu, NULL ); + thread_count = aspu; +#else + for (t = 0; t < THREAD_COUNT; t++) + MOC_Add_spu_thread(&simple_saite_spu, NULL); + thread_count = THREAD_COUNT; +#endif + + populate_vector(saite1); + populate_vector(saite2); + ept1 = (ELEMENT_COUNT - 2) / thread_count; + if ((ELEMENT_COUNT - 2) % thread_count != 0) + { + ept1++; + ept2 = (ELEMENT_COUNT - 2) - thread_count * ept1; + } + else + ept2 = 0; + + MOC_Init(NULL, NULL); + + MOC_Comm_rank(MOC_COMM_WORLD, &rank); + MOC_Comm_size(MOC_COMM_WORLD, &size); + MOC_Get_processor_name(proc, &rl); + + printf("start\n"); + + start = MOC_Wtime(); + + temp1 = 0; + for (t = 1; t < thread_count + 1; t++) + { + *((int*) (param)) = ITERATIONS; + *((int*) (param + 4)) = DELTA_X; + *((int*) (param + 8)) = DELTA_T; + if (t == thread_count && ept2 != 0) + { + *((int*) (param + 12)) = ept2; + MOC_Send(param, 16, MOC_BYTE, t, 0, MOC_COMM_WORLD); + MOC_Send(saite1 + temp1, ept2 + 2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + MOC_Send(saite2 + temp1, ept2 + 2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + } + else + { + *((int*) (param + 12)) = ept1; + MOC_Send(param, 16, MOC_BYTE, t, 0, MOC_COMM_WORLD); + MOC_Send(saite1 + temp1, ept1 + 2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + MOC_Send(saite2 + temp1, ept1 + 2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + } + temp1 += ept1; + } + + for (t2 = 0; t2 < ITERATIONS; t2++) + { + for (t = 1; t < thread_count + 1; t++) + { + int temp_count; + /** + if (t == thread_count && ept2 != 0) + { + MOC_Send (saite1+temp1, ept2+2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + MOC_Send (saite2+temp1, ept2+2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + } + else + { + MOC_Send (saite1+temp1, ept1+2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + MOC_Send (saite2+temp1, ept1+2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + }**/ + + MOC_Probe(t, 2, MOC_COMM_WORLD, &moc_status); + MOC_Get_count(&moc_status, MOC_DOUBLE, &temp_count); + temp1 = (moc_status.MOC_SOURCE - 1) * ept1; + MOC_Recv(saite3 + temp1, temp_count, MOC_DOUBLE, + moc_status.MOC_SOURCE, 2, MOC_COMM_WORLD, &moc_status); + } + + process_result(saite3); + + MOC_Barrier(MOC_COMM_WORLD); + } + + ende = MOC_Wtime(); + + MOC_Finalize(); + + printf("ende ( %lf s)\n", ende - start); + + return 0; + } + diff --git a/examples/saite_moc/src/spu/Makefile b/examples/saite_moc/src/spu/Makefile new file mode 100755 index 0000000..4520588 --- /dev/null +++ b/examples/saite_moc/src/spu/Makefile @@ -0,0 +1,25 @@ +######################################################################## +# Target +######################################################################## + +PROGRAMS_spu := simple_saite_spu +LIBRARY_embed64 := simple_saite_spu.a + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I../../../../include/spu +LDFLAGS = -L../../../../lib/spu +IMPORTS = -lmoc_spu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/saite_moc/src/spu/simple_saite_spu.c b/examples/saite_moc/src/spu/simple_saite_spu.c new file mode 100755 index 0000000..7fe0247 --- /dev/null +++ b/examples/saite_moc/src/spu/simple_saite_spu.c @@ -0,0 +1,117 @@ +#include +#include +#include +#include + +void simulate(double *vector1, double *vector2, double *vector3, double dx, + double dt, double cq, double delta, int e_count) + { + double temp1, temp2; + int x = 1; + for (x = 1; x < e_count + 1; x++) + { + temp1 = 2* vector2 [x] + vector1[x] * (delta * dt - 1); + temp2 = pow(dt / dx, 2) * cq * (vector2[x + 1] - 2* vector2 [x] + + vector2[x - 1]); + vector3[x] = (temp1 + temp2) / (1 + delta * dt); + } + } + +int main() + { + int t, rank, size, rl, err, errlen; + char proc[4]; + MOC_Status moc_status; + MOC_Request moc_req; + char error_msg[255]; + + double *saite1, *saite2, *saite3, *pdtemp; + double temp_double __attribute__((__aligned__(16))); + char param[16] __attribute__((__aligned__(16))); + int iterations, delta_x, delta_t, e_count; + + MOC_Init(0, 0, NULL); + + MOC_Comm_rank(MOC_COMM_WORLD, &rank); + MOC_Comm_size(MOC_COMM_WORLD, &size); + MOC_Get_processor_name(proc, &rl); + + MOC_Recv(param, 16, MOC_BYTE, 0, 0, MOC_COMM_WORLD, &moc_status); + iterations = *((int*) (param)); + delta_x = *((int*) (param + 4)); + delta_t = *((int*) (param + 8)); + e_count = *((int*) (param + 12)); + saite1 = _malloc_align((e_count + 2) * sizeof(double), 4); + saite2 = _malloc_align((e_count + 2) * sizeof(double), 4); + saite3 = _malloc_align((e_count + 2) * sizeof(double), 4); + + MOC_Recv(saite1, e_count + 2, MOC_DOUBLE, 0, 1, MOC_COMM_WORLD, &moc_status); + MOC_Recv(saite2, e_count + 2, MOC_DOUBLE, 0, 1, MOC_COMM_WORLD, &moc_status); + + for (t = 0; t < iterations; t++) + { + /**err = MOC_Recv (saite1, e_count+2, MOC_DOUBLE, 0, 1, MOC_COMM_WORLD, &moc_status); + if (err) + { + MOC_Error_string (err, error_msg, &errlen); + printf("%i: %s\n", rank, error_msg); + } + err = MOC_Recv (saite2, e_count+2, MOC_DOUBLE, 0, 1, MOC_COMM_WORLD, &moc_status); + if (err) + { + MOC_Error_string (err, error_msg, &errlen); + printf("%i: %s\n", rank, error_msg); + }**/ + + simulate(saite1, saite2, saite3, delta_x, delta_t, 0.9, 0.01, e_count); + + err = MOC_ISend(saite3, e_count + 2, MOC_DOUBLE, 0, 2, MOC_COMM_WORLD, + &moc_req); + + if (err) + { + MOC_Error_string(err, error_msg, &errlen); + printf("%i: %s\n", rank, error_msg); + } + if (rank > 1) + { + temp_double = saite3[1]; + MOC_Send(&temp_double, 1, MOC_DOUBLE, rank - 1, 3, MOC_COMM_WORLD); + } + if (rank < size - 1) + { + temp_double = saite3[e_count]; + MOC_Send(&temp_double, 1, MOC_DOUBLE, rank + 1, 3, MOC_COMM_WORLD); + } + if (rank > 1) + { + MOC_Recv(&temp_double, 1, MOC_DOUBLE, rank - 1, 3, MOC_COMM_WORLD, + &moc_status); + saite3[0] = temp_double; + } + if (rank < size - 1) + { + MOC_Recv(&temp_double, 1, MOC_DOUBLE, rank + 1, 3, MOC_COMM_WORLD, + &moc_status); + saite3[e_count + 1] = temp_double; + } + + err = MOC_Wait(&moc_req, &moc_status); + if (err) + { + MOC_Error_string(err, error_msg, &errlen); + printf("%i: %s\n", rank, error_msg); + } + MOC_Barrier(MOC_COMM_WORLD); + + pdtemp = saite1; + saite1 = saite2; + saite2 = saite3; + saite3 = pdtemp; + + } + + MOC_Finalize(); + + return 0; + } diff --git a/examples/saite_moc_dma/Makefile b/examples/saite_moc_dma/Makefile new file mode 100755 index 0000000..115621b --- /dev/null +++ b/examples/saite_moc_dma/Makefile @@ -0,0 +1,16 @@ + +######################################################################## +# Target +######################################################################## + +DIRS = src/spu src/ppu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/saite_moc_dma/src/ppu/Makefile b/examples/saite_moc_dma/src/ppu/Makefile new file mode 100755 index 0000000..b25aa0c --- /dev/null +++ b/examples/saite_moc_dma/src/ppu/Makefile @@ -0,0 +1,26 @@ +######################################################################## +# Target +######################################################################## + +PROGRAM_ppu64 = ../../simple_saite2 + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I../../../../include/ppu +LDFLAGS = -L../../../../lib/ppu +IMPORTS = -lmoc_ppu -lspe2 ../spu/simple_saite_spu.a + + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif + diff --git a/examples/saite_moc_dma/src/ppu/simple_saite_ppu.c b/examples/saite_moc_dma/src/ppu/simple_saite_ppu.c new file mode 100755 index 0000000..c84bb5f --- /dev/null +++ b/examples/saite_moc_dma/src/ppu/simple_saite_ppu.c @@ -0,0 +1,150 @@ +#include +#include +#include +#include + +extern spe_program_handle_t simple_saite_spu; + +#define DELTA_X 1 +#define DELTA_T 1 +#define ITERATIONS 48000 +#define THREAD_COUNT 6 +#define ELEMENT_COUNT 1200*6+2 + +void populate_vector(double* vector) + { + int t; + for (t = 0; t < ELEMENT_COUNT; t++) + vector[t] = 0; + vector[ELEMENT_COUNT / 2 - 2 ]= 0.2; + vector[ELEMENT_COUNT/2-1] = 0.5; + vector[ELEMENT_COUNT/2] = 0.8; + vector[ELEMENT_COUNT/2+1] = 0.5; + vector[ELEMENT_COUNT/2+2] = 0.2; + } + +void process_result(double* vector) + { + + } + +int main() + { + int t, t2, rank, size, rl, mspu, aspu, temp1; + char proc[4]; + MOC_Status moc_status; + double start, ende; + uint64_t test; + + int thread_count, ept1, ept2; + double saite1[ELEMENT_COUNT] __attribute__((__aligned__(16))); + double saite2[ELEMENT_COUNT] __attribute__((__aligned__(16))); + double saite3[ELEMENT_COUNT] __attribute__((__aligned__(16))); + char param[16] __attribute__((__aligned__(16))); + + if (MOC_Get_max_spu_count(&mspu)) + { + printf("An error occured during MOC_Get_max_spu_count\n"); + return 0; + } + if (MOC_Get_avail_spu_count(&aspu)) + { + printf("An error occured during MOC_Get_avail_spu_count\n"); + return 0; + } + + printf("\nThere are %i of %i SPUs available.\n\n", aspu, mspu); + +#if (THREAD_COUNT == 0) + for (t = 0; t < aspu; t++) + MOC_Add_spu_thread ( &simple_saite_spu, NULL ); + thread_count = aspu; +#else + for (t = 0; t < THREAD_COUNT; t++) + MOC_Add_spu_thread(&simple_saite_spu, NULL); + thread_count = THREAD_COUNT; +#endif + + populate_vector(saite1); + populate_vector(saite2); + thread_count = aspu; + ept1 = (ELEMENT_COUNT - 2) / thread_count; + if ((ELEMENT_COUNT - 2) % thread_count != 0) + { + ept1++; + ept2 = (ELEMENT_COUNT - 2) - thread_count * ept1; + } + else + ept2 = 0; + + MOC_Init(NULL, NULL); + + MOC_Comm_rank(MOC_COMM_WORLD, &rank); + MOC_Comm_size(MOC_COMM_WORLD, &size); + MOC_Get_processor_name(proc, &rl); + + printf("start\n"); + + start = MOC_Wtime(); + + temp1 = 0; + for (t = 1; t < thread_count + 1; t++) + { + *((int*) (param)) = ITERATIONS; + *((int*) (param + 4)) = DELTA_X; + *((int*) (param + 8)) = DELTA_T; + if (t == thread_count && ept2 != 0) + { + *((int*) (param + 12)) = ept2; + test = (uint64_t) saite3; + MOC_Send(&test, 8, MOC_BYTE, t, 0, MOC_COMM_WORLD); + test = (uint64_t) saite1; + MOC_Send(&test, 8, MOC_BYTE, t, 0, MOC_COMM_WORLD); + test = (uint64_t) saite2; + MOC_Send(&test, 8, MOC_BYTE, t, 0, MOC_COMM_WORLD); + MOC_Send(param, 16, MOC_BYTE, t, 0, MOC_COMM_WORLD); + MOC_Send(saite1 + temp1, ept2 + 2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + MOC_Send(saite2 + temp1, ept2 + 2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + } + else + { + *((int*) (param + 12)) = ept1; + test = (uint64_t) saite3; + MOC_Send(&test, 8, MOC_BYTE, t, 0, MOC_COMM_WORLD); + test = (uint64_t) saite1; + MOC_Send(&test, 8, MOC_BYTE, t, 0, MOC_COMM_WORLD); + test = (uint64_t) saite2; + MOC_Send(&test, 8, MOC_BYTE, t, 0, MOC_COMM_WORLD); + MOC_Send(param, 16, MOC_BYTE, t, 0, MOC_COMM_WORLD); + MOC_Send(saite1 + temp1, ept1 + 2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + MOC_Send(saite2 + temp1, ept1 + 2, MOC_DOUBLE, t, 1, MOC_COMM_WORLD); + } + temp1 += ept1; + } + + for (t2 = 0; t2 < ITERATIONS; t2++) + { + //MOC_Barrier(MOC_COMM_WORLD); + /**for (t = 1; t < thread_count+1; t++) + { + int temp_count; + MOC_Probe (t, 2, MOC_COMM_WORLD, &moc_status); + MOC_Get_count (&moc_status, MOC_DOUBLE, &temp_count); + temp1 = (moc_status.MOC_SOURCE-1)*ept1; + MOC_Recv (saite3+temp1, temp_count, MOC_DOUBLE, moc_status.MOC_SOURCE, + 2, MOC_COMM_WORLD, &moc_status); + }**/ + + MOC_Barrier(MOC_COMM_WORLD); + process_result(saite3); + } + + ende = MOC_Wtime(); + + MOC_Finalize(); + + printf("ende ( %lf s)\n", ende - start); + + return 0; + } + diff --git a/examples/saite_moc_dma/src/spu/Makefile b/examples/saite_moc_dma/src/spu/Makefile new file mode 100755 index 0000000..4520588 --- /dev/null +++ b/examples/saite_moc_dma/src/spu/Makefile @@ -0,0 +1,25 @@ +######################################################################## +# Target +######################################################################## + +PROGRAMS_spu := simple_saite_spu +LIBRARY_embed64 := simple_saite_spu.a + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I../../../../include/spu +LDFLAGS = -L../../../../lib/spu +IMPORTS = -lmoc_spu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/saite_moc_dma/src/spu/simple_saite_spu.c b/examples/saite_moc_dma/src/spu/simple_saite_spu.c new file mode 100755 index 0000000..ff53fb4 --- /dev/null +++ b/examples/saite_moc_dma/src/spu/simple_saite_spu.c @@ -0,0 +1,132 @@ +#include +#include +#include +#include + +void simulate(double *vector1, double *vector2, double *vector3, double dx, + double dt, double cq, double delta, int e_count) + { + double temp1, temp2; + int x = 1; + for (x = 1; x < e_count + 1; x++) + { + temp1 = 2* vector2 [x] + vector1[x] * (delta * dt - 1); + temp2 = pow(dt / dx, 2) * cq * (vector2[x + 1] - 2* vector2 [x] + + vector2[x - 1]); + vector3[x] = (temp1 + temp2) / (1 + delta * dt); + } + } + +int main() + { + int t, rank, size, rl, err, errlen; + char proc[4]; + MOC_Status moc_status; + MOC_Request moc_req; + char error_msg[255]; + + double *saite1, *saite2, *saite3, *pdtemp; + double temp_double __attribute__((__aligned__(16))); + char param[16] __attribute__((__aligned__(16))); + int iterations, delta_x, delta_t, e_count; + uint64_t ea_saite1 __attribute__((__aligned__(16))); + uint64_t ea_saite2 __attribute__((__aligned__(16))); + uint64_t ea_saite3 __attribute__((__aligned__(16))); + + MOC_Init(0, 0, NULL); + + MOC_Comm_rank(MOC_COMM_WORLD, &rank); + MOC_Comm_size(MOC_COMM_WORLD, &size); + MOC_Get_processor_name(proc, &rl); + + err = MOC_Recv(&ea_saite3, 8, MOC_BYTE, 0, 0, MOC_COMM_WORLD, &moc_status); + err = MOC_Recv(&ea_saite1, 8, MOC_BYTE, 0, 0, MOC_COMM_WORLD, &moc_status); + err = MOC_Recv(&ea_saite2, 8, MOC_BYTE, 0, 0, MOC_COMM_WORLD, &moc_status); + if (err) + { + MOC_Error_string(err, error_msg, &errlen); + printf("%i: %s\n", rank, error_msg); + } + err = MOC_Recv(param, 16, MOC_BYTE, 0, 0, MOC_COMM_WORLD, &moc_status); + if (err) + { + MOC_Error_string(err, error_msg, &errlen); + printf("%i: %s\n", rank, error_msg); + } + iterations = *((int*) (param)); + delta_x = *((int*) (param + 4)); + delta_t = *((int*) (param + 8)); + e_count = *((int*) (param + 12)); + saite1 = _malloc_align((e_count + 2) * sizeof(double), 4); + saite2 = _malloc_align((e_count + 2) * sizeof(double), 4); + saite3 = _malloc_align((e_count + 2) * sizeof(double), 4); + MOC_Recv(saite1, e_count + 2, MOC_DOUBLE, 0, 1, MOC_COMM_WORLD, &moc_status); + MOC_Recv(saite2, e_count + 2, MOC_DOUBLE, 0, 1, MOC_COMM_WORLD, &moc_status); + + for (t = 0; t < iterations; t++) + { + //MOC_Barrier(MOC_COMM_WORLD); + /**err = MOC_Get_data (saite1, ea_saite1, e_count+2, MOC_DOUBLE); + if (err) + { + MOC_Error_string (err, error_msg, &errlen); + printf("%i: %s\n", rank, error_msg); + } + err = MOC_Get_data (saite2, ea_saite2, e_count+2, MOC_DOUBLE); + if (err) + { + MOC_Error_string (err, error_msg, &errlen); + printf("%i: %s\n", rank, error_msg); + }**/ + + simulate(saite1, saite2, saite3, delta_x, delta_t, 0.9, 0.01, e_count); + + err = MOC_IPut_data(saite3, ea_saite3, e_count + 2, MOC_DOUBLE, + &moc_req); + if (err) + { + MOC_Error_string(err, error_msg, &errlen); + printf("%i: %s\n", rank, error_msg); + } + if (rank > 1) + { + temp_double = saite3[1]; + MOC_Send(&temp_double, 1, MOC_DOUBLE, rank - 1, 3, MOC_COMM_WORLD); + } + if (rank < size - 1) + { + temp_double = saite3[e_count]; + MOC_Send(&temp_double, 1, MOC_DOUBLE, rank + 1, 3, MOC_COMM_WORLD); + } + if (rank > 1) + { + MOC_Recv(&temp_double, 1, MOC_DOUBLE, rank - 1, 3, MOC_COMM_WORLD, + &moc_status); + saite3[0] = temp_double; + } + if (rank < size - 1) + { + MOC_Recv(&temp_double, 1, MOC_DOUBLE, rank + 1, 3, MOC_COMM_WORLD, + &moc_status); + saite3[e_count + 1] = temp_double; + } + + err = MOC_Wait(&moc_req, &moc_status); + if (err) + { + MOC_Error_string(err, error_msg, &errlen); + printf("%i: %s\n", rank, error_msg); + } + MOC_Barrier(MOC_COMM_WORLD); + + pdtemp = saite1; + saite1 = saite2; + saite2 = saite3; + saite3 = pdtemp; + + } + + MOC_Finalize(); + + return 0; + } diff --git a/examples/simple_init/Makefile b/examples/simple_init/Makefile new file mode 100755 index 0000000..a5a4a2a --- /dev/null +++ b/examples/simple_init/Makefile @@ -0,0 +1,15 @@ +######################################################################## +# Target +######################################################################## + +DIRS = src/spu src/ppu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif \ No newline at end of file diff --git a/examples/simple_init/src/ppu/Makefile b/examples/simple_init/src/ppu/Makefile new file mode 100755 index 0000000..ed8f962 --- /dev/null +++ b/examples/simple_init/src/ppu/Makefile @@ -0,0 +1,25 @@ +######################################################################## +# Target +######################################################################## + +PROGRAM_ppu64 = ../../simple_init + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I../../../../include/ppu +LDFLAGS = -L../../../../lib/ppu +IMPORTS = -lmoc_ppu -lspe2 ../spu/simple_init_spu.a + + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/simple_init/src/ppu/simple_init_ppu.c b/examples/simple_init/src/ppu/simple_init_ppu.c new file mode 100755 index 0000000..7bcfbfe --- /dev/null +++ b/examples/simple_init/src/ppu/simple_init_ppu.c @@ -0,0 +1,64 @@ +#include +#include +#include +#include + + + +extern spe_program_handle_t simple_init_spu; + + + +int main() + { + int t, rank, size, rl, mspu, aspu; + char proc[4]; + + if (MOC_Get_max_spu_count(&mspu)) + { + printf("An error occured during MOC_Get_max_spu_count\n"); + return 0; + } + if (MOC_Get_avail_spu_count(&aspu)) + { + printf("An error occured during MOC_Get_avail_spu_count\n"); + return 0; + } + + printf("\nThere are %i of %i SPUs available.\n\n", aspu, mspu); + + for (t = 1; t <= aspu; t++) + { + uint32_t res = MOC_Add_spu_thread ( &simple_init_spu, NULL ); + switch (res) + { + case MOC_SUCCESS: + printf("Add SPU-thread %i: Success\n", t); + break; + case MOC_ERR_BUFFER_OVERFLOW: + printf("Add SPU-thread %i: Exceeded MOC_SPU_THREAD_MAX\n", t); + break; + case MOC_ERR_INTERN: + printf("Add SPU-thread %i: Internal error\n", t); + break; + default: + printf("Add SPU-thread %i: Unknown error\n", t); + break; + } + } + + printf("\n"); + + MOC_Init(NULL, NULL); + + MOC_Comm_rank(MOC_COMM_WORLD, &rank); + MOC_Comm_size(MOC_COMM_WORLD, &size); + MOC_Get_processor_name( proc, &rl); + + printf("Process %i from %i running on %s: Hello World!\n ", rank, size, proc); + + MOC_Finalize(); + + return 0; + } + diff --git a/examples/simple_init/src/spu/Makefile b/examples/simple_init/src/spu/Makefile new file mode 100755 index 0000000..0edb665 --- /dev/null +++ b/examples/simple_init/src/spu/Makefile @@ -0,0 +1,25 @@ +######################################################################## +# Target +######################################################################## + +PROGRAMS_spu := simple_init_spu +LIBRARY_embed64 := simple_init_spu.a + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I../../../../include/spu +LDFLAGS = -L../../../../lib/spu +IMPORTS = -lmoc_spu + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/examples/simple_init/src/spu/simple_init_spu.c b/examples/simple_init/src/spu/simple_init_spu.c new file mode 100755 index 0000000..205f84f --- /dev/null +++ b/examples/simple_init/src/spu/simple_init_spu.c @@ -0,0 +1,23 @@ + +#include +#include + + + +int main() + { + int rank, size, rl; + char proc[4]; + + MOC_Init( 0, 0, NULL); + + MOC_Comm_rank(MOC_COMM_WORLD, &rank); + MOC_Comm_size(MOC_COMM_WORLD, &size); + MOC_Get_processor_name( proc, &rl); + + printf("Process %i from %i running on %s: Hello World!\n ", rank, size, proc); + + MOC_Finalize(); + + return 0; + } diff --git a/include/doxygen_main.doxygen b/include/doxygen_main.doxygen new file mode 100755 index 0000000..a4ffcbc --- /dev/null +++ b/include/doxygen_main.doxygen @@ -0,0 +1,244 @@ +#ifndef MOC_DOXYGEN_MAIN_H_ +#define MOC_DOXYGEN_MAIN_H_ + +/** + * \mainpage MPI On Cell + * + * The idea of this project is to implement a message passing + * library for work on the Cell BE. The main idea behind such + * an implementation would be to help the programmer by adding + * an layer of abstraction between the very low level libraries + * by IBM and give him the possibility to work with an interface + * he is more familiar with. To achieve this we decided to try + * to keep very closely to the standard provided by the Message + * Passing Interface (MPI), so that programmers knowing how to + * write MPI programmers can easily work with our library. + * Because of the very special nature of the Cell, it might not + * be possible to keep 100% true to the standard, but we try to + * introduce changes only when absolutely necessary and of great + * benefit, because of some specialties of the Cell's hardware. + * + * + * \par Table of Content + * \par + * \ref end_user + * \par + * \subpage restrictions + * \par + * \subpage violations + * \par + * \subpage performance + * \par + * \subpage conclusion + * \if full + * \par + * \par + * \ref internal_main + * \endif + **/ + + +/** + * \defgroup end_user End-User Documentation + * + * This section describes the public API provided by the MOC-library. + * + * If some things remain unclear, consult the official MPI-standard (Version 1.3). + * + * This library uses Direct Memory Access (DMA) provided by the Cell Broadband Engine. + * So the use of other DMA operations than provided of this library is discouraged, + * because it may interfere with this library. One exceptions are signals. + * We don't use signals at all at the moment, so one can savely use signal. + **/ + + +/** + * \defgroup environment_main Environmental Management + * \ingroup end_user + * + * This chapter discusses routines for getting and, where appropriate, setting various parameters + * that relate to the MPI implementation and the execution environment (such as error handling, + * startup&shutdown and Time). + **/ +/** + * \defgroup environment_startup Startup & Shutdown + * \ingroup environment_main + * + * Functions to start and terminate the MOC-execution environment. + * + * To be able to communicate with other processes every MOC-process needs to setup his + * MOC-Environment before any MOC-function can be called (there are some exceptions though). + * + * The PPU-process has a special role, because he is the one who starts the SPU-processes. + * SPU-processes can be added to the MOC-environment by calling \ref MOC_Add_spu_thread with + * the appropriate SPU-thread-handle (This implementation only supports the embedded binary + * concept where the SPU-binary is embedded into the PPU-binary and accessed via a handle). + * The order of calling determines the rank of the SPU-processes. To get the number of total + * and available SPUs the functions \ref MOC_Get_avail_spu_count and \ref MOC_Get_max_spu_count + * can be used. + * + * The buffer-size and the size of the message-queues can be set before calling \ref MOC_Init + * on the PPU using \ref MOC_Set_buffer_size and \ref MOC_Set_queue_size. + * + * MOC_Init only returns after all processes have called this function and have set up their + * environment. + * + * If the MOC-environment isn't needed anymore, \ref MOC_Finalize should be called by all + * MOC-processes. MOC_Finalize only returns after all MOC-processes have called this functions + * and have shutdown their environments. + **/ +/** + * \defgroup environment_information Implementation Information + * \ingroup environment_main + **/ +/** + * \defgroup environment_error Error-Handling + * \ingroup environment_main + **/ +/** + * \defgroup environment_timer Timers and Synchronization + * \ingroup environment_main + **/ + +/** + * \defgroup p2p_main Point-to-Point Communication + * \ingroup end_user + * + * Sending and receiving of messages by processes is the basic MPI communication mechanism. + * The basic point-to-point communication operations are send and receive. + * + * \ref MOC_Send uses either buffered or synchronous send depending on the message-size + * (Short messages are transmitted using buffered send and long messages are transmitted using + * synchronous send). + * + * \ref MOC_Recv receives all messages irrespective wether buffered or synchronous + * communication is used. + * + * \note Because there are separate message-queues for each remote process and no distinct + * global ordering of messages, there may be some situation where a message from a + * process may never be received. This may occur when MOC_Recv, MOC_Probe and MOC_IProbe + * are used with MOC_ANY_SOURCE, because then there is the possibility that new messages + * are received before a specific message from a process with a higher rank than the other + * senders. This may also occur with lower possibility when using MOC_ANY_TAG between + * messages from the same sender but with other tags. + * + **/ +/** + * \defgroup p2p_status Return Status + * \ingroup p2p_main + **/ +/** + * \defgroup p2p_datatype Datatypes + * \ingroup p2p_main + **/ +/** + * \defgroup p2p_synch Synchronous Communication + * \ingroup p2p_main + * + * Direct blocking sending of messages without any intermediate buffer. + * + * The blocking synchronous send-operation returns only when the receiver has completely + * received the message. + **/ +/** + * \defgroup p2p_buffered Buffered Communication + * \ingroup p2p_main + * + * Blocking sending of messages with the use of an intermediate buffer. + * + * The blocking buffered send-operation returns if the send-buffer can be safely reused + * (after the data has been copied into the intermediate buffer). + **/ +/** + * \defgroup p2p_sendrecv Send-Receive + * \ingroup p2p_main + * + * The send-receive operations combine in one call the sending of a message + * to one destination and the receiving of another message, from another process. + * + * A message sent by a send-receive operation can be received by a regular receive + * operation or probed by a probe operation; a send-receive operation can receive + * a message sent by a regular send operation. + **/ +/** + * \defgroup p2p_imm Non-Blocking Communication + * \ingroup p2p_main + * + * Non-blocking sending and receiving messages. + * + * Because of restrictions of the Cell Broadband Engine non-blocking communication can + * only be provided with a lot of limitations. In fact the only operation where + * non-blocking communication make sense is synchronous send. + * + * \ref MOC_ISend uses blocking buffered send or non-blocking synchronous send according to + * the message size. + * + * \note Every non-blocking communication operation has to be finished using \ref MOC_Test + * or \ref MOC_Wait, otherwise resources are no freed and some data are not copied correctly. + **/ + + +/** + * \defgroup broadcast Collective Communication + * \ingroup end_user + * + * Communication that involves a group of processes. + * + * A collective operation is normally executed by having all processes in the group call + * the communication routine, with matching arguments. Since there are no means for creating + * groups currently implemented, the only available groups are MOC_COMM_WORLD and + * MOC_COMM_SELF. + **/ + + +/** + * \defgroup dma_access Direct Memory Access + * \ingroup end_user + * + * Functions which use DMA to transfer Data. + * + * The operations defined in this section provide simple means to use Direct Memory + * Access (DMA). + * + * The MPI-standard assumes a distributed memory architecture, where + * active participation of the sending and the receiving processes is required. But + * the Cell Broadband Engine is a distributed shared memory architecture which provides + * a common address space and DMA-Operations enabling processes to write data directly + * into the memory of an remote process without active participation of the receiving + * process. + * DMA is faster than Send-Receive but more complicated to handle, and so there are some + * functions provided to enable the advantages of DMA and to hide as much complexity as + * possible. So the user doesn't have to care about the upper-limit of an DMA-transfer + * and in get-operations the data-size doesn't have to be a multiple of 16-byte. However + * the data-address should be at least 16-byte aligned and in put-operations the data-size + * has to be a multiple of 16-byte. + * + * There are two kind of addresses. Local-store addresses are used on the SPUs and are only + * valid in context of a specific SPU. Effective addresses define a common address-space and + * are used on the PPU. Functions to translate between those address types are provided. + * + * DMA-operations can be blocking or non-blocking. The status of non-blocking DMA-calls can + * be requested by using \ref MOC_Test and \ref MOC_Wait. + * + * \note Every non-blocking DMA operation has to be finished using \ref MOC_Test + * or \ref MOC_Wait, otherwise resources are no freed and some data are not copied correctly. + **/ + +/** + * \defgroup comm_main Groups, Context and Communicators + * \ingroup end_user + * + * The MOC communicator specifies a group of processes inside which + * a communication occurs. + * Initially there is a single communicator, MPI_COMM_WORLD, which + * contains all of the processes involved in the computation. + **/ +/** + * \defgroup comm_mgt Communicator Management + * \ingroup comm_main + **/ + + + + +#endif /*MOC_DOXYGEN_MAIN_H_*/ diff --git a/include/doxygen_pages.doxygen b/include/doxygen_pages.doxygen new file mode 100755 index 0000000..61998a8 --- /dev/null +++ b/include/doxygen_pages.doxygen @@ -0,0 +1,204 @@ + + +/** + * \page restrictions Restrictions of the Cell-Architecture + * + * \par + * \section res_arch CBE Architecture + * + * There are some restriction caused by the CBE architecture. Programming a SPU can be + * compared to programming a microcontroller: + * \li \b Small \b local-store \b of \b SPUs: Only 256 KByte of local-store are available + * on a SPU which is moreover shared by data and instructions. Because of this a economic + * stewardship of available resources is needed. + * \li \b No \b underlying \b OS: The operation system is running on the PPU, but not on + * the SPUs. Although the OS also manages the SPUs, there are some things which + * are missing or have to be done in a very performance decreasing and complex way. + * E.g. there is no support for several threads on one SPU (unless you program it yourself) + * and most of the system-calls are delegated to the PPU. + * \li \b Limited \b I/O-Capabilities: File-operations are only possible on the PPU. So if you + * want to store data of an SPU into a file, you have to send it to the PPU who then stores + * the data into a file. Main-memory is managed by the PPU and the SPUs can only read + * from or write into the main-memory. Allocation of main-memory has to be done by the PPU. + * + * + * \par + * \section res_alignment Memory-Alignment + * + * All Buffers used in send- or receive-functions have to be aligned at a 16-byte boundary + * (for better performance a 128-byte alignment is recommended). This restriction cannot be + * circumvented. + * + * + * \par + * \section res_size Transfer-Size + * + * DMA-calls only transfer data in chunks of 16 bytes. Send-receive operations and + * DMA-get-operations provided by this library hide this restriction by the use of intermediate + * buffers. But you should keep this restriction in mind because to gain maximum performance + * the size of data to be transfered should be a multiple of 16 bytes. + * + * + * + **/ + + +/** + * \page violations Violations of the MPI-Standard + * + * \par + * \section viol_prefix Prefix of functions: + * + * 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. + * + * + * \par + * \section viol_startup Application Startup + * + * 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 \ref MOC_Add_spu_thread) during runtime before calling MOC_Init. + * + * + * \par + * \section viol_queue Order of received messages: + * + * 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. + * + * + * \par + * \section viol_tag Number of usable message-tag + * + * 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. + * + * + * \par + * \section viol_nr_pending Number of simultaneous pending send-receive operations + * + * 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 \ref 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. + * + * \par + * \section viol_init MPI_Init: + * + * The parameters of the init-function for the SPU does not match the parameters + * defined by the MPI-standard (see \ref moc_init_spu "MOC_Init (SPU)") + * + * + **/ + + +/** + * \page performance Performance Measurements + * + * The measurements were taken on a Playstation 3 running Yellow Dog Linux release 6.0 + * using Cell SDK 3.1. To measure send-receive operations ping-pongs were used and to + * measure DMA-calls the time till the used DMA-tag is marked to have no pending calls + * is used. The stated latencies in the pictures above are one-way latencies. + * + * \section perf_send_recv Send-Receive performance + * + * The following two figures show latency and bandwidth achieved by our implementation. + * The theoretical maximum bandwidth is 25 GByte/s and synchronous send between SPUs is + * at a close range to this limit if the data-size is large enough. There is also a big + * difference between SPU-SPU and SPU-PPU operations. The reason for this is the fact that + * the PPU cannot handle DMA-operations itself but only remote-control the SPU's + * Memory Flow Controller. And as you will see later the main-memory performance of the PPU + * is much lower than that of the SPUs. Because we use ping-pongs there is no way to + * determine differences in sending from or to the PPU, but other measurements indicate + * such differences. + * + * \image html latency-kb.png + * + * \image html bandwidth-kb.png + * + * The following figure shows the latency of send-receive operations at a lower scale than + * the first figure. If you look at the latency of synchronous send operations then you can + * see that there is a big start-up latency and only a very small data-size dependend latency. + * So there's only a very small time-difference between sending 10 byte and 1 Kbyte, but there + * is naturally a difference in throughput. + * + * \image html latency-b.png + * + * \section perf_moc_vs_dma Send-Recv vs. DMA performance + * + * The following two figures demonstrate the difference in performance of send-recv operations + * and DMA-calls. The performance of DMA-calls reaches it's peak much earlier than send-recv + * and the peak-value is higher than that of send-recv even though the difference is not much. + * So DMA is a lot faster than send-recv especially for small messages, but for big messages + * the difference is much lower. It seems that it is always better to use DMA, but keep in mind + * that in practical applications calculation time easily exceeds communication time. + * + * \image html dma-vs-moc-lat.png + * + * \image html dma-vs-moc-bw.png + * + * \section perf_spu_vs_ppu SPU- vs PPU-initiated transfer + * + * The following figure shows the difference between SPU- and PPU-initiated DMA-calls. + * As you can see the highest performance can be achieved by using SPU-SPU DMA-calls. There + * is also hardly any difference between put and get operations. DMA-operations between SPU and + * main-memory achieves lower performance and there is a difference between put and get + * operations. PPU to SPU DMA calls have the lowest performance with small transfer sizes, but + * if the transfer-size is big enough they are faster than SPU-main-memory transfers. + * The lowest performance has a memcopy on the PPU, which also explains the bad performance of + * buffered send between SPU and PPU. + * + * \image html spu-ppu-dma-bw-kb.png + * + * \section perf_mem DMA vs. memcpy + * + * The official Cell documentation states that it is also possible to use + * memcpy to transfer data from the PPU to a SPU. However one should use + * DMA, because it is always faster. + * If you look at the following figure, this is not always true. If the + * data-size is small enough memcpy is faster. + * + * \image html ppu-transfer-bw-b.png + * + **/ + + + +/** + * \page conclusion Summary & Conclusions + * + * \details MPI wasn't designed for the Cell Broadband Engine. A common MPI-node has one or more + * normal CPUs and several GBytes of RAM. The Cell Broadband Engine features a normal CPU + * (the PPU) and several special processing units with only a very limited amount + * of memory. The SPUs support only one thread per SPU and a complex handling of system-calls + * is needed. Because of this there are several restrictions in implementing MPI on the Cell + * Broadband Engine. + * + * Nevertheless MPI on Cell makes sense. It greatly simlifies programming on the Cell Broadband + * Engine, features a public API which is well known and widely used and message passing operations + * are generally easier to use than DMA (DMA needs memory-addresses and explicit synchronization, + * whereas MPI only needs the ranks of participating processes and features implicit + * synchronization). + * + * But message parsing operations cannot replace DMA. Both methods of communication have their + * advantages and disadvantages and they complement one another. So this library additionally + * features some easy to use DMA operations, if someone wants to gain maximum performance. Using + * DMA alltogether with send-recv especially speeds up application with a lot of communication + * going on between SPUs and PPU. + **/ + diff --git a/include/internal/doxygen_internal_main.doxygen b/include/internal/doxygen_internal_main.doxygen new file mode 100755 index 0000000..84ad65f --- /dev/null +++ b/include/internal/doxygen_internal_main.doxygen @@ -0,0 +1,218 @@ +#ifndef MOC_INTERNAL_DOXYGEN_MAIN_H_ +#define MOC_INTERNAL_DOXYGEN_MAIN_H_ + + + +/** + * \defgroup internal_main Developer Documentation + * + * This section deals with the internal design and functionality. For correct + * understanding knowledge about the functionality of the Cell Broadband Engine + * is needed. So you should read the official CBE documentation before you + * continue. + * + * \note Because we had only access to a playstation, we cannot guarantee correct + * execution on another CBE-machine than a playstation 3. + **/ +/** + * \defgroup internal_core Implementation-Core + * \ingroup internal_main + **/ +/** + * \defgroup internal_am Address-Macros + * \ingroup internal_core + * + * Predefined Macros for calculating Addresses of Message-Queue and Status-Array. + **/ +/** + * \defgroup internal_tm Test-Macros + * \ingroup internal_core + * + * Predefined Macros for testing the validity of parameters. + **/ +/** + * \defgroup internal_env Environmental Management + * \ingroup internal_main + * + * Internals about Startup & Shutdown and Error-Handling + **/ +/** + * \defgroup internal_init Startup & Shutdown + * \ingroup internal_env + * + * Internals about the startup of the execution-environment and + * SPU-Thread-Management. + * + * \section iinit_start Startup + * + * The PPU-Process creates for every SPU-thread an own thread using the + * pthread-library (see \ref internal_spu_thread). The rank of each prozess, + * the overall process count, the sizes of message-queue and buffer-space + * and the effective base address of the buffer is send to each SPU-thread via + * mailbox-messages. The SPU-threads then send the memory-addresses of their + * message-queues and status-arrays back to the PPU-process which writes this + * data into the prozess-list. After all SPU-Threads have reported back to the + * PPU-process the effective address of the PPU's process-list ist distributed + * among the SPU-processes which then copy the process-list via DMA in their + * local storages. + * + * \section iinit_shut Shutdown + * + * \subsection iinit_shut_ppu PPU + * + * The PPU-process waits till all SPU-threads have signalled that they are also + * executing the finalize-function. After that a signal is send back to each + * SPU-Thread that they can now stop execution. Then local ressources are freed + * and the finalize-function returns. + * + * \subsection iinit_shut_spu SPU + * + * A mailbox-message is send to the PPU to signal that the SPU-process is now + * executing the finalize-function. After that the SPU-process is waiting till + * a mailbox-message from the PPU-process is received. Then local ressources are + * freed and the finalize-function returns. + * + **/ +/** + * \defgroup internal_spu_thread SPU-Thread Management + * \ingroup internal_init + * + * This section deals about the creation and management of SPU-threads. + **/ + /** + * \defgroup internal_error Error-Handling + * \ingroup internal_env + **/ + /** + * \defgroup internal_timer Timers and Synchronization + * \ingroup internal_env + * + * Internals about Time. + * + * On the PPU "gettimeofday()" from time.h is used, because it is the only function + * which seems to work ("clock()" from time.h always returns 0). + * + * On the SPU there are two implementations. One uses also "gettimeofday()" and the + * other uses the spu-timer-library. The reason for this lies in the fact, that the + * spu-timer-library was marked as prototype in Cell SDK 3.0 and the future development + * of this library was uncertain. Cell SDK 3.1 has integrated the spu-timer-library in + * the main-library and so the gettimeofday-implementation is now obsolete. + * + * \note The timebase-constant which is needed to calculate time is hardcoded, because + * there was no according function for retrieving this value in Cell SDK 3.0 and we had + * only access to a playstation 3. Now Cell SDK 3.1 provides a function for retrieving + * the timebase value, but we didn't use it to provide backwards-compatibility. So if + * you plan to use MOC on another platform than playstation 3 keep in mind to check if + * the timebase-value is correct. + * + **/ + + /** + * \defgroup internal_comm Groups, Context and Communicators + * \ingroup internal_main + * + * At the moment user-defined groups and communicators are not implemented and maybe never + * will be. + * At the moment user-defined groups and communicators are not implemented and maybe never + * will be. Nevertheless user-defined groups and communicators have been taken into + * consideration while making the software-design (e.g. reserved field for communicator + * in message-envelope). So it should be not too hard to implement groups and communicators. + * However a lot of things concerning communicators are hardcoded (e.g. parameter checks). + * + * To save memory only one byte is used to encode the communicator. So if one + * day user-defined communicators are implemented there are only 256 possible + * communicators. + **/ + + +/** + * \defgroup internal_p2p_main Point-to-Point Communication + * \ingroup internal_main + * + * Internals about Point-to-Point Communication. + **/ +/** + * \defgroup internal_p2p_dma DMA-Helper Functions + * \ingroup internal_p2p_main + * + * Functions wrapping DMA-Transfers. + * + * The Cell Broadband Engine uses Direct Memory Access (DMA) for communication. Therefore + * data of a MOC-message is transfered using DMA operations. Because programming DMA is + * rather complex, some functions are provided to hide this complexity. One DMA-call can + * only tranfer a maximum of 16KByte of data and the data-size has to be a multiple of + * 16 byte. The provided functions split the data into multiple DMA-calls if needed. If + * the data-size requires it, an intermediate buffer is used into which a separate + * DMA-Call transfers 16 byte containing the piece of data not fitting into the 16-byte + * scheme. Then only the needed bytes are copied into the receive-buffer. But the latter + * only works for a get-operation. + * + * The internal DMA-functions are also made publicly available via wrapping-function + * (see chapter \ref dma_access) which provide parameter checks. + **/ +/** + * \defgroup internal_p2p_blocking Blocking Communication + * \ingroup internal_p2p_main + * + * Internals about blocking Point-to-Point Communication. + **/ +/** + * \defgroup internal_p2p_synch Synchronous Communication + * \ingroup internal_p2p_blocking + * + * Internals about blocking synchronous Communication. + * + * \image html synchronous_communication_1.png + **/ +/** + * \defgroup internal_p2p_buffered Buffered Communication + * \ingroup internal_p2p_blocking + * + * Internals about blocking buffered Communication. + * + * \image html buffered_communication_1.png + **/ +/** + * \defgroup internal_p2p_bmalloc Buffer-Management + * \ingroup internal_p2p_buffered + * + * This section shows how the buffer used for buffered communication is managed. + **/ +/** + * \defgroup internal_p2p_imm Non-Blocking Communication + * \ingroup internal_p2p_main + * + * Internals about non-blocking communication. + * + * The SPUs are very limited in usage, e.g. only one thread per SPU is supported, + * and so it is hard to make communication non-blocking. In fact only synchronous + * send and receive provide possibilities for non-blocking communication. Because + * we think that the advantages of a non-blocking receive aren't worth the effort, + * only non-blocking send is implemented at the moment. The picture below illustrates + * a non-blocking synchronous communication call. + * + * \image html isyncronous_communication_1.png + **/ +/** + * \defgroup internal_collective Collective Communication + * \ingroup internal_main + * + * Internals about Collective Communication + * + * Currently there are only two operations implemented. + * + * \section MOC_Bcast + * + * The root node sends normal messages using the reserved tag MOC_BCAST_TAG, which + * is received by all other nodes. + * + * \section MOC_Barrier + * + * All but the process with the highest rank send a special-message (special-flag set) + * to the latter process. This process then sends another special-message back to + * the others. After that the function returns on all calling processes. + */ + + + +#endif /*MOC_DOXYGEN_MAIN_H_*/ diff --git a/include/internal/imoc.h b/include/internal/imoc.h new file mode 100755 index 0000000..a9659f0 --- /dev/null +++ b/include/internal/imoc.h @@ -0,0 +1,201 @@ +#ifndef IMOC_H_ +#define IMOC_H_ + + +#include + +#include "../moc.h" +#include "imoc_core.h" + + + +/** + * \addtogroup internal_p2p_imm + **/ +//@{ + +/** + * @name Constants for MOC_Request.request_type + */ +//@{ + +/** + * MOC_Request is associated with a DMA-Communication. + **/ +#define MOC_REQ_TYPE_DMA 0 + +/** + * MOC_Request is associated with aISsend-Communication. + **/ +#define MOC_REQ_TYPE_ISSEND 1 + +//@} +//@} + +/** + * \addtogroup internal_p2p_main + **/ +//@{ + +/** + * @name Internal constants + */ +//@{ + +/** + * Defines a treshold, when to use memcpy and when to use DMA in a get-operation + * on the PPU. + **/ +#define MEMCPY_GET_TRESHOLD 156 + +/** + * Defines a treshold, when to use memcpy and when to use DMA in a put-operation + * on the PPU. + **/ +#define MEMCPY_PUT_TRESHOLD 2210 + +//@} + +/** + * @name Internal shared functions + */ +//@{ + +/** + * Get the next valid message-envelope from "source" with specified "tag" and "comm". + * + * @param source \b in rank of sending node + * @param tag \b in message-tag + * @param comm \b in message-communicator + * @param isSpecial \b in true to return special-message + * @param status \b inout MOC_status-instance to add some information (e.g. source by MOC_ANY_SOURCE) + * @returns pointer to the appropriate message-queue-entry. + **/ +moc_message_envelope_t* IMOC_get_entry(int source, int tag, MOC_Comm comm, int isSpecial, MOC_Status *status); + + +/** + * Get next free entry in message-queue (a local copy of the message-queue has to be used). + * To ensure correct ordering message-tag and -comm and -type has to be specified. + * + * @param pqueue \b in pointer to local copy of remote message-queue + * @param tag \b in message-tag + * @param comm \b in message-communicator + * @param isSpecial \b in true if message should be a special message + * @param index \b out index of free entry + * @return 0 when success otherwise error-code + **/ +int IMOC_getFreeEntry ( moc_message_envelope_t* pqueue, uint8_t tag, MOC_Comm comm, int isSpecial, int* index ); + +/** + * Get free message-ID. + * + * \note Message-ID is index of message-status-array + * + * @param mid \b out free message-ID + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval MOC_ERR_MESSAGE_EXHAUSTED No further messages possible. + **/ +int IMOC_getFreeMID ( int *mid ); + +/** + * Wait till message with message-ID mid has been received. + * + * Waits till message-status-flag 'outstanding' is 0. + * + * @param mid \b in message-ID + * @return 0 when success otherwise error-code + **/ +int IMOC_waitForMessageCompletion ( uint8_t mid ); + +/** + * Tests if message with message-ID mid has been received. + * + * Tests if message-status-flag 'outstanding' is 0. + * + * @param mid \b in message-ID + * @param status \b out status of message + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + **/ +int IMOC_testForMessageCompletion ( uint8_t mid, uint8_t *status ); + +//@} +//@} + + + + +/** + * \addtogroup internal_error + * + * This section deals with error-messages. + * + * An array of type \ref error_strings_struct stores error-messages and + * their corresponding error-codes. \ref MOC_Error_string searches this + * list for a given error-code and returns the error-message. + **/ +//@{ + + +/** + * Error-Strings structure. + * + * stores the error-string to a given error-code + **/ +typedef struct error_strings_struct + { + int error_code; /**< error-code */ + char * text; /**< error-text */ + } error_strings_t; /**< typedef for \ref error_strings_struct */ + + +//@} + + + +/** + * \addtogroup internal_p2p_bmalloc + * + * Information about already allocated buffer-space is stored in the + * status-array. But this information has no order which forces us + * everytime we want to allocate buffer-space to create an ordered list + * of already allocated buffer-space. To avoid this we have additionally + * an ordered linked-list. This list orders the indexes (== message-IDs) + * of the status-array-entries in ascending order of the memory-addresses. + * This enables fast searching for free buffer-space. + * + * Allocated buffer-space is cleared by the receiving process by setting + * the appropriate flag in the status-array-entry. This is done by a + * DMA-Transfer and so no collaboration of the sending-process is needed. + * During the next allocation of buffer-space nodes with disabled buffer-flags + * are freed. + **/ +//@{ + + + +/** + * Node of linked list holding information about allocated buffer-space. + **/ +typedef struct moc_internal_buffer_node_struct + { + struct moc_internal_buffer_node_struct *next_node; /**< Pointer to + next entry **/ + uint8_t mid; /**< Message-ID of message using buffer-space. + Information about the used buffer-space is stored in the + appropriate message-status-entry (mid is index of entry). **/ + } moc_internal_buffer_node_t; + + + +/** + * Allocate buffer-space. + * + * @param size \b in size of buffer-space + * @param mid \b in corresponding message-ID + * @return effective address of allocated buffer-space (16-byte aligned) + **/ +uint64_t IMOC_bmalloc ( uint32_t size, uint8_t mid ); + +//@} +#endif /*IMOC_H_*/ diff --git a/include/internal/imoc_core.h b/include/internal/imoc_core.h new file mode 100755 index 0000000..2172546 --- /dev/null +++ b/include/internal/imoc_core.h @@ -0,0 +1,173 @@ +#ifndef MOC_INTERNAL_CORE_ +#define MOC_INTERNAL_CORE_ + + +#include + + +/** + * \addtogroup internal_core + * + * This section deals with the data-structures and the basic concepts which + * form the core of this implementation. + * + * \section icore_struct Data-Structures + * + * Basically there are four data-structures. \ref moc_message_envelope_struct + * holds meta-information about a message and \ref moc_message_status_struct holds + * information about used buffer-space and provide means for a receiving proccess + * to send some information back to the sending process. + * + * \ref moc_process_struct stores information every node needs to know about the + * other nodes to successfully communicate with them. + * + * The forth data-structure (actually there are two) \ref moc_node_handle_ppu_struct + * respectively \ref moc_node_handle_spu_struct holds information a node know about + * itself and the execution environment. + * + * \section core_conc Concepts + * + * Every node has (N-1) queues for incoming messages, where N is the overall number + * of node. Each queue is exclusively used by a specific remote node to write + * meta-data about the message to be send into it (queue-entries are of type \ref + * moc_message_envelope_struct). Because there are several independend queues and no + * global time is available, an exact order of all incoming messages cannot be guaranteed. + * Corrent ordering can only be guaranteed for messages from the same source-node. + * The queues are implemented in form of a big array which is divided in (N-1) equally + * sized pieces. + * + * Furthermore every node has an array of size (N-1)*m where m is the size of a + * message-queue (entries are of type \ref moc_message_status_struct). + * This array is used for buffer-management and to report the status of a message + * back to the sender. + * Every message currently under progress has a message-id which is unique in respect + * to the sending-node. This message-id is equal to the index of the corresponding + * entry of the status-array. + * + * In order to communicate with other nodes every node also keeps a list of all nodes + * in the execution environment (entries are of type \ref moc_process_struct). + * + * Pointers to the own arrays and some further information a node needs to know (e.g. + * own rank) is stored in the globally accessible variable \ref node_handle. + **/ +//@{ +/** + * @name PPU & SPU + **/ +//@{ + + +/** + * Default size of the message-queues. + **/ +#define MOC_QUEUE_SIZE 4 + +/** + * Default size of the buffers used for buffered communication. + **/ +#define MOC_BUFFER_SIZE 2048 + + +/** + * Message-envelope structure. + * + * Is used to store meta-data about the message in the message-queues of the receiving process. + **/ +typedef struct moc_message_envelope_struct + { + uint8_t id; /**< Message-ID. Also index of message-status-array*/ + uint8_t tag; /**< Message-tag*/ + uint8_t communicator; /**< Communicator of message*/ + union + { + struct + { + unsigned int valid : 1; /**< Is the message valid? */ + unsigned int signal_back : 1; /**< Should the status be reported back to the + sending process */ + unsigned int special : 1; /**< Is this message a special message? */ + unsigned int collaborative : 1; /**< Is this message part of a collaborative + communication? */ + unsigned int channel : 2; /**< Which channel is used to transport the message? */ + unsigned int in_mm : 1; /**< Are the data in Main-Memory? */ + unsigned int keep_valid : 1; /**< Should the message-status-entry be invalidated? */ + } __attribute__((__packed__)) bits; /**< flag-struct */ + uint8_t value; /**< union-value */ + } flags; /**< flag-union */ + unsigned int size : 24; /**< Message-size in byte*/ + unsigned int datatype : 8; /**< Data-type of message-entries */ + uint64_t message_address; /**< Effective address of message-data*/ + } __attribute__((__packed__)) moc_message_envelope_t; + + +/** + * Constant for moc_message_envelope_t.flags.channel. + * + * Message is transported via a DMA-Call. + **/ +#define IMOC_MESSAGE_CHANNEL_DMA 0 + + +/** + * Constant for moc_message_envelope_t.flags.channel. + * + * Message is embedded in message-envelope. + **/ +#define IMOC_MESSAGE_CHANNEL_ENV 1 + + +/** + * Message-status structure. + * + * Is used to store information about the message-status and the buffer used in the + * message-status-array. + **/ +typedef struct moc_message_status_struct + { + uint32_t buffer_offset; /**< allocated buffer-offset from buffer-base */ + uint32_t message_size; /**< size of message in byte */ + uint32_t error_value; /**< optional error-code of message */ + union + { + struct + { + unsigned int valid : 1; /**< Is this entry valid? */ + unsigned int outstanding : 1; /**< Message is not yet received? */ + unsigned int buffer_used : 1; /**< Is Bufferspace used? */ + unsigned int reserved : 5; /**< reserved */ + } __attribute__((__packed__)) bits; /**< flag-struct */ + uint8_t value; /**< union-value */ + } flags; /**< flag-union */ + uint8_t reserved[3]; /**< reserved */ + } __attribute__((__packed__)) moc_message_status_t; + + +/** + * Constant for moc_process_struct.type. + **/ +#define MOC_PPU_PROCESS 0 + +/** + * Constant for moc_process_struct.type. + **/ +#define MOC_SPU_PROCESS 1 + + +/** + * Process-information structure. + * + * Stores information about a MOC-Process. This information is used for communication + * between the processes. + */ +typedef struct moc_process_struct + { + uint8_t type; /**< Process-type (SPU or PPU) */ + uint8_t reserved[7]; /**< reserved */ + uint64_t inbox_queue_base; /**< effective base-address of message-queues */ + uint64_t stat_array_base; /**< effective base-address of message-status-array */ + uint64_t ps_base; /**< effective base-address of problem-state (Signals, mailboxes, ...)*/ + } __attribute__((__packed__)) moc_process_t; + +//@} +//@} +#endif /*MOC_INTERNAL_CORE_*/ diff --git a/include/internal/imoc_macros.h b/include/internal/imoc_macros.h new file mode 100755 index 0000000..f070161 --- /dev/null +++ b/include/internal/imoc_macros.h @@ -0,0 +1,141 @@ +#ifndef MOC_INTERNAL_ADDRESS_MACROS_H_ +#define MOC_INTERNAL_ADDRESS_MACROS_H_ + +/** + * \addtogroup internal_am + **/ +//@{ +/** + * @name PPU & SPU + **/ +//@{ + + +/** + * Effective base-address of own remote queue at node 'rank'. + * + * Address is of type uint64_t + **/ +#define IMOC_EA_REMOTE_QUEUE(proc) ( (proc > node_handle.rank) ? node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank : node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1) ) + +/** + * Effective Base-Address of local queue responsible for node 'rank'. + * + * Address is of type moc_message_envelope_t* + **/ +#define IMOC_LOCAL_QUEUE(proc) ( (proc < node_handle.rank) ? node_handle.message_queue_base+node_handle.queue_size*(proc) : node_handle.message_queue_base+node_handle.queue_size*(proc-1) ) + + +/** + * Effective base-address of own remote queue-entry at node 'rank'. + * + * Address is of type uint64_t + **/ +#define IMOC_EA_REMOTE_QUEUE_ENTRY(proc, index) ( (proc > node_handle.rank) ? node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank+sizeof(moc_message_envelope_t)*(index) : node_handle.moc_process_list[proc].inbox_queue_base+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1)+sizeof(moc_message_envelope_t)*(index) ) + +/** + * Effective Base-Address of local queue-entry responsible for node 'rank'. + * + * Address is of type moc_message_envelope_t* + **/ +#define IMOC_LOCAL_QUEUE_ENTRY(proc, index) ( (proc < node_handle.rank) ? node_handle.message_queue_base+node_handle.queue_size*(proc)+(index) : node_handle.message_queue_base+node_handle.queue_size*(proc-1)+(index) ) + + +/** + * Effective Address of remote status-array entry at node 'rank'. + * + * Address is of type uint64_t + **/ +#define IMOC_EA_REMOTE_STATUS_ENTRY(id, rank) ( node_handle.moc_process_list[rank].stat_array_base+sizeof(moc_message_status_t)*(id) ) + + +//@} +//@} + + + +/** + * \addtogroup internal_tm + **/ +//@{ + + +/** + * Tests if invalid communicator in a send-operation. + * Calls return with appropriate error-code itself. + **/ +#define IMOC_TEST_COMM_SEND(comm) if ( (comm) != MOC_COMM_WORLD && (comm) != MOC_COMM_SELF ) \ + { return MOC_ERR_COMM; } + +/** + * Tests if invalid communicator in a recv-operation. + * Calls return with appropriate error-code itself. + **/ +#define IMOC_TEST_COMM_RECV(comm) if ( (comm) != MOC_COMM_WORLD && (comm) != MOC_COMM_SELF ) \ + { return MOC_ERR_COMM; } + +/** + * Tests if invalid tag in a send-operation. + * Calls return with appropriate error-code itself. + **/ +#define IMOC_TEST_TAG_SEND(tag) if ( (tag) > 255 || (tag) < 0 ) \ + { return MOC_ERR_TAG; } + +/** + * Tests if invalid tag in a recv-operation. + * Calls return with appropriate error-code itself. + **/ +#define IMOC_TEST_TAG_RECV(tag) if ( (tag)!=MOC_ANY_TAG && ((tag) > 255 || (tag) < 0) ) \ + { return MOC_ERR_TAG; } + +/** + * Tests if invalid rank. + * Calls return with appropriate error-code itself. + **/ +#define IMOC_TEST_RANK(rank) if ( (rank) < 0 || (rank) >= node_handle.comm_size ) \ + { return MOC_ERR_RANK; } + +/** + * Tests if invalid rank in a recv-operation. + * Calls return with appropriate error-code itself. + **/ +#define IMOC_TEST_RANK_RECV(rank) if ( rank != MOC_ANY_SOURCE && ((rank) < 0 || (rank) >= node_handle.comm_size) ) \ + { return MOC_ERR_RANK; } + +/** + * Tests if invalid byte-count in a recv-operation. + * Calls return with appropriate error-code itself. + **/ +#define IMOC_TEST_BYTECOUNT(count) if ( (count) < 0 || (count) > MAX_MOC_MESSAGE_SIZE ) \ + { return MOC_ERR_COUNT; } + +/** + * Tests if invalid buffer-pointer. + * Calls return with appropriate error-code itself. + **/ +#define IMOC_TEST_BUFFER(buf) if ( (buf) == 0 ) \ + { return MOC_ERR_BUFFER; } + +/** + * Tests if rank is MOC_PROC_NULL and returns with MOC_SUCCESS itself. + **/ +#define IMOC_TEST_PROC_NULL(rank) if ((rank) == MOC_PROC_NULL ) \ + { return MOC_SUCCESS; } + +/** + * Tests if rank is own rank and returns with MOC_SUCCESS itself. + **/ +#define IMOC_TEST_PROC_SELF(proc) if ( (proc) == node_handle.rank ) \ + { return MOC_SUCCESS; } + +/** + * Tests if address is 16-byte aligned. + * Calls return with appropriate error-code itself. + **/ +#define IMOC_TEST_ALIGNMENT(address) if ( ((unsigned long)(address)) % 16 != 0 ) \ + { return MOC_ERR_BAD_ALIGNMENT; } +//@} + + + +#endif /*MOC_INTERNAL_ADDRESS_MACROS_H_*/ diff --git a/include/internal/ppu/imoc_core_ppu.h b/include/internal/ppu/imoc_core_ppu.h new file mode 100755 index 0000000..2eb94fd --- /dev/null +++ b/include/internal/ppu/imoc_core_ppu.h @@ -0,0 +1,132 @@ +#ifndef MOC_INTERNAL_CORE_PPU_H_ +#define MOC_INTERNAL_CORE_PPU_H_ + + +#include +#include +#include + +#include "../imoc_core.h" +#include "../../ppu/moc.h" + + + +/** + * \addtogroup internal_core + **/ +//@{ +/** + * @name PPU only + **/ +//@{ + +/** + * Node-handle structure. + * + * \note PPU only + * + * Information each node knowns about himself and the world. + **/ +typedef struct moc_node_handle_ppu_struct + { + uint8_t rank; /**< rank of node */ + uint8_t comm_size; /**< number of overall processes */ + uint8_t queue_size; /**< Size of a message-queue */ + volatile moc_message_envelope_t* message_queue_base; /**< base-address of own message-queues */ + volatile moc_message_status_t* status_array_base; /**< base-address of own message-status-array */ + void* buffer_base; /**< base-address of own buffer */ + uint32_t buffer_size; /**< size of own buffer */ + volatile uint32_t* signal_area; /**< address of own signal-area */ + volatile moc_process_t* moc_process_list; /**< list of all other MOC-processes + (index is rank of process) */ + } moc_node_handle_ppu_t; /**< typedef of \ref moc_node_handle_ppu_struct */ + + + +/** + * Information each node knowns about himself and the world. + * + * \note PPU only + * + **/ +moc_node_handle_ppu_t node_handle; + +//@} +//@} + + + +/** + * \addtogroup internal_spu_thread SPU-Thread Management + * + * \note PPU only + **/ +//@{ + +/** + * SPU-Thread structure. + * + * \note PPU only + * + * Stores information about the SPU-Threads the managing PPU-Process + * needs to know. + **/ +typedef struct moc_spu_thread_struct + { + uint8_t rank; /**< rank of SPU-thread */ + pthread_t pthread; /**< PThread-handle <*/ + spe_context_ptr_t speid; /**< SPE-Context */ + spe_stop_info_t stop_info; /**< Error-Information */ + uint32_t spe_entry_adress; /**< Spe-entry-address */ + void *argp; /**< effective address of user-defined information + in main-memory */ + void *envp; /**< Pointer to environment information */ + void* buffer_base; /**< base-address of the SPU-Thread's buffer */ + uint32_t buffer_size; /**< size of the SPU-Thread's buffer */ + uint64_t ls_base; /**< Effective Basis-Address of SPU's local-storage */ + uint32_t queue_base_in_ls; /**< Address of message-queue in SPU's local-storage */ + uint32_t status_base_in_ls; /**< Address of status-array in SPU's local-storage */ + } moc_spu_thread_t; /**< typedef of \ref moc_spu_thread_struct */ + + + +/** + * actual number of SPU-Threads. + * + * \note PPU only + **/ +uint8_t moc_spu_thread_count; + + +/** + * actual number of PPU-Threads. + * + * \note PPU only + **/ +uint8_t moc_ppu_thread_count; + +/** + * init buffer size + **/ +uint32_t moc_spu_buffer_size; + +/** + * init message-queue size + **/ +uint8_t moc_spu_queue_size; + +/** + * array of SPU-Threads. + * + * \note PPU only + **/ +moc_spu_thread_t moc_spu_thread_list[MOC_SPU_THREAD_MAX]; + +/** + * PThread-function for creating SPU-Threads + **/ +void* moc_spe_pthread_func(void *arg); + + +//@} +#endif /*MOC_INTERNAL_CORE_PPU_H_*/ diff --git a/include/internal/ppu/imoc_dma_ppu.h b/include/internal/ppu/imoc_dma_ppu.h new file mode 100755 index 0000000..32b80b3 --- /dev/null +++ b/include/internal/ppu/imoc_dma_ppu.h @@ -0,0 +1,148 @@ +#ifndef MOC_INTERNAL_DATA_TRANSFER_PPU_H_ +#define MOC_INTERNAL_DATA_TRANSFER_PPU_H_ + + +#include + +#include "../../moc.h" + + + +/** + * \addtogroup internal_p2p_dma + **/ +//@{ +/** + * @name PPU-only + **/ +//@{ + + +/** + * Internal wrapper-function for a blocking DMA-get operation. + * Data can be of any size, constraints of low-level DMA-functions + * are dealt by this function. + * However data-addresses have to be at least 16-byte aligned. + * + * This function actually always reads a multiple of 16 from the source, + * but copies only size bytes of it to target. This means however that up + * to 15 bytes are read from an invalid location. As it is never written to + * them this should always be safe. + * + * On the ppu the system for tag reservation is not present, so a hardcoded tag is used. + * It has also to be noted that the dma calls are actually initiated on the spu by the ppu. + * + * @param target \b in local-address of buffer + * @param source \b in ea-address of data + * @param size \b in size of data in byte + * @param dest \b in id of source spe + * @return 0 when success otherwise error-code + **/ +int IMOC_get_data(void* target, uint64_t source, uint32_t size, int dest); + +/** + * Internal wrapper-function for a blocking DMA-put operation. + * Data-size should be a multiple of 16 because of low-level constraints, but + * there is no upper limit of transfer-size. + * Data-addresses have to be at least 16-byte aligned. + * + * This function actually always reads a multiple of 16 from the source, and copies + * it to target. This means however that up to 15 bytes are written to and invalid + * location, so if one wants to use it with invalid sizes precautions have to be taken + * in order to make it safe. + * + * On the ppu the system for tag reservation is not present, so a hardcoded tag is used. + * It has also to be noted that the dma calls are actually initiated on the spu by the ppu. + * + * @param source \b in local-address of data + * @param target \b in ea-address of buffer + * @param size \b in size of data in byte + * @param dest \b in id of source spe + * @return 0 when success otherwise error-code + **/ +int IMOC_put_data(void* source, uint64_t target, uint32_t size, int dest); + +/** + * Internal wrapper-function for a non-blocking DMA-get operation. + * Data can be of any size, constraints of low-level DMA-functions + * are dealt by this function. + * However data-addresses have to be at least 16-byte aligned. + * + * This function actually always reads a multiple of 16 from the source, + * but copies only size bytes of it to target. This means however that up + * to 15 bytes are read from an invalid location. As it is never written to + * them this should always be safe. + * + * On the ppu the system for tag reservation is not present, so a hardcoded tag is used. + * It has also to be noted that the dma calls are actually initiated on the spu by the ppu. + * + * @param target \b in local-address of buffer + * @param source \b in ea-address of data + * @param size \b in size of data in byte + * @param dest \b in id of source spe + * @param request \b out request-handle + * @return 0 when success otherwise error-code + **/ +int IMOC_iget_data(void* target, uint64_t source, uint32_t size, uint32_t dest, imoc_dma_request* request); + +/** + * Internal wrapper-function for a non-blocking DMA-put operation. + * Data-size should be a multiple of 16 because of low-level constraints, but + * there is no upper limit of transfer-size. + * Data-addresses have to be at least 16-byte aligned. + * + * This function actually always reads a multiple of 16 from the source, and copies + * it to target. This means however that up to 15 bytes are written to and invalid + * location, so if one wants to use it with invalid sizes precautions have to be taken + * in order to make it safe. + * + * On the ppu the system for tag reservation is not present, so a hardcoded tag is used. + * It has also to be noted that the dma calls are actually initiated on the spu by the ppu. + * + * @param source \b in local-address of data + * @param target \b in ea-address of buffer + * @param size \b in size of data in byte + * @param dest \b in id of source spe + * @param request \b out request-handle + * @return 0 when success otherwise error-code + **/ +int IMOC_iput_data(void* source, uint64_t target, uint32_t size, uint32_t dest, imoc_dma_request* request); + +/** + * Waits till a IMOC_iget_data or IMOC_iput_data is completed. + * + * @param request \b in request-handle + * @return 0 when success otherwise error-code + **/ +int IMOC_wait_dma(imoc_dma_request* request); + +/** + * Tests if a IMOC_iget_data or IMOC_iput_data is completed. + * + * @param request \b in request-handle + * @param flag \b out true if operation is completed + * @return 0 when success otherwise error-code + **/ +int IMOC_test_dma(imoc_dma_request* request, int *flag); + +/** + * Reserves a tag on the ppu, for communication with a given spu. + * + * @param speid \b id of spu to communicate with + * @return tag (0-14) when success otherwise error code + **/ +int moc_tag_reserve(unsigned int speid); + +/** + * Releases a reserved tag. + * + * @param speid \b id of spu for which the tag was reserved + * @param tag \b tag to be released + * @return 0 when success otherwise error-code + **/ +int moc_tag_release(unsigned int speid, int tag); + +//@} +//@} +#endif /*MOC_INTERNAL_DATA_TRANSFER_PPU_H_*/ + diff --git a/include/internal/ppu/imoc_macros_ppu.h b/include/internal/ppu/imoc_macros_ppu.h new file mode 100755 index 0000000..251fe48 --- /dev/null +++ b/include/internal/ppu/imoc_macros_ppu.h @@ -0,0 +1,48 @@ +#ifndef MOC_INTERNAL_ADDRESS_MACROS_PPU_H_ +#define MOC_INTERNAL_ADDRESS_MACROS_PPU_H_ + + +#include "../imoc_macros.h" + + + +/** + * \addtogroup internal_am + **/ +//@{ +/** + * @name PPU-only + **/ +//@{ + + + +/** + * LS-Address of own remote queue at node 'rank'. + * + * Address is of type uint32_t. + **/ +#define IMOC_LS_REMOTE_QUEUE(proc) ( (proc > node_handle.rank) ? moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank : moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1) ) + + +/** + * LS-Address of own remote queue-entry at node 'rank'. + * + * Address is of type uint32_t. + **/ +#define IMOC_LS_REMOTE_QUEUE_ENTRY(proc, index) ( (proc > node_handle.rank) ? moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*node_handle.rank+sizeof(moc_message_envelope_t)*(index) : moc_spu_thread_list[proc-moc_ppu_thread_count].queue_base_in_ls+sizeof(moc_message_envelope_t)*node_handle.queue_size*(node_handle.rank-1)+sizeof(moc_message_envelope_t)*(index) ) + + + +/** + * Effective Address of remote status-array entry at node 'rank'. + * + * Address is of type uint32_t + **/ +#define IMOC_LS_REMOTE_STATUS_ENTRY(id, rank) ( moc_spu_thread_list[rank-moc_ppu_thread_count].status_base_in_ls+sizeof(moc_message_status_t)*(id) ) + + + +//@} +//@} +#endif /*MOC_INTERNAL_ADDRESS_MACROS_PPU_H_*/ diff --git a/include/internal/spu/imoc_core_spu.h b/include/internal/spu/imoc_core_spu.h new file mode 100755 index 0000000..d5ca3d9 --- /dev/null +++ b/include/internal/spu/imoc_core_spu.h @@ -0,0 +1,53 @@ +#ifndef MOC_INTERNAL_CORE_SPU_H_ +#define MOC_INTERNAL_CORE_SPU_H_ + + + +#include "../imoc_core.h" + + + +/** + * \addtogroup internal_core + **/ +//@{ +/** + * @name SPU only + **/ +//@{ + +/** + * Node-handle structure. + * + * \note SPU only + * + * Information each node knowns about himself and the world. + **/ +typedef struct moc_node_handle_spu_struct + { + uint8_t rank; /**< rank of node */ + uint8_t comm_size; /**< number of overall processes */ + uint8_t queue_size; /**< Size of a message-queue */ + uint64_t ls_base; /**< Effective address of own local-store */ + volatile moc_message_envelope_t* message_queue_base; /**< base-address of own message-queues */ + volatile moc_message_status_t* status_array_base; /**< base-address of own message-status-array */ + uint64_t buffer_base; /**< base-address of own buffer */ + uint32_t buffer_size; /**< size of own buffer */ + volatile moc_process_t* moc_process_list; /**< list of all other MOC-processes + (index is rank of process) */ + } moc_node_handle_spu_t; /**< typedef of \ref moc_node_handle_spu_struct */ + + + +/** + * Information each node knowns about himself and the world. + * + * \note SPU only + **/ +moc_node_handle_spu_t node_handle; + + + +//@} +//@} +#endif /*MOC_INTERNAL_CORE_SPU_H_*/ diff --git a/include/internal/spu/imoc_dma_spu.h b/include/internal/spu/imoc_dma_spu.h new file mode 100755 index 0000000..e0fe350 --- /dev/null +++ b/include/internal/spu/imoc_dma_spu.h @@ -0,0 +1,115 @@ +#ifndef MOC_INTERNAL_GET_DATA_H_ +#define MOC_INTERNAL_GET_DATA_H_ + +#include +#include "../../moc.h" + +/** + * \addtogroup internal_p2p_dma + **/ +//@{ +/** + * @name SPU-only + **/ +//@{ + + +/** + * Internal wrapper-function for a blocking DMA-get operation. + * Data can be of any size, constraints of low-level DMA-functions + * are dealt by this function. + * However data-addresses have to be at least 16-byte aligned. + * + * This function actually always reads a multiple of 16 from the source, + * but copies only size bytes of it to target. This means however that up + * to 15 bytes are read from an invalid location. As it is never written to + * them this should always be safe. + * + * @param target \b in ls-address of buffer + * @param source \b in ea-address of data + * @param size \b in size of data in byte + * @return 0 when success otherwise error-code + **/ +int IMOC_get_data(void* target, uint64_t source, uint32_t size); + + +/** + * Internal wrapper-function for a blocking DMA-put operation. + * Data-size should be a multiple of 16 because of low-level constraints, but + * there is no upper limit of transfer-size. + * Data-addresses have to be at least 16-byte aligned. + * + * This function actually always reads a multiple of 16 from the source, and copies + * it to target. This means however that up to 15 bytes are written to and invalid + * location, so if one wants to use it with invalid sizes precautions have to be taken + * in order to make it safe. + * + * @param source \b in ls-address of data + * @param target \b in ea-address of buffer + * @param size \b in size of data in byte + * @return 0 when success otherwise error-code + **/ +int IMOC_put_data(void* source, uint64_t target, uint32_t size); + +/** + * Internal wrapper-function for a non-blocking DMA-get operation. + * Data can be of any size, constraints of low-level DMA-functions + * are dealt by this function. + * However data-addresses have to be at least 16-byte aligned. + * + * This function actually always reads a multiple of 16 from the source, + * but copies only size bytes of it to target. This means however that up + * to 15 bytes are read from an invalid location. As it is never written to + * them this should always be safe. + * + * @param target \b in ls-address of buffer + * @param source \b in ea-address of data + * @param size \b in size of data in byte + * @param request \b out request-handle + * @return 0 when success otherwise error-code + **/ +int IMOC_iget_data(void* target, uint64_t source, uint32_t size, imoc_dma_request* request); + +/** + * Internal wrapper-function for a blocking DMA-put operation. + * Data-size should be a multiple of 16 because of low-level constraints, but + * there is no upper limit of transfer-size. + * Data-addresses have to be at least 16-byte aligned. + * + * This function actually always reads a multiple of 16 from the source, and copies + * it to target. This means however that up to 15 bytes are written to and invalid + * location, so if one wants to use it with invalid sizes precautions have to be taken + * in order to make it safe. + * + * @param source \b in ls-address of data + * @param target \b in ea-address of buffer + * @param size \b in size of data in byte + * @param request \b out request-handle + * @return 0 when success otherwise error-code + **/ +int IMOC_iput_data(void* source, uint64_t target, uint32_t size, imoc_dma_request* request); + + +/** + * Waits till a IMOC_iget_data or IMOC_iput_data is completed. + * + * @param request \b in request-handle + * @return 0 when success otherwise error-code + **/ +int IMOC_wait_dma(imoc_dma_request* request); + +/** + * Tests if a IMOC_iget_data or IMOC_iput_data is completed. + * + * @param request \b in request-handle + * @param flag \b out true if operation is completed + * @return 0 when success otherwise error-code + **/ +int IMOC_test_dma(imoc_dma_request* request, int *flag); + + + + +//@} +//@} +#endif /*MOC_INTERNAL_GET_DATA_H_*/ diff --git a/include/moc.h b/include/moc.h new file mode 100755 index 0000000..dbed618 --- /dev/null +++ b/include/moc.h @@ -0,0 +1,680 @@ +#ifndef MOC_H_ +#define MOC_H_ + +#include +#include "moc_datatype.h" +#include "moc_error_codes.h" + + + +/** + * Indicates, in a receive, to accept a message with any tag value. + **/ +#define MOC_ANY_TAG 1000 + +/** + * Reserved Tag for Broadcast-Messages (MOC_Bcast). + **/ +#define MOC_BCAST_TAG 250 + +/** + * Specifies a rank that can be used to send or receive from no-one. + **/ +#define MOC_PROC_NULL 1000 + +/** + * Indicates, in a receive, to accept a message from any source. + **/ +#define MOC_ANY_SOURCE 1001 + +/** + * Maximum byte-count which can be transferred by one DMA-transfer. + **/ +#define MAX_DMA_CALL_SIZE 16384 + +/** + * Maximum byte-count of a MOC-message. It's only the theoretical size, because + * practically the SPU's local-stores can only hold much fewer bytes. + **/ +#define MAX_MOC_MESSAGE_SIZE 16777215 + + + +/** + * \internal + * \addtogroup internal_p2p_imm + **/ +//@{ + +/** + * \internal + * @name Possible structures for MOC_Request.request_data. + **/ +//@{ + +/** + * \internal + * Struct with information about a non-blocking DMA-Communication. + **/ +typedef struct imoc_dma_request_struct + { + char *buffer; + void *target; + uint32_t size; + uint32_t remainder; + uint32_t dest; + uint32_t tag_id; + } imoc_dma_request; + +/** + * \internal + * Struct with information about a non-blocking ISsend-Communication. + **/ +typedef struct imoc_issend_request_struct + { + uint8_t mid; + uint8_t isFinished; + uint8_t source; + uint8_t tag; + uint32_t message_size; + } imoc_issend_request; + +//@} +//@} + + + +/** + * \addtogroup environment_error + * + * This section describes how errors are handled. + * + * Every function should return an integer if possible. This integer should be + * MOC_SUCCESS if the operation teminated successfully otherwise an error-code + * telling the reason of the error is returned. + **/ +//@{ + +/** + * Maximal length of error-text. + **/ +#define MOC_MAX_ERROR_STRING 255 + +/** + * Returns an error-text for a given error code. + * + * The error-text is already terminated by '\\0'. + * + * \param errorcode \b in Error code returned by an MPI routine + * \param string \b out Text that corresponds to the errorcode + * \param resultlen \b out Length of string + * \retval MOC_SUCCESS No error; MPI routine completed successfully. + * \retval MOC_ERR_ARG Invalid argument. Most likely an error-code out of range. + **/ +int MOC_Error_string ( int errorcode, char *string, int *resultlen ); + +/** + * Converts an error code into an error class. + * + * \param errorcode \b in Error code returned by an MPI routine + * \param errorclass \b out Error class associated with errorcode + * \retval MOC_SUCCESS No error; MPI routine completed successfully. + * \retval MOC_ERR_COMM Invalid argument. Most likely an error-code out of range. + **/ +int MOC_Error_class ( int errorcode, int *errorclass ); + +//@} + + + + + +/** + * \addtogroup environment_information + * + * Functions to return some information about the execution environment and + * the MOC-implementation. + **/ +//@{ + +/** + * Major version-number of this MOC-Implementation + **/ +#define MOC_VERSION 0 + +/** + * Minor version-number of this MOC-Implementation + **/ +#define MOC_SUBVERSION 9 + +/** + * The maximum length of the string returned by MOC_Get_processor_name. + **/ +#define MOC_MAX_PROCESSOR_NAME 4 + +/** + * Gets the name of the processor. + * + * \note This function returns "SPU" if the calling process is running on a SPU otherwise + * it's running on the "PPU". + * + * \param name \b out Specifies the processor-type the calling process is runnning on + * \param resultlen \b out Length (in characters) of the name + * \retval MOC_SUCCESS No error; MPI routine completed successfully. + **/ +int MOC_Get_processor_name ( char *name, int *resultlen); + +/** + * Returns the major and minor version of this MOC-implementation. + * + * \note Can be called before MOC_Init and after MOC_Finalize. + * + * @param version \b out Major version of this MOC-implementation + * @param subversion \b out Minor version of this MOC-implementation + * @retval MOC_SUCCESS Function returned successfully + **/ +int MOC_Get_version(int *version, int *subversion); + +//@} + + + + + +/** + * \addtogroup environment_startup + **/ +//@{ +/** + * @name PPU & SPU + **/ +//@{ + +/** + * Terminates MPI execution environment. + * + * \note All processes must call this routine before exiting. + * + * \retval MOC_SUCCESS No error; MPI routine completed successfully. + **/ +int MOC_Finalize (void); + +//@} +//@} + + + + + +/** + * \addtogroup p2p_status + * + * Receiving operations return a status-object holding information about + * the message. + * + * There are three Fields of the status-Struct which are predefined by the MPI-Standard: + * MOC_SOURCE gives the message-source, MOC_TAG gives the message-tag and MOC_ERROR gives + * an error-code (not implemented by MOC at the moment). To get the number of element the + * function \ref MOC_Get_count should be used. + **/ +//@{ + +/** + * Structure holding information about a received message. + **/ +typedef struct MOC_Status_struct + { + uint8_t MOC_SOURCE; /**< message-source */ + uint8_t MOC_TAG; /**< message-tag */ + int MOC_ERROR; /**< error-code */ + int message_size; /**< message-size in byte (internal-variable) */ + uint8_t mid; /**< message-ID (internal-variable) */ + } MOC_Status; /**< */ + +/** + * Gets the number of received elements which is encoded in MOC_Status. + * + * @param status \b in status-object + * @param datatype \b in Type of received elements + * @param count \b out Number of received elements + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Get_count(MOC_Status *status, MOC_Datatype datatype, int *count); + +//@} + + + + + + + +/** + * \addtogroup comm_main + * + * \details + * Currently there is no support for creating and managing user-defined groups and + * communicators and probably never will be. The local storage of a SPU is very small + * and also the maximal number of nodes is limited to a small number and so there is + * doubt if the benefits will be greater than the overhead introduced by supporting + * user-defined groups and communicators. + * + * Only the predefined communicators \ref MOC_COMM_WORLD, \ref MOC_COMM_SELF and + * \ref MOC_COMM_NULL are available. + * + * The only operations which are currently implemented are \ref MOC_Comm_size and \ref + * MOC_Comm_rank. + **/ +/** + * \addtogroup comm_mgt + * + * Funktions for managing communicators. Because of reasons already stated (see \ref comm_main) + * there is no support for user-defined communicators. So this section is limited to functions + * which return the size of a specific communicator or the rank of the calling process. + **/ +//@{ + +/** + * Communicator-Handle. + * + * Masks the actual type which is used to encode the communicator. + * Char is used and therefore the maximum number of possible communicators is limited to 256. + * But because there are three predefined communicators (MPI_COMM_NULL, MPI_COMM_WORLD and + * MPI_COMM_SELF) only 253 user-defined communicators are possible. + **/ +typedef int MOC_Comm; + +/** + * Specifies a null communicator. + **/ +#define MOC_COMM_NULL 0 + +/** + * Specifies a constant that contains all of the processes. + **/ +#define MOC_COMM_WORLD 1 + +/** + * Specifies a constant that contains only the calling process. + **/ +#define MOC_COMM_SELF 2 + +/** + * Determines the rank of the calling process in the communicator. + * + * \param comm \b in commicator-handle + * \param rank \b out rank of the calling process in group of comm + * \retval MOC_SUCCESS No error; MPI routine completed successfully. + * \retval MOC_ERR_COMM Invalid communicator. A common error is to use a null communicator in a call. + **/ +int MOC_Comm_rank ( MOC_Comm comm, int *rank ); + +/** + * Determines the size of the group associated with a communictor. + * + * \param comm \b in commicator-handle + * \param size \b out number of processes in the group of comm + * \retval MOC_SUCCESS No error; MPI routine completed successfully. + * \retval MOC_ERR_COMM Invalid communicator. A common error is to use a null communicator in a call. + **/ +int MOC_Comm_size ( MOC_Comm comm, int *size ); + +//@} + + + + + + +/** + * \addtogroup environment_timer + * + * Functions to measure time. + * + * On the PPU gettimeofday from time.h is used. On the SPU either also gettimeofday or the + * spu-timer-library is used depending on the configuration during compilation of the MOC-library. + * When gettimeofday is used on the SPU the time is global in the MOC-environment with the + * disadvantage that the SPU-threads get their times from the PPU using DMA causing inaccuracy and + * delays. + **/ +//@{ + +/** + * Returns a floating-point number of seconds, representing elapsed wall-clock + * time since some time in the past. + * + * @return wall-clock time in seconds. + **/ +double MOC_Wtime(void); + +/** + * Returns the resolution of Moc_Wtime in seconds. + * + * @return resolution in seconds. + **/ +double MOC_Wtick(void); + +//@} + + + + + + + +/** + * \addtogroup p2p_main + **/ +//@{ + +/** + * Indicates, at which message-size \ref MOC_Send switches to synchronous send. + */ +#define MOC_SEND_TRESHOLD 4096 + + +/** + * Performs a blocking standard mode send operation. + * + * \note This routine may block until the message is received. + * + * @param buf \b in Pointer to buffer where data is stored + * @param count \b in Number of elements to be send (not equal to actual byte-value) + * @param datatype \b in Type of elements to be send + * @param dest \b in Rank of receiving process + * @param tag \b in Tag of message + * @param comm \b in communicator of message + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Send(void* buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm); + +/** + * Performs a blocking standard mode receive operation. + * + * \note This routine blocks until the message is received. + * + * @param buf \b inout Buffer into which data should be stored + * @param count \b in Number of elements in receive buffer (not equal to actual byte-value) + * @param datatype \b in Datatype of each receive buffer element + * @param source \b in Rank of source + * @param tag \b in Tag of message + * @param comm \b in Communicator of message + * @param status \b inout Object holding status-information (has to be allocated by user) + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Recv(void* buf, int count, MOC_Datatype datatype, int source, int tag, + MOC_Comm comm, MOC_Status *status); + +/** + * Waits till a message is received and returns information without actually + * receiving the message. + * + * @param source \b in source of message + * @param tag \b in message-tag + * @param comm \b in communicator + * @param status \b out status-object holding information about message + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Probe(int source, int tag, MOC_Comm comm, MOC_Status *status); + +/** + * Tests if a message is available and returns information without actually + * receiving the message. + * + * @param source \b in source of message + * @param tag \b in message-tag + * @param comm \b in communicator + * @param flag \b out boolean value telling if a message is available + * @param status \b out status-object holding information about message + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Iprobe(int source, int tag, MOC_Comm comm, int *flag, MOC_Status *status); + +//@} + + + + + + +/** + * \addtogroup p2p_synch + **/ +//@{ + +/** + * Performs a blocking synchronous mode send operation. + * + * \note This routine blocks until the message is received. + * + * @param buf \b in Pointer to buffer where data is stored + * @param count \b in Number of elements to be send (not equal to actual byte-value) + * @param datatype \b in Type of elements to be send + * @param dest \b in Rank of receiving process + * @param tag \b in Tag of message + * @param comm \b in communicator of message + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Ssend(void* buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm); + +//@} + + + + + +/** + * \addtogroup p2p_buffered + **/ +//@{ + +/** + * Performs a blocking buffered mode send operation. + * + * \note This routine blocks until the send-buffer is free. + * + * @param buf \b in Pointer to buffer where data is stored + * @param count \b in Number of elements to be send (not equal to actual byte-value) + * @param datatype \b in Type of elements to be send + * @param dest \b in Rank of receiving process + * @param tag \b in Tag of message + * @param comm \b in communicator of message + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Bsend(void* buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm); + +//@} + + + + + +/** + * \addtogroup p2p_sendrecv + **/ +//@{ + +/** + * Execute a blocking send and receive operation. Both send and receive use the same + * communicator, but possibly different tags. The send buffer and receive buffers may + * be disjoint, and may have different lengths and datatypes. + * + * @param sendbuf \b in Pointer to buffer where data is stored + * @param sendcount \b in Number of elements to be send (not equal to actual byte-value) + * @param sendtype \b in Type of elements to be send + * @param dest \b in Rank of receiving process + * @param sendtag \b in Tag of message to be send + * + * @param recvbuf \b inout Buffer into which data should be stored + * @param recvcount \b in Number of elements in receive buffer (not equal to actual byte-value) + * @param recvtype \b in Datatype of each receive buffer element + * @param source \b in Rank of source + * @param recvtag \b in Tag of message to be received + * + * @param comm \b in Communicator of message + * @param status \b inout Object holding status-information (has to be allocated by user) + * + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Sendrecv(void *sendbuf, int sendcount, MOC_Datatype sendtype, int dest, + int sendtag, void *recvbuf, int recvcount, MOC_Datatype recvtype, + int source, int recvtag, MOC_Comm comm, MOC_Status *status); + +/** + * Execute a blocking send and receive. The same buffer is used both for the send + * and for the receive, so that the message sent is replaced by the message + * received. + * + * @param buf \b inout Pointer to buffer + * @param count \b in Number of elements (not equal to actual byte-value) + * @param datatype \b in Type of elements + * + * @param dest \b in Rank of receiving process + * @param sendtag \b in Tag of message to be send + * + * @param source \b in Rank of source + * @param recvtag \b in Tag of message to be received + * + * @param comm \b in Communicator of message + * @param status \b inout Object holding status-information (has to be allocated by user) + * + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Sendrecv_replace(void* buf, int count, MOC_Datatype datatype, int dest, + int sendtag, int source, int recvtag, MOC_Comm comm, + MOC_Status *status); + +//@} + + + + +/** + * \addtogroup p2p_imm + **/ +//@{ + +/** + * Communication-Request (Handle) + **/ +typedef struct moc_request_struct + { + int request_type; + union + { + imoc_dma_request dma_data; + imoc_issend_request issend_request; + } request_data ; + } MOC_Request /**< Communication-Request (Handle) */; + +/** + * Performs a non-blocking standard mode send operation. + * + * \note This routine returns as soon as possible. + * + * @param buf \b in Pointer to buffer where data is stored + * @param count \b in Number of elements to be send (not equal to actual byte-value) + * @param datatype \b in Type of elements to be send + * @param dest \b in Rank of receiving process + * @param tag \b in Tag of message + * @param comm \b in communicator of message + * @param request \b out communication request (handle) + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_ISend(void* buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, + MOC_Request *request); + +/** + * Performs a non-blocking synchronous mode send operation. + * + * \note This routine returns as soon as possible (After the message-envelope has + * been written into the receiver's message-queue). + * + * @param buf \b in Pointer to buffer where data is stored + * @param count \b in Number of elements to be send (not equal to actual byte-value) + * @param datatype \b in Type of elements to be send + * @param dest \b in Rank of receiving process + * @param tag \b in Tag of message + * @param comm \b in communicator of message + * @param request \b out communication request (handle) + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_ISsend(void* buf, int count, MOC_Datatype datatype, int dest, int tag, MOC_Comm comm, + MOC_Request *request); + +/** + * Tests, if a non-blocking communication has been completed. + * + * @param request \b in Communication-Request (Handle) + * @param flag \b out true, if communication-request has been completed + * @param status \b out Object holding status-information + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Test(MOC_Request *request, int *flag, MOC_Status *status); + +/** + * Wait till a non-blocking communication has been completed. + * + * @param request \b in Communication-Request (Handle) + * @param status \b out Object holding status-information + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Wait(MOC_Request *request, MOC_Status *status); + +//@} + + + + + + +/** + * \addtogroup broadcast + **/ +//@{ + +/** + * Broadcasts a message from the process with rank "root" to all other processes of the group. + * + * \note The broadcast-message can also be received by a MOC_Recv using MOC_BCAST_TAG. + * + * @param buffer \b inout starting address of buffer + * @param count \b in number of elements to be send or received + * @param datatype \b in Type of elements to be send or received + * @param root \b in rank of the process who sends the broadcast-message + * @param comm \b in communicator of message + **/ +int MOC_Bcast(void* buffer, int count, MOC_Datatype datatype, int root, MOC_Comm comm ); + +/** + * Blocks the caller until all processes in the communicator have called it; that is, the + * call returns at any process only after all members of the communicator have entered the + * call. + * + * @param comm \b in communicator of message + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Barrier(MOC_Comm comm ); + +//@} + + + + + +#endif /*MOC_H_*/ + diff --git a/include/moc_datatype.h b/include/moc_datatype.h new file mode 100755 index 0000000..01c22a4 --- /dev/null +++ b/include/moc_datatype.h @@ -0,0 +1,149 @@ +#ifndef MOC_DATATYPE_H_ +#define MOC_DATATYPE_H_ + +#include + + +/** + * \addtogroup p2p_datatype + * + * Datatypes supported by MOC. + * + * There are the normal datatypes defined by C (char, short, int, ...) and special + * vector-datatypes used by the Cell Broadband Engine. For more information see + * "C/C++ Language Extensions for Cell Broadband Engine Architecture - Version 2.5" + * chapter 1.1. + **/ +//@{ +/** + * @name PPU & SPU + **/ +//@{ + +/** + * Typedef defining MOC_Datatype. + * + * One byte is used to encode the Data-Type. The first four msb hold the + * size in byte / 2 ( if ((datatype & 0xF0)>>4) == 0 then size = 1 else + * size = ((datatype & 0xF0)>>4)*2 ) and the four lsb hold an id. The + * combination of id and size is used to uniquely identify + * a datatype (or rather a group of datatypes belonging together). + **/ +typedef uint8_t MOC_Datatype; + +/** + * MOC_Byte is a special datatype. It can match any datatype. + * It has a size of 1 byte. + **/ +#define MOC_BYTE ((MOC_Datatype)0+0) + +/** + * C-Datatype char. + * It has a size of 1 byte. + **/ +#define MOC_CHAR ((MOC_Datatype)0+1) + +/** + * C-Datatype unsigned char. + * It has a size of 1 byte. + **/ +#define MOC_UNSIGNED_CHAR ((MOC_Datatype)0+2) + +/** + * C-Datatype short. + * It has a size of 2 byte. + **/ +#define MOC_SHORT ((MOC_Datatype)16+0) + +/** + * C-Datatype unsigned short. + * It has a size of 2 byte. + **/ +#define MOC_UNSIGNED_SHORT ((MOC_Datatype)16+1) + +/** + * C-Datatype int. + * It has a size of 4 byte. + **/ +#define MOC_INT ((MOC_Datatype)32+0) + +/** + * C-Datatype unsigned int. + * It has a size of 4 byte. + **/ +#define MOC_UNSIGNED ((MOC_Datatype)32+1) + +/** + * C-Datatype long long. + * It has a size of 8 byte. + **/ +#define MOC_LONG_LONG ((MOC_Datatype)64+0) + +/** + * C-Datatype unsigned long long. + * It has a size of 8 byte. + **/ +#define MOC_UNSIGNED_LONG_LONG ((MOC_Datatype)64+1) + +/** + * C-Datatype float. + * It has a size of 4 byte. + **/ +#define MOC_FLOAT ((MOC_Datatype)32+2) + +/** + * C-Datatype double. + * It has a size of 8 byte. + **/ +#define MOC_DOUBLE ((MOC_Datatype)64+5) + + +/** + * Cell-specific Datatype vector unsigned char (vec_uchar16). + * It has a size of 16 byte. + **/ +#define MOC_VEC_UCHAR16 ((MOC_Datatype)128+0) + +/** + * Cell-specific Datatype vector unsigned short (vec_ushort8). + * It has a size of 16 byte. + **/ +#define MOC_VEC_USHORT8 ((MOC_Datatype)128+1) + +/** + * Cell-specific Datatype vector unsigned int (vec_uint4). + * It has a size of 16 byte. + **/ +#define MOC_VEC_UINT4 ((MOC_Datatype)128+2) + +/** + * Cell-specific Datatype vector signed char (vec_char16). + * It has a size of 16 byte. + **/ +#define MOC_VEC_CHAR16 ((MOC_Datatype)128+4) + +/** + * Cell-specific Datatype vector signed short (vec_short8). + * It has a size of 16 byte. + **/ +#define MOC_VEC_SHORT8 ((MOC_Datatype)128+3) + +/** + * Cell-specific Datatype vector signed int (vec_int4). + * It has a size of 16 byte. + **/ +#define MOC_VEC_INT4 ((MOC_Datatype)128+5) + + +/** + * Cell-specific Datatype vector float (vec_float4). + * It has a size of 16 byte. + **/ +#define MOC_VEC_FLOAT4 ((MOC_Datatype)128+6) + + + + +//@} +//@} +#endif /*MOC_DATATYPE_H_*/ diff --git a/include/moc_error_codes.h b/include/moc_error_codes.h new file mode 100755 index 0000000..94985f8 --- /dev/null +++ b/include/moc_error_codes.h @@ -0,0 +1,72 @@ +#ifndef MOC_ERROR_H_ +#define MOC_ERROR_H_ + + +/** + * \addtogroup environment_error + * + * This section describes how errors are handled. + * + * Every function should return an integer if possible. This integer should be + * MOC_SUCCESS if the operation teminated successfully otherwise an error-code + * telling the reason of the error is returned. + * + * For more information see Chapter 7.2 of the MPI 1.3 Standard. + **/ +//@{ + + + +/** + * @name MPI_ERROR-CLASSES + * + * Error-classes defined by the MPI-standard. Every error-code returned by a + * MOC-function should belong to an error-class or be an error-class itself. + * This enables implementation-independend error-handling. + * + * Value-range: 0 = MOC_SUCCESS < MOC_ERR_... <= MOC_ERR_LASTCODE + **/ +//@{ +#define MOC_SUCCESS 0 /**< No error */ +#define MOC_ERR_BUFFER 1000 /**< Invalid buffer pointer */ +#define MOC_ERR_COUNT 2000 /**< Invalid count argument */ +#define MOC_ERR_TYPE 3000 /**< Invalid datatype argument */ +#define MOC_ERR_TAG 4000 /**< Invalid tag argument */ +#define MOC_ERR_COMM 5000 /**< Invalid communicator */ +#define MOC_ERR_RANK 6000 /**< Invalid rank */ +#define MOC_ERR_REQUEST 7000 /**< Invalid request (handle) */ +#define MOC_ERR_ROOT 8000 /**< Invalid root */ +#define MOC_ERR_GROUP 9000 /**< Invalid group */ +#define MOC_ERR_OP 10000 /**< Invalid operation */ +#define MOC_ERR_TOPOLOGY 11000 /**< Invalid topology */ +#define MOC_ERR_DIMS 12000 /**< Invalid dimension argument */ +#define MOC_ERR_ARG 13000 /**< Invalid argument of some other kind */ +#define MOC_ERR_UNKNOWN 14000 /**< Unknown error */ +#define MOC_ERR_TRUNCATE 15000 /**< Message truncated on receive */ +#define MOC_ERR_OTHER 16000 /**< Known error not in this list */ +#define MOC_ERR_INTERN 17000 /**< Internal MOC (implementation) error */ +#define MOC_ERR_IN_STATUS 18000 /**< Error code is in status */ +#define MOC_ERR_PENDING 19000 /**< Pending request */ +#define MOC_ERR_LASTCODE 20000 /**< Last error code */ +//@} + + + +/** + * @name MOC-Error-Codes + * + * Implementation dependent Error-Codes. + **/ +//@{ +#define MOC_ERR_NOT_IMPLEMENTED 17001 /**< Function not implemented */ +#define MOC_ERR_BUFFER_OVERFLOW 17002 /**< Internal Buffer Overflow */ +#define MOC_ERR_NO_MEMORY 17003 /**< Insufficient Memory */ +#define MOC_ERR_NO_BUFFER 17004 /**< Insufficient Buffer-Space */ +#define MOC_ERR_MESSAGE_EXHAUSTED 17005 /**< No further messages possible */ +#define MOC_ERR_BAD_ALIGNMENT 16001 /**< Base-Adress of Buffer isn't 16-byte aligned */ +#define MOC_ERR_BAD_SIZE 16002 /**< Bad Size (probably no multiple of 16) */ +//@} + + +//@} +#endif /*MOC_ERROR_H_*/ diff --git a/include/ppu/moc.h b/include/ppu/moc.h new file mode 100755 index 0000000..0e8e3ad --- /dev/null +++ b/include/ppu/moc.h @@ -0,0 +1,129 @@ +#ifndef MOC_H_PPU +#define MOC_H_PPU + + +#include "moc_dma_ppu.h" +#include "moc_datatype_ppu.h" +#include "../moc.h" + +#include +#include + + + +/** + * Maximum number of possible SPU-threads. + **/ +#define MOC_SPU_THREAD_MAX 16 + + + + + +/** + * \addtogroup environment_startup + **/ +//@{ +/** + * @name PPU-only + **/ +//@{ + +/** + * Returns the number of available SPUs. + * + * \attention PPU-only + * + * \note Must be called before \ref MOC_Init + * + * \note This function should return the count of free SPUs. But this + * doesn't really works. To get the available SPU-count the + * function spe_cpu_info_get() from libspe2 with + * SPE_COUNT_USABLE_SPES-flag is used. However this function can only + * detect if a SPU-thread is used by the calling function. There seems + * to be no means to detect SPU-thread used by other applications. + * + * + * \param count \b out number of available SPUs + * \retval MOC_SUCCESS No error; MPI routine completed successfully. + * \retval ... error-code + **/ +int MOC_Get_avail_spu_count(int* count); + +/** + * Returns the number of SPUs. + * + * \attention PPU-only + * + * \note Must be called before \ref MOC_Init + * + * \param count \b out SPU-count + * \retval MOC_SUCCESS No error; MPI routine completed successfully. + * \retval ... error-code + **/ +int MOC_Get_max_spu_count(int* count); + +/** + * Adds a SPU-Thread. + * + * \attention PPU-only + * + * \note Must be called before calling \ref MOC_Init + * + * \note The order of executions defines the order of the ranks of the SPU-Threads + * + * \param phandle \b in Handle of the SPE-Program + * \param argp \b in Pointer to some user-defined information in the main-memory + * \retval MOC_SUCCESS No error; MPI routine completed successfully. + * \retval MOC_ERR_BUFFER_OVERFLOW A Buffer-Overflow occured. Mosst likely you tried to add more + * SPU-threads than defined by \ref MOC_SPU_THREAD_MAX. + * \retval MOC_ERR_INTERN Internal Error + **/ +int MOC_Add_spu_thread ( spe_program_handle_t* phandle, void* argp ); + +/** + * Sets the size of the buffer used for buffered communication. + * + * \attention PPU-only + * + * \note Must be called before \ref MOC_Init + * + * \param size buffer-size + * \return 0 if success, otherwise error-code + **/ +int MOC_Set_buffer_size ( uint32_t size ); + +/** + * Sets the size of the message-queues. + * + * \attention PPU-only + * + * \note Must be called before \ref MOC_Init + * + * \param size queue-size + * \return 0 if success, otherwise error-code + **/ +int MOC_Set_queue_size ( uint8_t size ); + +/** + * Initialize the MPI execution environment. + * + * \attention PPU-only function + * + * \note All processes must call this routine before executing any MOC-routine. + * + * \param argc \b in Pointer to the number of arguments + * \param argv \b in Pointer to the argument vector + * \retval MOC_SUCCESS No error; MPI routine completed successfully. + * \retval MOC_ERR_NO_MEMORY Insufficient Memory. + * \retval MOC_ERR_INTERN Internal Error + **/ +int MOC_Init ( int *argc, char ***argv ); + +//@} +//@} + + + +#endif /*MOC_H_*/ + diff --git a/include/ppu/moc_datatype_ppu.h b/include/ppu/moc_datatype_ppu.h new file mode 100755 index 0000000..976b8ba --- /dev/null +++ b/include/ppu/moc_datatype_ppu.h @@ -0,0 +1,65 @@ +#ifndef MOC_DATATYPE_PPU_H_ +#define MOC_DATATYPE_PPU_H_ + +#include "../moc_datatype.h" +/** + * \addtogroup p2p_datatype + **/ +//@{ +/** + * @name PPU-only + **/ +//@{ + +/** + * C-Datatype long. + * It has a size of 8 byte. + * \attention On the SPU long has a size of 4 byte. So if + * you are trying to send data of type long from the PPU to a + * SPU or vice versa there will be an error. + **/ +#define MOC_LONG ((MOC_Datatype)64+2) + +/** + * C-Datatype unsigned long. + * It has a size of 8 byte. + * \attention On the SPU unsigned long has a size of 4 byte. So if + * you are trying to send data of type long from the PPU to a + * SPU or vice versa there will be an error. + **/ +#define MOC_UNSIGNED_LONG ((MOC_Datatype)64+3) + + + +/** + * Cell-specific Datatype vector bool char (vec_bchar16). + * It has a size of 16 byte. + * \note PPU-only. Is mapped to the SPU-Datatype vector unsigned char. + **/ +#define MOC_VEC_BCHAR16 ((MOC_Datatype)128+0) + +/** + * Cell-specific Datatype vector bool short (vec_bshort8). + * It has a size of 16 byte. + * \note PPU-only. Is mapped to the SPU-Datatype vector unsigned short. + **/ +#define MOC_VEC_BSHORT8 ((MOC_Datatype)128+1) + +/** + * Cell-specific Datatype vector pixel (vec_pixel8). + * It has a size of 16 byte. + * \note PPU-only. Is mapped to the SPU-Datatype vector unsigned short. + **/ +#define MOC_VEC_PIXEL8 ((MOC_Datatype)128+1) + +/** + * Cell-specific Datatype vector bool int (vec_bint4). + * It has a size of 16 byte. + * \note PPU-only. Is mapped to the SPU-Datatype vector unsigned int. + **/ +#define MOC_VEC_BINT4 ((MOC_Datatype)128+2) + + +//@} +//@} +#endif /*MOC_DATATYPE_PPU_H_*/ diff --git a/include/ppu/moc_dma_ppu.h b/include/ppu/moc_dma_ppu.h new file mode 100755 index 0000000..b76e243 --- /dev/null +++ b/include/ppu/moc_dma_ppu.h @@ -0,0 +1,119 @@ +#ifndef MOC_DATA_TRANSFER_PPU_H_ +#define MOC_DATA_TRANSFER_PPU_H_ + +#include +#include "../moc.h" +#include "moc_datatype_ppu.h" + +/** + * \addtogroup dma_access + **/ +//@{ +/** + * @name PPU-only + **/ +//@{ + + +/** + * Wrapper-function for a blocking DMA-get operation. + * Data can be of any size, constraints of low-level DMA-functions + * are dealt by this function. + * However data-addresses have to be at least 16-byte aligned. + * + * @param target \b out pointer to buffer + * @param source \b in local-store address of data + * @param count \b in size of data in byte + * @param datatype \b in Type of Elements + * @param dest \b in rank of source spe + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Get_data(void* target, uint32_t source, int count, + MOC_Datatype datatype, int dest); + +/** + * Wrapper-function for a blocking DMA-put operation. + * Data-size should be a multiple of 16 because of low-level constraints, but + * there is no upper limit of transfer-size. + * Data-addresses have to be at least 16-byte aligned. + * + * @param source \b in pointer to data + * @param target \b in local-store address of buffer + * @param count \b in size of data in byte + * @param datatype \b in Type of Elements + * @param src \b in rank of source-SPE + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Put_data(void* source, uint32_t target, int count, + MOC_Datatype datatype, int src); + +/** + * Wrapper-function for a non-blocking DMA-get operation. + * Data can be of any size, constraints of low-level DMA-functions + * are dealt by this function. + * However data-addresses have to be at least 16-byte aligned. + * Operation-completion can be derived with MOC_Test and MOC_Wait. + * + * @param target \b out pointer to buffer + * @param source \b in local-store address of data + * @param count \b in size of data in byte + * @param datatype \b in Type of Elements + * @param dest \b in rank of source spe + * @param request \b out communication request (handle) + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_IGet_data(void* target, uint32_t source, int count, + MOC_Datatype datatype, int dest, MOC_Request *request); + +/** + * Wrapper-function for a non-blocking DMA-put operation. + * Data-size should be a multiple of 16 because of low-level constraints, but + * there is no upper limit of transfer-size. + * Data-addresses have to be at least 16-byte aligned. + * Operation-completion can be derived with MOC_Test and MOC_Wait. + * + * @param source \b in pointer to data + * @param target \b in local-store address of buffer + * @param count \b in size of data in byte + * @param datatype \b in Type of Elements + * @param src \b in rank of source-SPE + * @param request \b out communication request (handle) + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_IPut_data(void* source, uint32_t target, int count, + MOC_Datatype datatype, int src, MOC_Request *request); + +/** + * Translates an effective-address of a SPU into the corresponding local-store address. + * + * @param ea \b in effective-address + * @param rank \b in rank of SPU + * @param ls \b out local-store address + **/ +int MOC_Translate_EA_to_LS(uint64_t ea, int rank, uint32_t* ls); + +//@} + +/** + * Waits till a MOC_IGet_data or IMOC_IPut_data is completed. + * + * @param request \b in request-handle + * @return 0 when success otherwise error-code + **/ +int MOC_Wait_data(MOC_Request* request); + +/** + * Tests if a MOC_IGet_data or IMOC_IPut_data is completed. + * + * @param request \b in request-handle + * @param flag \b out true if operation is completed + * @return 0 when success otherwise error-code + **/ +int MOC_Test_data(MOC_Request* request, int *flag); + +//@} +#endif /*MOC_DATA_TRANSFER_PPU_H_*/ diff --git a/include/spu/moc.h b/include/spu/moc.h new file mode 100755 index 0000000..7bc7ad1 --- /dev/null +++ b/include/spu/moc.h @@ -0,0 +1,48 @@ +#ifndef MOC_H_SPU +#define MOC_H_SPU + + +#include "moc_dma_spu.h" +#include "moc_datatype_spu.h" +#include "../moc.h" + +#include + + + +/** + * \addtogroup environment_startup + **/ +//@{ +/** + * @name SPU-only + **/ +//@{ + +/** + * Initialize the MPI execution environment. + * + * \anchor moc_init_spu + * + * \attention SPU-only function + * + * \note All processes must call this routine before executing any MOC-routine. + * + * \todo Copying of user-defined information from main-memory to local buffer not implemented + * + * \param argp \b in Pointer to user-defined information in the main-memory + * \param length \b in Length of the user-defined information in bytes + * \param buffer \b out Buffer into which the user-defined information should be copied + * \retval MOC_SUCCESS No error; MPI routine completed successfully. + * \retval MOC_ERR_NO_MEMORY Insufficient Memory. + * \retval MOC_ERR_INTERN Internal Error + **/ +int MOC_Init (unsigned long long argp, int length, void* buffer); + +//@} +//@} + + + +#endif /*MOC_H_*/ + diff --git a/include/spu/moc_datatype_spu.h b/include/spu/moc_datatype_spu.h new file mode 100755 index 0000000..bd546c0 --- /dev/null +++ b/include/spu/moc_datatype_spu.h @@ -0,0 +1,60 @@ +#ifndef MOC_DATATYPE_SPU_H_ +#define MOC_DATATYPE_SPU_H_ + +#include "../moc_datatype.h" +/** + * \addtogroup p2p_datatype + **/ +//@{ +/** + * @name SPU-only + **/ +//@{ + + +/** + * C-Datatype long. + * It has a size of 4 byte. + * \attention On the PPU long has a size of 8 byte. So if + * you are trying to send data of type long from the PPU to a + * SPU or vice versa there will be an error. + **/ +#define MOC_LONG ((MOC_Datatype)32+2) + +/** + * C-Datatype unsigned long. + * It has a size of 4 byte. + * \attention On the SPU unsigned long has a size of 8 byte. So if + * you are trying to send data of type long from the PPU to a + * SPU or vice versa there will be an error. + **/ +#define MOC_UNSIGNED_LONG ((MOC_Datatype)32+3) + + + +/** + * Cell-specific Datatype vector unsigned long long (vec_ullong2). + * It has a size of 16 byte. + * \note SPU-only. Is mapped to the PPU-Datatype vector bool char. + **/ +#define MOC_VEC_ULLONG2 ((MOC_Datatype)128+0) + +/** + * Cell-specific Datatype vector signed long long (vec_llong2). + * It has a size of 16 byte. + * \note SPU-only. Is mapped to the PPU-Datatype vector bool short. + **/ +#define MOC_VEC_LLONG2 ((MOC_Datatype)128+1) + +/** + * Cell-specific Datatype vector double (vec_double2). + * It has a size of 16 byte. + * \note SPU-only. Is mapped to the PPU-Datatype vector bool int. + **/ +#define MOC_VEC_DOUBLE2 ((MOC_Datatype)128+2) + + + +//@} +//@} +#endif /*MOC_DATATYPE_SPU_H_*/ diff --git a/include/spu/moc_dma_spu.h b/include/spu/moc_dma_spu.h new file mode 100755 index 0000000..53d6083 --- /dev/null +++ b/include/spu/moc_dma_spu.h @@ -0,0 +1,117 @@ +#ifndef MOC_DATA_TRANSFER_SPU_H_ +#define MOC_DATA_TRANSFER_SPU_H_ + +#include +#include "moc_datatype_spu.h" +#include "../moc.h" + +/** + * \addtogroup dma_access + **/ +//@{ +/** + * @name SPU-only + **/ +//@{ + + +/** + * Wrapper-function for a blocking DMA-get operation. + * Data can be of any size, constraints of low-level DMA-functions + * are dealt by this function. + * However data-addresses have to be at least 16-byte aligned. + * + * @param target \b out pointer to buffer + * @param source \b in ea-address of data + * @param count \b in size of data in byte + * @param datatype \b in Type of Elements + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Get_data(void* target, uint64_t source, int count, + MOC_Datatype datatype); + +/** + * Wrapper-function for a blocking DMA-put operation. + * Data-size should be a multiple of 16 because of low-level constraints, but + * there is no upper limit of transfer-size. + * Data-addresses have to be at least 16-byte aligned. + * + * @param source \b in pointer to data + * @param target \b in ea-address of buffer + * @param count \b in size of data in byte + * @param datatype \b in Type of Elements + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_Put_data(void* source, uint64_t target, int count, + MOC_Datatype datatype); + +/** + * Wrapper-function for a non-blocking DMA-get operation. + * Data can be of any size, constraints of low-level DMA-functions + * are dealt by this function. + * However data-addresses have to be at least 16-byte aligned. + * Operation-completion can be derived with MOC_Test and MOC_Wait. + * + * @param target \b out pointer to buffer + * @param source \b in ea-address of data + * @param count \b in size of data in byte + * @param datatype \b in Type of Elements + * @param request \b out communication request (handle) + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_IGet_data(void* target, uint64_t source, int count, + MOC_Datatype datatype, MOC_Request *request); + +/** + * Wrapper-function for a non-blocking DMA-put operation. + * Data-size should be a multiple of 16 because of low-level constraints, but + * there is no upper limit of transfer-size. + * Data-addresses have to be at least 16-byte aligned. + * Operation-completion can be derived with MOC_Test and MOC_Wait. + * + * @param source \b in pointer to data + * @param target \b in ea-address of buffer + * @param count \b in size of data in byte + * @param datatype \b in Type of Elements + * @param request \b out communication request (handle) + * @retval MOC_SUCCESS No error; MPI routine completed successfully. + * @retval ... error-code + **/ +int MOC_IPut_data(void* source, uint64_t target, int count, + MOC_Datatype datatype, MOC_Request *request); + +/** + * Translates a local-store address of the calling SPU into the corresponding + * effective-address. + * + * @param ls \b in local-store address + * @param ea \b out effective-address + **/ +int MOC_Translate_LS_to_EA(void* ls, uint64_t* ea); + +//@} + + +/** + * Tests if a MOC_IGet_data or IMOC_IPut_data is completed. + * + * @param request \b in request-handle + * @param flag \b out true if operation is completed + * @return 0 when success otherwise error-code + **/ +int MOC_Test_data(MOC_Request* request, int *flag); + +/** + * Waits till a MOC_IGet_data or IMOC_IPut_data is completed. + * + * @param request \b in request-handle + * @return 0 when success otherwise error-code + **/ +int MOC_Wait_data(MOC_Request* request); + +//@} +#endif /*MOC_DATA_TRANSFER_SPU_H_*/ + diff --git a/lib/ppu/libmoc_ppu.a b/lib/ppu/libmoc_ppu.a new file mode 100755 index 0000000..f69df4a Binary files /dev/null and b/lib/ppu/libmoc_ppu.a differ diff --git a/lib/spu/libmoc_spu.a b/lib/spu/libmoc_spu.a new file mode 100755 index 0000000..d062ea8 Binary files /dev/null and b/lib/spu/libmoc_spu.a differ diff --git a/presentations/MOC-Präsentation_3.odp b/presentations/MOC-Präsentation_3.odp new file mode 100755 index 0000000..58f7f29 Binary files /dev/null and b/presentations/MOC-Präsentation_3.odp differ diff --git a/presentations/MPI_on_Cell b/presentations/MPI_on_Cell new file mode 100755 index 0000000..3032952 Binary files /dev/null and b/presentations/MPI_on_Cell differ diff --git a/presentations/MPI_on_Cell.pdf b/presentations/MPI_on_Cell.pdf new file mode 100755 index 0000000..df5c334 Binary files /dev/null and b/presentations/MPI_on_Cell.pdf differ diff --git a/presentations/MPI_on_Cell_2.odp b/presentations/MPI_on_Cell_2.odp new file mode 100755 index 0000000..825af5e Binary files /dev/null and b/presentations/MPI_on_Cell_2.odp differ diff --git a/presentations/MPI_on_Cell_2.pdf b/presentations/MPI_on_Cell_2.pdf new file mode 100755 index 0000000..3d2c367 Binary files /dev/null and b/presentations/MPI_on_Cell_2.pdf differ diff --git a/src/noarch/communication/moc_bcast.c b/src/noarch/communication/moc_bcast.c new file mode 100755 index 0000000..494502a --- /dev/null +++ b/src/noarch/communication/moc_bcast.c @@ -0,0 +1,42 @@ +#include + +#ifdef __SPU__ +#include +#else +#include +#endif + +int MOC_Bcast(void* buffer, int count, MOC_Datatype datatype, int root, + MOC_Comm comm) + { + MOC_Status status; + + if (comm == MOC_COMM_SELF) + return 0; + /** Sending branch **/ + if (node_handle.rank == root) + { + int t, err; + struct moc_request_struct requests[node_handle.comm_size]; + + for (t = 0; t < node_handle.comm_size; t++) + { + if ((err = MOC_ISend(buffer, count, datatype, t, MOC_BCAST_TAG, + comm, &requests[t])) != 0) + return err; + } + for (t = 0; t < node_handle.comm_size; t++) + { + if ((err = MOC_Wait(&requests[t], &status)) != 0) + return err; + } + return 0; + } + /** Receiving Branch **/ + else + { + return MOC_Recv(buffer, count, datatype, root, MOC_BCAST_TAG, comm, + &status); + } + } + diff --git a/src/noarch/communication/moc_iprobe.c b/src/noarch/communication/moc_iprobe.c new file mode 100755 index 0000000..255ee0e --- /dev/null +++ b/src/noarch/communication/moc_iprobe.c @@ -0,0 +1,25 @@ + +#include +#include + +int MOC_Iprobe(int source, int tag, MOC_Comm comm, int *flag, + MOC_Status *status) + { + moc_message_envelope_t* message; + status->MOC_SOURCE = source; + message = IMOC_get_entry(source, tag, comm, 0, status); + if (message) + { + status->MOC_TAG = message->tag; + status->MOC_ERROR = 0; + status->message_size = message->size; + status->mid = message->id; + *flag = 1; + } + else + { + *flag = 0; + } + return 0; + } + diff --git a/src/noarch/communication/moc_isend.c b/src/noarch/communication/moc_isend.c new file mode 100755 index 0000000..38c0c95 --- /dev/null +++ b/src/noarch/communication/moc_isend.c @@ -0,0 +1,54 @@ +#include +#include + +#include +#include +#ifdef __SPU__ +#include +#include +#include +#include +#else +#include +#include +#include +#include +#endif + +int MOC_ISend(void* buf, int count, MOC_Datatype datatype, int dest, int tag, + MOC_Comm comm, MOC_Request *request) + { + int bytecount; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + /** byte-count <= 4096 ==> buffered send **/ + if (bytecount <= MOC_SEND_TRESHOLD) + { + uint32_t err = MOC_Bsend(buf, count, datatype, dest, tag, comm); + if (!err) + { + request->request_type = MOC_REQ_TYPE_ISSEND; + request->request_data.issend_request.isFinished = 1; + request->request_data.issend_request.source = node_handle.rank; + request->request_data.issend_request.tag = tag; + request->request_data.issend_request.message_size = bytecount; + } + else + { + request->request_data.issend_request.isFinished = 1; + return err; + } + } + /** other ==> true non-blocking send **/ + else + { + return MOC_ISsend(buf, count, datatype, dest, tag, comm, request); + } + + return 0; + } + diff --git a/src/noarch/communication/moc_probe.c b/src/noarch/communication/moc_probe.c new file mode 100755 index 0000000..fcac995 --- /dev/null +++ b/src/noarch/communication/moc_probe.c @@ -0,0 +1,16 @@ +#include +#include + +int MOC_Probe(int source, int tag, MOC_Comm comm, MOC_Status *status) + { + moc_message_envelope_t* message; + status->MOC_SOURCE = source; + status->MOC_ERROR = 0; + while (0 == (message = IMOC_get_entry(source, tag, comm, 0, status))) + ; + status->MOC_TAG = message->tag; + status->message_size = message->size; + status->mid = message->id; + return 0; + } + diff --git a/src/noarch/communication/moc_send.c b/src/noarch/communication/moc_send.c new file mode 100755 index 0000000..94e4ac3 --- /dev/null +++ b/src/noarch/communication/moc_send.c @@ -0,0 +1,36 @@ +#include +#include + +#include +#include + +#ifdef __SPU__ +#include +#include +#include +#include +#else +#include +#include +#include +#include +#endif + +int MOC_Send(void* buf, int count, MOC_Datatype datatype, int dest, int tag, + MOC_Comm comm) + { + int bytecount; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + if (bytecount <= MOC_SEND_TRESHOLD) + return MOC_Bsend(buf, count, datatype, dest, tag, comm); + else + return MOC_Ssend(buf, count, datatype, dest, tag, comm); + + return 0; + } + diff --git a/src/noarch/communication/moc_send_recv.c b/src/noarch/communication/moc_send_recv.c new file mode 100755 index 0000000..55ec8ff --- /dev/null +++ b/src/noarch/communication/moc_send_recv.c @@ -0,0 +1,20 @@ +#include + +int MOC_Sendrecv(void *sendbuf, int sendcount, MOC_Datatype sendtype, int dest, + int sendtag, void *recvbuf, int recvcount, MOC_Datatype recvtype, + int source, int recvtag, MOC_Comm comm, MOC_Status *status) + { + int err; + + if (0 + != (err = MOC_Send(sendbuf, sendcount, sendtype, dest, sendtag, + comm))) + return err; + + if (0 != (err = MOC_Recv(recvbuf, recvcount, recvtype, source, recvtag, + comm, status))) + return err; + + return 0; + } + diff --git a/src/noarch/communication/moc_send_recv_replace.c b/src/noarch/communication/moc_send_recv_replace.c new file mode 100755 index 0000000..add1a54 --- /dev/null +++ b/src/noarch/communication/moc_send_recv_replace.c @@ -0,0 +1,17 @@ +#include + +int MOC_Sendrecv_replace(void* buf, int count, MOC_Datatype datatype, int dest, + int sendtag, int source, int recvtag, MOC_Comm comm, MOC_Status *status) + { + int err; + + if (0 != (err = MOC_Send(buf, count, datatype, dest, sendtag, comm))) + return err; + + if (0 != (err = MOC_Recv(buf, count, datatype, source, recvtag, comm, + status))) + return err; + + return 0; + } + diff --git a/src/noarch/communication/moc_test.c b/src/noarch/communication/moc_test.c new file mode 100755 index 0000000..0380fd7 --- /dev/null +++ b/src/noarch/communication/moc_test.c @@ -0,0 +1,65 @@ +#include + +#include +#include +#ifdef __SPU__ +#include +#include +#else +#include +#include +#endif + +int MOC_Test(MOC_Request *request, int *flag, MOC_Status *status) + { + uint8_t temp; + int iflag, err; + if (request == 0) + { + return MOC_ERR_REQUEST; + } + + switch (request->request_type) + { + case MOC_REQ_TYPE_DMA: + if (0 != (err = IMOC_test_dma(&request->request_data.dma_data, &iflag))) + return err; + if (status != 0) + { + status->message_size = request->request_data.dma_data.size; + status->MOC_ERROR = 0; + status->MOC_TAG = 0; + status->MOC_SOURCE = 0; + } + *flag = iflag; + return 0; + case MOC_REQ_TYPE_ISSEND: + if (!request->request_data.issend_request.isFinished) + { + IMOC_testForMessageCompletion( + request->request_data.issend_request.mid, &temp); + if (temp) + { + *flag = 1; + node_handle.status_array_base[request->request_data.issend_request.mid] .flags.bits.valid + = 0; + request->request_data.issend_request.isFinished = 1; + status->MOC_ERROR = 0; + status->MOC_SOURCE + = request->request_data.issend_request.source; + status->MOC_TAG = request->request_data.issend_request.tag; + status->message_size + = request->request_data.issend_request.message_size; + } + else + *flag = 0; + } + else + *flag = 1; + return 0; + default: + return MOC_ERR_REQUEST; + } + + } + diff --git a/src/noarch/communication/moc_wait.c b/src/noarch/communication/moc_wait.c new file mode 100755 index 0000000..f1056e4 --- /dev/null +++ b/src/noarch/communication/moc_wait.c @@ -0,0 +1,52 @@ +#include +#include +#ifdef __SPU__ +#include +#include +#else +#include +#include +#endif + +int MOC_Wait(MOC_Request *request, MOC_Status *status) + { + int err; + if (request == 0) + { + return MOC_ERR_REQUEST; + } + + switch (request->request_type) + { + case MOC_REQ_TYPE_DMA: + if (0 != (err = IMOC_wait_dma(&request->request_data.dma_data))) + return err; + if (status != 0) + { + status->message_size = request->request_data.dma_data.size; + status->MOC_ERROR = 0; + status->MOC_TAG = 0; + status->MOC_SOURCE = node_handle.rank; + } + return 0; + case MOC_REQ_TYPE_ISSEND: + if (!request->request_data.issend_request.isFinished) + { + IMOC_waitForMessageCompletion( + request->request_data.issend_request.mid); + node_handle.status_array_base[request->request_data.issend_request.mid].flags.value + = 0; + request->request_data.issend_request.isFinished = 1; + status->MOC_ERROR = 0; + status->MOC_SOURCE = request->request_data.issend_request.source; + status->MOC_TAG = request->request_data.issend_request.tag; + status->message_size + = request->request_data.issend_request.message_size; + } + return 0; + default: + return MOC_ERR_REQUEST; + } + + } + diff --git a/src/noarch/internal/communication/imoc_get_entry.c b/src/noarch/internal/communication/imoc_get_entry.c new file mode 100755 index 0000000..55aae9b --- /dev/null +++ b/src/noarch/internal/communication/imoc_get_entry.c @@ -0,0 +1,91 @@ +#include + +#include +#include +#include +#ifdef __SPU__ +#include +#else +#include +#endif + +/*method looks for valid entries in the message queue*/ +moc_message_envelope_t* IMOC_get_entry(int source, int tag, MOC_Comm comm, + int isSpecial, MOC_Status *status) + { + moc_message_envelope_t *startQueue; + int count; + + /*check if source is ANY_SOURCE*/ + if (source == MOC_ANY_SOURCE) + { + /*set start to base adress of the message queue*/ + startQueue =( moc_message_envelope_t*) node_handle.message_queue_base; + /*check if tag is ANY_TAG*/ + if(tag == MOC_ANY_TAG) + { + for(count=0;count<(node_handle.queue_size*(node_handle.comm_size-1));count++) + { + /*search for a valid entry*/ + if(startQueue[count].flags.bits.valid && startQueue[count].communicator == comm + && startQueue[count].flags.bits.special == isSpecial) + { + /*calculate source*/ + if(count/(node_handle.queue_size) >= node_handle.rank) + status->MOC_SOURCE = count/(node_handle.queue_size)+1; + else + status->MOC_SOURCE = count/(node_handle.queue_size); + return &startQueue[count]; + } + } + } + else + { + for(count=0;count<(node_handle.queue_size*(node_handle.comm_size-1));count++) + { + /*search for a valid entry with right tag*/ + if(startQueue[count].flags.bits.valid && startQueue[count].tag == tag + && startQueue[count].communicator == comm + && startQueue[count].flags.bits.special == isSpecial) + { + /*calculate source*/ + if(count/(node_handle.queue_size) >= node_handle.rank) + status->MOC_SOURCE = count/(node_handle.queue_size)+1; + else + status->MOC_SOURCE = count/(node_handle.queue_size); + + return &startQueue[count]; + } + } + } + } + else + { + /*set start to the base adress of the message queue of source process*/ + startQueue = (moc_message_envelope_t*) IMOC_LOCAL_QUEUE(source); + /*check if tag is ANY_TAG*/ + if(tag == MOC_ANY_TAG) + { + for(count=0;count +#include +#ifdef __SPU__ +#include +#else +#include +#endif + +int IMOC_getFreeEntry(moc_message_envelope_t* pqueue, uint8_t tag, + MOC_Comm comm, int isSpecial, int* index) + { + int t, temp = -1; + for (t = node_handle.queue_size - 1; t >= 0; t--) + { + if (!pqueue[t].flags.bits.valid) + temp = t; + else + if (!isSpecial) + { + if (pqueue[t].tag == tag && pqueue[t].communicator == comm + && !pqueue[t].flags.bits.special) + break; + } + else + { + if (pqueue[t].flags.bits.special) + break; + } + } + if (temp >= 0) + { + *index = temp; + return 0; + } + else + return MOC_ERR_MESSAGE_EXHAUSTED; + return 0; + } + diff --git a/src/noarch/internal/communication/imoc_get_free_mid.c b/src/noarch/internal/communication/imoc_get_free_mid.c new file mode 100755 index 0000000..56fa09c --- /dev/null +++ b/src/noarch/internal/communication/imoc_get_free_mid.c @@ -0,0 +1,22 @@ +#include +#include +#ifdef __SPU__ +#include +#else +#include +#endif + +int IMOC_getFreeMID(int *mid) + { + int t; + for (t = 0; t < node_handle.queue_size * (node_handle.comm_size - 1); t++) + { + if (!node_handle.status_array_base[t].flags.bits.valid) + { + *mid = t; + return 0; + } + } + return MOC_ERR_MESSAGE_EXHAUSTED; + } + diff --git a/src/noarch/internal/communication/imoc_test_message.c b/src/noarch/internal/communication/imoc_test_message.c new file mode 100755 index 0000000..91bd147 --- /dev/null +++ b/src/noarch/internal/communication/imoc_test_message.c @@ -0,0 +1,14 @@ +#include +#include +#ifdef __SPU__ +#include +#else +#include +#endif + +int IMOC_testForMessageCompletion(uint8_t mid, uint8_t *status) + { + *status = node_handle.status_array_base[mid].flags.bits.outstanding; + return 0; + } + diff --git a/src/noarch/internal/communication/imoc_wait_message.c b/src/noarch/internal/communication/imoc_wait_message.c new file mode 100755 index 0000000..96af005 --- /dev/null +++ b/src/noarch/internal/communication/imoc_wait_message.c @@ -0,0 +1,15 @@ +#include +#include +#ifdef __SPU__ +#include +#else +#include +#endif + +int IMOC_waitForMessageCompletion(uint8_t mid) + { + while (node_handle.status_array_base[mid].flags.bits.outstanding) + ; + return 0; + } + diff --git a/src/noarch/internal/imoc_buffer_malloc.c b/src/noarch/internal/imoc_buffer_malloc.c new file mode 100755 index 0000000..bfb0dfb --- /dev/null +++ b/src/noarch/internal/imoc_buffer_malloc.c @@ -0,0 +1,139 @@ +#include +#include + +#include +#ifdef __SPU__ +#include +#else +#include +#endif + +/** + * \addtogroup internal_p2p_bmalloc + **/ +//@{ + + +/** + * Pointer to first entry of linked-list. + **/ +moc_internal_buffer_node_t* bmalloc_first_node = 0; + +/* + * Prints out the nodes of the linked list. + * + * Used for debugging + */ +/**void bmalloc_print_nodes() + { + if (!bmalloc_first_node) + printf("No nodes in list\n"); + else + { + int z = 0; + moc_internal_buffer_node_t* t; + for (t = bmalloc_first_node; t != 0; t = t->next_node) + { + printf( "Node %i: offset %u - size %u - valid %i - mid %u\n", z, + node_handle.status_array_base[ t->mid ].buffer_offset, + node_handle.status_array_base[ t->mid ].message_size, + node_handle.status_array_base[ t->mid ].flags.bits.buffer_used, + t->mid ); + z++; + } + } + }**/ + +/** + * Returns the next node holding valid buffer-information coming after node start. + * + * During the search all invalid nodes the function stumbles across are freed and + * the links are corrected. + * + * @param start \b in start-node of search (NULL means beginning of list) + * @return next valid node + **/ +moc_internal_buffer_node_t* __attribute__((always_inline)) bmalloc_nextValidNode( + moc_internal_buffer_node_t* start) + { + moc_internal_buffer_node_t* currentNode = 0; + uint8_t unusedNodes = 0; + if (start) + currentNode = start->next_node; + else + currentNode = bmalloc_first_node; + /* skip and free unused nodes of linked list */ + while (currentNode + && !node_handle.status_array_base[currentNode->mid].flags.bits.buffer_used) + { + moc_internal_buffer_node_t* temp = currentNode; + unusedNodes = 1; + currentNode = currentNode->next_node; + free(temp); + } + /* when nodes have been freed then correct links of linked-list */ + if (unusedNodes) + { + if (start) + start->next_node = currentNode; + else + bmalloc_first_node = currentNode; + } + return currentNode; + } + +uint64_t IMOC_bmalloc(uint32_t size, uint8_t mid) + { + int temp; + moc_internal_buffer_node_t* lower_node = 0; + moc_internal_buffer_node_t* upper_node = bmalloc_nextValidNode(0); + uint64_t lower_bound = 0, upper_bound = 0; + + if (upper_node) + upper_bound + = node_handle.status_array_base[upper_node->mid].buffer_offset; + else + upper_bound = node_handle.buffer_size; + + while (1) + { + temp = 16 - (lower_bound % 16); + if (temp < 16) + lower_bound += temp; + if (upper_bound > lower_bound && (upper_bound - lower_bound) >= size) + { + moc_internal_buffer_node_t* temp = malloc( + sizeof(moc_internal_buffer_node_t)); + node_handle.status_array_base[mid].flags.bits.buffer_used = 1; + node_handle.status_array_base[mid].buffer_offset = lower_bound; + node_handle.status_array_base[mid].message_size = size; + temp->mid = mid; + temp->next_node = upper_node; + if (lower_node) + lower_node->next_node = temp; + else + bmalloc_first_node = temp; + while (upper_node) + upper_node = bmalloc_nextValidNode(upper_node); + return (uint64_t) node_handle.buffer_base + lower_bound; + } + else + { + if (!upper_node) + return 0; + lower_node = upper_node; + upper_node = bmalloc_nextValidNode(upper_node); + + lower_bound + = upper_bound + + node_handle.status_array_base[lower_node->mid].message_size; + if (upper_node) + upper_bound + = node_handle.status_array_base[upper_node->mid].buffer_offset; + else + upper_bound = node_handle.buffer_size; + } + } + } + +//@} diff --git a/src/noarch/system/moc_comm_rank.c b/src/noarch/system/moc_comm_rank.c new file mode 100755 index 0000000..bdda32c --- /dev/null +++ b/src/noarch/system/moc_comm_rank.c @@ -0,0 +1,26 @@ +#include +#ifdef __SPU__ +#include +#else +#include +#endif + +int MOC_Comm_rank(MOC_Comm comm, int *rank) + { + if (comm == MOC_COMM_WORLD) + { + *rank = node_handle.rank; + } + else + if (comm == MOC_COMM_SELF) + { + *rank = 0; + } + else // if ( comm == MPI_COMM_NULL ) + { + *rank = 0; + return MOC_ERR_COMM; + } + return 0; + } + diff --git a/src/noarch/system/moc_comm_size.c b/src/noarch/system/moc_comm_size.c new file mode 100755 index 0000000..377698c --- /dev/null +++ b/src/noarch/system/moc_comm_size.c @@ -0,0 +1,26 @@ +#include +#ifdef __SPU__ +#include +#else +#include +#endif + +int MOC_Comm_size(MOC_Comm comm, int *size) + { + if (comm == MOC_COMM_WORLD) + { + *size = node_handle.comm_size; + } + else + if (comm == MOC_COMM_SELF) + { + *size = 1; + } + else // if ( comm == MPI_COMM_NULL ) + { + *size = 0; + return MOC_ERR_COMM; + } + return 0; + } + diff --git a/src/noarch/system/moc_error_class.c b/src/noarch/system/moc_error_class.c new file mode 100755 index 0000000..7344cde --- /dev/null +++ b/src/noarch/system/moc_error_class.c @@ -0,0 +1,19 @@ +#include +#include + +#include +#include + +int MOC_Error_class(int errorcode, int *errorclass) + { + if (errorcode < 0 || errorcode > MOC_ERR_LASTCODE) + { + return MOC_ERR_ARG; + } + else + { + *errorclass = ((int) (errorcode / 1000)) * 1000; + return 0; + } + } + diff --git a/src/noarch/system/moc_get_count.c b/src/noarch/system/moc_get_count.c new file mode 100755 index 0000000..23cd51a --- /dev/null +++ b/src/noarch/system/moc_get_count.c @@ -0,0 +1,15 @@ +#include + +int MOC_Get_count(MOC_Status *status, MOC_Datatype datatype, int *count) + { + int bytecount; + if (!status) + return MOC_ERR_ARG; + if (((datatype & 0xF0) >> 4) == 0) + bytecount = 1; + else + bytecount = (((datatype & 0xF0) >> 4) * 2); + *count = status->message_size / bytecount; + return 0; + } + diff --git a/src/noarch/system/moc_get_version.c b/src/noarch/system/moc_get_version.c new file mode 100755 index 0000000..ae2ed83 --- /dev/null +++ b/src/noarch/system/moc_get_version.c @@ -0,0 +1,13 @@ +#include + +int MOC_Get_version(int *version, int *subversion) + { + if (version == 0 || subversion == 0) + { + return MOC_ERR_ARG; + } + *version = MOC_VERSION; + *subversion = MOC_SUBVERSION; + return 0; + } + diff --git a/src/ppu/Makefile b/src/ppu/Makefile new file mode 100755 index 0000000..35f61b9 --- /dev/null +++ b/src/ppu/Makefile @@ -0,0 +1,28 @@ +######################################################################## +# Target +######################################################################## + +TARGET_PROCESSOR = ppu64 +LIBRARY = ../../lib/ppu/libmoc_ppu.a +#SHARED_LIBRARY = ../../lib/ppu/libmoc_ppu.so +VPATH := dma/ communication/ system/ internal/ internal/dma +VPATH += ../noarch/communication ../noarch/system/ ../noarch/internal/ ../noarch/internal/communication/ + + +######################################################################## +# Local Defines +######################################################################## + +INCLUDE = -I ../../include/ +#CPPFLAGS += -fmem-report -save-temps -fverbose-asm +CPPFLAGS += -fno-strict-aliasing -D__PPU__ + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/src/ppu/communication/moc_barrier_ppu.c b/src/ppu/communication/moc_barrier_ppu.c new file mode 100755 index 0000000..a5b629a --- /dev/null +++ b/src/ppu/communication/moc_barrier_ppu.c @@ -0,0 +1,75 @@ +#include +#include + +#include +#include +#include +#include + +#define IMOC_BARRIER_TAG 1 + +int MOC_Barrier(MOC_Comm comm) + { + moc_message_envelope_t tempQueue[node_handle.queue_size] __attribute__((__aligned__(16))); + moc_message_envelope_t *sourceQueueEntry; + MOC_Status status; + int err, qindex; + unsigned int dmastatus; + + //if (comm == MOC_COMM_SELF && node_handle.rank == node_handle.comm_size - 1) + if (comm == MOC_COMM_SELF) + return 0; + else + if (comm != MOC_COMM_WORLD) + return MOC_ERR_COMM; + + /* Get queue from remote-node, choose fastest method depending on transfer-size */ + if (node_handle.queue_size * sizeof(moc_message_envelope_t) + > MEMCPY_GET_TRESHOLD) + { + err = spe_mfcio_put(moc_spu_thread_list[node_handle.comm_size - 1 + - moc_ppu_thread_count].speid, IMOC_LS_REMOTE_QUEUE( + node_handle.comm_size - 1), tempQueue, node_handle.queue_size + * sizeof(moc_message_envelope_t), 15, 0, 0); + if (err) + return MOC_ERR_INTERN; + err = spe_mfcio_tag_status_read( + moc_spu_thread_list[node_handle.comm_size - 1 + - moc_ppu_thread_count].speid, 0, SPE_TAG_ALL, + &dmastatus); + if (err) + return MOC_ERR_INTERN; + } + else + { + memcpy(tempQueue, (void*) IMOC_EA_REMOTE_QUEUE(node_handle.comm_size + - 1), node_handle.queue_size * sizeof(moc_message_envelope_t)); + } + + /* search free entry in message-queue */ + err = IMOC_getFreeEntry(tempQueue, IMOC_BARRIER_TAG, comm, 1, &qindex); + if (err) + return err; + + tempQueue[qindex].communicator = comm; + tempQueue[qindex].flags.bits.special = 1; + tempQueue[qindex].flags.bits.valid = 1; + tempQueue[qindex].tag = IMOC_BARRIER_TAG; + + /* write message-envelope into queue, because transfer-size is always 16-byte, + * memcpy is fastest method */ + memcpy((void*) IMOC_EA_REMOTE_QUEUE_ENTRY(node_handle.comm_size - 1, + qindex), &tempQueue[qindex], sizeof(moc_message_envelope_t)); + + //look up if there is data here + sourceQueueEntry = 0; + while (sourceQueueEntry == 0) + { + sourceQueueEntry = IMOC_get_entry(node_handle.comm_size - 1, + IMOC_BARRIER_TAG, comm, 1, &status); + } + sourceQueueEntry->flags.value = 0; + + return 0; + } + diff --git a/src/ppu/communication/moc_bsend_ppu.c b/src/ppu/communication/moc_bsend_ppu.c new file mode 100755 index 0000000..83a6e0d --- /dev/null +++ b/src/ppu/communication/moc_bsend_ppu.c @@ -0,0 +1,113 @@ +#include +#include + +#include +#include +#include +#include +#include + +int MOC_Bsend(void* buf, int count, MOC_Datatype datatype, int dest, int tag, + MOC_Comm comm) + { + moc_message_envelope_t tempQueue[node_handle.queue_size] __attribute__((__aligned__(16))); + int err, qindex, mid, bytecount; + unsigned int dmastatus; + void* ea_buffer; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + IMOC_TEST_PROC_NULL(dest) + IMOC_TEST_PROC_SELF(dest) + IMOC_TEST_BYTECOUNT(bytecount) + // if there is no data, permit Null-Buffer-Pointer + if (bytecount != 0) + { + IMOC_TEST_BUFFER(buf) + } + IMOC_TEST_RANK(dest) + IMOC_TEST_TAG_SEND(tag) + IMOC_TEST_COMM_SEND(comm) + + /* Get queue from remote-node, choose fastest method depending on transfer-size */ + if (node_handle.queue_size * sizeof(moc_message_envelope_t) + > MEMCPY_GET_TRESHOLD) + { + err = spe_mfcio_put( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, + IMOC_LS_REMOTE_QUEUE(dest), tempQueue, node_handle.queue_size + * sizeof(moc_message_envelope_t), 15, 0, 0); + if (err) + return MOC_ERR_INTERN; + err = spe_mfcio_tag_status_read(moc_spu_thread_list[dest + - moc_ppu_thread_count].speid, 0, SPE_TAG_ALL, &dmastatus); + if (err) + return MOC_ERR_INTERN; + } + else + { + memcpy(tempQueue, (void*) IMOC_EA_REMOTE_QUEUE(dest), + node_handle.queue_size * sizeof(moc_message_envelope_t)); + } + + /* search free entry in message-queue */ + err = IMOC_getFreeEntry(tempQueue, tag, comm, 0, &qindex); + if (err) + return err; + + /* messages smaller-equal 8 bytes are stored directly into the message-envelope + instead of the data's effective address */ + if (bytecount <= 8) + { + tempQueue[qindex].flags.bits.channel = IMOC_MESSAGE_CHANNEL_ENV; + tempQueue[qindex].flags.bits.signal_back = 0; + tempQueue[qindex].flags.bits.in_mm = 0; + memcpy(&tempQueue[qindex].message_address, buf, bytecount); + } + else /* normal delivery of messages */ + { + IMOC_TEST_ALIGNMENT(buf) + /* search free message-ID */ + err = IMOC_getFreeMID(&mid); + if (err) + return err; + + /* search free buffer-space */ + ea_buffer = (void*) IMOC_bmalloc(bytecount, mid); + if (!ea_buffer) + return MOC_ERR_NO_BUFFER; + + tempQueue[qindex].flags.bits.channel = IMOC_MESSAGE_CHANNEL_DMA; + tempQueue[qindex].flags.bits.signal_back = 1; + tempQueue[qindex].flags.bits.in_mm = 1; + tempQueue[qindex].message_address = (uint64_t) ea_buffer; + /* copy data into buffer */ + memcpy(ea_buffer, buf, bytecount); + + /* fill message-status-entry */ + node_handle.status_array_base[mid].flags.bits.valid = 1; + node_handle.status_array_base[mid].flags.bits.outstanding = 1; + } + + /* fill missing message-envelope-entries */ + tempQueue[qindex].communicator = comm; + tempQueue[qindex].datatype = datatype; + tempQueue[qindex].id = mid; + tempQueue[qindex].size = bytecount; + tempQueue[qindex].tag = tag; + tempQueue[qindex].flags.bits.collaborative = 0; + tempQueue[qindex].flags.bits.special = 0; + tempQueue[qindex].flags.bits.valid = 1; + tempQueue[qindex].flags.bits.keep_valid = 0; + + /* write message-envelope into queue, because transfer-size is always 16-byte, + * memcpy is fastest method */ + memcpy((void*) IMOC_EA_REMOTE_QUEUE_ENTRY(dest, qindex), + &tempQueue[qindex], sizeof(moc_message_envelope_t)); + + return 0; + } + diff --git a/src/ppu/communication/moc_issend_ppu.c b/src/ppu/communication/moc_issend_ppu.c new file mode 100755 index 0000000..e429922 --- /dev/null +++ b/src/ppu/communication/moc_issend_ppu.c @@ -0,0 +1,116 @@ +#include +#include + +#include +#include +#include +#include +#include + +int MOC_ISsend(void* buf, int count, MOC_Datatype datatype, int dest, int tag, + MOC_Comm comm, MOC_Request *request) + { + int queue_index, msg_id, bytecount, err; + moc_message_envelope_t queue_copy[node_handle.queue_size] __attribute__((__aligned__(16))); + + uint32_t dmastatus; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + request->request_data.issend_request.isFinished = 1; + request->request_type = MOC_REQ_TYPE_ISSEND; + request->request_data.issend_request.source = node_handle.rank; + request->request_data.issend_request.tag = tag; + request->request_data.issend_request.message_size = bytecount; + + IMOC_TEST_PROC_NULL(dest) + IMOC_TEST_PROC_SELF(dest) + IMOC_TEST_BYTECOUNT(bytecount) + // if there is no data, permit Null-Buffer-Pointer + if (bytecount != 0) + { + IMOC_TEST_BUFFER(buf) + } + IMOC_TEST_RANK(dest) + IMOC_TEST_TAG_SEND(tag) + IMOC_TEST_COMM_SEND(comm) + + /* Get queue from remote-node, choose fastest method depending on transfer-size */ + if (node_handle.queue_size * sizeof(moc_message_envelope_t) + > MEMCPY_GET_TRESHOLD) + { + err = spe_mfcio_put( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, + IMOC_LS_REMOTE_QUEUE(dest), queue_copy, node_handle.queue_size + * sizeof(moc_message_envelope_t), 15, 0, 0); + if (err) + return MOC_ERR_INTERN; + err = spe_mfcio_tag_status_read(moc_spu_thread_list[dest + - moc_ppu_thread_count].speid, 0, SPE_TAG_ALL, &dmastatus); + if (err) + return MOC_ERR_INTERN; + } + else + { + memcpy(queue_copy, (void*) IMOC_EA_REMOTE_QUEUE(dest), + node_handle.queue_size * sizeof(moc_message_envelope_t)); + } + + /* search free entry in message-queue */ + err = IMOC_getFreeEntry(queue_copy, tag, comm, 0, &queue_index); + if (err) + return err; + + /* search free message-ID */ + err = IMOC_getFreeMID(&msg_id); + if (err) + return err; + + /* small messages are directly sent instead of their address */ + if (bytecount <= 8) + { + queue_copy[queue_index].flags.bits.channel = IMOC_MESSAGE_CHANNEL_ENV; + // synchronous send waits till the message has been received (meaning + // recv has copied the message), so we need a signal-back. + queue_copy[queue_index].flags.bits.signal_back = 1; + queue_copy[queue_index].flags.bits.in_mm = 0; + memcpy(&queue_copy[queue_index].message_address, buf, bytecount); + } + else + { + IMOC_TEST_ALIGNMENT(buf) + queue_copy[queue_index].flags.bits.channel = IMOC_MESSAGE_CHANNEL_DMA; + queue_copy[queue_index].flags.bits.signal_back = 1; + queue_copy[queue_index].flags.bits.in_mm = 1; + queue_copy[queue_index].message_address = (uint64_t) buf; + } + + /* fill missing message-envelope-entries */ + queue_copy[queue_index].communicator = comm; + queue_copy[queue_index].datatype = datatype; + queue_copy[queue_index].id = msg_id; + queue_copy[queue_index].size = bytecount; + queue_copy[queue_index].tag = tag; + queue_copy[queue_index].flags.bits.collaborative = 0; + queue_copy[queue_index].flags.bits.special = 0; + queue_copy[queue_index].flags.bits.valid = 1; + queue_copy[queue_index].flags.bits.keep_valid = 1; + + /* fill message-status-entry */ + node_handle.status_array_base[msg_id].flags.bits.valid = 1; + node_handle.status_array_base[msg_id].flags.bits.outstanding = 1; + + request->request_data.issend_request.isFinished = 0; + request->request_data.issend_request.mid = msg_id; + + /* write message-envelope into queue, because transfer-size is always 16-byte, + * memcpy is fastest method */ + memcpy((void*) IMOC_EA_REMOTE_QUEUE_ENTRY(dest, queue_index), + &queue_copy[queue_index], sizeof(moc_message_envelope_t)); + + return MOC_SUCCESS; + } + diff --git a/src/ppu/communication/moc_recv_ppu.c b/src/ppu/communication/moc_recv_ppu.c new file mode 100755 index 0000000..330671a --- /dev/null +++ b/src/ppu/communication/moc_recv_ppu.c @@ -0,0 +1,118 @@ +#include +#include + +#include +#include +#include +#include +#include +#include + +int MOC_Recv(void* buf, int count, MOC_Datatype datatype, int source, int tag, + MOC_Comm comm, MOC_Status *status) + { + + moc_message_envelope_t* sourceQueueEntry; + moc_message_status_t sourceMessageStatus __attribute__((__aligned__(16))); + int bytecount, err; + + err = 0; + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + status->MOC_SOURCE = source; + status->message_size = bytecount; + + IMOC_TEST_PROC_NULL(source) + IMOC_TEST_PROC_SELF(source) + IMOC_TEST_BYTECOUNT(bytecount) + // if there is no data, permit Null-Buffer-Pointer + if (bytecount != 0) + { + IMOC_TEST_BUFFER(buf) + } + IMOC_TEST_RANK_RECV(source) + IMOC_TEST_TAG_RECV(tag) + IMOC_TEST_COMM_RECV(comm) + + /*looking for data to receive*/ + sourceQueueEntry = NULL; + while (sourceQueueEntry == NULL) + { + sourceQueueEntry = IMOC_get_entry(source, tag, comm, 0, status); + } + /*set status MOC_TAG and mid*/ + status->MOC_TAG = tag; + status->mid = sourceQueueEntry->id; + + /*check if datatype from send and recv is the same*/ + if (sourceQueueEntry->datatype != datatype && sourceQueueEntry->datatype + !=MOC_BYTE && datatype != MOC_BYTE) + { + status->MOC_ERROR = MOC_ERR_TYPE; + return MOC_ERR_TYPE; + } + + /*check if the data is in the envelope or if data has to be loaded with dma*/ + if (sourceQueueEntry->flags.bits.channel == IMOC_MESSAGE_CHANNEL_ENV) + { + /*get data from envelope*/ + memcpy(buf, (void*) &sourceQueueEntry->message_address, (bytecount + < sourceQueueEntry->size) ? bytecount : sourceQueueEntry->size); + } + else + if (sourceQueueEntry->flags.bits.channel == IMOC_MESSAGE_CHANNEL_DMA) + { + /*lookup if data is in memory*/ + if (sourceQueueEntry->flags.bits.in_mm == 1) + /*copy data from memory*/ + memcpy(buf, (void*) sourceQueueEntry->message_address, + bytecount); + else + { + /*get data via IMOC_get_data*/ + uint32_t lsa = + sourceQueueEntry->message_address + - moc_spu_thread_list[source + - moc_ppu_thread_count].ls_base; + if (bytecount != 0) + { + IMOC_TEST_ALIGNMENT(buf) + } + + err = IMOC_get_data(buf, lsa, bytecount, source); + if (err) + { + return err; + } + } + } + else + { + /*an error occourred*/ + status->MOC_ERROR = MOC_ERR_INTERN; + return MOC_ERR_INTERN; + } + /* look if send needs answer*/ + if (sourceQueueEntry->flags.bits.signal_back == 1) + { + /*set message status*/ + sourceMessageStatus.buffer_offset = 0; + sourceMessageStatus.flags.value = 0; + if (sourceQueueEntry->flags.bits.keep_valid) + sourceMessageStatus.flags.bits.valid = 1; + + /*send back message_status, because transfer-size is always 16-byte, + * memcpy is fastest method */ + memcpy( + (void*) IMOC_EA_REMOTE_STATUS_ENTRY(sourceQueueEntry->id,status->MOC_SOURCE), + &sourceMessageStatus, sizeof(moc_message_status_t)); + } + + sourceQueueEntry->flags.value = 0; + + status->MOC_ERROR = 0; + return 0; + } diff --git a/src/ppu/communication/moc_ssend_ppu.c b/src/ppu/communication/moc_ssend_ppu.c new file mode 100755 index 0000000..b90f985 --- /dev/null +++ b/src/ppu/communication/moc_ssend_ppu.c @@ -0,0 +1,107 @@ +#include +#include + +#include +#include +#include +#include +#include + +int MOC_Ssend(void* buf, int count, MOC_Datatype datatype, int dest, int tag, + MOC_Comm comm) + { + int queue_index, msg_id, bytecount, err; + moc_message_envelope_t queue_copy[node_handle.queue_size] __attribute__((__aligned__(16))); + + uint32_t dmastatus; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + IMOC_TEST_PROC_NULL(dest) + IMOC_TEST_PROC_SELF(dest) + IMOC_TEST_BYTECOUNT(bytecount) + // if there is no data, permit Null-Buffer-Pointer + if (bytecount != 0) + { + IMOC_TEST_BUFFER(buf) + } + IMOC_TEST_RANK(dest) + IMOC_TEST_TAG_SEND(tag) + IMOC_TEST_COMM_SEND(comm) + + /* Get queue from remote-node, choose fastest method depending on transfer-size */ + if (node_handle.queue_size * sizeof(moc_message_envelope_t) + > MEMCPY_GET_TRESHOLD) + { + err = spe_mfcio_put( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, + IMOC_LS_REMOTE_QUEUE(dest), queue_copy, node_handle.queue_size + * sizeof(moc_message_envelope_t), 15, 0, 0); + if (err) + return MOC_ERR_INTERN; + err = spe_mfcio_tag_status_read(moc_spu_thread_list[dest + - moc_ppu_thread_count].speid, 0, SPE_TAG_ALL, &dmastatus); + if (err) + return MOC_ERR_INTERN; + } + else + { + memcpy(queue_copy, (void*) IMOC_EA_REMOTE_QUEUE(dest), + node_handle.queue_size * sizeof(moc_message_envelope_t)); + } + + /* search free entry in message-queue */ + err = IMOC_getFreeEntry(queue_copy, tag, comm, 0, &queue_index); + if (err) + return err; + + /* search free message-ID */ + err = IMOC_getFreeMID(&msg_id); + if (err) + return err; + + /* small messages are directly sent instead of their address */ + if (bytecount <= 8) + { + queue_copy[queue_index].flags.bits.channel = IMOC_MESSAGE_CHANNEL_ENV; + // synchronous send waits till the message has been received (meaning + // recv has copied the message), so we need a signal-back. + queue_copy[queue_index].flags.bits.signal_back = 1; + queue_copy[queue_index].flags.bits.in_mm = 0; + memcpy(&queue_copy[queue_index].message_address, buf, bytecount); + } + else + { + IMOC_TEST_ALIGNMENT(buf) + queue_copy[queue_index].flags.bits.channel = IMOC_MESSAGE_CHANNEL_DMA; + queue_copy[queue_index].flags.bits.signal_back = 1; + queue_copy[queue_index].flags.bits.in_mm = 1; + queue_copy[queue_index].message_address = (uint64_t) buf; + } + + /* fill missing message-envelope-entries */ + queue_copy[queue_index].communicator = comm; + queue_copy[queue_index].datatype = datatype; + queue_copy[queue_index].id = msg_id; + queue_copy[queue_index].size = bytecount; + queue_copy[queue_index].tag = tag; + queue_copy[queue_index].flags.bits.collaborative = 0; + queue_copy[queue_index].flags.bits.special = 0; + queue_copy[queue_index].flags.bits.valid = 1; + queue_copy[queue_index].flags.bits.keep_valid = 0; + + /* fill message-status-entry */ + node_handle.status_array_base[msg_id].flags.bits.valid = 1; + node_handle.status_array_base[msg_id].flags.bits.outstanding = 1; + + /* write message-envelope into queue, because transfer-size is always 16-byte, + * memcpy is fastest method */ + memcpy((void*) IMOC_EA_REMOTE_QUEUE_ENTRY(dest, queue_index), + &queue_copy[queue_index], sizeof(moc_message_envelope_t)); + + IMOC_waitForMessageCompletion(msg_id); + return MOC_SUCCESS; + } diff --git a/src/ppu/dma/moc_dma-get_ppu.c b/src/ppu/dma/moc_dma-get_ppu.c new file mode 100755 index 0000000..7fdd010 --- /dev/null +++ b/src/ppu/dma/moc_dma-get_ppu.c @@ -0,0 +1,28 @@ +#include + +#include +#include +#include +#include +#include + +int MOC_Get_data(void* target, uint32_t source, int count, + MOC_Datatype datatype, int dest) + { + int bytecount; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + if (target == 0 || source == 0 || bytecount == 0) + return 0; + if ((((uint64_t) target) % 16) != 0 || (source % 16) != 0) + return MOC_ERR_BAD_ALIGNMENT; + IMOC_TEST_BYTECOUNT(bytecount) + IMOC_TEST_RANK(dest) + + return IMOC_get_data(target, source, bytecount, dest); + } + diff --git a/src/ppu/dma/moc_dma-iget_ppu.c b/src/ppu/dma/moc_dma-iget_ppu.c new file mode 100755 index 0000000..bd6f940 --- /dev/null +++ b/src/ppu/dma/moc_dma-iget_ppu.c @@ -0,0 +1,33 @@ +#include +#include + +#include +#include +#include +#include +#include +#include + +int MOC_IGet_data(void* target, uint32_t source, int count, + MOC_Datatype datatype, int dest, MOC_Request *request) + { + int bytecount; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + if (target == 0 || source == 0 || bytecount == 0) + return 0; + if ((((uint64_t) target) % 16) != 0 || (source % 16) != 0) + return MOC_ERR_BAD_ALIGNMENT; + IMOC_TEST_BYTECOUNT(bytecount) + IMOC_TEST_RANK(dest) + + request->request_type = MOC_REQ_TYPE_DMA; + + return IMOC_iget_data(target, source, bytecount, dest, + &request->request_data.dma_data); + } + diff --git a/src/ppu/dma/moc_dma-iput_ppu.c b/src/ppu/dma/moc_dma-iput_ppu.c new file mode 100755 index 0000000..38c178d --- /dev/null +++ b/src/ppu/dma/moc_dma-iput_ppu.c @@ -0,0 +1,35 @@ +#include +#include + +#include +#include +#include +#include +#include +#include + +int MOC_IPut_data(void* source, uint32_t target, int count, + MOC_Datatype datatype, int src, MOC_Request *request) + { + int bytecount; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + if (target == 0 || source == 0 || bytecount == 0) + return 0; + if ((target % 16) != 0 || (((uint64_t) source) % 16) != 0) + return MOC_ERR_BAD_ALIGNMENT; + if ((bytecount % 16) != 0) + return MOC_ERR_BAD_SIZE; + IMOC_TEST_BYTECOUNT(bytecount) + IMOC_TEST_RANK(src) + + request->request_type = MOC_REQ_TYPE_DMA; + + return IMOC_iput_data(source, target, bytecount, src, + &request->request_data.dma_data); + } + diff --git a/src/ppu/dma/moc_dma-put_ppu.c b/src/ppu/dma/moc_dma-put_ppu.c new file mode 100755 index 0000000..381834a --- /dev/null +++ b/src/ppu/dma/moc_dma-put_ppu.c @@ -0,0 +1,30 @@ +#include + +#include +#include +#include +#include +#include + +int MOC_Put_data(void* source, uint32_t target, int count, + MOC_Datatype datatype, int src) + { + int bytecount; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + if (target == 0 || source == 0 || bytecount == 0) + return 0; + if ((target % 16) != 0 || (((uint64_t) source) % 16) != 0) + return MOC_ERR_BAD_ALIGNMENT; + if ((bytecount % 16) != 0) + return MOC_ERR_BAD_SIZE; + IMOC_TEST_BYTECOUNT(bytecount) + IMOC_TEST_RANK(src) + + return IMOC_put_data(source, target, bytecount, src); + } + diff --git a/src/ppu/dma/moc_dma-test_ppu.c b/src/ppu/dma/moc_dma-test_ppu.c new file mode 100755 index 0000000..c2f4e98 --- /dev/null +++ b/src/ppu/dma/moc_dma-test_ppu.c @@ -0,0 +1,14 @@ +#include +#include +#include +#include + +/* + * wrapper function for IMOC_test_dma so that the syntax is more in line and more intutive use of MOC_Request instead of + * of imoc_dma_request is possible + */ + +int MOC_Test_data(MOC_Request* request, int *flag) + { + return IMOC_test_dma(&(request->request_data.dma_data), flag); + } diff --git a/src/ppu/dma/moc_dma-wait_ppu.c b/src/ppu/dma/moc_dma-wait_ppu.c new file mode 100755 index 0000000..a177d99 --- /dev/null +++ b/src/ppu/dma/moc_dma-wait_ppu.c @@ -0,0 +1,14 @@ +#include +#include +#include +#include + +/* + * wrapper function for IMOC_test_dma so that the syntax is more in line and more intutive use of MOC_Request instead of + * of imoc_dma_request is possible + */ + +int MOC_Wait_data(MOC_Request* request) + { + return IMOC_wait_dma(&(request->request_data.dma_data)); + } diff --git a/src/ppu/dma/moc_translate_ea_ls_ppu.c b/src/ppu/dma/moc_translate_ea_ls_ppu.c new file mode 100755 index 0000000..b4a9556 --- /dev/null +++ b/src/ppu/dma/moc_translate_ea_ls_ppu.c @@ -0,0 +1,10 @@ +#include +#include + +int MOC_Translate_EA_to_LS(uint64_t ea, int rank, uint32_t* ls) + { + *ls = (uint32_t) (ea + - moc_spu_thread_list[rank - moc_ppu_thread_count].ls_base); + return 0; + } + diff --git a/src/ppu/internal/dma/imoc_dma-get_ppu.c b/src/ppu/internal/dma/imoc_dma-get_ppu.c new file mode 100755 index 0000000..a3773d3 --- /dev/null +++ b/src/ppu/internal/dma/imoc_dma-get_ppu.c @@ -0,0 +1,87 @@ +#include + +#include +#include +#include +#include +#include + +int IMOC_get_data(void* target, uint64_t source, uint32_t size, int dest) + { + uint32_t remainder_16b; + uint32_t remainder_16kb; + uint32_t offset; + char buffer[16] __attribute__((__aligned__(16))); + int err; + uint32_t dmastatus; + + /* transfers have to be multiples of 16 bytes */ + remainder_16b = size % 16; + + /* subtracting remainder means the transfer has a valid size now */ + size -= remainder_16b; + offset = 0; + + /* first case: transfer of size smaller than maximum allowed one (16kbyte) */ + if (size <= MAX_DMA_CALL_SIZE) + { + err = spe_mfcio_put( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, source, + target, size, 15, 0, 0); + if (err) + return MOC_ERR_INTERN; + } + /* second case: transfer of bigger size is simply split into parts of 16kb */ + else + { + remainder_16kb = size % MAX_DMA_CALL_SIZE; + while (offset + MAX_DMA_CALL_SIZE <= size) + { + err = spe_mfcio_put( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, + source + offset, target + offset, MAX_DMA_CALL_SIZE, 15, 0, + 0); + if (err) + return MOC_ERR_INTERN; + + offset += MAX_DMA_CALL_SIZE; + } + if (remainder_16kb > 0) + { + err = spe_mfcio_put( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, + source + offset, target + offset, remainder_16kb, 15, 0, 0); + if (err) + return MOC_ERR_INTERN; + } + } + /* if size was reduced previously the remaining bytes have to be transfered */ + if (remainder_16b > 0) + { + /* minimum allowed transfer is 16bytes so transfer this size into a buffer */ + err = spe_mfcio_put( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, source + + size, buffer, 16, 15, 0, 0); + if (err) + return MOC_ERR_INTERN; + /* waiting for dma completion necessary */ + err = spe_mfcio_tag_status_read(moc_spu_thread_list[dest + - moc_ppu_thread_count].speid, 0, SPE_TAG_ALL, &dmastatus); + if (err) + return MOC_ERR_INTERN; + /* copy only the valid bytes into the target buffer */ + memcpy(target + size, buffer, remainder_16b); + } + else + { + /* waiting for dma completion necessary */ + err = spe_mfcio_tag_status_read(moc_spu_thread_list[dest + - moc_ppu_thread_count].speid, 0, SPE_TAG_ALL, &dmastatus); + if (err) + return MOC_ERR_INTERN; + + } + + return MOC_SUCCESS; + } + diff --git a/src/ppu/internal/dma/imoc_dma-iget_ppu.c b/src/ppu/internal/dma/imoc_dma-iget_ppu.c new file mode 100755 index 0000000..cfb90b2 --- /dev/null +++ b/src/ppu/internal/dma/imoc_dma-iget_ppu.c @@ -0,0 +1,96 @@ +#include +#include + +#include +#include +#include +#include +#include + +int IMOC_iget_data(void* target, uint64_t source, uint32_t size, uint32_t dest, + imoc_dma_request* request) + { + uint32_t remainder_16b; + uint32_t remainder_16kb; + uint32_t offset; + int err; + int tag_id; + + if ((tag_id = moc_tag_reserve(dest - moc_ppu_thread_count)) < 0) + { + return MOC_ERR_INTERN; + } + + /* transfers have to be multiples of 16 bytes */ + remainder_16b = size % 16; + + request->remainder = 0; + request->size = size; + request->target = target; + request->dest = dest; + request->tag_id = tag_id; + + /* subtracting remainder means the transfer has a valid size now */ + + size -= remainder_16b; + + offset = 0; + + /* first case: transfer of size smaller than maximum allowed one (16kbyte) */ + + if (size <= MAX_DMA_CALL_SIZE) + { + err = spe_mfcio_put( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, source, + target, size, tag_id, 0, 0); + + if (err) + return MOC_ERR_INTERN; + } + + /* second case: transfer of bigger size is simply split into parts of 16kb */ + else + { + remainder_16kb = size % MAX_DMA_CALL_SIZE; + while (offset + MAX_DMA_CALL_SIZE <= size) + { + err = spe_mfcio_put( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, + source + offset, target + offset, MAX_DMA_CALL_SIZE, + tag_id, 0, 0); + + if (err) + return MOC_ERR_INTERN; + + offset += MAX_DMA_CALL_SIZE; + } + + if (remainder_16kb > 0) + { + err = spe_mfcio_put( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, + source + offset, target + offset, remainder_16kb, tag_id, + 0, 0); + + if (err) + return MOC_ERR_INTERN; + } + } + + /* if size was reduced previously the remaining bytes have to be transfered */ + if (remainder_16b > 0) + { + request->buffer = (char*) _malloc_align(16 * sizeof(char), 4); + /* minimum allowed transfer is 16bytes so transfer this size into a buffer */ + err = spe_mfcio_put( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, source + + size, request->buffer, 16, tag_id, 0, 0); + + if (err) + return MOC_ERR_INTERN; + } + + return MOC_SUCCESS; + + } + diff --git a/src/ppu/internal/dma/imoc_dma-iput_ppu.c b/src/ppu/internal/dma/imoc_dma-iput_ppu.c new file mode 100755 index 0000000..13a5e3d --- /dev/null +++ b/src/ppu/internal/dma/imoc_dma-iput_ppu.c @@ -0,0 +1,100 @@ +#include +#include + +#include +#include +#include +#include +#include + +/* + + * This function actually always reads a multiple of 16 from the source, and copies it to target. + * This means however that up to 15 bytes are written to and invalid location, so if one wants to + * use it with such sizes precautions have to be taken in order to make it safe. + * On the ppu the system for tag reservation is not present, so a hardcoded tag is used. + * It has also to be noted that the dma calls are actually initiated on the spu by the ppu. + */ + +int IMOC_iput_data(void* source, uint64_t target, uint32_t size, uint32_t dest, + imoc_dma_request* request) + { + uint32_t remainder_16b; + uint32_t remainder_16kb; + uint32_t offset; + int err; + int tag_id; + + if ((tag_id = moc_tag_reserve(dest - moc_ppu_thread_count)) < 0) + { + return MOC_ERR_INTERN; + } + + /* transfers have to be multiples of 16 bytes */ + remainder_16b = size % 16; + + request->remainder = 0; + request->dest = dest; + request->size = size; + request->target = target; + request->tag_id = tag_id; + + /* subtracting remainder means the transfer has a valid size now */ + size -= remainder_16b; + offset = 0; + + /* first case: transfer of size smaller than maximum allowed one (16kbyte) */ + if (size <= MAX_DMA_CALL_SIZE) + { + err = spe_mfcio_get( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, target, + source, size, tag_id, 0, 0); + + if (err) + return MOC_ERR_INTERN; + } + + /* second case: transfer of bigger size is simply split into parts of 16kb */ + else + { + remainder_16kb = size % MAX_DMA_CALL_SIZE; + while (offset + MAX_DMA_CALL_SIZE <= size) + { + err = spe_mfcio_get( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, + target + offset, source + offset, MAX_DMA_CALL_SIZE, + tag_id, 0, 0); + + if (err) + return MOC_ERR_INTERN; + + offset += MAX_DMA_CALL_SIZE; + } + + if (remainder_16kb > 0) + { + err = spe_mfcio_get( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, + target + offset, source + offset, remainder_16kb, tag_id, + 0, 0); + + if (err) + return MOC_ERR_INTERN; + } + } + + /* if size was reduced previously the remaining bytes have to be transfered */ + if (remainder_16b > 0) + { + /* minimum allowed transfer is 16bytes so transfer this size */ + err = spe_mfcio_get( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, target + + size, source + size, 16, tag_id, 0, 0); + + if (err) + return MOC_ERR_INTERN; + } + + return MOC_SUCCESS; + + } diff --git a/src/ppu/internal/dma/imoc_dma-put_ppu.c b/src/ppu/internal/dma/imoc_dma-put_ppu.c new file mode 100755 index 0000000..077cb83 --- /dev/null +++ b/src/ppu/internal/dma/imoc_dma-put_ppu.c @@ -0,0 +1,77 @@ +#include + +#include +#include +#include +#include +#include + +int IMOC_put_data(void* source, uint64_t target, uint32_t size, int dest) + { + uint32_t remainder_16b; + uint32_t remainder_16kb; + uint32_t offset; + int err; + uint32_t dmastatus; + + /* transfers have to be multiples of 16 bytes */ + remainder_16b = size % 16; + + /* subtracting remainder means the transfer has a valid size now */ + size -= remainder_16b; + offset = 0; + + /* first case: transfer of size smaller than maximum allowed one (16kbyte) */ + if (size <= MAX_DMA_CALL_SIZE) + { + err = spe_mfcio_get( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, target, + source, size, 15, 0, 0); + if (err) + return MOC_ERR_INTERN; + } + /* second case: transfer of bigger size is simply split into parts of 16kb */ + else + { + remainder_16kb = size % MAX_DMA_CALL_SIZE; + while (offset + MAX_DMA_CALL_SIZE <= size) + { + err = spe_mfcio_get( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, + target + offset, source + offset, MAX_DMA_CALL_SIZE, 15, 0, + 0); + if (err) + return MOC_ERR_INTERN; + + offset += MAX_DMA_CALL_SIZE; + } + if (remainder_16kb > 0) + { + err = spe_mfcio_get( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, + target + offset, source + offset, remainder_16kb, 15, 0, 0); + if (err) + return MOC_ERR_INTERN; + } + } + /* if size was reduced previously the remaining bytes have to be transfered */ + if (remainder_16b > 0) + { + /* minimum allowed transfer is 16bytes so transfer this size */ + err = spe_mfcio_get( + moc_spu_thread_list[dest - moc_ppu_thread_count].speid, target + + size, source + size, 16, 15, 0, 0); + if (err) + return MOC_ERR_INTERN; + + } + + /* waiting for dma completion necessary */ + err = spe_mfcio_tag_status_read(moc_spu_thread_list[dest + - moc_ppu_thread_count].speid, 0, SPE_TAG_ALL, &dmastatus); + if (err) + return MOC_ERR_INTERN; + + return MOC_SUCCESS; + } + diff --git a/src/ppu/internal/dma/imoc_dma-tags_ppu.c b/src/ppu/internal/dma/imoc_dma-tags_ppu.c new file mode 100755 index 0000000..e6362c5 --- /dev/null +++ b/src/ppu/internal/dma/imoc_dma-tags_ppu.c @@ -0,0 +1,41 @@ +#include + +#include +#include +#include + +/* + * Methods for PPE tag reservation system needed for IGet and IPut. Per SPE the PPE can reserve Tags 0-14. Tag 15 is used by + * blocking Get and Put, and more tags are not allowed on the PPE + */ + +static unsigned short tags[8]; + +int moc_tag_reserve(unsigned int speid) + { + if (speid > 8) + return MOC_ERR_INTERN; + int i; + unsigned short bit_tag = 1; + for (i = 0; i < 15; i++) + { + // if last position is a zero the number is even + if ((tags[speid] >> i) % 2 == 0) + { + tags[speid] |= bit_tag << i; // set the bit found to 1 + return i; + } + } + return MOC_ERR_INTERN; + } + +int moc_tag_release(unsigned int speid, int tag) + { + if ((speid > 8) || (tag < 0) || (tag > 14)) + return MOC_ERR_INTERN; + unsigned short bit_tag = 1; + bit_tag = bit_tag << tag; // translate the tag X to the bitmask with a 1 on only the Xth position + bit_tag = ~bit_tag; // invert it so the position can be removed by bitwise AND + tags[speid] &= bit_tag; + return MOC_SUCCESS; + } diff --git a/src/ppu/internal/dma/imoc_dma-test_ppu.c b/src/ppu/internal/dma/imoc_dma-test_ppu.c new file mode 100755 index 0000000..263c726 --- /dev/null +++ b/src/ppu/internal/dma/imoc_dma-test_ppu.c @@ -0,0 +1,33 @@ +#include +#include +#include + +#include +#include +#include + +int IMOC_test_dma(imoc_dma_request* request, int *flag) + { + uint32_t dmastatus; + int err; + err = spe_mfcio_tag_status_read(moc_spu_thread_list[request->dest + - moc_ppu_thread_count].speid, 0, SPE_TAG_IMMEDIATE, &dmastatus); + if (err) + return MOC_ERR_INTERN; + + if (dmastatus == (1 << request->tag_id)) // dma transfer not finished + *flag = 0; + else // dma transfer finished + { + if (request->remainder != 0) // check if buffer was used and copy back data from there to target + { + memcpy(request->target + request->size, request->buffer, + request->remainder); + _free_align(request->buffer); + } + *flag = 1; + moc_tag_release(request->dest - moc_ppu_thread_count, request->tag_id); + } + + return MOC_SUCCESS; + } diff --git a/src/ppu/internal/dma/imoc_dma-wait_ppu.c b/src/ppu/internal/dma/imoc_dma-wait_ppu.c new file mode 100755 index 0000000..f2e900c --- /dev/null +++ b/src/ppu/internal/dma/imoc_dma-wait_ppu.c @@ -0,0 +1,26 @@ +#include +#include +#include + +#include +#include +#include + +int IMOC_wait_dma(imoc_dma_request* request) + { + uint32_t dmastatus; + int err; + err = spe_mfcio_tag_status_read(moc_spu_thread_list[request->dest + - moc_ppu_thread_count].speid, 0, SPE_TAG_ALL, &dmastatus); + if (err) + return MOC_ERR_INTERN; + + if (request->remainder != 0) // check if buffer was used and copy back data from there to target + { + memcpy(request->target + request->size, request->buffer, + request->remainder); + _free_align(request->buffer); + } + moc_tag_release(request->dest - moc_ppu_thread_count, request->tag_id); + return MOC_SUCCESS; + } diff --git a/src/ppu/internal/imoc_core_ppu.c b/src/ppu/internal/imoc_core_ppu.c new file mode 100755 index 0000000..ecf1d93 --- /dev/null +++ b/src/ppu/internal/imoc_core_ppu.c @@ -0,0 +1,4 @@ +#include + +moc_node_handle_ppu_t node_handle; + diff --git a/src/ppu/internal/imoc_spe_thread_ppu.c b/src/ppu/internal/imoc_spe_thread_ppu.c new file mode 100755 index 0000000..55beb18 --- /dev/null +++ b/src/ppu/internal/imoc_spe_thread_ppu.c @@ -0,0 +1,96 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +/** + * \addtogroup internal_spu_thread + **/ +//@{ + +/** + * Holds the value of currently configured SPU-Threads. + **/ +uint8_t moc_spu_thread_count = 0; + +/** + * Holds the value of currently configured PPU-Threads. + **/ +uint8_t moc_ppu_thread_count = 0; + +/** + * Holds information about the SPU-Threads. + * + * order of indices is equal to order of ranks. + **/ +moc_spu_thread_t moc_spu_thread_list[MOC_SPU_THREAD_MAX]; + +uint32_t moc_spu_buffer_size = MOC_BUFFER_SIZE; + +uint8_t moc_spu_queue_size = MOC_QUEUE_SIZE; + +void* moc_spe_pthread_func(void *arg) + { + moc_spu_thread_t* handle = (moc_spu_thread_t*) arg; + /* run the SPE context */ + if (spe_cpu_info_get(SPE_COUNT_USABLE_SPES, -1) != 0) + { + if (spe_context_run(handle->speid, &handle->spe_entry_adress, 0, + handle->argp, handle->envp, &handle->stop_info) < 0) + { + fprintf( + stderr, + "FAILED Thread %u: spe_context_run(errno=%d strerror=%s)\n", + handle->rank, errno, strerror(errno)); + pthread_exit(NULL); + } + } + else + { + fprintf(stderr, "ERROR Thread %u: No usable SPE\n", handle->rank); + } + /* destroy the SPE context */ + if (spe_context_destroy(handle->speid) != 0) + { + fprintf( + stderr, + "FAILED Thread %u: spe_context_destroy(errno=%d strerror=%s)\n", + handle->rank, errno, strerror(errno)); + pthread_exit(NULL); + } + /* check the SPE status */ + if (handle->stop_info.stop_reason == SPE_EXIT) + { + if (handle->stop_info.result.spe_exit_code != 0) + { + fprintf( + stderr, + "FAILED Thread %u: SPE returned a non-zero exit status (%i)\n", + handle->rank, handle->stop_info.result.spe_exit_code); + } + } + else + if (handle->stop_info.stop_reason == SPE_STOP_AND_SIGNAL) + { + fprintf( + stderr, + " FAILED Thread %u: SPE Stop and Signal (Signalcode: %i)\n", + handle->rank, handle->stop_info.result.spe_signal_code); + } + else + { + fprintf( + stderr, + " FAILED Thread %u: SPE abnormally terminated (Reason: %i)\n", + handle->rank, handle->stop_info.stop_reason); + } + pthread_exit(NULL); + } +//@} + + diff --git a/src/ppu/libmoc_ppu.a b/src/ppu/libmoc_ppu.a new file mode 100755 index 0000000..f69df4a Binary files /dev/null and b/src/ppu/libmoc_ppu.a differ diff --git a/src/ppu/system/moc_add_spu_thread_ppu.c b/src/ppu/system/moc_add_spu_thread_ppu.c new file mode 100755 index 0000000..e7fbf8a --- /dev/null +++ b/src/ppu/system/moc_add_spu_thread_ppu.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +int MOC_Add_spu_thread(spe_program_handle_t* phandle, void* argp) + { + if (moc_spu_thread_count >= MOC_SPU_THREAD_MAX) + { + return MOC_ERR_BUFFER_OVERFLOW; + } + /* create the SPE context */ + if ((moc_spu_thread_list[moc_spu_thread_count].speid = spe_context_create( + SPE_MAP_PS, NULL)) == NULL) + { + return MOC_ERR_INTERN; + } + /* load the SPE program into the SPE context */ + if (spe_program_load(moc_spu_thread_list[moc_spu_thread_count].speid, + phandle) != 0) + { + return MOC_ERR_INTERN; + } + /* write thread data into thread-array */ + moc_spu_thread_list[moc_spu_thread_count].spe_entry_adress + = SPE_DEFAULT_ENTRY; + moc_spu_thread_list[moc_spu_thread_count].argp = argp; + moc_spu_thread_count++; + return 0; + } + diff --git a/src/ppu/system/moc_error_string_ppu.c b/src/ppu/system/moc_error_string_ppu.c new file mode 100755 index 0000000..1f6f2cc --- /dev/null +++ b/src/ppu/system/moc_error_string_ppu.c @@ -0,0 +1,89 @@ +#include +#include + +#include +#include + +/** + * \addtogroup internal_error Error-Handling + **/ +//@{ +/** + * @name PPU-only + **/ +//@{ + + +/** + * stores the error-messages + * + * \note PPU-only + **/ +error_strings_t error_strings[] = +{ +{ 0, "No Error" }, +{ 1000, "Invalid buffer pointer" }, +{ 2000, "Invalid count argument" }, +{ 3000, "Invalid datatype argument" }, +{ 4000, "Invalid tag argument" }, +{ 5000, "Invalid communicator"}, +{ 6000, "Invalid rank" }, +{ 7000, "Invalid request (handle)" }, +{ 8000, "Invalid root" }, +{ 9000, "Invalid group" }, +// 10 entries so far +{ 10000, "Invalid operation" }, +{ 11000, "Invalid topology" }, +{ 12000, "Invalid dimension argument" }, +{ 13000, "Invalid argument of some other kind" }, +{ 14000, "Unknown error" }, +{ 15000, "Message truncated on receive" }, +{ 16000, "Known error not in this list" }, +{ 17000, "Internal MOC (implementation) error" }, +{ 18000, "Error code is in status" }, +{ 19000, "Pending request" }, +// 20 entries so far +{ 20000, "Last error code" }, +{ 17001, "Function not implemented" }, +{ 17002, "Internal Buffer Overflow" }, +{ 17003, "Insufficient Memory" }, +{ 17004, "Insufficient Buffer-Space" }, +{ 17005, "No further messages possible" }, +{ 16001, "Base-Adress of Buffer isn't 16-byte aligned" }, +{ 16002, "Bad Size (probably no multiple of 16)" } +}; + + +/** + * error-message count + * + * \note PPU-only + **/ +#define ERROR_STRINGS_COUNT 28 + +//@} +//@} + + +int MOC_Error_string(int errorcode, char *string, int *resultlen) + { + int i; + *resultlen = 0; + if (errorcode < 0 || errorcode > MOC_ERR_LASTCODE) + { + return MOC_ERR_ARG; + } + for (i = 0; i < ERROR_STRINGS_COUNT; i++) + { + if (error_strings[i].error_code == errorcode) + { + strcpy(string, error_strings[i].text); + *resultlen = strlen(string) + 1; + return 0; + } + } + strcpy(string, "No Error-String found"); + *resultlen = strlen(string) + 1; + return 0; + } + diff --git a/src/ppu/system/moc_finalize_ppu.c b/src/ppu/system/moc_finalize_ppu.c new file mode 100755 index 0000000..2f832c4 --- /dev/null +++ b/src/ppu/system/moc_finalize_ppu.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +int MOC_Finalize() + { + unsigned int i; + extern moc_internal_buffer_node_t* bmalloc_first_node; + /* wait till all SPU-threads are finished */ + for (i = 0; i < moc_spu_thread_count; i++) + { + while (spe_out_mbox_status(moc_spu_thread_list[i].speid) < 1) + ; + } + for (i = 0; i < moc_spu_thread_count; i++) + { + if (spe_in_mbox_write(moc_spu_thread_list[i].speid, &i, 1, + SPE_MBOX_ALL_BLOCKING) != 1) + return MOC_ERR_INTERN; + _free_align((void*) moc_spu_thread_list[i].buffer_base); + } + /* free local resources */ + _free_align((void*) node_handle.message_queue_base); + _free_align((void*) node_handle.status_array_base); + _free_align((void*) node_handle.buffer_base); + _free_align((void*) node_handle.signal_area); + _free_align((void*) node_handle.moc_process_list); + while (bmalloc_first_node) + { + moc_internal_buffer_node_t* temp = bmalloc_first_node; + bmalloc_first_node = bmalloc_first_node->next_node; + free(temp); + } + return 0; + } + diff --git a/src/ppu/system/moc_get_avail_spu_ppu.c b/src/ppu/system/moc_get_avail_spu_ppu.c new file mode 100755 index 0000000..3afe10b --- /dev/null +++ b/src/ppu/system/moc_get_avail_spu_ppu.c @@ -0,0 +1,11 @@ +#include +#include + +int MOC_Get_avail_spu_count(int* count) + { + *count = spe_cpu_info_get(SPE_COUNT_USABLE_SPES, -1); + if (*count < 0) + return MOC_ERR_INTERN; + return 0; + } + diff --git a/src/ppu/system/moc_get_max_spu_ppu.c b/src/ppu/system/moc_get_max_spu_ppu.c new file mode 100755 index 0000000..1a52556 --- /dev/null +++ b/src/ppu/system/moc_get_max_spu_ppu.c @@ -0,0 +1,11 @@ +#include +#include + +int MOC_Get_max_spu_count(int* count) + { + *count = spe_cpu_info_get(SPE_COUNT_PHYSICAL_SPES, -1); + if (*count < 0) + return MOC_ERR_INTERN; + return 0; + } + diff --git a/src/ppu/system/moc_get_proc_name_ppu.c b/src/ppu/system/moc_get_proc_name_ppu.c new file mode 100755 index 0000000..b72a109 --- /dev/null +++ b/src/ppu/system/moc_get_proc_name_ppu.c @@ -0,0 +1,12 @@ +#include + +int MOC_Get_processor_name(char *name, int *resultlen) + { + name[0] = 'P'; + name[1] = 'P'; + name[2] = 'U'; + name[3] = '\0'; + *resultlen = 4; + return 0; + } + diff --git a/src/ppu/system/moc_init_ppu.c b/src/ppu/system/moc_init_ppu.c new file mode 100755 index 0000000..9d056bf --- /dev/null +++ b/src/ppu/system/moc_init_ppu.c @@ -0,0 +1,126 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +int MOC_Init(int *argc __attribute__((unused)), char ***argv __attribute__((unused)) ) + { + int i; + char temp[16]; + uint32_t temp2[1]; + /* create own node-handle and data-structures */ + node_handle.rank = 0; + node_handle.comm_size = moc_spu_thread_count + 1; + node_handle.queue_size = moc_spu_queue_size; + node_handle.message_queue_base = _malloc_align( + sizeof(moc_message_envelope_t) * (node_handle.comm_size - 1) + * node_handle.queue_size, 4); + if (node_handle.message_queue_base == 0) + return MOC_ERR_NO_MEMORY; + node_handle.status_array_base = _malloc_align(sizeof(moc_message_status_t) + * (node_handle.comm_size - 1) * node_handle.queue_size, 4); + if (node_handle.status_array_base == 0) + return MOC_ERR_NO_MEMORY; + node_handle.buffer_base = _malloc_align(moc_spu_buffer_size, 4); + if (node_handle.buffer_base == 0) + return MOC_ERR_NO_MEMORY; + node_handle.buffer_size = moc_spu_buffer_size; + node_handle.signal_area = _malloc_align(16, 4); + if (node_handle.signal_area == 0) + return MOC_ERR_NO_MEMORY; + /* create prozess list*/ + node_handle.moc_process_list = _malloc_align(sizeof(moc_process_t) + * node_handle.comm_size, 7); + if (node_handle.moc_process_list == 0) + return MOC_ERR_NO_MEMORY; + node_handle.moc_process_list[0].type = MOC_PPU_PROCESS; + node_handle.moc_process_list[0].inbox_queue_base + = (uint64_t) node_handle.message_queue_base; + node_handle.moc_process_list[0].stat_array_base + = (uint64_t) node_handle.status_array_base; + node_handle.moc_process_list[0].ps_base + = (uint64_t) node_handle.signal_area; + moc_ppu_thread_count = 1; + /* start SPU-Threads */ + for (i = 0; i < moc_spu_thread_count; i++) + { + moc_spu_thread_list[i].envp = NULL; + moc_spu_thread_list[i].rank = i + moc_ppu_thread_count; + /* start pthread */ + if (pthread_create(&moc_spu_thread_list[i].pthread, NULL, + &moc_spe_pthread_func, &moc_spu_thread_list[i]) != 0) + return MOC_ERR_INTERN; + /* create buffer-space for thread */ + moc_spu_thread_list[i].buffer_base = _malloc_align(moc_spu_buffer_size, + 4); + if (moc_spu_thread_list[i].buffer_base == 0) + return MOC_ERR_NO_MEMORY; + moc_spu_thread_list[i].buffer_size = moc_spu_buffer_size; + /* prefill entry of prozess-list */ + node_handle.moc_process_list[i + moc_ppu_thread_count].type + = MOC_SPU_PROCESS; + node_handle.moc_process_list[i + moc_ppu_thread_count].ps_base + = (uint64_t) spe_ps_area_get(moc_spu_thread_list[i].speid, + SPE_MSSYNC_AREA); + if (node_handle.moc_process_list[i + moc_ppu_thread_count].ps_base == 0) + return MOC_ERR_INTERN; + moc_spu_thread_list[i].ls_base = (uint64_t) spe_ls_area_get( + moc_spu_thread_list[i].speid); + if (moc_spu_thread_list[i].ls_base == 0) + return MOC_ERR_INTERN; + node_handle.moc_process_list[i + moc_ppu_thread_count].inbox_queue_base + = (uint64_t) moc_spu_thread_list[i].ls_base; + node_handle.moc_process_list[i + moc_ppu_thread_count].stat_array_base + = (uint64_t) moc_spu_thread_list[i].ls_base; + + /* send rank, overall prozess-count, queue-size, buffer_size + * and memory-adress of buffer to SPU via mailbox */ + temp[0] = i + moc_ppu_thread_count; + temp[1] = node_handle.comm_size; + temp[2] = node_handle.queue_size; + *((uint32_t*) &temp[4]) = moc_spu_thread_list[i].buffer_size; + *((uint64_t*) &temp[8]) = (uint64_t) moc_spu_thread_list[i].buffer_base; + if (spe_in_mbox_write(moc_spu_thread_list[i].speid, (uint32_t*) temp, + 4, SPE_MBOX_ALL_BLOCKING) != 4) + return MOC_ERR_INTERN; + /* send SPU-thread's local-store base-address to SPU */ + *((uint64_t*) temp) = (uint64_t) spe_ls_area_get( + moc_spu_thread_list[i].speid); + if (spe_in_mbox_write(moc_spu_thread_list[i].speid, (uint32_t*) temp, + 2, SPE_MBOX_ALL_BLOCKING) != 2) + return MOC_ERR_INTERN; + /* wait till incoming mailbox-message from SPU */ + while (spe_out_mbox_status(moc_spu_thread_list[i].speid) < 1) + ; + if (spe_out_mbox_read(moc_spu_thread_list[i].speid, temp2, 1) != 1) + return MOC_ERR_INTERN; + /* write base addresses of SPU's message-queues into prozess-list */ + node_handle.moc_process_list[i + moc_ppu_thread_count].inbox_queue_base + += temp2[0]; + moc_spu_thread_list[i].queue_base_in_ls = temp2[0]; + /* wait till incoming mailbox-message from SPU */ + while (spe_out_mbox_status(moc_spu_thread_list[i].speid) < 1) + ; + if (spe_out_mbox_read(moc_spu_thread_list[i].speid, temp2, 1) != 1) + return MOC_ERR_INTERN; + /* write base addresses of SPU's status-array into prozess-list */ + node_handle.moc_process_list[i + moc_ppu_thread_count].stat_array_base + += temp2[0]; + moc_spu_thread_list[i].status_base_in_ls = temp2[0]; + } + /* send memory address of prozess list to all SPU-processes */ + for (i = 0; i < moc_spu_thread_count; i++) + { + *((uint64_t*) temp2) = (uint64_t) node_handle.moc_process_list; + if (spe_in_mbox_write(moc_spu_thread_list[i].speid, temp2, 2, + SPE_MBOX_ALL_BLOCKING) != 2) + return MOC_ERR_INTERN; + } + return 0; + } + diff --git a/src/ppu/system/moc_set_buffer_size_ppu.c b/src/ppu/system/moc_set_buffer_size_ppu.c new file mode 100755 index 0000000..96f7864 --- /dev/null +++ b/src/ppu/system/moc_set_buffer_size_ppu.c @@ -0,0 +1,8 @@ +#include + +int MOC_Set_buffer_size(uint32_t size) + { + moc_spu_buffer_size = size; + return 0; + } + diff --git a/src/ppu/system/moc_set_queue_size_ppu.c b/src/ppu/system/moc_set_queue_size_ppu.c new file mode 100755 index 0000000..ad5249b --- /dev/null +++ b/src/ppu/system/moc_set_queue_size_ppu.c @@ -0,0 +1,8 @@ +#include + +int MOC_Set_queue_size(uint8_t size) + { + moc_spu_queue_size = size; + return 0; + } + diff --git a/src/ppu/system/moc_wtick_ppu.c b/src/ppu/system/moc_wtick_ppu.c new file mode 100755 index 0000000..b063fe3 --- /dev/null +++ b/src/ppu/system/moc_wtick_ppu.c @@ -0,0 +1,10 @@ + +#include +#include +#include + +double MOC_Wtick(void) + { + return 1.0 / ((double) CLOCKS_PER_SEC); + } + diff --git a/src/ppu/system/moc_wtime_ppu.c b/src/ppu/system/moc_wtime_ppu.c new file mode 100755 index 0000000..507a743 --- /dev/null +++ b/src/ppu/system/moc_wtime_ppu.c @@ -0,0 +1,13 @@ + +#include +#include +#include + +double MOC_Wtime(void) + { + struct timeval time; + gettimeofday(&time, NULL); + return ((double) time.tv_sec) + ((double) time.tv_usec) + / ((double) 1000000.0); + } + diff --git a/src/spu/Makefile b/src/spu/Makefile new file mode 100755 index 0000000..57fa2b7 --- /dev/null +++ b/src/spu/Makefile @@ -0,0 +1,39 @@ +######################################################################## +# Target +######################################################################## + +TARGET_PROCESSOR = spu +LIBRARY = ../../lib/spu/libmoc_spu.a +VPATH := dma/ communication/ system/ internal/ internal/dma +VPATH += ../noarch/communication ../noarch/system/ ../noarch/internal/ ../noarch/internal/communication/ + + +######################################################################## +# Local Defines +######################################################################## + + +INCLUDE += -I ../../include/ +#CPPFLAGS += -fmem-report -save-temps -fverbose-asm +CPPFLAGS += -fno-strict-aliasing -D__SPU__ + + +# Use Time of Day as Time-Source for the SPUs +#CPPFLAGS += -DMOC_SPU_TIMESOURCE_TIMEOFDAY + + +# Use the SPU-Decrementer as Time-Source for the SPUs +CPPFLAGS += -DMOC_SPU_TIMESOURCE_SPUTIME +# the following is only necessary if your are using Cell SDK 3.0 +#CPPFLAGS += -I/opt/cell/sysroot/opt/cell/sdk/prototype/usr/spu/include/ + + +######################################################################## +# buildutils/make.footer +######################################################################## + +ifdef CELL_TOP + include $(CELL_TOP)/buildutils/make.footer +else + include /opt/cell/sdk/buildutils/make.footer +endif diff --git a/src/spu/communication/moc_barrier_spu.c b/src/spu/communication/moc_barrier_spu.c new file mode 100755 index 0000000..a380ad0 --- /dev/null +++ b/src/spu/communication/moc_barrier_spu.c @@ -0,0 +1,113 @@ +#include +#include +#include + +#include +#include +#include +#include "internal/spu/imoc_core_spu.h" + +#define IMOC_BARRIER_TAG 1 + +int MOC_Barrier(MOC_Comm comm) + { + moc_message_envelope_t tempQueue[node_handle.queue_size] __attribute__((__aligned__(16))); + moc_message_envelope_t *sourceQueueEntry; + MOC_Status status; + unsigned int tag_id; + int err, qindex; + + if (comm == MOC_COMM_SELF) + return 0; + + if (node_handle.rank == node_handle.comm_size - 1) + { + int t; + for (t = 0; t < node_handle.comm_size - 1; t++) + { + //look up if there is data here + sourceQueueEntry = 0; + while (sourceQueueEntry == 0) + { + sourceQueueEntry = IMOC_get_entry(t, IMOC_BARRIER_TAG, comm, 1, + &status); + } + sourceQueueEntry->flags.value = 0; + } + for (t = 0; t < node_handle.comm_size - 1; t++) + { + /* Get queue from remote-node */ + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + return MOC_ERR_INTERN; + mfc_get(tempQueue, IMOC_EA_REMOTE_QUEUE(t), node_handle.queue_size + * sizeof(moc_message_envelope_t), tag_id, 0, 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + mfc_tag_release(tag_id); + + /* search free entry in message-queue */ + err = IMOC_getFreeEntry(tempQueue, IMOC_BARRIER_TAG, comm, 1, + &qindex); + if (err) + return err; + + tempQueue[qindex].communicator = comm; + tempQueue[qindex].flags.bits.special = 1; + tempQueue[qindex].flags.bits.valid = 1; + tempQueue[qindex].tag = IMOC_BARRIER_TAG; + + /* write message-envelope into queue */ + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + return MOC_ERR_INTERN; + mfc_put(&tempQueue[qindex], IMOC_EA_REMOTE_QUEUE_ENTRY(t, qindex), + sizeof(moc_message_envelope_t), tag_id, 0, 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + mfc_tag_release(tag_id); + } + } + else + { + /* Get queue from remote-node */ + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + return MOC_ERR_INTERN; + mfc_get(tempQueue, IMOC_EA_REMOTE_QUEUE(node_handle.comm_size - 1), + node_handle.queue_size * sizeof(moc_message_envelope_t), + tag_id, 0, 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + mfc_tag_release(tag_id); + + /* search free entry in message-queue */ + err = IMOC_getFreeEntry(tempQueue, IMOC_BARRIER_TAG, comm, 1, &qindex); + if (err) + return err; + + tempQueue[qindex].communicator = comm; + tempQueue[qindex].flags.bits.special = 1; + tempQueue[qindex].flags.bits.valid = 1; + tempQueue[qindex].tag = IMOC_BARRIER_TAG; + + /* write message-envelope into queue */ + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + return MOC_ERR_INTERN; + mfc_put(&tempQueue[qindex], + IMOC_EA_REMOTE_QUEUE_ENTRY(node_handle.comm_size - 1, qindex), + sizeof(moc_message_envelope_t), tag_id, 0, 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + mfc_tag_release(tag_id); + + //look up if there is data here + sourceQueueEntry = 0; + while (sourceQueueEntry == 0) + { + sourceQueueEntry = IMOC_get_entry(node_handle.comm_size - 1, + IMOC_BARRIER_TAG, comm, 1, &status); + } + sourceQueueEntry->flags.value = 0; + } + + return 0; + } + diff --git a/src/spu/communication/moc_bsend_spu.c b/src/spu/communication/moc_bsend_spu.c new file mode 100755 index 0000000..0ca4688 --- /dev/null +++ b/src/spu/communication/moc_bsend_spu.c @@ -0,0 +1,111 @@ +#include +#include +#include + +#include +#include +#include +#include +#include + +int MOC_Bsend(void* buf, int count, MOC_Datatype datatype, int dest, int tag, + MOC_Comm comm) + { + moc_message_envelope_t tempQueue[node_handle.queue_size] __attribute__((__aligned__(16))); + int err, qindex, mid, bytecount; + unsigned int tag_id; + uint64_t ea_buffer; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + IMOC_TEST_PROC_NULL(dest) + IMOC_TEST_PROC_SELF(dest) + IMOC_TEST_BYTECOUNT(bytecount) + // if there is no data, permit Null-Buffer-Pointer + if (bytecount != 0) + { + IMOC_TEST_BUFFER(buf) + } + IMOC_TEST_RANK(dest) + IMOC_TEST_TAG_SEND(tag) + IMOC_TEST_COMM_SEND(comm) + + /* Get queue from remote-node */ + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + return MOC_ERR_INTERN; + mfc_get(tempQueue, IMOC_EA_REMOTE_QUEUE(dest), node_handle.queue_size + * sizeof(moc_message_envelope_t), tag_id, 0, 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + mfc_tag_release(tag_id); + + /* search free entry in message-queue */ + err = IMOC_getFreeEntry(tempQueue, tag, comm, 0, &qindex); + if (err) + return err; + + /* messages smaller-equal 8 bytes are stored directly into the message-envelope + instead of the data's effective address */ + if (bytecount <= 8) + { + tempQueue[qindex].flags.bits.channel = IMOC_MESSAGE_CHANNEL_ENV; + tempQueue[qindex].flags.bits.signal_back = 0; + tempQueue[qindex].flags.bits.in_mm = 0; + memcpy(&tempQueue[qindex].message_address, buf, bytecount); + } + else /* normal delivery of messages */ + { + uint32_t buffer_padding = 16 - (bytecount % 16); + IMOC_TEST_ALIGNMENT(buf) + if (buffer_padding == 16) + buffer_padding = 0; + + /* search free message-ID */ + err = IMOC_getFreeMID(&mid); + if (err) + return err; + + /* search free buffer-space (buffer padded to be a multiple of 16) */ + ea_buffer = IMOC_bmalloc(bytecount + buffer_padding, mid); + if (!ea_buffer) + return MOC_ERR_NO_BUFFER; + + tempQueue[qindex].flags.bits.channel = IMOC_MESSAGE_CHANNEL_DMA; + tempQueue[qindex].flags.bits.in_mm = 1; + tempQueue[qindex].flags.bits.signal_back = 1; + tempQueue[qindex].message_address = ea_buffer; + + /* copy data into buffer */ + IMOC_put_data(buf, ea_buffer, bytecount + buffer_padding); + + /* fill message-status-entry */ + node_handle.status_array_base[mid].flags.bits.valid = 1; + node_handle.status_array_base[mid].flags.bits.outstanding = 1; + } + + /* fill missing message-envelope-entries */ + tempQueue[qindex].communicator = comm; + tempQueue[qindex].datatype = datatype; + tempQueue[qindex].id = mid; + tempQueue[qindex].size = bytecount; + tempQueue[qindex].tag = tag; + tempQueue[qindex].flags.bits.collaborative = 0; + tempQueue[qindex].flags.bits.special = 0; + tempQueue[qindex].flags.bits.valid = 1; + tempQueue[qindex].flags.bits.keep_valid = 0; + + /* write message-envelope into queue */ + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + return MOC_ERR_INTERN; + mfc_put(&tempQueue[qindex], IMOC_EA_REMOTE_QUEUE_ENTRY(dest, qindex), + sizeof(moc_message_envelope_t), tag_id, 0, 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + mfc_tag_release(tag_id); + + return 0; + } + diff --git a/src/spu/communication/moc_issend_spu.c b/src/spu/communication/moc_issend_spu.c new file mode 100755 index 0000000..b610371 --- /dev/null +++ b/src/spu/communication/moc_issend_spu.c @@ -0,0 +1,110 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +int MOC_ISsend(void* buf, int count, MOC_Datatype datatype, int dest, int tag, + MOC_Comm comm, MOC_Request *request) + { + int queue_index, msg_id, bytecount, err; + moc_message_envelope_t queue_copy[node_handle.queue_size] __attribute__((__aligned__(16))); + + uint32_t tag_id; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + request->request_type = MOC_REQ_TYPE_ISSEND; + request->request_data.issend_request.isFinished = 1; + request->request_data.issend_request.source = node_handle.rank; + request->request_data.issend_request.tag = tag; + request->request_data.issend_request.message_size = bytecount; + + IMOC_TEST_PROC_NULL(dest) + IMOC_TEST_PROC_SELF(dest) + IMOC_TEST_BYTECOUNT(bytecount) + // if there is no data, permit Null-Buffer-Pointer + if (bytecount != 0) + { + IMOC_TEST_BUFFER(buf) + if (bytecount > 16) + IMOC_TEST_ALIGNMENT(buf) + } + IMOC_TEST_RANK(dest) + IMOC_TEST_TAG_SEND(tag) + IMOC_TEST_COMM_SEND(comm) + + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + { + return MOC_ERR_INTERN; + } + + mfc_get(queue_copy, IMOC_EA_REMOTE_QUEUE(dest), + sizeof(moc_message_envelope_t) * node_handle.queue_size, tag_id, 0, + 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + + err = IMOC_getFreeEntry(queue_copy, tag, comm, 0, &queue_index); + if (err) + return err; + + err = IMOC_getFreeMID(&msg_id); + if (err) + return err; + + /* small messages are directly sent instead of their address */ + if (bytecount <= 8) + { + //printf("SPU: sending in message-envelope\n"); + queue_copy[queue_index].flags.bits.channel = IMOC_MESSAGE_CHANNEL_ENV; + // synchronous send waits till the message has been received (meaning + // recv has copied the message), so we need a signal-back. + queue_copy[queue_index].flags.bits.signal_back = 1; + queue_copy[queue_index].flags.bits.in_mm = 0; + memcpy(&queue_copy[queue_index].message_address, buf, bytecount); + } + else + { + queue_copy[queue_index].flags.bits.channel = IMOC_MESSAGE_CHANNEL_DMA; + queue_copy[queue_index].flags.bits.signal_back = 1; + queue_copy[queue_index].flags.bits.in_mm = 0; + queue_copy[queue_index].message_address = node_handle.ls_base + + (uint32_t) buf; + } + + /* fill missing message-envelope-entries */ + queue_copy[queue_index].communicator = comm; + queue_copy[queue_index].datatype = datatype; + queue_copy[queue_index].id = msg_id; + queue_copy[queue_index].size = bytecount; + queue_copy[queue_index].tag = tag; + queue_copy[queue_index].flags.bits.collaborative = 0; + queue_copy[queue_index].flags.bits.special = 0; + queue_copy[queue_index].flags.bits.valid = 1; + queue_copy[queue_index].flags.bits.keep_valid = 1; + + /* fill message-status-entry */ + node_handle.status_array_base[msg_id].flags.bits.valid = 1; + node_handle.status_array_base[msg_id].flags.bits.outstanding = 1; + + mfc_put(&queue_copy[queue_index], IMOC_EA_REMOTE_QUEUE_ENTRY(dest, + queue_index), sizeof(moc_message_envelope_t), tag_id, 0, 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + mfc_tag_release(tag_id); + + request->request_data.issend_request.isFinished = 0; + request->request_data.issend_request.mid = msg_id; + + return MOC_SUCCESS; + } + diff --git a/src/spu/communication/moc_recv_spu.c b/src/spu/communication/moc_recv_spu.c new file mode 100755 index 0000000..7ee98c4 --- /dev/null +++ b/src/spu/communication/moc_recv_spu.c @@ -0,0 +1,114 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +int MOC_Recv(void* buf, int count, MOC_Datatype datatype, int source, int tag, + MOC_Comm comm, MOC_Status *status) + { + + moc_message_envelope_t* sourceQueueEntry; + moc_message_status_t sourceMessageStatus __attribute__((__aligned__(16))); + unsigned int tag_id; + int bytecount, err; + + err = 0; + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + status->MOC_SOURCE = source; + status->message_size = bytecount; + + IMOC_TEST_PROC_NULL(source) + IMOC_TEST_PROC_SELF(source) + IMOC_TEST_BYTECOUNT(bytecount) + // if there is no data, permit Null-Buffer-Pointer + if (bytecount != 0) + { + IMOC_TEST_BUFFER(buf) + } + IMOC_TEST_RANK_RECV(source) + IMOC_TEST_TAG_RECV(tag) + IMOC_TEST_COMM_RECV(comm) + + /*looking for data to receive*/ + sourceQueueEntry = NULL; + while (sourceQueueEntry == NULL) + { + sourceQueueEntry = IMOC_get_entry(source, tag, comm, 0, status); + } + /*set status MOC_TAG and mid*/ + status->MOC_TAG = tag; + status->mid = sourceQueueEntry->id; + + /*check if datatype from send and recv is the same*/ + if (sourceQueueEntry->datatype != datatype && sourceQueueEntry->datatype + !=MOC_BYTE && datatype != MOC_BYTE) + { + status->MOC_ERROR = MOC_ERR_TYPE; + return MOC_ERR_TYPE; + } + + /*check if the data is in the envelope or if data has to be loaded with dma*/ + if (sourceQueueEntry->flags.bits.channel == IMOC_MESSAGE_CHANNEL_ENV) + { + /*get data from envelope*/ + memcpy(buf, &sourceQueueEntry->message_address, (bytecount + < sourceQueueEntry->size) ? bytecount : sourceQueueEntry->size); + } + else + if (sourceQueueEntry->flags.bits.channel == IMOC_MESSAGE_CHANNEL_DMA) + { + if (bytecount != 0) + { + IMOC_TEST_ALIGNMENT(buf) + } + /*get data with dma*/ + err = IMOC_get_data(buf, sourceQueueEntry->message_address, + bytecount); + if (err) + { + return err; + } + } + else + { + /*an error occourred*/ + status->MOC_ERROR = MOC_ERR_INTERN; + return MOC_ERR_INTERN; + } + + /* look if send needs answer */ + if (sourceQueueEntry->flags.bits.signal_back == 1) + { + /*set message status */ + sourceMessageStatus.buffer_offset = 0; + sourceMessageStatus.flags.value = 0; + if (sourceQueueEntry->flags.bits.keep_valid) + sourceMessageStatus.flags.bits.valid = 1; + + /*send back message_status*/ + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + return MOC_ERR_INTERN; + mfc_put( + &sourceMessageStatus, + IMOC_EA_REMOTE_STATUS_ENTRY(sourceQueueEntry->id,status->MOC_SOURCE), + sizeof(moc_message_status_t), tag_id, 0, 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + mfc_tag_release(tag_id); + + } + sourceQueueEntry->flags.value = 0; + + status->MOC_ERROR = 0; + return 0; + } diff --git a/src/spu/communication/moc_ssend_spu.c b/src/spu/communication/moc_ssend_spu.c new file mode 100755 index 0000000..99c30da --- /dev/null +++ b/src/spu/communication/moc_ssend_spu.c @@ -0,0 +1,101 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +int MOC_Ssend(void* buf, int count, MOC_Datatype datatype, int dest, int tag, + MOC_Comm comm) + { + int queue_index, msg_id, bytecount, err; + moc_message_envelope_t queue_copy[node_handle.queue_size] __attribute__((__aligned__(16))); + + uint32_t tag_id; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + IMOC_TEST_PROC_NULL(dest) + IMOC_TEST_PROC_SELF(dest) + IMOC_TEST_BYTECOUNT(bytecount) + // if there is no data, permit Null-Buffer-Pointer + if (bytecount != 0) + { + IMOC_TEST_BUFFER(buf) + if (bytecount > 16) + IMOC_TEST_ALIGNMENT(buf) + } + IMOC_TEST_RANK(dest) + IMOC_TEST_TAG_SEND(tag) + IMOC_TEST_COMM_SEND(comm) + + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + { + return MOC_ERR_INTERN; + } + + mfc_get(queue_copy, IMOC_EA_REMOTE_QUEUE(dest), + sizeof(moc_message_envelope_t) * node_handle.queue_size, tag_id, 0, + 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + + err = IMOC_getFreeEntry(queue_copy, tag, comm, 0, &queue_index); + if (err) + return err; + + err = IMOC_getFreeMID(&msg_id); + if (err) + return err; + + /* small messages are directly sent instead of their address */ + if (bytecount <= 8) + { + //printf("SPU: sending in message-envelope\n"); + queue_copy[queue_index].flags.bits.channel = IMOC_MESSAGE_CHANNEL_ENV; + // synchronous send waits till the message has been received (meaning + // recv has copied the message), so we need a signal-back. + queue_copy[queue_index].flags.bits.signal_back = 1; + queue_copy[queue_index].flags.bits.in_mm = 0; + memcpy(&queue_copy[queue_index].message_address, buf, bytecount); + } + else + { + queue_copy[queue_index].flags.bits.channel = IMOC_MESSAGE_CHANNEL_DMA; + queue_copy[queue_index].flags.bits.signal_back = 1; + queue_copy[queue_index].flags.bits.in_mm = 0; + queue_copy[queue_index].message_address = node_handle.ls_base + + (uint32_t) buf; + } + + /* fill missing message-envelope-entries */ + queue_copy[queue_index].communicator = comm; + queue_copy[queue_index].datatype = datatype; + queue_copy[queue_index].id = msg_id; + queue_copy[queue_index].size = bytecount; + queue_copy[queue_index].tag = tag; + queue_copy[queue_index].flags.bits.collaborative = 0; + queue_copy[queue_index].flags.bits.special = 0; + queue_copy[queue_index].flags.bits.valid = 1; + queue_copy[queue_index].flags.bits.keep_valid = 0; + + /* fill message-status-entry */ + node_handle.status_array_base[msg_id].flags.bits.valid = 1; + node_handle.status_array_base[msg_id].flags.bits.outstanding = 1; + + mfc_put(&queue_copy[queue_index], IMOC_EA_REMOTE_QUEUE_ENTRY(dest, + queue_index), sizeof(moc_message_envelope_t), tag_id, 0, 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + mfc_tag_release(tag_id); + + IMOC_waitForMessageCompletion(msg_id); + return MOC_SUCCESS; + } diff --git a/src/spu/dma/moc_dma-get_spu.c b/src/spu/dma/moc_dma-get_spu.c new file mode 100755 index 0000000..028f086 --- /dev/null +++ b/src/spu/dma/moc_dma-get_spu.c @@ -0,0 +1,27 @@ +#include +#include + +#include +#include +#include +#include + +int MOC_Get_data(void* target, uint64_t source, int count, + MOC_Datatype datatype) + { + int bytecount; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + if (target == 0 || source == 0 || bytecount == 0) + return 0; + if ((((uint32_t) target) % 16) != 0 || (source % 16) != 0) + return MOC_ERR_BAD_ALIGNMENT; + IMOC_TEST_BYTECOUNT(bytecount) + + return IMOC_get_data(target, source, bytecount); + } + diff --git a/src/spu/dma/moc_dma-iget_spu.c b/src/spu/dma/moc_dma-iget_spu.c new file mode 100755 index 0000000..30ba4ee --- /dev/null +++ b/src/spu/dma/moc_dma-iget_spu.c @@ -0,0 +1,31 @@ +#include +#include + +#include +#include +#include +#include +#include + +int MOC_IGet_data(void* target, uint64_t source, int count, + MOC_Datatype datatype, MOC_Request *request) + { + int bytecount; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + if (target == 0 || source == 0 || bytecount == 0) + return 0; + if ((((uint32_t) target) % 16) != 0 || (source % 16) != 0) + return MOC_ERR_BAD_ALIGNMENT; + IMOC_TEST_BYTECOUNT(bytecount) + + request->request_type = MOC_REQ_TYPE_DMA; + + return IMOC_iget_data(target, source, bytecount, + &request->request_data.dma_data); + } + diff --git a/src/spu/dma/moc_dma-iput_spu.c b/src/spu/dma/moc_dma-iput_spu.c new file mode 100755 index 0000000..b92974b --- /dev/null +++ b/src/spu/dma/moc_dma-iput_spu.c @@ -0,0 +1,34 @@ +#include +#include +#include + +#include +#include +#include +#include +#include + +int MOC_IPut_data(void* source, uint64_t target, int count, + MOC_Datatype datatype, MOC_Request *request) + { + int bytecount; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + if (target == 0 || source == 0 || bytecount == 0) + return 0; + if ((target % 16) != 0 || (((uint32_t) source) % 16) != 0) + return MOC_ERR_BAD_ALIGNMENT; + if ((bytecount % 16) != 0) + return MOC_ERR_BAD_SIZE; + IMOC_TEST_BYTECOUNT(bytecount) + + request->request_type = MOC_REQ_TYPE_DMA; + + return IMOC_iput_data(source, target, bytecount, + &request->request_data.dma_data); + } + diff --git a/src/spu/dma/moc_dma-put_spu.c b/src/spu/dma/moc_dma-put_spu.c new file mode 100755 index 0000000..921fd5d --- /dev/null +++ b/src/spu/dma/moc_dma-put_spu.c @@ -0,0 +1,28 @@ +#include +#include + +#include +#include +#include + +int MOC_Put_data(void* source, uint64_t target, int count, + MOC_Datatype datatype) + { + int bytecount; + + if (((datatype & 0xF0) >> 4) == 0) + bytecount = count; + else + bytecount = count * (((datatype & 0xF0) >> 4) * 2); + + if (target == 0 || source == 0 || bytecount == 0) + return 0; + if ((target % 16) != 0 || (((uint32_t) source) % 16) != 0) + return MOC_ERR_BAD_ALIGNMENT; + if ((bytecount % 16) != 0) + return MOC_ERR_BAD_SIZE; + IMOC_TEST_BYTECOUNT(bytecount) + + return IMOC_put_data(source, target, bytecount); + } + diff --git a/src/spu/dma/moc_dma-test_spu.c b/src/spu/dma/moc_dma-test_spu.c new file mode 100755 index 0000000..c1b2be2 --- /dev/null +++ b/src/spu/dma/moc_dma-test_spu.c @@ -0,0 +1,13 @@ +#include +#include +#include + +/* + * wrapper function for IMOC_test_dma so that the syntax is more in line and more intutive use of MOC_Request instead of + * of imoc_dma_request is possible + */ + +int MOC_Test_data(MOC_Request* request, int *flag) + { + return IMOC_test_dma(&(request->request_data.dma_data), flag); + } diff --git a/src/spu/dma/moc_dma-wait_spu.c b/src/spu/dma/moc_dma-wait_spu.c new file mode 100755 index 0000000..99ba094 --- /dev/null +++ b/src/spu/dma/moc_dma-wait_spu.c @@ -0,0 +1,13 @@ +#include +#include +#include + +/* + * wrapper function for IMOC_test_dma so that the syntax is more in line and more intutive use of MOC_Request instead of + * of imoc_dma_request is possible + */ + +int MOC_Wait_data(MOC_Request* request) + { + return IMOC_wait_dma(&(request->request_data.dma_data)); + } diff --git a/src/spu/dma/moc_translate_ls_ea_spu.c b/src/spu/dma/moc_translate_ls_ea_spu.c new file mode 100755 index 0000000..e63f07e --- /dev/null +++ b/src/spu/dma/moc_translate_ls_ea_spu.c @@ -0,0 +1,9 @@ +#include +#include + +int MOC_Translate_LS_to_EA(void* ls, uint64_t* ea) + { + *ea = node_handle.ls_base + (uint32_t) ls; + return 0; + } + diff --git a/src/spu/internal/dma/imoc_dma-get_spu.c b/src/spu/internal/dma/imoc_dma-get_spu.c new file mode 100755 index 0000000..4f64a96 --- /dev/null +++ b/src/spu/internal/dma/imoc_dma-get_spu.c @@ -0,0 +1,70 @@ +#include +#include + +#include +#include +#include + +int IMOC_get_data(void* target, uint64_t source, uint32_t size) + { + uint32_t remainder_16b; + uint32_t remainder_16kb; + uint32_t offset; + uint32_t tag_id; + char buffer[16]; + + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + { + return MOC_ERR_INTERN; + } + + /* transfers have to be multiples of 16 bytes */ + remainder_16b = size % 16; + + /* subtracting remainder means the transfer has a valid size now */ + size -= remainder_16b; + offset = 0; + + /* first case: transfer of size smaller than maximum allowed one (16kbyte) */ + if (size <= MAX_DMA_CALL_SIZE) + { + mfc_get(target, source, size, tag_id, 0, 0); + } + /* second case: transfer of bigger size is simply split into parts of 16kb */ + else + { + remainder_16kb = size % MAX_DMA_CALL_SIZE; + while (offset + MAX_DMA_CALL_SIZE <= size) + { + mfc_get(target + offset, source + offset, MAX_DMA_CALL_SIZE, + tag_id, 0, 0); + offset += MAX_DMA_CALL_SIZE; + } + if (remainder_16kb > 0) + { + mfc_get(target + offset, source + offset, remainder_16kb, tag_id, + 0, 0); + } + } + /* if size was reduced previously the remaining bytes have to be transfered */ + if (remainder_16b > 0) + { + /* minimum allowed transfer is 16bytes so transfer this size into a buffer */ + mfc_get(buffer, source + size, 16, tag_id, 0, 0); + /* waiting for dma completion necessary */ + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + /* copy only the valid bytes into the target buffer */ + memcpy(target + size, buffer, remainder_16b); + } + else + { + /* waiting for dma completion necessary */ + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + } + + mfc_tag_release(tag_id); + return MOC_SUCCESS; + } + diff --git a/src/spu/internal/dma/imoc_dma-iget_spu.c b/src/spu/internal/dma/imoc_dma-iget_spu.c new file mode 100755 index 0000000..bdba011 --- /dev/null +++ b/src/spu/internal/dma/imoc_dma-iget_spu.c @@ -0,0 +1,67 @@ +#include +#include +#include + +#include +#include +#include +#include + +int IMOC_iget_data(void* target, uint64_t source, uint32_t size, + imoc_dma_request* request) + { + uint32_t remainder_16b; + uint32_t remainder_16kb; + uint32_t offset; + uint32_t tag_id; + + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + { + return MOC_ERR_INTERN; + } + + /* transfers have to be multiples of 16 bytes */ + remainder_16b = size % 16; + + request->remainder = 0; + request->size = size; + request->target = target; + request->tag_id = tag_id; + + /* subtracting remainder means the transfer has a valid size now */ + size -= remainder_16b; + offset = 0; + + /* first case: transfer of size smaller than maximum allowed one (16kbyte) */ + if (size <= MAX_DMA_CALL_SIZE) + { + mfc_get(target, source, size, tag_id, 0, 0); + } + /* second case: transfer of bigger size is simply split into parts of 16kb */ + else + { + remainder_16kb = size % MAX_DMA_CALL_SIZE; + while (offset + MAX_DMA_CALL_SIZE <= size) + { + mfc_get(target + offset, source + offset, MAX_DMA_CALL_SIZE, + tag_id, 0, 0); + offset += MAX_DMA_CALL_SIZE; + } + if (remainder_16kb > 0) + { + mfc_get(target + offset, source + offset, remainder_16kb, tag_id, + 0, 0); + } + } + /* if size was reduced previously the remaining bytes have to be transfered */ + if (remainder_16b > 0) + { + request->buffer = (char*) malloc(16 * sizeof(char)); + /* minimum allowed transfer is 16bytes so transfer this size into a buffer */ + mfc_get(request->buffer, source + size, 16, tag_id, 0, 0); + request->remainder = remainder_16b; + } + + return MOC_SUCCESS; + } + diff --git a/src/spu/internal/dma/imoc_dma-iput_spu.c b/src/spu/internal/dma/imoc_dma-iput_spu.c new file mode 100755 index 0000000..294e08a --- /dev/null +++ b/src/spu/internal/dma/imoc_dma-iput_spu.c @@ -0,0 +1,63 @@ +#include +#include +#include + +#include +#include +#include +#include + +int IMOC_iput_data(void* source, uint64_t target, uint32_t size, + imoc_dma_request* request) + { + uint32_t remainder_16b; + uint32_t remainder_16kb; + uint32_t offset; + uint32_t tag_id; + + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + { + return MOC_ERR_INTERN; + } + + /* transfers have to be multiples of 16 bytes */ + remainder_16b = size % 16; + + request->remainder = 0; + request->tag_id = tag_id; + + /* subtracting remainder means the transfer has a valid size now */ + size -= remainder_16b; + offset = 0; + + /* first case: transfer of size smaller than maximum allowed one (16kbyte) */ + if (size <= MAX_DMA_CALL_SIZE) + { + mfc_put(source, target, size, tag_id, 0, 0); + } + /* second case: transfer of bigger size is simply split into parts of 16kb */ + else + { + remainder_16kb = size % MAX_DMA_CALL_SIZE; + while (offset + MAX_DMA_CALL_SIZE <= size) + { + mfc_put(source + offset, target + offset, MAX_DMA_CALL_SIZE, + tag_id, 0, 0); + offset += MAX_DMA_CALL_SIZE; + } + if (remainder_16kb > 0) + { + mfc_put(source + offset, target + offset, remainder_16kb, tag_id, + 0, 0); + } + } + /* if size was reduced previously the remaining bytes have to be transfered */ + if (remainder_16b > 0) + { + /* minimum allowed transfer is 16bytes so transfer this size */ + mfc_put(source + size, target + size, 16, tag_id, 0, 0); + } + + return MOC_SUCCESS; + } + diff --git a/src/spu/internal/dma/imoc_dma-put_spu.c b/src/spu/internal/dma/imoc_dma-put_spu.c new file mode 100755 index 0000000..de96660 --- /dev/null +++ b/src/spu/internal/dma/imoc_dma-put_spu.c @@ -0,0 +1,61 @@ +#include +#include + +#include +#include +#include + +int IMOC_put_data(void* source, uint64_t target, uint32_t size) + { + uint32_t remainder_16b; + uint32_t remainder_16kb; + uint32_t offset; + uint32_t tag_id; + + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + { + return MOC_ERR_INTERN; + } + + /* transfers have to be multiples of 16 bytes */ + remainder_16b = size % 16; + + /* subtracting remainder means the transfer has a valid size now */ + size -= remainder_16b; + offset = 0; + + /* first case: transfer of size smaller than maximum allowed one (16kbyte) */ + if (size <= MAX_DMA_CALL_SIZE) + { + mfc_put(source, target, size, tag_id, 0, 0); + } + /* second case: transfer of bigger size is simply split into parts of 16kb */ + else + { + remainder_16kb = size % MAX_DMA_CALL_SIZE; + while (offset + MAX_DMA_CALL_SIZE <= size) + { + mfc_put(source + offset, target + offset, MAX_DMA_CALL_SIZE, + tag_id, 0, 0); + offset += MAX_DMA_CALL_SIZE; + } + if (remainder_16kb > 0) + { + mfc_put(source + offset, target + offset, remainder_16kb, tag_id, + 0, 0); + } + } + /* if size was reduced previously the remaining bytes have to be transfered */ + if (remainder_16b > 0) + { + /* minimum allowed transfer is 16bytes so transfer this size */ + mfc_put(source + size, target + size, 16, tag_id, 0, 0); + } + + /* waiting for dma completion necessary */ + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + mfc_tag_release(tag_id); + return MOC_SUCCESS; + } + diff --git a/src/spu/internal/dma/imoc_dma-test_spu.c b/src/spu/internal/dma/imoc_dma-test_spu.c new file mode 100755 index 0000000..822ae3f --- /dev/null +++ b/src/spu/internal/dma/imoc_dma-test_spu.c @@ -0,0 +1,31 @@ +#include +#include +#include +#include + +#include +#include + +int IMOC_test_dma(imoc_dma_request* request, int *flag) + { + uint32_t ret; + mfc_write_tag_mask(1 << request->tag_id); + mfc_write_tag_update(MFC_TAG_UPDATE_IMMEDIATE); + ret = mfc_read_tag_status(); + + if ((ret & (1 << request->tag_id)) == 0) // dma transfer not finished + *flag = 0; + else // dma transfer finished + { + if (request->remainder != 0) // check if buffer was used and copy back data from there to target + { + memcpy(request->target + request->size, request->buffer, + request->remainder); + free(request->buffer); + } + mfc_tag_release(request->tag_id); + *flag = 1; + } + + return MOC_SUCCESS; + } diff --git a/src/spu/internal/dma/imoc_dma-wait_spu.c b/src/spu/internal/dma/imoc_dma-wait_spu.c new file mode 100755 index 0000000..20effba --- /dev/null +++ b/src/spu/internal/dma/imoc_dma-wait_spu.c @@ -0,0 +1,21 @@ +#include +#include +#include +#include + +#include +#include + +int IMOC_wait_dma(imoc_dma_request* request) + { + mfc_write_tag_mask(1 << request->tag_id); + mfc_read_tag_status_all(); + if (request->remainder != 0) // check if buffer was used and copy back data from there to target + { + memcpy(request->target + request->size, request->buffer, + request->remainder); + free(request->buffer); + } + mfc_tag_release(request->tag_id); + return MOC_SUCCESS; + } diff --git a/src/spu/internal/imoc_core_spu.c b/src/spu/internal/imoc_core_spu.c new file mode 100755 index 0000000..9c53f8c --- /dev/null +++ b/src/spu/internal/imoc_core_spu.c @@ -0,0 +1,4 @@ +#include + +moc_node_handle_spu_t node_handle; + diff --git a/src/spu/libmoc_spu.a b/src/spu/libmoc_spu.a new file mode 100755 index 0000000..d062ea8 Binary files /dev/null and b/src/spu/libmoc_spu.a differ diff --git a/src/spu/system/moc_error_string_spu.c b/src/spu/system/moc_error_string_spu.c new file mode 100755 index 0000000..84e7315 --- /dev/null +++ b/src/spu/system/moc_error_string_spu.c @@ -0,0 +1,88 @@ +#include +#include + +#include +#include + +/** + * \addtogroup internal_error Error-Handling + **/ +//@{ +/** + * @name SPU-only + **/ +//@{ + + +/** + * stores the error-messages + * + * \note SPU-only + **/ +error_strings_t error_strings[] = +{ +{ 0, "No Error" }, +{ 1000, "Invalid buffer pointer" }, +{ 2000, "Invalid count argument" }, +{ 3000, "Invalid datatype argument" }, +{ 4000, "Invalid tag argument" }, +{ 5000, "Invalid communicator"}, +{ 6000, "Invalid rank" }, +{ 7000, "Invalid request (handle)" }, +{ 8000, "Invalid root" }, +{ 9000, "Invalid group" }, +// 10 entries so far +{ 10000, "Invalid operation" }, +{ 11000, "Invalid topology" }, +{ 12000, "Invalid dimension argument" }, +{ 13000, "Invalid argument of some other kind" }, +{ 14000, "Unknown error" }, +{ 15000, "Message truncated on receive" }, +{ 16000, "Known error not in this list" }, +{ 17000, "Internal MOC (implementation) error" }, +{ 18000, "Error code is in status" }, +{ 19000, "Pending request" }, +// 20 entries so far +{ 20000, "Last error code" }, +{ 17001, "Function not implemented" }, +{ 17002, "Internal Buffer Overflow" }, +{ 17003, "Insufficient Memory" }, +{ 17004, "Insufficient Buffer-Space" }, +{ 17005, "No further messages possible" }, +{ 16001, "Base-Adress of Buffer isn't 16-byte aligned" }, +{ 16002, "Bad Size (probably no multiple of 16)" } +}; + +/** + * error-message count + * + * \note SPU-only + **/ +#define ERROR_STRINGS_COUNT 28 + +//@} +//@} + + +int MOC_Error_string(int errorcode, char *string, int *resultlen) + { + int i; + *resultlen = 0; + if (errorcode < 0 || errorcode > MOC_ERR_LASTCODE) + { + return MOC_ERR_ARG; + } + for (i = 0; i < ERROR_STRINGS_COUNT; i++) + { + if (error_strings[i].error_code == errorcode) + { + strcpy(string, error_strings[i].text); + *resultlen = strlen(string) + 1; + return 0; + } + } + strcpy(string, "No Error-String found"); + *resultlen = strlen(string) + 1; + return 0; + } + diff --git a/src/spu/system/moc_finalize_spu.c b/src/spu/system/moc_finalize_spu.c new file mode 100755 index 0000000..d3bc8c4 --- /dev/null +++ b/src/spu/system/moc_finalize_spu.c @@ -0,0 +1,28 @@ +#include +#include +#include +#include + +#include +#include +#include + +int MOC_Finalize(void) + { + spu_write_out_mbox(node_handle.rank); + while (spu_stat_in_mbox() < 1) + ; + extern moc_internal_buffer_node_t* bmalloc_first_node; + /* free local resources */ + _free_align((void*) node_handle.message_queue_base); + _free_align((void*) node_handle.status_array_base); + _free_align((void*) node_handle.moc_process_list); + while (bmalloc_first_node) + { + moc_internal_buffer_node_t* temp = bmalloc_first_node; + bmalloc_first_node = bmalloc_first_node->next_node; + free(temp); + } + return 0; + } + diff --git a/src/spu/system/moc_get_proc_name_spu.c b/src/spu/system/moc_get_proc_name_spu.c new file mode 100755 index 0000000..4d470d6 --- /dev/null +++ b/src/spu/system/moc_get_proc_name_spu.c @@ -0,0 +1,12 @@ +#include + +int MOC_Get_processor_name(char *name, int *resultlen) + { + name[0] = 'S'; + name[1] = 'P'; + name[2] = 'U'; + name[3] = '\0'; + *resultlen = 4; + return 0; + } + diff --git a/src/spu/system/moc_init_spu.c b/src/spu/system/moc_init_spu.c new file mode 100755 index 0000000..79708aa --- /dev/null +++ b/src/spu/system/moc_init_spu.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +int MOC_Init(unsigned long long argp __attribute__((unused)), int length __attribute__((unused)), void* buffer __attribute__((unused)) ) + { + char temp[24]; + uint32_t tag_id; + /* wait till four messages from PPU are received */ + while (spu_stat_in_mbox() < 4) + ; + /* read messages */ + *((uint32_t*) &temp[0]) = spu_read_in_mbox(); + *((uint32_t*) &temp[4]) = spu_read_in_mbox(); + *((uint32_t*) &temp[8]) = spu_read_in_mbox(); + *((uint32_t*) &temp[12]) = spu_read_in_mbox(); + /* wait till two messages from PPU are received */ + while (spu_stat_in_mbox() < 2) + ; + /* read messages */ + *((uint32_t*) &temp[16]) = spu_read_in_mbox(); + *((uint32_t*) &temp[20]) = spu_read_in_mbox(); + /* create own node-handle and data-structures */ + node_handle.rank = temp[0]; + node_handle.comm_size = temp[1]; + node_handle.queue_size = temp[2]; + node_handle.buffer_size = *((uint32_t*) &temp[4]); + node_handle.buffer_base = *((uint64_t*) &temp[8]); + node_handle.ls_base = *((uint64_t*) &temp[16]); + node_handle.message_queue_base = _malloc_align( + sizeof(moc_message_envelope_t) * (node_handle.comm_size - 1) + * node_handle.queue_size, 4); + if (node_handle.message_queue_base == 0) + return MOC_ERR_NO_MEMORY; + node_handle.status_array_base = _malloc_align(sizeof(moc_message_status_t) + * (node_handle.comm_size - 1) * node_handle.queue_size, 4); + if (node_handle.status_array_base == 0) + return MOC_ERR_NO_MEMORY; + /* send memory addresses of message-queue and status-array to PPU */ + spu_write_out_mbox((uint32_t) node_handle.message_queue_base); + spu_write_out_mbox((uint32_t) node_handle.status_array_base); + /* allocate space for process-list */ + node_handle.moc_process_list = _malloc_align(sizeof(moc_process_t) + * node_handle.comm_size, 4); + if (node_handle.moc_process_list == 0) + return MOC_ERR_NO_MEMORY; + /* receive memory-address of prozess-list in main-memory from PPU */ + while (spu_stat_in_mbox() < 2) + ; + *((uint32_t*) &temp[0]) = spu_read_in_mbox(); + *((uint32_t*) &temp[4]) = spu_read_in_mbox(); + /* get process-list from main-memory via DMA */ + if ((tag_id = mfc_tag_reserve()) == MFC_TAG_INVALID) + return MOC_ERR_INTERN; + mfc_get((void*) node_handle.moc_process_list, *((uint64_t*) &temp[0]), + sizeof(moc_process_t) * node_handle.comm_size, tag_id, 0, 0); + mfc_write_tag_mask(1 << tag_id); + mfc_read_tag_status_all(); + mfc_tag_release(tag_id); + return 0; + } + diff --git a/src/spu/system/moc_wtick_spu.c b/src/spu/system/moc_wtick_spu.c new file mode 100755 index 0000000..572fd98 --- /dev/null +++ b/src/spu/system/moc_wtick_spu.c @@ -0,0 +1,46 @@ + +#include + +// if Time-Source is "gettimeofday()" from sys/time.h +// surprisingly this works out of the box. and it seems to be a +// global synchronized time. no internal information how it is +// implemented was found so far, but I think its communicating +// with the PPU because there is no known instance on the SPU +// capable of handling this except the SPU timer library. +// so be carefull using this. +#if defined(MOC_SPU_TIMESOURCE_TIMEOFDAY) +#undef MOC_SPU_TIMESOURCE_SPUTIME + +#include +#include + +double MOC_Wtick(void) + { + return 1.0 / ((double) CLOCKS_PER_SEC); + } + +// if Time-Source is the SPU timer library +// this library seems to have prototype-status and its path isn't +// the default. therefore the sputimer-library needs to be explicitly +// linked to any MOC-application. +#elif defined(MOC_SPU_TIMESOURCE_SPUTIME) +#undef MOC_SPU_TIMESOURCE_TIMEOFDAY + +#define IMOC_TIMEBASE 79800000 + +double MOC_Wtick(void) + { + return 1.0/((double)IMOC_TIMEBASE); + } + +// if no time-source +// some dummy-functions +#else + +double MOC_Wtick(void) + { + return 0; + } + +#endif + diff --git a/src/spu/system/moc_wtime_spu.c b/src/spu/system/moc_wtime_spu.c new file mode 100755 index 0000000..498dd9c --- /dev/null +++ b/src/spu/system/moc_wtime_spu.c @@ -0,0 +1,60 @@ + +#include + +// if Time-Source is "gettimeofday()" from sys/time.h +// surprisingly this works out of the box. and it seems to be a +// global synchronized time. no internal information how it is +// implemented was found so far, but I think its communicating +// with the PPU because there is no known instance on the SPU +// capable of handling this except the SPU timer library. +// so be carefull using this. +#if defined(MOC_SPU_TIMESOURCE_TIMEOFDAY) +#undef MOC_SPU_TIMESOURCE_SPUTIME + +#include +#include + +double MOC_Wtime(void) + { + struct timeval time; + gettimeofday(&time, NULL); + return ((double) time.tv_sec) + ((double) time.tv_usec) + / ((double) 1000000.0); + } + +// if Time-Source is the SPU timer library +// this library seems to have prototype-status and its path isn't +// the default. therefore the sputimer-library needs to be explicitly +// linked to any MOC-application. +#elif defined(MOC_SPU_TIMESOURCE_SPUTIME) +#undef MOC_SPU_TIMESOURCE_TIMEOFDAY + +#include +#include + +#define IMOC_TIMEBASE 79800000 + +char isTimerRunning = 0; + +double MOC_Wtime(void) + { + if (!isTimerRunning) + { + spu_slih_register (MFC_DECREMENTER_EVENT, spu_clock_slih); + spu_clock_start (); + isTimerRunning = 1; + } + return ((double)spu_clock_read()/((double)IMOC_TIMEBASE)); + } + +// if no time-source +// some dummy-functions +#else + +double MOC_Wtime(void) + { + return 0; + } + +#endif +