void TestScheduler(const char* msg, const PrimeMap& value, time_sec serialTime) { ticks_t start = now(); SCHEDULER scheduler(CoreCount); std::map<std::size_t, std::size_t> tasks; for (std::size_t i = 0; i < Count; i++) { #ifdef VOID_TEST tasks[i] = scheduler.add_task([i]() -> void {Test(i); }); tasks[MaxNum - i] = scheduler.add_task([i]() -> void {Test(MaxNum - i); }); #else tasks[i] = scheduler.add_task([i]() -> bool { return IsPrime(i); }); tasks[MaxNum - i] = scheduler.add_task([i]() -> bool { return IsPrime(MaxNum - i); }); #endif } for (auto i = tasks.begin(); i != tasks.end(); ++i) { #ifdef VOID_TEST scheduler.get_task_result(i->second); #else if (value.at(i->first) != scheduler.get_task_result(i->second)) throw 0; #endif } time_sec parallelTime = ticks_to_time(now() - start); std::cout << msg << " time = " << parallelTime << " [s] - Serial time portion = " << parallelTime / (serialTime / 100.0) << " [%]" << std::endl; std::cout << msg << " calculation correct" << std::endl; }
int main() { #ifdef VOID_TEST std::cerr << "Void test." << std::endl; #else std::cerr << "Int test." << std::endl; #endif ticks_t start = now(); PrimeMap value; for (std::size_t i = 0; i < Count; i++) { #ifdef VOID_TEST Test(i); Test(MaxNum - i); #else value[i] = IsPrime(i); value[MaxNum - i] = IsPrime(MaxNum - i); #endif } time_sec serialTime = ticks_to_time(now() - start); std::cout << "Serial time = " << serialTime << std::endl; #ifdef VOID_TEST TestScheduler<Scheduler<void, std::function<void(void)>>>("Scheduler", value, serialTime); #else TestScheduler<Scheduler<bool, std::function<bool(void)> > >("Scheduler", value, serialTime); #endif system("pause"); return 0; }
static void __get_timer_status(posix_timer_t *ptimer,itimerspec_t *kspec) { ktimer_t *timer=&ptimer->ktimer; ticks_to_time(&kspec->it_interval,ptimer->interval); /* We disable interrupts to prevent us from being preempted, and, * therefore, from calculating wrong time delta. */ interrupts_disable(); if( timer->time_x > system_ticks ) { ticks_to_time(&kspec->it_value,timer->time_x - system_ticks); } else { kspec->it_value.tv_sec=kspec->it_value.tv_nsec=0; } interrupts_enable(); }