FLOPS в Python с использованием процессора Haswell (процессор Intel Core (Haswell, без TSX))

Мне нужно измерить количество операций в секунду для анализа написанной мной программы на Python.

Судя по тому, что я нашел в Интернете, кажется, что есть два основных варианта:

  1. Включение счетчиков в программу (что, как я понимаю, может иметь смысл, если программа очень проста и вы можете получить доступ к очень атомизированным вычислениям).
  2. Использование библиотек, которые обращаются к счетчикам ЦП, для получения количества 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 < / а>


person f.gallardo    schedule 06.03.2020    source источник
comment
Когда вы говорите FLOPS, вы имеете в виду операции с плавающей запятой за секунду, верно?   -  person PiRocks    schedule 06.03.2020
comment
@PiRocks да, это правильно   -  person f.gallardo    schedule 06.03.2020
comment
Скорее всего, это будет очень похоже на процессорную арку. конкретная вещь. perf list (может потребоваться sudo) в Linux может сказать вам, какие события вы можете захватывать, и их имя в Linux. Затем вы можете использовать perf stat -e для получения значений этих конкретных счетчиков производительности.   -  person PiRocks    schedule 06.03.2020
comment
Вам может потребоваться объединить несколько счетчиков, чтобы получить хороший результат, например, это могут быть разные счетчики для сложения и умножения с плавающей запятой.   -  person PiRocks    schedule 06.03.2020
comment
Также имейте в виду, что код, который вы пишете на python, является высокоуровневым, и это может привести к неточностям в ваших результатах.   -  person PiRocks    schedule 06.03.2020
comment
У меня нет под рукой Haswell, но события, которые вы ищете, будут чем-то вроде fp_arith_inst_retired.scalar. Если вы используете какие-то векторизованные циклы (что маловероятно в обычном питоне), вы можете также посмотреть на события для этого.   -  person PiRocks    schedule 06.03.2020
comment
@PiRocks: Ага, вам понадобятся fp_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