Мне нужно измерить количество операций в секунду для анализа написанной мной программы на Python.
Судя по тому, что я нашел в Интернете, кажется, что есть два основных варианта:
- Включение счетчиков в программу (что, как я понимаю, может иметь смысл, если программа очень проста и вы можете получить доступ к очень атомизированным вычислениям).
- Использование библиотек, которые обращаются к счетчикам ЦП, для получения количества FLOPS. Как этот: http://www.bnikolic.co.uk/blog/python/flops/2019/09/27/python-counting-events.html
К сожалению, установка не выполняется, и, кроме того, на веб-сайте четко указано, что процессоры Haswell не поддерживаются, потому что у них нет счетчиков для вычислений с плавающей запятой. Оказывается, у моего сервера есть этот процессор. Следовательно, я застрял там.
Тем не менее, я думал о включении системного вызова для использования perf (возможно, os.system ("perf --event event_for_flops"))
Проблема в том, что я не имею ни малейшего представления о том, какое событие следует отслеживать для информации о FLOPS (при условии, что оно есть, что на основе библиотеки "python-papi" кажется маловероятным).
Я перечислил все возможные события, но там я совсем заблудился. Я пытался найти информацию в Интернете, но это не помогло.
Есть идеи, какое событие нужно отслеживать (если есть)? Или как это сделать, не добавляя вручную счетчик на очень низком уровне кода, что в моем случае прямо невозможно.
Здесь вы можете найти полный список мероприятий:
Список событий процессора Haswell, полученных с помощью команды perf list < / а>
perf list
(может потребоваться sudo) в Linux может сказать вам, какие события вы можете захватывать, и их имя в Linux. Затем вы можете использоватьperf stat -e
для получения значений этих конкретных счетчиков производительности. - person PiRocks   schedule 06.03.2020fp_arith_inst_retired.scalar
. Если вы используете какие-то векторизованные циклы (что маловероятно в обычном питоне), вы можете также посмотреть на события для этого. - person PiRocks   schedule 06.03.2020fp_arith_inst_retired.scalar_double
и..._single
, а также векторные счетчики 128b и 256b. Если вы считаете FLOP в Python, надеюсь, вы используете NumPy, который действительно использует код SIMD. Счетчики уже считают FMA 2 операциями, но вам нужно умножить их на количество элементов на вектор SIMD. Я нашел связанные дубликаты, выполнив поиск поfp_arith_inst_retired.128b_packed_double
- person Peter Cordes   schedule 06.03.2020