int main ( int argc, char **argv ) { int i; bool check = true; main__loop_1_data_t _loop_data; A = 0; WD *wg = getMyThreadSafe()->getCurrentWD(); for ( i = 0; i < NUM_ITERS; i++ ) { // If we're done processing half of the dataset if ( i == NUM_ITERS/2 ) { // Stop scheduler sys.stopScheduler(); } // Work descriptor creation WD * wd = new WD( new SMPDD( main__loop_1 ), sizeof( _loop_data ), __alignof__(nanos_loop_info_t), ( void * ) &_loop_data ); wd->setPriority( 100 ); // Work Group affiliation wg->addWork( *wd ); // Work submission sys.submit( *wd ); if ( i == ( NUM_ITERS/2 + 5 ) ){ // Keep going sys.startScheduler(); } } // barrier (kind of) wg->waitCompletion(); /* * How can we be sure the test passed? Each task increments A. If we run N * tasks, A should be equal to N. * If it's less than N, that'd mean the scheduler lost something. */ if ( A.value() != NUM_ITERS ) check = false; if ( check ) { fprintf(stderr, "%s : %s\n", argv[0], "successful"); return 0; } else { fprintf(stderr, "%s: %s\n", argv[0], "unsuccessful"); return -1; } }
int main ( int argc, char **argv ) { cout << "PEs = " << sys.getSMPPlugin()->getNumPEs() << endl; cout << "Mode = " << sys.getExecutionMode() << endl; cout << "Verbose = " << sys.getVerbose() << endl; cout << "Args" << endl; for ( int i = 0; i < argc; i++ ) cout << argv[i] << endl; cout << "start" << endl; hello_world_args *data; const char *str; // Work arguments str = "std::string(1)"; data = new hello_world_args(); data->a = 1; strncpy(data->b, "char *string(1)", strlen("char *string(1)")); data->c = str; // Work descriptor creation WD * wd1 = new WD( new SMPDD( hello_world ), sizeof(hello_world_args), __alignof__(hello_world_args), data ); // Work arguments str = "std::string(2)"; data = new hello_world_args(); data->repeat_n_info.n = 10; data->a = 2; strncpy(data->b, "char *string(2)", strlen("char *string(2)")); data->c = str; // loading RepeatN Slicer Plugin sys.loadPlugin( "slicer-repeat_n" ); Slicer *slicer = sys.getSlicer ( "repeat_n" ); // Work descriptor creation WD * wd2 = new WorkDescriptor( new SMPDD( hello_world ), sizeof(hello_world_args), __alignof__(hello_world_args),data,0,NULL,NULL ); wd2->setSlicer(slicer); // Work Group affiliation and work submision WD *wg = getMyThreadSafe()->getCurrentWD(); wg->addWork( *wd1 ); wg->addWork( *wd2 ); if ( sys.getPMInterface().getInternalDataSize() > 0 ) { char *idata = NEW char[sys.getPMInterface().getInternalDataSize()]; sys.getPMInterface().initInternalData( idata ); wd1->setInternalData( idata ); }
int main ( int argc, char **argv ) { int i; bool check = true; main__loop_1_data_t _loop_data; // Repeat the test NUM_RUNS times for ( int testNumber = 0; testNumber < NUM_RUNS; ++testNumber ) { A = 0; WD *wg = getMyThreadSafe()->getCurrentWD(); // Stop scheduler sys.stopScheduler(); // increment variable for ( i = 0; i < NUM_ITERS; i++ ) { // Work descriptor creation WD * wd = new WD( new SMPDD( main__loop_1 ), sizeof( _loop_data ), __alignof__(nanos_loop_info_t), ( void * ) &_loop_data ); wd->setPriority( 100 ); // Work Group affiliation wg->addWork( *wd ); // Work submission sys.submit( *wd ); } // Re-enable the scheduler sys.startScheduler(); // barrier (kind of) wg->waitCompletion(); /* * The verification criteria is that A is equal to the number of tasks * run. Should A be lower, that would indicate that not all tasks * successfuly finished. */ if ( A.value() != NUM_ITERS ) check = false; } if ( check ) { fprintf(stderr, "%s : %s\n", argv[0], "successful"); return 0; } else { fprintf(stderr, "%s: %s\n", argv[0], "unsuccessful"); return -1; } }