| 
    
            
         
         | 
    
  | 
Ускорение СУБД с помощью 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) Вот тут моно параллельностьпо полной юзать     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |