int main(int argc, const char * argv[]) { //TEST_LOWERING(); TEST_TIMER(); /* Cube<DataType_SFFloat, Layout_RCDB> cube1( 10, 10, 10, 10 ); Cube<DataType_SFFloat, Layout_RCDB> cube2( 3*3*10, (10-3+1)*(10-3+1)*10, 1, 1 ); */ //DataType_SFFloat * data = cube.logical_get(1,2,3,4); //*data = 5; //data = cube.logical_get(1,2,3,4); //std::cout << *data << std::endl; //cube.physical_get_RCslice(3,4); /* LoweringConfig lconfig; lconfig.kernel_size = 3; Connector<DataType_SFFloat, Layout_RCDB, DataType_SFFloat, Layout_RCDB, Connector_Lowering_R1C1>connector(&cube1, &cube2, &lconfig); connector.transfer(&cube1, &cube2); */ // insert code here... std::cout << "Hello, World!\n"; return 0; }
void TaskSchedulerTest::RunTest() { struct TestForLoop { int test_val; void RunRange(int start, int end) { /* verify the iteration order is legit */ a( end >= start ); int flag = (1<<start); for(int i = start; i <= end; i++) { /* verify each iteration is ran only once by the scheduler */ a( (test_val & flag) == 0 ); test_val |= flag; flag <<= 1; } } }; /* Test scheduler runs each iteration of parallel loop */ { Restart(); EXPERIMENT("Parallel For Synchronous"); /* __Init__ */ TestForLoop loop; memset(&loop, 0, sizeof(TestForLoop)); /* __Run__ */ TEST_TIMER("Parallel For Synchronous"); ::ParallelForTask(&loop, Range(0,31), m_scheduler); STOP_TIMER(); /* __Verify__ */ for(int i = 0, mask = 1; i < 32; i++) { a( (loop.test_val & mask) != 0 ); mask <<= 1; } } /***** end test *****/ /* Test synchronous single iteration */ { Restart(); EXPERIMENT("Single Itr Synchronous"); /* __Init__ */ TestForLoop loop; memset(&loop, 0, sizeof(TestForLoop)); /* __Run__ */ TEST_TIMER("Single Itr Synchronous"); ::ParallelForTask(&loop, Range(0, 0), m_scheduler); STOP_TIMER(); /* __Verify__ */ a(loop.test_val == 1); } /***** end test *****/ /* Test async parallel for w/ this thread spinning entire time */ { Restart(); EXPERIMENT("Parallel For Async"); /* __Init__ */ TestForLoop loop; memset(&loop, 0, sizeof(TestForLoop)); CompletionToken token; unsigned int spins = 0; const unsigned int maxspins = 50; /* __Run__ */ TEST_TIMER("Parallel For Async"); ::ParallelForAsyncTask(&loop, Range(0,31), m_scheduler, &token); bool keepSpinning = true; for(spins = 0; keepSpinning == true; spins++) { keepSpinning = !::ParallelForAsyncComplete(&loop, &token); Sleep(100); if(spins == maxspins) { afail(); break; } } STOP_TIMER(); /* __Verify__ */ for(int i = 0, mask = 1; i < 32; i++) { a( (loop.test_val & mask) != 0 ); mask <<= 1; } a(spins > 1); } /***** end test *****/ /* Test single iteration async */ { Restart(); EXPERIMENT("Single Itr Async"); /* __Init__ */ TestForLoop loop; memset(&loop, 0, sizeof(TestForLoop)); CompletionToken token; unsigned int spins = 0; const unsigned int maxspins = 500; /* __Run__ */ TEST_TIMER("Single Itr Async"); ::ParallelForAsyncTask(&loop, Range(0,0), m_scheduler, &token); bool keepSpinning = true; for(spins = 0; keepSpinning == true; spins++) { keepSpinning = !::ParallelForAsyncComplete(&loop, &token); // Sleep(100); if(spins == maxspins) { afail(); break; } } STOP_TIMER(); /* __Verify__ */ a(loop.test_val == 1); a(spins > 1); } /***** end test *****/ /* Test scheduler destroy w/ no tasks given */ { Restart(); EXPERIMENT("Zero-Task Shutdown"); /* __Init__ */ /* __Run__ */ TEST_TIMER("Single Itr Async"); Restart(); STOP_TIMER(); /* __Verify__ */ } /***** end test *****/ }