Уже становится какой-то дурной традицией переделывать тест умножения матриц каждые несколько месяцев. Однако с прошлого забега случилось несколько событий:
- В форумах по 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 на штатной частоте
- 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 |
Обсуждение результатов
Сначала проговорим сами результаты:
- Penryn - феноменально быстрый. Надо смотреть не только на абсолютные цифры производительности (которые тоже большие), но и в количество реальных операций на такт. Предельная (теоретическая) производительность у этого процессора - 8 операций с одинарной точностью на ядро * 4 ядра * 3Ghz = 96 GFLOP/s, а мы получили 87 или больше 90%. И это все - за $350
- Несмотря на анонсированные в 10-й версии Intel MKL ускорения, Goto BLAS так и остается раза в полтора быстрее, чем библиотека от производителя.
- CUDA 2.0 ускорилась относительно первой версии в 1.7 раза на вычислениях и в 1.9 раза на вычислениях+I/O (вклад в скорость I/O могла дать и замена hardware хост-компьютера, хотя по тестам bandwidth я принципиального ускорения не вижу).
Удивительно, но произошло следущее
- Стоимость гигафлопса на CPU упала с октября прошлого года примерно втрое (для десктопных процессоров) и достигла стоимости гигафлопса на GPU полугодовалой давности.
- При этом, стоимость гигафлопса (только по одному тесту) на GPU тоже упала почти вдвое при том, что сам GPU остался прежним и подешевел несильно. Падение стоимости исключительно софтовое.
- Конечно, 8800GTX - далеко не лидер по price-performance сейчас, новые карты могут на некоторых задачах и обгонять (но надо проверять).
- Впрочем, соотношение в очередной раз изменится буквально в ближайшие недели, ходят упорные слухи, что новый чип от NVidia всех опять порвет.