Aplicando o poder de uma GPU noSQL Server
Post on 17-Nov-2014
2060 Views
Preview:
DESCRIPTION
Transcript
Aplicando o poder de uma GPU noSQL ServerMsc. 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 dados3 | 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?
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
Por que utilizar GPU no SQL Server?
Então…
26/11/2011 |8 |
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)
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
GPU? Que bicho é esse? - Servidor
26/11/2011 |11 |
Há soluções para servidor e SDK (CUDA)
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)
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?
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
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
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;}
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
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);
CUDA no SQL Server – CUDAFY.NET
26/11/2011 |19 |
2) CUDAfy .NET SDK(http://www.hybriddsp.com/)
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
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
#prontofalei
26/11/2011 |22 |
Perguntas?
top related