Ajuste de Fase em RMN porForça Bruta de Análise de Entropia         utilizando GPU’s        Mario Gazziro (YAH!)        An...
IntroduçãoO hardware do espectrômetro pode gerar atrasosde fase no sistema de RMN. Soluções:• Left-shift no FID (com zero ...
Minimização de EntropiaMinE -> função de minimização (mínimos quadrados)hi -> derivadas normalizadas do sinal (FID) ou do ...
Motivação• Método tradicional utiliza minimos quadrados  para determinar o melhor par de variáveis  independentes para o a...
Objetivos• Realizar a avaliação da menor entropia em um  dado espectro, variando todas as possíveis  combinações de fase (...
Metodologia• Para um espectro de tamanho L, temos:• Núm. de combinações para fase 0: 360• Núm. de combinações para fase 1:...
Metodologia• Tempo de execução em CPU: ~8 horas• Dado o fato do problema ser intrinsicamente  paralelizável, recomenda-se ...
Metodologia
Metodologia
Metodologia              FFT
Metodologia              0              0              0                  FFT
Metodologia              0     3              0     0              0     0                  FFT
Metodologia              0     3              0     0              0     0              8              0              0   ...
Metodologia                  0     3                  0     0                  0     0                  8                 ...
Metodologia                      0     3                      0     0                      0     0                      8 ...
Metodologia                          0     3                          0     0                          0     0            ...
Metodologia                                        0     3                                        0     0                 ...
Metodologia                                        0     3                                        0     0                 ...
Resultados• Tempo de execução médio (L=1024): 1:30 min• Aceleração de aproximadamente 300 vezes!
Glycine: 1024                            fase 0 (gpu): -160fase 0 (cpu): -27                            fase 1 (gpu): 408f...
AGB 1.5: 511                           fase 0 (gpu): -118fase 0 (cpu): 190                           fase 1 (gpu): 346fase...
AGB 3.0 : 1024                            fase 0 (gpu): -168fase 0 (cpu): -83                            fase 1 (gpu): 418...
Bagac (C): 399                            fase 0 (gpu): -103fase 0 (cpu): -103                            fase 1 (gpu): 23...
Simulado D: 512                              fase 0 (gpu): -24fase 0 (cpu): 50                              fase 1 (gpu): ...
Copolimero: 1024                            fase 0 (gpu): -2fase 0 (cpu): -23                            fase 1 (gpu): 259...
Edson: 1000 (8k orig.)                             fase 0 (gpu): -12fase 0 (cpu): 0                             fase 1 (gp...
DiscussãoAnálise dos resultados apresentados.    (Discussão dos resultados   pelos membros do CIERMag)
ConclusõesCom o advento do poder de processamento daordem de teraflops (outrora disponível apenasem centros de supercomput...
APÊNDICEmod = SourceModule("""__device__ int lock = 0;__global__ void multiply_them(float *real, float *imag, int *size, i...
if(j == 3) {                                            //ds1 = abs((s0[3:L]-s0[1:L-2])/2)                                ...
Próximos SlideShares
Carregando em…5
×

ajuste de fase por força bruta de entropia em RMN - CUDA

609 visualizações

Publicada em

ajuste de fase por força bruta de entropia em RMN - CUDA

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
609
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
21
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

ajuste de fase por força bruta de entropia em RMN - CUDA

  1. 1. Ajuste de Fase em RMN porForça Bruta de Análise de Entropia utilizando GPU’s Mario Gazziro (YAH!) André Osti (monitor)
  2. 2. IntroduçãoO hardware do espectrômetro pode gerar atrasosde fase no sistema de RMN. Soluções:• Left-shift no FID (com zero padding a direita) – auxilia em distorções de linha de base;• Ajustes de fase de ordem 0 e 1 no sinal (FID) ou no espectro (FFT);• Demonstração de ajuste de fase com MATNMR;
  3. 3. Minimização de EntropiaMinE -> função de minimização (mínimos quadrados)hi -> derivadas normalizadas do sinal (FID) ou do espectro(FFT) da RMNP -> função de penalidade para evitar bandas negativas
  4. 4. Motivação• Método tradicional utiliza minimos quadrados para determinar o melhor par de variáveis independentes para o ajuste de fases.• Tal método pode eventualmente incorrer em mínimos locais, encontrando soluções não- ótimas.• Estudos clinicos multi-espectrais são os exames mais afetados por eventuais erros.
  5. 5. Objetivos• Realizar a avaliação da menor entropia em um dado espectro, variando todas as possíveis combinações de fase (ordem 0 e ordem 1), além de toda o conjunto de pivots, garantindo encontrar a solução ótima (para esse critério).
  6. 6. Metodologia• Para um espectro de tamanho L, temos:• Núm. de combinações para fase 0: 360• Núm. de combinações para fase 1: L• Núm. de combinações para o pivot: L• Exemplo: L=1024 Total de rotações + ver. Entropia = 360 x 1024 x 1024= 377.487.360
  7. 7. Metodologia• Tempo de execução em CPU: ~8 horas• Dado o fato do problema ser intrinsicamente paralelizável, recomenda-se o uso de GPU’s (placas gráficas) para acelerar o resultado.• O ajuste deve ser feito dentro do tempo de exame do paciente, em caso de necessidade de repetição do mesmo.
  8. 8. Metodologia
  9. 9. Metodologia
  10. 10. Metodologia FFT
  11. 11. Metodologia 0 0 0 FFT
  12. 12. Metodologia 0 3 0 0 0 0 FFT
  13. 13. Metodologia 0 3 0 0 0 0 8 0 0 FFT
  14. 14. Metodologia 0 3 0 0 0 0 8 0 0=00 FFT
  15. 15. Metodologia 0 3 0 0 0 0 8 0 0= =0 10 0 FFT
  16. 16. Metodologia 0 3 0 0 0 0 8 0 0= = =0 1 20 0 0 FFT
  17. 17. Metodologia 0 3 0 0 0 0 8 0 0= = = = = = = =0 1 2 3 4 5 6 70 0 0 0 0 0 0 0 FFT= = = = = = = =9 10 11 12 13 14 15 160 0 0 0 0 0 0 0
  18. 18. Metodologia 0 3 0 0 0 0 8 0 0= = = = = = = =0 1 2 3 4 5 6 71 0 0 0 0 0 0 0 FFT= = = = = = = =9 10 11 12 13 14 15 160 0 0 0 0 0 0 0
  19. 19. Resultados• Tempo de execução médio (L=1024): 1:30 min• Aceleração de aproximadamente 300 vezes!
  20. 20. Glycine: 1024 fase 0 (gpu): -160fase 0 (cpu): -27 fase 1 (gpu): 408fase 1 (cpu): 407 pivot (gpu): 844pivot (cpu): 512 entropia: 10.061212entropia (cpu): 10.063338
  21. 21. AGB 1.5: 511 fase 0 (gpu): -118fase 0 (cpu): 190 fase 1 (gpu): 346fase 1 (cpu): 355 pivot (gpu): 186pivot (cpu): 255 entropia: 4.742389entropia (cpu): 4.756013
  22. 22. AGB 3.0 : 1024 fase 0 (gpu): -168fase 0 (cpu): -83 fase 1 (gpu): 418fase 1 (cpu): 418 pivot (gpu): 246pivot (cpu): 512 entropia: 129.762581entropia (cpu): 129.76300
  23. 23. Bagac (C): 399 fase 0 (gpu): -103fase 0 (cpu): -103 fase 1 (gpu): 23fase 1 (cpu): 22 pivot (gpu): 187pivot (cpu): 199 entropia: 47.682329entropia (cpu): 47.690609
  24. 24. Simulado D: 512 fase 0 (gpu): -24fase 0 (cpu): 50 fase 1 (gpu): 369fase 1 (cpu): 368 pivot (gpu): 360pivot (cpu): 256 entropia: 60204.4742entropia (cpu): 60204.57031
  25. 25. Copolimero: 1024 fase 0 (gpu): -2fase 0 (cpu): -23 fase 1 (gpu): 259fase 1 (cpu): 259 pivot (gpu): 412pivot (cpu): 512 entropia: 95.040409entropia (cpu): 95.041626
  26. 26. Edson: 1000 (8k orig.) fase 0 (gpu): -12fase 0 (cpu): 0 fase 1 (gpu): 26fase 1 (cpu): 26 pivot (gpu): 983pivot (cpu): 500 entropia: 666.922718entropia (cpu): 666.924438
  27. 27. DiscussãoAnálise dos resultados apresentados. (Discussão dos resultados pelos membros do CIERMag)
  28. 28. ConclusõesCom o advento do poder de processamento daordem de teraflops (outrora disponível apenasem centros de supercomputação) formulamos ométodo de ajuste de fase por busca de mínimaentropia através da força bruta.Tal método se mostrou bastanteeficaz, ajustando pivots mais adequados egarantindo a descoberta dos valores mínimosglobais para o problema de ajuste de fase emRMN.
  29. 29. APÊNDICEmod = SourceModule("""__device__ int lock = 0;__global__ void multiply_them(float *real, float *imag, int *size, int *entropia, int *phc0, int *phc1, int *pivot, int *overflow, float *flentropia){ __shared__ float realb[4096], imagb[4096], a_num[4096]; int phc0_local = threadIdx.x-180; int phc1_local = blockIdx.x; float pivot_local = blockIdx.y; float entropia_local; float ds1[4096]; int i, j = 0, index = 0; float theta; int size_local=*size; float aux[3], temp; double sumDs = 0.0, sumas = 0.0, sumasSq = 0.0, H1 = 0.0, Pfun = 0.0, P, a; if(threadIdx.x == 0){ for(i = 0; i < size_local; i++) { realb[i] = real[i]; imagb[i] = imag[i]; a_num[i] = -(i + 1.0)/size_local; } } __syncthreads(); pivot_local /= size_local; for(i = 0; i < size_local; i++) { theta = 0.017452867 * (phc0_local + phc1_local * (a_num[i] + pivot_local)); temp = realb[i] * __cosf(theta) - imagb[i] * __sinf(theta); aux[j++] = temp; a = temp - fabs(temp); sumas += a; sumasSq += a * a;
  30. 30. if(j == 3) { //ds1 = abs((s0[3:L]-s0[1:L-2])/2) ds1[index] = fabs((aux[2] - aux[0])/2); sumDs += ds1[index]; index++; aux[0] = aux[1]; aux[1] = aux[2]; j = 2; } } for(i = 0; i < size_local - 2; i++) { ds1[i] = ds1[i]/sumDs; //p1 = ds1 / sum(ds1) if(ds1[i] == 0) ds1[i] = 1; //p1[np.where(p1 == 0)[0]] = 1 H1 += -ds1[i] * log(ds1[i]); //h1 = -p1 * log(p1) //H1 = sum(h1) } if(sumas < 0) { sumas = sumasSq; Pfun = Pfun + sumas/(size_local * size_local * 4); } P = 1000 * Pfun; entropia_local = H1 + P; entropia_local = entropia_local *1000000.0; atomicMin(entropia, ((int)entropia_local)); __threadfence(); if((int)entropia_local == *entropia) { int needlock = 1; while(needlock) { if(atomicCAS(&lock, 0, 1) == 0){ atomicAdd(overflow, 1); *flentropia = *entropia; *phc0 = phc0_local; *phc1 = phc1_local; *pivot = (int)(pivot_local * size_local); atomicExch(&lock, 0); needlock = 0;}}}}

×