Хочу устроить небольшой эксперимент, целью которого будет выяснение вопроса о необходимости избавляться от ветвлений в таких функциях как min, max, sign и abs. Каждый должен иметь возможность взять вот этот cpp файл (GitHub), скомпилировать, запустить и посмотреть на вывод в stdout. Программа выдает две колонки чисел: время работы функции с ветвлением и без него. Программа может работать долго, несколько минут (не пугайтесь, она не виснет).
Сейчас программа компилируется только в VС++ 2015 и в GCC 4.8.1 (из MinGW), а мне бы хотелось, чтобы она работала и в других компиляторах. Кто что может посоветовать сделать? От std::chrono мне не избавиться, время замерять нужно как-то более менее универсально, от int32_t тоже, так как я не знаю, вдруг у кого-то будет int размером 64 бита (мало ли). Возможно, я не во всём следую Стандарту или есть ещё какие-то ошибки?
Важно вот что: я отдаю себе отчёт, что код зависит от наличия знакового сдвига и дополнительного кода в представлении отрицательных чисел. Так и было задумано
Ответ
Приведённый код компилируется «только в VС++ 2015 и в GCC 4.8.1», так как использует возможности стандарта C++11 (а именно std::chrono и заголовочный файл cstdint). Для того, чтобы программа собиралась на компиляторах, поддерживающих исключительно более ранние стандарты, необходимо:
Использовать функциюclock из заголовочного файла ctime. Эта функция возвращает время в процессорных тактах, а потому идеально подходит для решения поставленной задачи.
Заменить включение
Комментариев нет:
Отправить комментарий