void reset_game_state(void) { extern int last_highscore; SDL_ShowCursor(SDL_DISABLE); last_highscore = -1; gc.score = 0; gc.ships_left = 2; gc.level_tics = 0; gc.multiplier = 1; gc.cur_level = settings.static_settings->start_level; ship.is_alive = 0; gc.tics_remaining = 0; /* last_death_tic = -70; */ memset(&game_stat_counters, 0, sizeof(game_stat_counters)); ships_text_width = string_width_in_pixels(font_small, "ships"); reset_level(); reset_eye(); reset_water(); reset_background(); reset_arena(); reset_particles(); reset_explosions(); reset_missiles(); reset_bombs(); reset_lasers(); reset_foes(); reset_powerups(); reset_in_game_texts(); reset_ship_powerups(); set_inner_state(IS_WAVE_TITLE); play_music(MUS_STAGE_1); }
static void do_random_experiment(FILE* outfile, int num_cpus, int wss, int sleep_min, int sleep_max, int write_cycle, int sample_count, int best_effort) { int last_cpu, next_cpu, delay, show = 1, i; unsigned long preempt_counter = 0; unsigned long migration_counter = 0; unsigned long counter = 1; unsigned long num_pages = wss / getpagesize(); unsigned long *phys_addrs; cycles_t start, stop; cycles_t cold, hot1, hot2, hot3, after_resume; int *mem; if (!num_pages) num_pages = 1; phys_addrs = malloc(sizeof(long) * num_pages); migrate_to(0); last_cpu = 0; /* prefault and dirty cache */ reset_arena(); #if defined(__i386__) || defined(__x86_64__) if (!best_effort) iopl(3); #endif fprintf(outfile, "# %5s, %6s, %6s, %6s, %3s, %3s" ", %10s, %10s, %10s, %10s, %10s" ", %12s, %12s" "\n", "COUNT", "WCYCLE", "WSS", "DELAY", "SRC", "TGT", "COLD", "HOT1", "HOT2", "HOT3", "WITH-CPMD", "VIRT ADDR", "PHYS ADDR"); while (!sample_count || sample_count >= preempt_counter || (num_cpus > 1 && sample_count >= migration_counter)) { delay = sleep_min + random() % (sleep_max - sleep_min + 1); next_cpu = pick_cpu(last_cpu, num_cpus); if (sample_count) show = (next_cpu == last_cpu && sample_count >= preempt_counter) || (next_cpu != last_cpu && sample_count >= migration_counter); mem = allocate(wss); #if defined(__i386__) || defined(__x86_64__) if (!best_effort) cli(); #endif start = get_cycles(); mem[0] = touch_mem(mem, wss, write_cycle); stop = get_cycles(); cold = stop - start; start = get_cycles(); mem[0] = touch_mem(mem, wss, write_cycle); stop = get_cycles(); hot1 = stop - start; start = get_cycles(); mem[0] = touch_mem(mem, wss, write_cycle); stop = get_cycles(); hot2 = stop - start; start = get_cycles(); mem[0] = touch_mem(mem, wss, write_cycle); stop = get_cycles(); hot3 = stop - start; #if defined(__i386__) || defined(__x86_64__) if (!best_effort) sti(); #endif migrate_to(next_cpu); sleep_us(delay); #if defined(__i386__) || defined(__x86_64__) if (!best_effort) cli(); #endif start = get_cycles(); mem[0] = touch_mem(mem, wss, write_cycle); stop = get_cycles(); #if defined(__i386__) || defined(__x86_64__) if (!best_effort) sti(); #endif after_resume = stop - start; /* run, write ratio, wss, delay, from, to, cold, hot1, hot2, * hot3, after_resume */ if (show) { fprintf(outfile, " %6ld, %6d, %6d, %6d, %3d, %3d, " "%10" CYCLES_FMT ", " "%10" CYCLES_FMT ", " "%10" CYCLES_FMT ", " "%10" CYCLES_FMT ", " "%10" CYCLES_FMT ", " "%12lu", counter++, write_cycle, wss, delay, last_cpu, next_cpu, cold, hot1, hot2, hot3, after_resume, (unsigned long) mem); get_phys_addrs(0, (unsigned long) mem, wss * 1024 + (unsigned long) mem, phys_addrs, wss); for (i = 0; i < num_pages; i++) fprintf(outfile, ", %12lu", phys_addrs[i]); fprintf(outfile, "\n"); } if (next_cpu == last_cpu) preempt_counter++; else migration_counter++; last_cpu = next_cpu; deallocate(mem); } free(phys_addrs); }