Комментировать

SGEMM на видеокарте и CPU, серия 6

Уже становится какой-то дурной традицией переделывать тест умножения матриц каждые несколько месяцев. Однако с прошлого забега случилось несколько событий:

  • В форумах по CUDA появилась очень быстрая реализация SGEMM, сделанная Василием Волковым.
  • Вышел CUDA Toolkit 2.0 beta, использующий реализацию Волкова в библиотеке CuBLAS.
  • 4-ядерный Penryn стал не просто доступен, а появился у меня прямо под столом.

Участники забега

Hardware

  • Intel Core2Quad 9300, на частоте 3GHz (работает отлично, температура 49-59 градусов), память DDR2 PC6400 4-4-4-12
  • NVidia GeForce 8800GTX на штатной частоте
Software
  • Windows XP Professional x64
  • Intel MKL 10.0.3 (использовалась совместно с MS Visual C 2005 в 32-битном режиме)
  • Goto BLAS 1.26 (использовалась под Cygwin, 32-битный режим)
  • NVidia CUDA 2.0 beta (32-битная версия)

Методика тестирования

Методика совершенно незатейлива: берем квадратные матрицы, размер которых равен степени двойки (я знаю, что это дает наибольшие цифры), перемножаем, определяем ушедшее на умножение время, считаем гигафлопсы. Содержимое матриц - случайное. Перед забегом проверяем правильность работы, перемножая маленькие матрицы (8x8) и проверяя глазом корректность результата.

Для видеокарты жизнь чуть сложнее, там есть время потраченное на вычисления и дополнительное время, нужное для загрузки-выгрузки данных, поэтому для CUDA приводятся два значения производительности.

Результаты

Производительность умножения матриц (SGEMM), GFLOP/s
Описание теста размер задачи
  1024 2048 4096
Intel MKL 10.0.3 54.8 59.5 60.5
Goto BLAS 1.26 76.7 83.4 87.1
NVidia CUDA 2.0 beta, чистое время вычислений 202 204 205
NVidia CUDA 2.0 beta, вычисления+ввод-вывод 151 177 190

Обсуждение результатов

Сначала проговорим сами результаты:

  1. Penryn - феноменально быстрый. Надо смотреть не только на абсолютные цифры производительности (которые тоже большие), но и в количество реальных операций на такт. Предельная (теоретическая) производительность у этого процессора - 8 операций с одинарной точностью на ядро * 4 ядра * 3Ghz = 96 GFLOP/s, а мы получили 87 или больше 90%. И это все - за $350
  2. Несмотря на анонсированные в 10-й версии Intel MKL ускорения, Goto BLAS так и остается раза в полтора быстрее, чем библиотека от производителя.
  3. CUDA 2.0 ускорилась относительно первой версии в 1.7 раза на вычислениях и в 1.9 раза на вычислениях+I/O (вклад в скорость I/O могла дать и замена hardware хост-компьютера, хотя по тестам bandwidth я принципиального ускорения не вижу).

Удивительно, но произошло следущее

  • Стоимость гигафлопса на CPU упала с октября прошлого года примерно втрое (для десктопных процессоров) и достигла стоимости гигафлопса на GPU полугодовалой давности.
  • При этом, стоимость гигафлопса (только по одному тесту) на GPU тоже упала почти вдвое при том, что сам GPU остался прежним и подешевел несильно. Падение стоимости исключительно софтовое.
  • Конечно, 8800GTX - далеко не лидер по price-performance сейчас, новые карты могут на некоторых задачах и обгонять (но надо проверять).
  • Впрочем, соотношение в очередной раз изменится буквально в ближайшие недели, ходят упорные слухи, что новый чип от NVidia всех опять порвет.

Tags: