Нам пришлось реализовать программу ASM для умножения разреженных матриц в формате координатной схемы (COOS), а также в формате сжатой строки (CSR). Теперь, когда мы внедрили все эти алгоритмы, мы хотим знать, насколько они более эффективны в отличие от обычного матричного умножения. Мы уже реализовали код для измерения времени выполнения всех этих алгоритмов, но теперь мы решили, что мы также хотим знать, сколько операций с плавающей запятой в секунду (FLOPS) мы можем выполнить. Любое предложение о том, как измерить/подсчитать это?
Вот некоторая справочная информация о используемой системе:
processor : 0
model name : ARMv7 Processor rev 2 (v7l)
Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc08
CPU revision : 2
Наша первая идея заключалась в том, чтобы внедрить своего рода счетчик FPO, который мы увеличиваем после каждой операции с плавающей запятой (операции арифметики, а также операции сравнения и перемещения), но это будет означать, что мы должны вставлять операции инкремента по всему нашему коду что также замедляет работу приложения... Кто-нибудь знает, есть ли какой-то аппаратный счетчик, который подсчитывает количество операций с плавающей запятой или, может быть, если существует какой-то инструмент производительности, который можно использовать для мониторинга нашей программы и измерения количества FPOs. Любые предложения или указатели будут оценены.
Ниже приведена оценка FLOP для матричного умножения с использованием подхода подсчета. Сначала мы измерили время работы, чем вставленные счетчики, для каждой интересующей нас команды, а затем вычислили количество операций с плавающей запятой в секунду.