Шлопает ядро Intel и тестирует его с помощью C (innerproduct)
У меня есть некоторые неправильные представления об измерении флопов, на архитектуре Intel, является ли FLOP одним дополнением и одним умножением вместе? Я читал об этом где-то в Интернете, и нет никаких дебатов, которые могли бы отвергнуть это Я знаю, что FLOP имеет разные значения для разных типов процессоров.
Как рассчитать мой теоретический пик FLOPS? Я использую процессор Intel® Core Core ™ Duo E7400 с частотой 2,80 ГГц. Какая связь между ГГц и FLOPS? (даже запись в Википедии о FLOPS НЕ определяет, как это сделать)
Я буду использовать следующие методы для измерения фактической производительности моего компьютера (в терминах флопов): Внутреннее произведение двух векторов: для двух векторов размера N число флопов 2n(n -1) (если одно дополнение или одно умножение считается 1 флопом). Если нет, то как мне рассчитать это?
Я знаю, что есть лучшие способы сделать это, но я хотел бы знать, верны ли мои предложенные расчеты. Я где-то читал о LINPACK в качестве эталона, но мне все равно хотелось бы узнать, как это делается.
4 ответа
Что касается вашего второго вопроса, теоретический расчет FLOPS не слишком сложен. Это можно разбить примерно на:
(Количество ядер) * (Количество исполнительных блоков / ядро) * (циклов / секунда) * (Операции блока операций / цикл) * (операции с плавающей запятой на регистр / Операция блока выполнения)
Core-2 Duo имеет 2 ядра и 1 исполнительный модуль на ядро. регистр SSE имеет ширину 128 бит. Число с плавающей точкой 32 бит, поэтому вы можете хранить 4 числа с плавающей запятой в каждом регистре. Я предполагаю, что исполнительный блок выполняет 1 операцию SSE за цикл. Так и должно быть:
2 * 1 * 2,8 * 1 * 4 = 22,4 GFLOPS
что соответствует: http://www.intel.com/support/processors/sb/cs-023143.htm
Это число, очевидно, является чисто теоретическим лучшим вариантом исполнения. Производительность в реальном мире, скорее всего, не приблизится к этому по ряду причин. Вероятно, не стоит пытаться напрямую соотносить флопы с фактическим временем выполнения приложения, лучше было бы попробовать вычисления, используемые вашим приложением.
FLOP расшифровывается как операция с плавающей точкой.
Это означает то же самое в любой архитектуре, которая поддерживает операции с плавающей запятой, и обычно измеряется как сумма операций, которые могут иметь место в любую секунду (как в FLOPS; операций с плавающей запятой в секунду).
Здесь вы можете найти инструменты для измерения FLOPS вашего компьютера.
В этой статье показана теория чисел FLOPS для процессоров x86. Это только до Pentium 4, но, возможно, вы можете экстраполировать.
Таблицы данных Intel содержат номера GFLOPS, а ваш процессор имеет заявленные 22,4
http://www.intel.com/support/processors/sb/CS-023143.htm
Поскольку ваша машина двухъядерная, это означает 11,2 Гфлопс на ядро при 2,8 ГГц. Разделите это, и вы получите 4. Таким образом, Intel утверждает, что каждое их ядро может делать 4 FLOPS за цикл.