Как определить количество FLOP, на которые способен мой компьютер

15

Я хотел бы определить теоретическое количество FLOP (операций с плавающей запятой), которое может выполнять мой компьютер. Может кто-нибудь, пожалуйста, помогите мне с этим. (Я хотел бы сравнить мой компьютер с некоторыми суперкомпьютерами, чтобы понять разницу между ними)

Ол Надежный
источник

Ответы:

9

Теоретический пик FLOP / с задается следующим образом: Количество ядер легко. Средняя частота должна, теоретически, учитывать некоторое количество Turbo Boost (Intel) или Turbo Core (AMD), но рабочая частота является хорошей нижней границей. Операции за цикл зависят от архитектуры и их сложно найти (8 для SandyBridge и IvyBridge, см. Слайд 26 ). Это предмет вопроса переполнения стека , который включает числа для множества современных архитектур.

Количество ядер*Средняя частота*Операций за цикл
Макс Хатчинсон
источник
1
Хорошо, у меня есть 2 ядра, рабочая частота: 1,8 ГГц, технология Intel Turbo Boost: 3,00 ГГц, я не могу найти операции за такт, вот сайт: ark.intel.com/products/75460/… спасибо
Ол 'Надежный
Haswell может сделать 16 DP / цикл. Я просто добавил ссылку в теле ответа на SO-ответ.
Макс Хатчинсон
Означает ли это, что мой компьютер может делать: 2 x 3 000 000 000 Гц x 16 = 96 Гига FLOP?
Ol 'Reliable
Это означает, что он может работать между 2 * 1,8 ГГц * 16 DP = 57,6 GFLOP / с и 96 GFLOP / с, в зависимости от фактической средней частоты. Если вам нужно использовать одно число, 57,6 более справедливо, IMO.
Макс Хатчинсон
2
Частота FLOP, как правило, является плохой мерой «качества» процессора. См scicomp.stackexchange.com/questions/114/... , например. Возможно, вы захотите подумать об ограничении затрат на выполнение вашей задачи (например, привязка вычислений к ограничению памяти и привязке к диску) и сосредоточиться на соответствующем оборудовании (вычислительная система, система памяти, ввод-вывод).
Макс Хатчинсон
4

Вам нужно будет знать модель и поставщика процессоров на вашей машине. Получив это, вы можете посмотреть на веб-сайте производителя (или, возможно, в Википедии) тактовую частоту, количество чипов / сокетов, количество ядер на чип, количество операций с плавающей запятой за цикл и векторную ширину этих операций. , Затем вы просто умножаете.

Взять, к примеру, процессоры Intel Xeon E5-2680 «Sandy Bridge» в Стампеде, где я работаю. Спецификации:

  • 2.7GHz
  • 2 чипа / узел, 8 ядер / чип
  • 2 векторных инструкции / цикл
  • Инструкции AVX шириной 256 бит (4 операнда с двойной точностью)

Умножение этих значений дает 345,6 GF / узел или 2,2 PF для неускоренной части системы.

Мы обычно думаем с точки зрения операций с двойной точностью (64-разрядных), потому что это точность, необходимая для подавляющего большинства наших пользователей, но вы можете при желании повторить вычисления в терминах с одинарной точностью. Обычно это только меняет последний фактор, скажем, 8 SP Flops / инструкция вместо 4 DP Flops / inst, но он может сильно отличаться от этого. Например, более старые GPU делали DP только на 1/8 скорости SP. Если вы когда-нибудь цитируете число для своей системы, вы должны четко указать, какое из них вы использовали, если это не двойная точность, потому что люди примут это, в противном случае.

Кроме того, если ваша микросхема поддерживает слитые команды умножения-сложения (FMA) и может выполнять их с полной скоростью, то большинство людей считают это 2 операциями с плавающей запятой, хотя счетчик производительности оборудования может считать его только одной инструкцией.

Наконец, вы также можете сделать это для любых ускорителей, которые могут существовать в вашей системе (например, графического процессора или Xeon Phi), и добавить эту производительность к производительности ЦП, чтобы получить теоретический итог.

Билл Барт
источник
Недостаточно знать модель процессора, нужно выяснить фактические рабочие частоты
Aksakal
@Aksakal, для теоретического анализа, вероятно, можно выбрать номинальную частоту. Трудно знать, на какой частоте будут работать ваши чипы, поскольку это может зависеть от рабочей нагрузки и качества вашего кондиционера.
Билл Барт
2

Я понимаю, что вы просили теоретическое значение, но так как это почти всегда недоступно для любого реального кода, даже LINPACK, вы можете просто запустить (оптимизировать) DGEMM для очень больших матриц. Причина, по которой я предпочитаю этот метод, заключается в том, что он обнаруживает некоторые недостатки некоторых процессоров, которые мешают им достичь своего теоретического пикового значения флопа.

Например, графические процессоры NVIDIA в настоящее время выполняют целочисленные операции и операции с плавающей запятой в одном конвейере. Это означает, что вы можете достичь теоретического пикового флопа / с, если не будете выполнять целочисленные вычисления вообще . Поскольку для индексации массива и любой другой формы доступа к данным требуется целочисленная арифметика, ни один код не может достичь теоретического пикового значения flop / s на графическом процессоре NVIDIA. В большинстве случаев можно увидеть ~ 80% в качестве верхней границы. Для процессоров, которые выдают целочисленные операции и операции с плавающей точкой одновременно, это не проблема.

На некоторых GPU-подобных многоядерных процессорах, таких как Intel Knights Corner и Blue Gene / Q, достичь пикового флопа / с труднее, чем на традиционных процессорах для подобных проблем конвейера (хотя оба могут достичь ~ 90% пика в больших DGEMM как минимум ).

Джефф
источник
Почему ни один код не может достичь теоретического максимума флопа / с на графическом процессоре NVIDIA?
Skytree
См. Пункт 2. Однако все это относится к старым архитектурам. Более поздние архитектуры NVIDIA могут выполнять целочисленные и с плавающей точкой одновременно и достигать> 90% пика в больших DGEMM.
Джефф