Środowisko testowe

Skompilowane programy uruchamiane są podczas oceny w specjalnym wirtualnym środowisku, które umożliwia precyzyjny i deterministyczny pomiar czasu ich działania. Dzięki temu:

  • mamy pewność, że na zmierzony czas nie wpływają inne programy działające na komputerze sprawdzającym czy też operacje takie jak dostępy do dysku,
  • publikując oprogramowanie obsługujące to środowisko, dajemy Wam możliwość uruchomienia swoich programów w takich samych warunkach, jak przy ocenie końcowej,
  • możemy wykorzystywać do sprawdzania komputery wieloprocesorowe i techniki wirtualizacji bez obawy o wpływ innych uruchomionych aplikacji na wyniki oceny.

Cele te realizujemy przez zastosowanie modelu procesora opartego na architekturze Intel x86 (32-bitowej). Szczegółowy opis modelu można znaleźć poniżej, natomiast warto o nim wiedzieć, że:

  • uruchamianie programów w przygotowanym środowisku nie wymaga żadnych specjalnych ustawień podczas kompilacji,
  • na wynik pomiaru czasu nieznacznie wpływa wersja oraz konfiguracja kompilatora, a także wybór systemu operacyjnego,
  • wirtualny procesor zachowuje się tak, jakby miał bardzo dużo pamięci podręcznej --- dostępy do pamięci są szybsze niż na rzeczywistym procesorze.

Uruchamianie środowiska na własnym komputerze

Każdy z Was może uruchomić na swoim komputerze program w naszym środowisku testowym. Można je pobrać z repozytorium oitimetool-bin na Githubie. Instrukcja uruchomienia znajduje się w pliku readme-pl.txt. Otrzymany czas działania programu jest obliczany dokładnie tak, jak podczas ostatecznej oceny. Warto jednak wiedzieć, że przed opublikowaniem środowiska usunęliśmy te jego fragmenty, które odpowiadały za bezpieczeństwo naszych sprawdzaczek.

Sposób działania modelu

W tej części opisujemy przyjęte założenia w obowiązującym modelu. Będziemy je aktualizować na bieżąco, a ewentualne zmiany ogłaszać w serwisie SIO.

Wykorzystywany model opiera się na zliczaniu instrukcji wykonanych przez uruchomiony program, co w odzwierciedla procesor z bardzo dużą pamięcią podręczną. Ewaluację takiego modelu na zadaniach Olimpiady Informatycznej można zobaczyć w rozdziale 3 następującej pracy:

Sz. Acedański, Wykorzystanie sprzętowych liczników zdarzeń do oceny wydajności algorytmów. Praca magisterska, WMiM UW (2009).
Wersja bieżąca (29.07.2011)
  • Zakładamy równe czasy wykonania wszystkich instrukcji --- jeden cykl zegara.
  • Instrukcje poprzedzone prefiksami REP, REPE, REPZ, REPNE, REPNZ trwają tyle cykli, ile iteracji wykonują.
  • Zakładamy zegar procesora o częstotliwości 3GHz.
© Anna Michalska
Uniwersytet Warszawski