O documento discute o uso de processamento gráfico (GPU) no SQL Server. Ele explica o que é uma GPU e como ela pode ser usada para processamento paralelo, mencionando exemplos de aplicações como multiplicação de matrizes. Também descreve como programar no SQL Server usando frameworks como o CUDA.NET para executar código na GPU. Por fim, ressalta que embora o uso de GPU traga grande poder de processamento, requer conhecimento de programação paralela e que o problema seja adequado para esse tipo de solução.
3. 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 |
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 processamento no servidor
Prioridades de um servidor de aplicação
5 | 26/11/2011 |
6. Uso de processamento no banco
Prioridades de um servidor de banco de dados
6 | 26/11/2011 |
7. 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 |
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
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 |
15. 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 |
16. 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 |
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 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 |
19. CUDA no SQL Server – 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 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 |