#include #include #include #include "galaxy.h" int my_node, left_node, right_node; TMessage sendLeft, sendRight, recvLeft, recvRight; void DetermineRouting( int, int, int *, int *); void InitializeMessages( int, int); void SetClock( void); double CalcTime( void); void DisplayResults( void); int main ( int argc, char **argv) { int num_nodes; SetClock(); my_node = mynode(); num_nodes = numnodes(); /*\ Assert where messages will be sent to \*/ DetermineRouting( my_node, num_nodes, &left_node, &right_node); InitializeMessages( my_node, num_nodes); /*\ Distribute work \*/ if ( my_node == 0) Create(); else if ( my_node == (num_nodes - 1)) Collapse(); else Form(); /*\ Barrier \*/ gsync(); if ( my_node == 0) { printf( "End simulation\n"); printf( "...total time: %f\n", CalcTime()); } DisplayResults(); } void DetermineRouting( int my_node, int num_nodes, int *left_node, int *right_node) { if ( my_node > 0) *left_node = my_node - 1; else *left_node = num_nodes - 1; *right_node = (my_node + 1) % num_nodes; } void SetClock() { } double CalcTime() { return( 0.01943); } void InitializeMessages( int my_node, int num_nodes) { float start, stop; start = ((float) my_node / (float) num_nodes) * 100.0; stop = ((float) (my_node + 1.0) / (float) num_nodes) * 100.0; sprintf( sendLeft.fMessage, "%3d: Calculate from %6.2f%% to %6.2f%%", my_node, start, stop); sprintf( sendRight.fMessage,"%3d: Calculate from %6.2f%% to %6.2f%%", my_node, start, stop); } void DisplayResults() { printf( "<%d> -- <%s>\n", my_node, recvLeft.fMessage); printf( "<%d> -- <%s>\n", my_node, recvRight.fMessage); } /*\ EOF \*/