Ответ 1
Похоже, что ближе всего вы можете получить события производительности, поддерживаемые Cortex-A8, - это количество выполненных команд, которое isn ' t очень полезно, учитывая, что "инструкция" выполняет что-либо от 0 до (я думаю) 8 операций FP. Сделав шаг назад, становится очевидным, что попытка измерения FLOPS для алгоритма в аппаратных средствах не будет работать в любом случае - например. вы можете написать реализацию с использованием векторных ops, но не всегда помещать реальные данные во все полосы каждого вектора, тогда CPU должен быть психическим, чтобы знать, сколько из фактически выполняемых операций FP, которые он выполняет,
К счастью, учитывая формальное определение алгоритма, вычисление количества задействованных операций должно быть довольно простым (хотя и не обязательно легким, в зависимости от сложности). Например, пропуская его в моей голове, стандартное наивное умножение матрицы m x n с матрицей n x m выходит на операции m * m * (n + n - 1)
(n умножений и (n - 1) дополнений на выходной элемент). После того, как на бумажном анализе появилась соответствующая параметризованная формула расчета порядка, вы можете отложить ее в свой инструмент сравнения, чтобы рассчитать числа для данных теста.
Как только вы это сделаете, вы, вероятно, начнете сожалеть о том, что тратите все время на это, потому что у вас будет (arbitrary number) / (execution time)
, что немного больше смысла, чем (execution time)
, и в основном просто затрудняет сравнение случаев, когда (arbitrary number)
отличается. В частности, в производительности NEON преобладают задержки в конвейере и пропускная способность памяти, и поэтому детали реализации на низком уровне могут легко перевесить любую внутреннюю разницу, которую могут иметь алгоритмы.
Подумайте об этом так: скажем, на каком-то заданном 100-мегагерцовом процессоре a + a + b + b
всего 5 циклов, а (a + b) * 2
занимает 4 цикла всего * - прежние баллы 60 MFLOPS, последние всего 50 MFLOPS. Вы скажете, что больше FLOPS означает лучшую производительность, и в этом случае процедура, которая на 25% больше, чтобы дать тот же результат, как-то "лучше"? Собираетесь ли вы сказать, что меньшее количество FLOPS означает лучшую производительность, что явно неверно для любой разумной интерпретации? Или вы поймете, что FLOPS практически бессмысленна для чего-либо, кроме синтетических тестов, для сравнения теоретической максимальной пропускной способности одного процессора с другим?
* числа, вырванные из воздуха для аргументации; однако они на самом деле не так уж и похожи на Cortex-M4F - одноточечный FPU, где и добавление, и умножение - однотактные, плюс один или два для опасностей регистров.