Nano Hash - криптовалюты, майнинг, программирование

Оценка эффективности GPU в 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, половина из них — умножения, а половина — сложения.

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

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

16.12.2014

  • Большинство архитектур (включая графические процессоры nVidia) поддерживают объединенное умножение-сложение, так что вы фактически получаете добавления бесплатно и просто подсчитываете умножения. 16.12.2014
  • Но в этом случае ответ должен быть m*n*k, что вдвое меньше, чем в примере 16.12.2014
  • Извините - невнимательно прочитал. 16.12.2014

Ответы:


1

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

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

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

16.12.2014
  • Хорошо, насколько я понимаю, в таких оценках много неясностей. Спасибо 16.12.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..