Я слежу за некоторыми учебниками для OpenCL, и много раз люди говорят в терминах FLOPS. Википедия объясняет формулу, но не говорит, что она на самом деле означает? Например, 1 световой год = 9.4605284 × 10 ^ 15 метров, но это означает расстояние, пройденное светом через год. Точно так же означает FLOP? Ответ на аналогичный вопрос говорит о 100 IOPS для кода
for(int i = 0; i < 100; ++i)
Игнорируя инициализацию, я вижу 100 операций приращения, поэтому там 100IOPS. Но я также вижу 100 сравнительных операций. Так почему же это не 200IOPS? Итак, какие типы операторов включены в расчет FLOPS/IOPS?
Во-вторых, я хочу знать, что бы вы сделали, вычислив FLOPS вашего алгоритма? Я спрашиваю об этом, потому что значение специфично для тактовой частоты процессора и отсутствия ядер. Любое руководство на этой арене было бы очень полезно.
"FLOPS" означает "Операции с плавающей точкой в секунду", и это именно так. Он использовался как показатель вычислительной скорости больших, основанных на количестве (обычно научных) операций. Измерение это вопрос знания двух вещей: 1.) Точное время выполнения вашего алгоритма 2.) Точное число операций с плавающей запятой, участвующих в вашем алгоритме
Вы можете получить довольно хорошие аппроксимации первого из инструментов профилирования, а второй из... ну, может быть, вы сами по себе. Вы можете просмотреть источник для операций с плавающей запятой, например "1.0 + 2.0", или посмотреть на сгенерированный код сборки, но оба могут ввести в заблуждение. Там, вероятно, есть отладчик, который даст вам FLOPS напрямую.
Важно понимать, что существует теоретическая максимальная величина FLOPS для системы, на которой вы работаете, а затем есть фактические достигнутые FLOPS вашего алгоритма. Соотношение этих двух может дать вам представление об эффективности вашего алгоритма. Надеюсь это поможет.