Измерение FLOP от операций Numpy

Есть ли общий способ измерить, сколько операций с плавающей запятой включает в себя последовательность команд Numpy? - такие команды, как np.random.randint, np.sum, np.argmin, np.matmul или @ и т. Д.

Или это единственный способ сделать это вручную, думая с чисто математической точки зрения и / или глядя на то, как Numpy реализует функции, а именно:

  • умножение матриц включает (2p - 1) mn FLOP, если мы умножаем матрицу m × p на матрицу p × n
  • argmin включает O (n) ≈ cn сравнений для массива длины n, но каким должно быть c? Я попытался посмотреть исходный код Numpy., но я не совсем понимаю, как _wrapfunc должен работать или какой код C здесь уместен.
  • и т.п.

person mic    schedule 10.06.2020    source источник
comment
В чем смысл? Флопы - это только часть вычислений: интерпретация кода, вызов функций, создание объектов (массивов и т. Д.), Выделение памяти, копирование буферов, сборка мусора - все это влияет на общее время.   -  person hpaulj    schedule 10.06.2020
comment
Это хорошие моменты. Это сравнение производительности с бумагой, которая измеряет производительность в количестве операций с плавающей запятой, и это показатель, который можно было бы лучше перенести на компьютеры по сравнению с прямым измерением времени.   -  person mic    schedule 15.06.2020
comment
Мой ответ на этот O вопрос может быть актуальным, stackoverflow.com/q/52201990/901925   -  person hpaulj    schedule 19.06.2020