Ś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 (64-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 (opis zaktualizowano podczas I etapu XXIX OI)

Każdy z Was może uruchomić na swoim komputerze program w naszym środowisku testowym.

  • sio2jail można pobrać z repozytorium sio2jail na GitHubie lub skorzystać z binarnej wersji, razem z wygodnym skryptem oiejq dostępnej do pobrania tutaj. Czas działania programu jest mierzony tak samo jak w SIO. Możliwe jest też włączenie liczenia użytej pamięci. To środowisko działa tylko na Linux.
  • oitimetool (stara wersja) można pobrać z repozytorium oitimetool-bin na GitHubie. Instrukcja uruchomienia znajduje się w pliku readme-pl.txt. To środowisko działa w systemach Windows i Linux.

Obie wersje opierają się na tym samym modelu i powinne dawać zbliżone wyniki.

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.
  • Zakładamy zegar procesora o częstotliwości 2GHz.