aplicando o poder de uma gpu nosql server

22
Aplicando o poder de uma GPU no SQL Server Msc. Mauro Pichiliani (@pichiliani) [email protected]

Upload: pichiliani

Post on 17-Nov-2014

2.064 views

Category:

Technology


1 download

DESCRIPTION

Esta palestra foi apresentada no enveito SQLSat100 que aconteceu em 26/11/2011 na sede da Microsoft em São Paulo, Brasil

TRANSCRIPT

Page 1: Aplicando o poder de uma GPU noSQL Server

Aplicando o poder de uma GPU noSQL ServerMsc. Mauro Pichiliani (@pichiliani)

[email protected]

Page 2: Aplicando o poder de uma GPU noSQL Server

AVISO

2 | 26/11/2011 |

Page 3: Aplicando o poder de uma GPU noSQL Server

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 dados3 | 26/11/2011 |

Page 4: Aplicando o poder de uma GPU noSQL Server

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 |

Page 5: Aplicando o poder de uma GPU noSQL Server

Uso de processamento no servidor

Prioridades de um servidor de aplicação

5 | 26/11/2011 |

Page 6: Aplicando o poder de uma GPU noSQL Server

Uso de processamento no banco

Prioridades de um servidor de banco de dados

6 | 26/11/2011 |

Page 7: Aplicando o poder de uma GPU noSQL Server

Por que a diferença?

26/11/2011 |7 |

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

Page 8: Aplicando o poder de uma GPU noSQL Server

Por que utilizar GPU no SQL Server?

Então…

26/11/2011 |8 |

Page 9: Aplicando o poder de uma GPU noSQL Server

GPU? Que bicho é esse? - Jogos

26/11/2011 |9 |

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)

Page 10: Aplicando o poder de uma GPU noSQL Server

GPU? Que bicho é esse? - Placas

26/11/2011 |10 |

Atualmente a GPU é representada por uma placa dedicada (desktop ou notebook)

Radeon HD 69904 GB GDDR55.1 TFLOPS Single Precision320 GB/s – 3072 Strem Processors

Geoforce GTX 5803072 MB GDDR52.46* TFLOPS Single Precision327 GB/s – 1024 Cuda cores

Page 11: Aplicando o poder de uma GPU noSQL Server

GPU? Que bicho é esse? - Servidor

26/11/2011 |11 |

Há soluções para servidor e SDK (CUDA)

Page 12: Aplicando o poder de uma GPU noSQL Server

Processamento paralelo - HPC

26/11/2011 |12 |

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)

Page 13: Aplicando o poder de uma GPU noSQL Server

Processamento paralelo - Processador

26/11/2011 |13 |

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?

Page 14: Aplicando o poder de uma GPU noSQL Server

O mercado

26/11/2011 |14 |

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

Page 15: Aplicando o poder de uma GPU noSQL Server

Como utilizar uma GPU no SQL Server

26/11/2011 |15 |

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

Page 16: Aplicando o poder de uma GPU noSQL Server

Hello World com CUDA (em C)

26/11/2011 |16 |

// Hello World using CUDA

#include <cuda.h>#include <stdio.h>

// Prototypes__global__ void helloWorld(char*);

// Device kernel__global__ voidhelloWorld(char* str){  // determine where in the thread grid

// we are 

int idx = blockIdx.x * blockDim.x + threadIdx.x;

  // unmangle output  str[idx] += idx;}

// Host functionintmain(int argc, char** argv){  int i;

  // desired output  char str[] = "Hello World!";

  // mangle contents of output  // the null character is left intact for simplicity  for(i = 0; i < 12; i++)    str[i] -= i;

  // allocate memory on the device   char *d_str;  size_t size = sizeof(str);  cudaMalloc((void**)&d_str, size);

  // copy the string to the device  cudaMemcpy(d_str, str, size, cudaMemcpyHostToDevice);

  // set the grid and block sizes

  dim3 dimGrid(2);  //one block p/ word

dim3 dimBlock(6); //one thread p/ char.

    // invoke the kernel

  helloWorld<<< dimGrid, dimBlock >>>(d_str);

  // retrieve the results from the device  cudaMemcpy(str, d_str, size, cudaMemcpyDeviceToHost);

  // free up the allocated memory

// on the device  cudaFree(d_str);    // everyone's favorite part  printf("%s\n", str);

  return 0;}

Page 17: Aplicando o poder de uma GPU noSQL Server

Voltando um pouco…

26/11/2011 |17 |

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

Page 18: Aplicando o poder de uma GPU noSQL Server

CUDA no SQL Server – CUDA.NET

26/11/2011 |18 |

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);

Page 19: Aplicando o poder de uma GPU noSQL Server

CUDA no SQL Server – CUDAFY.NET

26/11/2011 |19 |

2) CUDAfy .NET SDK(http://www.hybriddsp.com/)

Page 20: Aplicando o poder de uma GPU noSQL Server

Sou pobre, #comofaz?

26/11/2011 |20 |

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

Page 21: Aplicando o poder de uma GPU noSQL Server

Conclusões

26/11/2011 |21 |

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

Page 22: Aplicando o poder de uma GPU noSQL Server

#prontofalei

26/11/2011 |22 |

Perguntas?