Имя: Пароль:
IT
 
Ускорение СУБД с помощью GPU и CUDA
,
0 Garykom
 
гуру
20.09.16
16:33
Ускорение СУБД с помощью GPU и CUDA.

Изучал тут про cuDNN и прочее "глубокое обучение" на GPU и напоролся на такое http://cs.kai.ru/proekty/niokr/74-razrabotka-gpu-subd-dlya-platformy-vychislitelnogo-klastera.

Суть что обычную небольшую базу данных засунули в видеопамять видеокарты NVIDIA и с помощью CUDA получили в тестах ускорение для "сложных запросов" до 32 раз по сравнению с обычными CPU.

Но для простых запросов или с индексами/первичными ключами ускорения почти не было.

Вот возникла мысль заюзать это "ускорение" путем приобретения "дешевых" видеокарт с хорошими объемами внутренней памяти (2-4 гига) сборки из них некой системы/кластера и получения бюджетного суперсервера.
1 Garykom
 
гуру
20.09.16
16:33
(0)+ На sql.ru уже вроде обсуждали http://www.sql.ru/forum/907011/subd-ispolzuushhaya-vychisleniya-na-gpu
2 Кирпич
 
20.09.16
16:38
от лишь бы не работать. любой херней будем заниматься
3 mikecool
 
20.09.16
16:38
то бишь видеопамять круче встроенного кеша в проц?
4 Господин ПЖ
 
20.09.16
16:40
там выигрыш весь на параллелизме. чего в 1с не бывает. как и сложных запросов.

они в 1с не сложные, а ипанутые. как и структура бд

а проигрышь - nvidia + cuda в реализации хз на чем. я книжку листал по ней - там на фортране чтоли все было
5 Garykom
 
гуру
20.09.16
16:40
(3) Угу и круче SSD в разы и даже обычной DDR3 RAM
6 Garykom
 
гуру
20.09.16
16:41
(4) Так задача обычного sql сервера как раз и состоит в параллелизме, когда одновременная обработка кучи запросов от разных клиентов.
7 b_ru
 
20.09.16
16:41
>>Вот возникла мысль заюзать это "ускорение" путем приобретения "дешевых" видеокарт с хорошими объемами внутренней памяти (2-4 гига) сборки из них некой системы/кластера и получения бюджетного суперсервера.

Люди еще теорию не проработали даже, а ты уже в продакшен примеряешь?
8 oslokot
 
20.09.16
16:42
(3) ага. брутфорс работает в разы быстрее :)
9 Господин ПЖ
 
20.09.16
16:42
(6) не путай свою шерсть и государственную

задачи sql - чтобы быстро
задачи 1с чтобы доступно и всерьез
10 Asmody
 
20.09.16
16:42
GPU — это "числодробилка" для флоатов. Ну, матрицы в один проход перемножать умеют. Каким боком тут базы данных?
11 Garykom
 
гуру
20.09.16
16:44
(10) если б я уже понял... Пока пытаюсь разобраться как
12 Кирпич
 
20.09.16
16:51
(11) да очень просто. разрабатываешь свою СУБД, которая умеет чота считать на видеокарте и всё.
13 Garykom
 
гуру
20.09.16
16:53
(12) Хорошая идея для стартапа в Сколково...
14 Кирпич
 
20.09.16
16:53
(11) ты же не надеешься, что можно заставить 1C или MS SQLServer чего то там считать на видюхе. Хотя SQLServer вполне может быть уже и использует видюху.
15 Кирпич
 
20.09.16
16:54
(13) пилить хочешь? пилилка еще не отросла.
16 Господин ПЖ
 
20.09.16
16:56
>разрабатываешь свою СУБД

уже все разработано

"Стебелек"
17 Jokero
 
20.09.16
16:56
В инете давно ходит байка, что на производительность 1С влияет видеокарта. Я думал это юмор, но видимо в любой шутке есть доля...
18 Garykom
 
гуру
20.09.16
16:57
(14) Не надеюсь что саму 1С а вот sql сервер почему бы и нет?
Да банальную ВК для 1С наваять которая может использовать GPU для шустрой обработки чего то.

(15) Ну вдруг напильник попросят ))
19 Garykom
 
гуру
20.09.16
16:57
20 Jump
 
20.09.16
16:58
(3) Дело далеко не в видеопамяти.
Процессор один, а в видеокарте их около четырех сотен.
Правда узкоспециализированных.
Поэтому если задача паралелиться, то можно получить ускорение в 400раз.
21 z80a
 
20.09.16
16:59
Можно выборку из таблицы запаралелить, вместо одного ядра - будет 100500..
22 Jump
 
20.09.16
17:00
(10) Ну теоретически можно придумать некоторые моменты работы с БД, требующие вычислений, и чтобы эти вычисления легко паралелились, и получить очень быстрого сферического коня в вакууме.
23 Кирпич
 
20.09.16
17:00
(19) ну вот. скопипасть, назови "Иванушка" и в сколково
24 Jump
 
20.09.16
17:02
На узко специфичных задачах типа брутофорсов это давно работает.
Тот же майнинг криптовалюты, или подбор цепочек ДНК.
25 qwerty
 
20.09.16
17:04
Чтобы посчитать что-то на видюхе, сначала это что-то нужно туда передать, т.к. процессоры видюхи только с ее памятью могут работать (либо отображаемой для встроенной графики).

ИМХО, идея с СУБД тухлая, т.к. даже современные видюхи имеют всего навсего 8 ГБ на борту.

Jump уже написал, где можно применять мощь видюх.
26 Garykom
 
гуру
20.09.16
17:04
(24) Выборка/сортировка/соединения/группировка в базах данных по умолчанию хорошо параллелится
27 Господин ПЖ
 
20.09.16
17:06
(22) затраты на придумывания и реализацию себя не окупят

есть задачи хорошо укладывающиеся в подобные "оптимизации"

а есть - которым ни жарко ни холодно

а есть которым будет хуже - из-за накладных расходов
28 Garykom
 
гуру
20.09.16
17:07
(25) Правильно, поэтому для сильно больших баз это не актуально.
Но если часть (часто используемую) базы засунуть в память видеокарт как в некий кэш и далее работать с ней там?

Понятно что будет долгий старт сервер (пока данные с диска в видеопамять копируем) и долгое выключение сервера (из видеопамяти скидываем на диск).
29 Asmody
 
20.09.16
17:21
Вот тут https://habrahabr.ru/company/mailru/blog/266811/ хорошая статья про устройство РСУБД.
Из всего, что требует вычислительной мощи, можно выделить расчет хешей, расчет статистики и оптимизатор запросов. Вся остальная работа СУБД укладывается в формулу: "Пойди туда — сам знаешь куда, принеси то — сам знаешь что. И побыстрее!"
30 Asmody
 
20.09.16
17:23
+ вот ещё хорошая статься для понимания JOIN https://habrahabr.ru/post/278087/
31 Kuzen
 
20.09.16
17:23
(0)СУБД это в основном работа с данными, прочитать, записать, и каких то мега сложных громоздких параллельных вычислений не предполагается на ней выполнять. Это все ранво что ускорять файловую систему ntfs за счет CUDA.

Сложными вычислениями занимается уже конкретное приложение  его и нужно затачивать под использование видеокарт.
32 Septera
 
20.09.16
17:24
(0) Идея интересная, но имеет много подводных камней. Если очень хочется скорости для СУБД, то можно поступить проще. Берем 32+ ГБ DDR3/DDR4 памяти, создаем виртуальный диск в памяти и получаем скорость записи и чтения 8-9 ГБ/с. В 32 раза это конечно не ускорит, но в несколько раз думаю легко, особенно для 1с+postgresql с их блокировками таблиц.
33 Garykom
 
гуру
20.09.16
17:28
(32) Слишком стандартно и никакого ускорения от например параллельной проверки на условия в выборке, путем разделения таблицы между процессорами на равные куски.
34 Kuzen
 
20.09.16
17:30
(32) Я так делал. Для 1с этот вариант не сработает. Потому, что узким местом будет не чтение/запись базы данных, а алгоритмы внутреннего движка самого 1С которые достаточно прожорливы .

Ускорить работу 1С можно только увеличивая частоту/скорость работы процессора и памяти.
35 gitotuta
 
20.09.16
17:31
обычный сервер и проц то на 100% не использует, а данные и так в кэше лежат
36 gitotuta
 
20.09.16
17:32
Как понимаю Хэш джойн на картах считают?
37 Garykom
 
гуру
20.09.16
17:32
(29) (30) Фишка GPU не вычислительная мощь, как раз одно ядро GPU не сильно быстрое но их же дофига!
38 gitotuta
 
20.09.16
17:33
Больше на вскидку нигде параллельность не применить
39 gitotuta
 
20.09.16
17:33
*вычислительную
40 Jump
 
20.09.16
17:50
(26) Да.
Но должны быть запросы с кучей таких вещей, чтобы это себя оправдало.
Т.е опять же узкая специализация.

Можно увидеть конкретную ситуацию с кучей таких запросов, и купить под это дело кластер из видеокарт.

А вот имея кластер видеокарт, искать под него задачи - дело глухое.
41 Jump
 
20.09.16
17:52
(28) Не понял в чем смысл использования памяти видеокарт???
Не проще ли оперативную память использовать?
Это проще, дешевле, быстрее, и производительнее.
42 Jump
 
20.09.16
17:53
(37) Это как раз и есть вычислительная мощь.
43 gitotuta
 
20.09.16
17:54
(36) Так как наличие индексов не дает прироста, то скорее всего так и есть
44 Garykom
 
гуру
20.09.16
17:58
(31) Попробуйте написать алгоритм "кодом" для получения результата сложного запроса 1С.

Причем никаких Сортировать() или Группировать() из коробки у ТЗ не использовать, чисто методом пузырька или другими.

И вот поговорим о сложности вычислительной...
45 Garykom
 
гуру
20.09.16
18:01
(41) DDR3 vs GDDR5, но что обычная оперативка дешевле это так.
Но с обычной проблема с кол-вом ядер, вроде больше 8 пока нет в широком доступе камней. Хотим больше ядер придется разоряться на кластер из нескольких блейдов.
46 H A D G E H O G s
 
20.09.16
18:10
Автор еще аналог ТВ не дописал, а уже что то новое мутит. Мощён.
47 Garykom
 
гуру
20.09.16
18:17
48 gitotuta
 
20.09.16
18:34
(47) Это все ты?
49 Torquader
 
20.09.16
18:39
До появления SSD была такая вещь, как RAM-диск, чтобы все данные в памяти жили. Сейчас, правда, не очень актуальная, так как все данные итак можно сложить в памяти.
Что касается множества процессоров, то число теоретически, можно даже сравнение строк выполнять сразу скопом (по шине памяти), которая, например, у видеокарт 256 или 512 бит.
То есть поиск строк по совпадению без индекса, конечно, видеокарта сможет ускорить очень сильно - вопрос только в том, что проще добавить индекс и не сканировать все таблицы.
50 Garykom
 
гуру
20.09.16
18:40
(48) Нет это не я, но я сделал подобный лисапед свой
51 Garykom
 
гуру
20.09.16
18:43
(49) Да но индексы они требуют просто дофига места на hdd/ssd и накладных затрат на создания/поддержание/обновление.

Может проще без индексов, тогда и сама база меньше и шустрее пашет.
Но что только для специфичных баз хорошо применимо это да, для какого то биллинга или чего подобного с часто обновляемыми данными оно вполне может спасти.
52 gitotuta
 
20.09.16
18:44
(51) Вообще принято деление на ОЛТП с минимум индексов и ОЛАП где уже все как надо.
53 Garykom
 
гуру
20.09.16
18:47
(52) А в курсе сколько времени занимает заливка данных (с вычислениями) в OLAP? Прежде чем можно ее нагружать будет
54 gitotuta
 
20.09.16
18:49
(53) Вот тут моно параллельностьпо полной юзать
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший