Aplicando o poder de uma GPU no
SQL Server
Msc. Mauro Pichiliani (@pichiliani)
pichiliani@uol.com.br
AVISO




2 | 26/11/2011 |
Sobre mim
 Mestre e doutorando em computação pelo ITA

 Escritor da SQL Magazine, Fórum Access, Java
  Magazine, SQLServerCentral.com e outras

 Colaborador do iMasters há 10 anos

 Co-autor do @databasecast

 Foco em diversos bancos de dados

 3 | 26/11/2011 |
Roteiro

     Uso de processamento
     GPU? Que bicho é esse?
     Processamento paralelo e aplicações
     O mercado
     Como utilizar uma GPU no SQL Server
     #comofaz
     Conclusão


4 | 26/11/2011 |
Uso de processamento no servidor

           Prioridades de um servidor de aplicação




5 | 26/11/2011 |
Uso de processamento no banco

  Prioridades de um servidor de banco de dados




6 | 26/11/2011 |
Por que a diferença?
  No servidor de aplicação:
         Processamento do código fonte
         Processamento de requisições (Threads, Http)
         Gerenciamento de máquinas virtuais

  No servidor de banco de dados:
           Acesso sequencial a tabelas com muitos dados
           Uso de índice causando IO randômico
           Plano de execução e operadores imprevisíveis
           Grande movimentação de dados para relatórios


7 | 26/11/2011 |
Então…




                   Por que utilizar GPU no SQL Server?

8 | 26/11/2011 |
GPU? Que bicho é esse? - Jogos
 GPU = Graphics Processing Unit
 Circuito próprio para manipulação paralela de operações gráficas e
  instruções x86 (GPGPU)
 Não trabalha sozinha: requer um processador
 O preço é acessível
 Avanços vem da área de entretenimento (games, filmes e séries)




 9 | 26/11/2011 |
GPU? Que bicho é esse? - Placas
   Atualmente a GPU é representada por uma
    placa dedicada (desktop ou notebook)




  Geoforce GTX 580
                                  Radeon HD 6990
  3072 MB GDDR5
                                  4 GB GDDR5
  2.46* TFLOPS Single Precision
                                  5.1 TFLOPS Single Precision
  327 GB/s – 1024 Cuda cores
                                  320 GB/s – 3072 Strem Processors


10 | 26/11/2011 |
GPU? Que bicho é esse? - Servidor
   Há soluções para servidor e SDK (CUDA)




11 | 26/11/2011 |
Processamento paralelo - HPC
   O uso de GPU requer conhecimento de processamento paralelo (área HPC)
   Maior parte do hardware TOP500 (http://www.top500.org/) usa GPU
   Para lembrar:
         1 megaflop = 1 milhão de flops = 10^6 operações p.f. por segundo;
         1 gigaflop = 1 bilhão de flops     = 10^9 operações p.f. por segundo;
         1 teraflop = 1 trilhão de flops   = 10^12 operações p.f. por segundo;
         1 petaflop = 1 quatrilhão de flops = 10^15 operações p.f. por segundo.

   Um processador topo de linha para servidores fica em torno de 50~70 GFLOPS
   Nota: em geral no máximo 10% disso é utilizado
   Paralelismo é tradicionamento aplicado em:
         Jogos
         Simulações
         Construção de modelos
         Renderização
         Segurança (força bruta)




12 | 26/11/2011 |
Processamento paralelo - Processador
   Não é raro mudanças no processador para melhorar
    desempenho específico:
          Inclusão de instruções MMX para suporte a multimídia
          Integração da plataforma de 64 bits
          Instruções específicas para melhoria da virtualização

   Há também a possibilidade de criação de um chip
    customizado com FPGA (field-programmable gate
    arrays)

   Que tal um SQL Chip?

13 | 26/11/2011 |
O mercado
 Pesquisas da área acadêmica abordam desde 2004 o uso de
  GPU com banco de dados

 Oracle apostando no Exadata

 IBM usando muito CUDA e preenchendo patentes

 Comunidade de software livre experimentando GPU
  (PostgreSQL e mongoDB)

 Amazon fornecendo instâncias do EC2 com GPU

 Microsoft ainda não fez nenhum anúncio


14 | 26/11/2011 |
Como utilizar uma GPU no SQL Server
 Trabalhar com GPU exige conhecimento da arquitetura




 Modelo de transferência de dados entre memória da
  GPU e o processador

 Detalhes do SDK (CUDA usa C/C++)

 Conceitos: funções de textura, kernel, OpenCL, SIMD


15 | 26/11/2011 |
Hello World com CUDA (em C)
// Hello World using CUDA                 // Host function
                                          int
#include <cuda.h>                         main(int argc, char** argv)                   // invoke the kernel
                                          {
#include <stdio.h>                          int i;                                     helloWorld<<< dimGrid, dimBlock
                                                                                      >>>(d_str);
// Prototypes                              // desired output
__global__ void helloWorld(char*);         char str[] = "Hello World!";
                                                                                       // retrieve the results from the device
                                           // mangle contents of output                cudaMemcpy(str, d_str, size,
                                           // the null character is left intact for   cudaMemcpyDeviceToHost);
// Device kernel                          simplicity
__global__ void                            for(i = 0; i < 12; i++)
                                             str[i] -= i;                                 // free up the allocated memory
helloWorld(char* str)                                                                       // on the device
{                                          // allocate memory on the device               cudaFree(d_str);
  // determine where in the thread grid    char *d_str;
                                           size_t size = sizeof(str);
 // we are                                 cudaMalloc((void**)&d_str, size);              // everyone's favorite part
                                                                                          printf("%sn", str);
 int idx = blockIdx.x * blockDim.x +       // copy the string to the device
                                           cudaMemcpy(d_str, str, size,
threadIdx.x;                              cudaMemcpyHostToDevice);                        return 0;
                                                                                      }
    // unmangle output                     // set the grid and block sizes
    str[idx] += idx;                       dim3 dimGrid(2); //one block p/ word
}                                          dim3 dimBlock(6); //one thread p/ char.




    16 | 26/11/2011 |
Voltando um pouco…
   Antes de programar para GPU veja se o problema é adequado

   Exemplos comuns:
         Multiplicação de matrix
         Tarefas de mineração de dados/previsões
         Compactação
         Pocessamento numérico intenso
         Uso de muitos loops aninhados
         Algoritmo para geoposicionamento (manipulação de rotas)

   Porque colocar este processamento no banco de dados?
         É onde os dados estão (geralmente são MUITOS dados)
         Fácil manipulação pelo uso da linguagem SQL
         Todos os recursos do .NET

   Dica geral: faça testes e veja se GPU é melhor para o seu caso/problema



17 | 26/11/2011 |
CUDA no SQL Server – CUDA.NET
 SQL Server permite a chamada de assemblies em .NET
 Duas abordagens para programar CUDA em C#:
1) CUDA.NET (http://www.hoopoe-cloud.com/Solutions/cuda.net)
using GASS.CUDA;

// ...
CUDA cuda = new CUDA(true);

// select first available device (GPU)
cuda.CreateContext(0);

// load binary kernel module (eg. relative to from bin/Debug/)
CUmodule module = cuda.LoadModule("../../mykernel.cubin");

// select function from the module
CUfunction function = cuda.GetModuleFunction(module, "fooFunction");

// execute the function fooFunction() on a GPU
cuda.Launch(function);



 18 | 26/11/2011 |
CUDA no SQL Server – CUDAFY.NET
2) CUDAfy .NET SDK(http://www.hybriddsp.com/)




19 | 26/11/2011 |
Sou pobre, #comofaz?
 Não tenho uma CPU e quero aprender, #comofaz?
 Tenha votande e determinação!
 Aprenda outros conceitos de programação paralela (MPI, OpenMP,
  SIMD, etc)
 Estude problemas e aprenda o ‘jeito’ de programar paralelo
 Alternativa: use um emulador
      http://gpubrasil.com/2009/10/02/instalacao-do-emulador-cuda/
   Outra alternativa: ambiente da CESUP
   Unix+Cluster com GPU Tesla+CUDA
   Monte projeto, converse com professor
   Há possibilidade de conseguir conta de acesso dependendo do
    projeto


20 | 26/11/2011 |
Conclusões
 Uso de GPU aliada a CPU fornece muito poder de
  processamento
 GPU com banco de dados ainda é incipiente
 Porém há varias possibilidades e oportunidades
 Alguns fornecedores já sairam na frente…
 Uso de GPU não sai ‘de graça’:
    É preciso conhecer programação paralela (e saber
     resolver problemas)
    Requer problema específico
    Programação difícil (i.e: você vai sofrer um pouco no
     começo)
 Há possibilidade de utilizar CUDA+.NET no SQL Server

21 | 26/11/2011 |
#prontofalei


                    Perguntas?



22 | 26/11/2011 |

Aplicando o poder de uma GPU no SQL Server

  • 1.
    Aplicando o poderde uma GPU no SQL Server Msc. Mauro Pichiliani (@pichiliani) pichiliani@uol.com.br
  • 2.
  • 3.
    Sobre mim  Mestree doutorando em computação pelo ITA  Escritor da SQL Magazine, Fórum Access, Java Magazine, SQLServerCentral.com e outras  Colaborador do iMasters há 10 anos  Co-autor do @databasecast  Foco em diversos bancos de dados 3 | 26/11/2011 |
  • 4.
    Roteiro  Uso de processamento  GPU? Que bicho é esse?  Processamento paralelo e aplicações  O mercado  Como utilizar uma GPU no SQL Server  #comofaz  Conclusão 4 | 26/11/2011 |
  • 5.
    Uso de processamentono servidor Prioridades de um servidor de aplicação 5 | 26/11/2011 |
  • 6.
    Uso de processamentono banco Prioridades de um servidor de banco de dados 6 | 26/11/2011 |
  • 7.
    Por que adiferença?  No servidor de aplicação:  Processamento do código fonte  Processamento de requisições (Threads, Http)  Gerenciamento de máquinas virtuais  No servidor de banco de dados:  Acesso sequencial a tabelas com muitos dados  Uso de índice causando IO randômico  Plano de execução e operadores imprevisíveis  Grande movimentação de dados para relatórios 7 | 26/11/2011 |
  • 8.
    Então… Por que utilizar GPU no SQL Server? 8 | 26/11/2011 |
  • 9.
    GPU? Que bichoé esse? - Jogos  GPU = Graphics Processing Unit  Circuito próprio para manipulação paralela de operações gráficas e instruções x86 (GPGPU)  Não trabalha sozinha: requer um processador  O preço é acessível  Avanços vem da área de entretenimento (games, filmes e séries) 9 | 26/11/2011 |
  • 10.
    GPU? Que bichoé esse? - Placas  Atualmente a GPU é representada por uma placa dedicada (desktop ou notebook) Geoforce GTX 580 Radeon HD 6990 3072 MB GDDR5 4 GB GDDR5 2.46* TFLOPS Single Precision 5.1 TFLOPS Single Precision 327 GB/s – 1024 Cuda cores 320 GB/s – 3072 Strem Processors 10 | 26/11/2011 |
  • 11.
    GPU? Que bichoé esse? - Servidor  Há soluções para servidor e SDK (CUDA) 11 | 26/11/2011 |
  • 12.
    Processamento paralelo -HPC  O uso de GPU requer conhecimento de processamento paralelo (área HPC)  Maior parte do hardware TOP500 (http://www.top500.org/) usa GPU  Para lembrar:  1 megaflop = 1 milhão de flops = 10^6 operações p.f. por segundo;  1 gigaflop = 1 bilhão de flops = 10^9 operações p.f. por segundo;  1 teraflop = 1 trilhão de flops = 10^12 operações p.f. por segundo;  1 petaflop = 1 quatrilhão de flops = 10^15 operações p.f. por segundo.  Um processador topo de linha para servidores fica em torno de 50~70 GFLOPS  Nota: em geral no máximo 10% disso é utilizado  Paralelismo é tradicionamento aplicado em:  Jogos  Simulações  Construção de modelos  Renderização  Segurança (força bruta) 12 | 26/11/2011 |
  • 13.
    Processamento paralelo -Processador  Não é raro mudanças no processador para melhorar desempenho específico:  Inclusão de instruções MMX para suporte a multimídia  Integração da plataforma de 64 bits  Instruções específicas para melhoria da virtualização  Há também a possibilidade de criação de um chip customizado com FPGA (field-programmable gate arrays)  Que tal um SQL Chip? 13 | 26/11/2011 |
  • 14.
    O mercado  Pesquisasda área acadêmica abordam desde 2004 o uso de GPU com banco de dados  Oracle apostando no Exadata  IBM usando muito CUDA e preenchendo patentes  Comunidade de software livre experimentando GPU (PostgreSQL e mongoDB)  Amazon fornecendo instâncias do EC2 com GPU  Microsoft ainda não fez nenhum anúncio 14 | 26/11/2011 |
  • 15.
    Como utilizar umaGPU no SQL Server  Trabalhar com GPU exige conhecimento da arquitetura  Modelo de transferência de dados entre memória da GPU e o processador  Detalhes do SDK (CUDA usa C/C++)  Conceitos: funções de textura, kernel, OpenCL, SIMD 15 | 26/11/2011 |
  • 16.
    Hello World comCUDA (em C) // Hello World using CUDA // Host function int #include <cuda.h> main(int argc, char** argv) // invoke the kernel { #include <stdio.h> int i; helloWorld<<< dimGrid, dimBlock >>>(d_str); // Prototypes // desired output __global__ void helloWorld(char*); char str[] = "Hello World!"; // retrieve the results from the device // mangle contents of output cudaMemcpy(str, d_str, size, // the null character is left intact for cudaMemcpyDeviceToHost); // Device kernel simplicity __global__ void for(i = 0; i < 12; i++) str[i] -= i; // free up the allocated memory helloWorld(char* str) // on the device { // allocate memory on the device cudaFree(d_str); // determine where in the thread grid char *d_str; size_t size = sizeof(str); // we are cudaMalloc((void**)&d_str, size); // everyone's favorite part printf("%sn", str); int idx = blockIdx.x * blockDim.x + // copy the string to the device cudaMemcpy(d_str, str, size, threadIdx.x; cudaMemcpyHostToDevice); return 0; } // unmangle output // set the grid and block sizes str[idx] += idx; dim3 dimGrid(2); //one block p/ word } dim3 dimBlock(6); //one thread p/ char. 16 | 26/11/2011 |
  • 17.
    Voltando um pouco…  Antes de programar para GPU veja se o problema é adequado  Exemplos comuns:  Multiplicação de matrix  Tarefas de mineração de dados/previsões  Compactação  Pocessamento numérico intenso  Uso de muitos loops aninhados  Algoritmo para geoposicionamento (manipulação de rotas)  Porque colocar este processamento no banco de dados?  É onde os dados estão (geralmente são MUITOS dados)  Fácil manipulação pelo uso da linguagem SQL  Todos os recursos do .NET  Dica geral: faça testes e veja se GPU é melhor para o seu caso/problema 17 | 26/11/2011 |
  • 18.
    CUDA no SQLServer – CUDA.NET  SQL Server permite a chamada de assemblies em .NET  Duas abordagens para programar CUDA em C#: 1) CUDA.NET (http://www.hoopoe-cloud.com/Solutions/cuda.net) using GASS.CUDA; // ... CUDA cuda = new CUDA(true); // select first available device (GPU) cuda.CreateContext(0); // load binary kernel module (eg. relative to from bin/Debug/) CUmodule module = cuda.LoadModule("../../mykernel.cubin"); // select function from the module CUfunction function = cuda.GetModuleFunction(module, "fooFunction"); // execute the function fooFunction() on a GPU cuda.Launch(function); 18 | 26/11/2011 |
  • 19.
    CUDA no SQLServer – CUDAFY.NET 2) CUDAfy .NET SDK(http://www.hybriddsp.com/) 19 | 26/11/2011 |
  • 20.
    Sou pobre, #comofaz? Não tenho uma CPU e quero aprender, #comofaz?  Tenha votande e determinação!  Aprenda outros conceitos de programação paralela (MPI, OpenMP, SIMD, etc)  Estude problemas e aprenda o ‘jeito’ de programar paralelo  Alternativa: use um emulador http://gpubrasil.com/2009/10/02/instalacao-do-emulador-cuda/  Outra alternativa: ambiente da CESUP  Unix+Cluster com GPU Tesla+CUDA  Monte projeto, converse com professor  Há possibilidade de conseguir conta de acesso dependendo do projeto 20 | 26/11/2011 |
  • 21.
    Conclusões  Uso deGPU aliada a CPU fornece muito poder de processamento  GPU com banco de dados ainda é incipiente  Porém há varias possibilidades e oportunidades  Alguns fornecedores já sairam na frente…  Uso de GPU não sai ‘de graça’:  É preciso conhecer programação paralela (e saber resolver problemas)  Requer problema específico  Programação difícil (i.e: você vai sofrer um pouco no começo)  Há possibilidade de utilizar CUDA+.NET no SQL Server 21 | 26/11/2011 |
  • 22.
    #prontofalei Perguntas? 22 | 26/11/2011 |