Perguntas a serem respondidas:

  1. Como o uso de GPU impacta o desempenho dos modelos?
  1. Qual a diferença de desempenho entre os modelos utilizando kernels e tensores?

Leitura dos dados

## # A tibble: 46,266 × 5
##    PHASE      TIMESTAMP  SIZE LANG     METHOD
##    <chr>          <dbl> <dbl> <chr>    <chr> 
##  1 FINAL_PROD      8.06  7295 cutensor sebal 
##  2 FINAL_PROD      8.06  7295 cutensor sebal 
##  3 FINAL_PROD      8.07  7295 cutensor sebal 
##  4 FINAL_PROD      8.07  7295 cutensor sebal 
##  5 FINAL_PROD      8.06  7295 cutensor sebal 
##  6 FINAL_PROD      8.07  7295 cutensor sebal 
##  7 FINAL_PROD      8.06  7295 cutensor sebal 
##  8 FINAL_PROD      8.07  7295 cutensor sebal 
##  9 FINAL_PROD      8.06  7295 cutensor sebal 
## 10 FINAL_PROD      8.06  7295 cutensor sebal 
## # ℹ 46,256 more rows

Consistencia dos resultados

Inferencias: - A maior variação esta ocorrendo na implementação serial, talvez por influencia de cache ou arquitetura do processador. Apesar disso, o conjunto de 8000 execuções, junto aos baixos valores de coeficiente de variação (CV) e amplitude interquartil (IQR), confirma a consistência das medições e valida o uso da média como métrica para comparação.

Conclusão: - Os dados estão consistentes e a média é uma boa metrica para ser utilizada nas analises

Overview

Como podemos ver, a implementação em GPU obteve uma redução grande de tempo em relação a implementação serial. Contudo, podemos ver que a etapa de leitura dos dados é algo que consome muito tempo nas implementações em GPU. Dessa forma, neste documento iremos fazer 2 analises:

  1. Análise Completa (com READ_INPUT):
  1. Análise Sem READ_INPUT:

Speedup

  • Speedup com read_input
## # A tibble: 2 × 5
## # Groups:   METHOD, PHASE [2]
##   METHOD PHASE cutensor_speedup hybrid_speedup kernels_speedup
##   <chr>  <chr>            <dbl>          <dbl>           <dbl>
## 1 sebal  TOTAL             5.17           5.21            5.60
## 2 steep  TOTAL             9.71           9.82           10.2
  • Speedup sem read_input
## # A tibble: 2 × 5
## # Groups:   METHOD, PHASE [2]
##   METHOD PHASE     cutensor_speedup hybrid_speedup kernels_speedup
##   <chr>  <chr>                <dbl>          <dbl>           <dbl>
## 1 sebal  P_TOTAL_2             40.4           44.4            41.1
## 2 steep  P_TOTAL_2             75.3           83.3            59.7
  • Speedups separados
## # A tibble: 36 × 4
##    PHASE        METHOD LANG     SPEEDUP
##    <fct>        <chr>  <chr>      <dbl>
##  1 FINAL_PROD   sebal  cutensor  106.  
##  2 FINAL_PROD   steep  cutensor  106.  
##  3 INITIAL_PROD sebal  cutensor   96.5 
##  4 INITIAL_PROD steep  cutensor   96.1 
##  5 PIXEL_SEL    sebal  cutensor  108.  
##  6 PIXEL_SEL    steep  cutensor  850.  
##  7 RAH          sebal  cutensor   39.6 
##  8 RAH          steep  cutensor   47.2 
##  9 READ_INPUT   sebal  cutensor    0.84
## 10 READ_INPUT   steep  cutensor    0.84
## # ℹ 26 more rows

Este gráfico apresenta os speedups das abordagens com GPU em relação a abordagem serial. Nela, percebemos que:

  1. As etapas READ_INPUT e SAVE_PRODS são seriais
  2. A etapa PIXEL_SEL foi implementada em kernels em todas as abordagens GPU
  3. No STEEP a fase que mais se beneficiou do uso de GPU foi a de PIXEL_SELECTION. Já no SEBAL foi a etapa INITIAL_PRODS
  4. Comparando as diferentes abordagens em GPU, FINAL_PRODS e RAH se beneficiaram muito do uso de cutensor, quando comparado ao serial. Já INITIAL_PRODS tiveram um speedup maior com kernels.

Análise completa com READ_INPUT

Significancia estatistica

  • Removendo outliers para facilitar a análise (a coluna ‘outliers’ apresenta quantos outliers foram removidos e a coluna total, quantas observações restaram)
## # A tibble: 8 × 5
## # Groups:   LANG [4]
##   LANG     METHOD total outliers percent_removed
##   <chr>    <chr>  <int>    <int>           <dbl>
## 1 cutensor sebal    970       12           1.24 
## 2 cutensor steep    968        8           0.826
## 3 hybrid   sebal    960       16           1.67 
## 4 hybrid   steep    971       16           1.65 
## 5 kernels  sebal    971       13           1.34 
## 6 kernels  steep    954       17           1.78 
## 7 serial   sebal    957       32           3.34 
## 8 serial   steep    960       24           2.5

Como podemos observar, as distribuições se assemelham a uma distribuição normal. Como as distribuições são aproximadamente normais e temos amostras grandes (favorecendo o Teorema do Limite Central), podemos proceder com testes paramétricos (t-Student e ANOVA) para verificar diferenças estatisticamente significativas entre as abordagens.

Teste ANOVA

H0: kernels = cutensor = hybrid H1: Pelo menos uma média é significativamente diferente

Realizando o teste ANOVA podemos ver através de p, que é praticamente 0, que as diferenças são estatisticamente significativas entre os três métodos, com Kernels consistentemente superior. Como no teste de ANOVA só consguimos dizer que uma média é significativamente diferente, podemos executar o test t student em pares para confirmar que todas as médias são significativamente diferentes entre si.

Ao analisarmos os intervalos de confiança, vemos que

Teste t-student

##                        test_name p_value       df t_critical   t_result
## df...1 SEBAL Kernels vs cuTensor   0e+00 1884.208   1.961224 -622.71899
## df...2   SEBAL Kernels vs Hybrid   0e+00 1886.952   1.961222 -569.55311
## df...3  SEBAL cuTensor vs Hybrid   0e+00 1896.482   1.961216   66.43328
## df...4 STEEP Kernels vs cuTensor   0e+00 1820.828   1.961268 -367.09167
## df...5   STEEP Kernels vs Hybrid   0e+00 1795.777   1.961286 -267.18069
## df...6  STEEP cuTensor vs Hybrid   0e+00 1911.441   1.961206   85.65721
##          t_range
## df...1 934.07848
## df...2 854.32967
## df...3  99.64992
## df...4 550.63750
## df...5 400.77104
## df...6 128.48582

H0: A abordagem de kernels teve melhor desempenho que a abordagem cutensor

H1: A abordagem kernels não teve melhor desempenho que a abordagem cutensor

Executando o test t entre pares, chegamos em P-valores extremamente baixos (todos 0), indicando diferenças estatisticamente significativas entre todos os pares comparados, com nível de confiança superior a 99.9%

Quando colocamos essas comparações em uma visualização, podemos ver que os intervalos de confiança (traços vermelhos dentro do boxplot) não se sobrepoem e apresentam-se bem concentrados em torno da média. Isso é esperado devido ao tamanho grande da amostra (cerca de 960-970 observações por grupo). Com amostras grandes, o erro padrão da média (que determina o intervalo de confiança) tende a ser pequeno.

Conclusão: A análise estatística revelou diferenças significativas entre todas as abordagens (p < 0.001), com a implementação em kernels demonstrando desempenho superior em termos de tempo total de execução. Este resultado pode ser atribuído ao overhead inicial da biblioteca cuTensor na inicialização dos tensores, que impacta o tempo total de processamento. Apesar das otimizações oferecidas pelo cuTensor para operações tensoriais, o custo de inicialização acaba prejudicando seu desempenho global quando comparado à abordagem direta em kernels CUDA.

Análise sem READ_INPUT

Significancia estatistica

  • Removendo outliers para facilitar a análise (a coluna ‘outliers’ apresenta quantos outliers foram removidos e a coluna total, quantas observações restaram)
## # A tibble: 8 × 5
## # Groups:   LANG [4]
##   LANG     METHOD total outliers percent_removed
##   <chr>    <chr>  <int>    <int>           <dbl>
## 1 cutensor sebal    970        4           0.412
## 2 cutensor steep    968       15           1.55 
## 3 hybrid   sebal    960       14           1.46 
## 4 hybrid   steep    971       31           3.19 
## 5 kernels  sebal    971        7           0.721
## 6 kernels  steep    954        8           0.839
## 7 serial   sebal    957       43           4.49 
## 8 serial   steep    960       30           3.12

Como podemos observar, as distribuições se assemelham a uma distribuição normal. Como as distribuições são aproximadamente normais e temos amostras grandes (favorecendo o Teorema do Limite Central), podemos proceder com testes paramétricos (t-Student e ANOVA) para verificar diferenças estatisticamente significativas entre as abordagens.

Teste ANOVA

H0: kernels = cutensor = hybrid

H1: Pelo menos uma média é significativamente diferente

Realizando o teste ANOVA podemos ver através de p, que é praticamente 0, que as diferenças são estatisticamente significativas entre os três métodos, com Kernels consistentemente superior. Como no teste de ANOVA só consguimos dizer que uma média é significativamente diferente, podemos executar o test t student em pares para confirmar que todas as médias são significativamente diferentes entre si.

Ao analisarmos os intervalos de confiança, vemos que

Teste t-student

##                        test_name  p_value       df t_critical   t_result
## df...1 SEBAL Kernels vs cuTensor 5.8e-274 1697.492   1.961362  -43.00818
## df...2   SEBAL Kernels vs Hybrid    0e+00 1697.172   1.961363  190.52693
## df...3  SEBAL cuTensor vs Hybrid    0e+00 1909.453   1.961207  293.17737
## df...4 STEEP Kernels vs cuTensor    0e+00 1456.717   1.961594  781.10334
## df...5   STEEP Kernels vs Hybrid    0e+00 1416.065   1.961641 1080.95924
## df...6  STEEP cuTensor vs Hybrid    0e+00 1888.006   1.961221  438.62850
##           t_range
## df...1   64.51227
## df...2  285.79040
## df...3  439.76606
## df...4 1171.65502
## df...5 1621.43887
## df...6  657.94275

H0: A abordagem de kernels teve melhor desempenho que a abordagem cutensor

H1: A abordagem kernels não teve melhor desempenho que a abordagem cutensor

Executando o test t entre pares, chegamos em P-valores extremamente baixos (todos 0), indicando diferenças estatisticamente significativas entre todos os pares comparados, com nível de confiança superior a 99.9%

Quando colocamos essas comparações em uma visualização, podemos ver que os intervalos de confiança (traços vermelhos dentro do boxplot) não se sobrepoem e apresentam-se bem concentrados em torno da média. Isso é esperado devido ao tamanho grande da amostra (cerca de 960-970 observações por grupo). Com amostras grandes, o erro padrão da média (que determina o intervalo de confiança) tende a ser pequeno.

Conclusão: A análise específica do desempenho no cálculo de produtos revelou superioridade da abordagem cuTensor, atribuída à especialização dos Tensor Cores. Embora a diferença de desempenho tenha sido moderada devido a natureza das operações realizadas, o impacto dos Tensor Cores foi significativa. A implementação híbrida, combinando CUDA Cores e Tensor Cores, demonstrou particular eficácia, resultando em redução perceptivel do tempo de execução.

Dúvidas: