Недавно наткнулся на другой способ оценивания программ по спортивному программированию — вместо лимита по времени используя количество инструкций ассемблерного кода, который выполняет процессор. Причём, наткнулся в первый раз, до этого нигде такую систему не встречая.
Поэтому очень интересуют мнения, какие преимущества и недостатки имеются у такого метода. С первого взгляда имеется огромное преимущество в связи с тем, что количество инструкций не зависит от производительности компьютера. Огромных недостатков, на первый взгляд я не обнаружил, но так как сталкиваюсь с этим впервые, хотелось бы услышать мнения сообщества по этому поводу. Может быть кто-нибудь уже имел дело с этих подходом.
Заранее спасибо!
Недостаток в том, что инструкции бывают разные. От сложения целых чисел, до деления long double и выделения 700 мб памяти. Можно ссылку на такую интересную систему?
Очень хорошее наблюдение, это, считаю, самый главный и очень существенный недостаток — ведь разные инструкции занимают разное время и выполняют разный объём работы.
Я вижу такие минусы:
Плюсов, кроме упомянутых, сразу не вижу.
Я бы отнёс к недостаткам:
Совершенно разные наборы инструкций на разных процессорах. Например, современные имеют команды для работаты с векторами.
Не учитываются такие важные вещи, как промахи/попадания в кэш (и, соответственно, скорость работы памяти), конвеер (когда несколько независимых инструкций выполняются параллельно) и, наверняка, что-то еще. Мне кажется, что это еще больше отдаляет олимпиады от реального программирования — время работы и количество выполненных операций совершенно не коррелируют.
Не очень понятно, как точно мерять.
Не хочу никого обидеть, но мне кажется что это глупый и надуманный способ сравнения по количеству инструкций у программы в ассемблерном коде. Одно дело, когда ты говоришь: "моя программа работает менее двух секунд на Pentium IV 2 Ггц" — такую фразу поймет практически любой пользователь ПК. А если мне кто-то скажет, что его программа делает 124354365 инструкций — это уже будет тяжеловато понять. Тем более объяснить человеку, далекому от СП.
Уводя вопрос немного в оффтопик: а как посчитать, сколько инструкций данной конкретной программы и только ее выполнил процессор?
Разработчик системы сказал, что для этого он использовал valgrind.
Defect: Commonly used compilers are designed for optimising code for existing architectures. So...