Оценка эффективности графического процессора в FLOPS (CUDA SAMPLES)

Мне кажется, что я не совсем понимаю концепцию FLOPS. В CUDA SAMPLES есть Пример умножения матриц (0_Simple / matrixMul). В этом примере количество FLOP (операций с плавающей запятой) на умножение матрицы рассчитывается по формуле:

 double flopsPerMatrixMul = 2.0 * (double)dimsA.x * (double)dimsA.y * (double)dimsB.x;

Таким образом, это означает, что для того, чтобы умножить матрицу A(n x m) над B(m x k)нам нужно сделать: 2*n*m*k операции с плавающей точкой.

Однако для того, чтобы вычислить 1 элемент полученной матрицы C (n x k)нужно выполнить m умножение и (m-1) операции сложения. Итак, общее количество операций (для расчета n x k элементы), есть m*n*k умножения и (m-1)*n*k дополнения.

Конечно, мы могли бы установить количество дополнений к m*n*k а также общее количество операций будет 2*n*m*kполовина из них — умножения и половина сложений.

Но, я думаю, умножение в вычислительном отношении дороже, чем сложение. Почему эти два типа операций перепутаны? Это всегда так в информатике? Как можно учитывать два разных типа операций?

Извините за мой английский)

3

Решение

Короткий ответ: да, они учитывают как умножения, так и сложения. Несмотря на то, что большинство процессоров с плавающей запятой имеют смешанную операцию умножения / сложения, они все равно считают умножение и сложение как две отдельные операции с плавающей запятой.

Это часть того, почему люди десятилетиями жаловались на то, что FLOP — это в основном бессмысленное измерение. Чтобы даже немного значить, вам почти необходимо указать какой-то конкретный фрагмент кода, для которого вы измеряете FLOP (например, «Linpack gigaflops»). Даже в этом случае вам иногда требуется довольно жесткий контроль над такими вещами, как то, что позволяет оптимизация компилятора, чтобы гарантировать, что измеряемая вами величина — это действительно скорость машины, а не способность компилятора просто исключать некоторые операции.

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

2

Другие решения


По вопросам рекламы [email protected]