O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

TDC2016SP - Trilha BigData

221 visualizações

Publicada em

Próximo passo para a Computação Exascale "Programando para Multi-core e Many-core"

Publicada em: Educação
  • Seja o primeiro a comentar

TDC2016SP - Trilha BigData

  1. 1. Próximo passo para a Computação Exascale Programando para Multi-core e Many-core Trilha Big Data Igor Freitas – Intel do Brasil igor.freitas@intel.com
  2. 2. Legal Disclaimers Intel technologies features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. No computer system can be absolutely secure. Check with your system manufacturer or retailer or learn more at [intel.com]. Software and workloads used in performance tests may have been optimized for performance only on Intel microprocessors. Performance tests, such as SYSmark and MobileMark, are measured using specific computer systems, components, software, operations and functions. Any change to any of those factors may cause the results to vary. You should consult other information and performance tests to assist you in fully evaluating your contemplated purchases, including the performance of that product when combined with other products. All information provided here is subject to change without notice. Contact your Intel representative to obtain the latest Intel product specifications and roadmaps. Results have been estimated or simulated using internal Intel analysis or architecture simulation or modeling, and provided to you for informational purposes. Any differences in your system hardware, software or configuration may affect your actual performance. Intel technologies’ features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. No computer system can be absolutely secure. Check with your system manufacturer or retailer or learn more at https://www- ssl.intel.com/content/www/us/en/high-performance-computing/path-to-aurora.html. Tests document performance of components on a particular test, in specific systems. Differences in hardware, software, or configuration will affect actual performance. Consult other sources of information to evaluate performance as you consider your purchase. For more complete information about performance and benchmark results, visit http://www.intel.com/performance. 3D XPoint, Intel, the Intel logo, Intel. Experience What’s Inside, the Intel. Experience What’s Inside logo, Intel Xeon Phi, Optane, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States or other countries. *Other names and brands may be claimed as the property of others. © 2016 Intel Corporation. All rights reserved. 2
  3. 3. 3 Próximo passo para a Computação Exascale
  4. 4. Over 15 GF/Watt1 ~500 GB/s sustained memory bandwidth with integrated on- package memory Next Step: KNL Systems scalable to >100 PFlop/s ~3X Flops and ~3X single- thread theoretical peak performance over Knights Corner1 Up to 100 Gb/s with Storm Lake integrated fabric 1 Projections based on internal Intel analysis during early product definition, as compared to prior generation Intel® Xeon Phi™ Coprocessors, and are provided for informational purposes only. Any difference in system hardware or software design or configuration may affect actual performance. I/O Memory Processor Performance Resiliency Standard Programming Models Power Efficiency Exascale Vision Next Step on Intel’s Path to Exascale Computing
  5. 5. Intel® Xeon Phi™ Product Family x200 5 Host Processor in Groveport Platform Self-boot Intel® Xeon Phi™ processor Ingredient of Grantley Platforms Requires Intel® Xeon® processor host with integrated Intel® Omni-Path Fabric Intel® Xeon Phi™ Processor Intel® Xeon Phi™ Coprocessor x200
  6. 6. Knights Landing (KNL) Architectural Diagram 6 Diagram is for conceptual purposes only and only illustrates a CPU and memory • It is not to scale and does not include all functional areas of the CPU, nor does it represent actual component layout. DDR4 DDR4 DDR4 DMIWellsburg PCH Up to 72 cores PCIe Gen3 x36 (KNL) x4 (KNL-F) MCDRAM MCDRAM MCDRAM MCDRAM MCDRAM MCDRAM MCDRAM MCDRAM Micro-CoaxCable(IFP) Micro-CoaxCable(IFP) Connector HFI 2 VPU 1MBL2 Core HUB 2 VPU Core TILE DDR4 DDR4 DDR4 Up to 72 cores 2D mesh architecture Up to 16GB high-bandwidth on-package memory (MCDRAM). Exposed as NUMA node ~500 GB/s sustained BW Over 3 TF DP peak • Full Intel® Xeon Phi™ ISA compatibility through Intel® AVX-512 ~3x single-thread compared to Knights Corner 6 channels DDR4 Up to 384GB 2 ports Intel® Omni-Path Integrated Fabric (KNL-F Only) On-package 50 GB/s total bi-directional BW Common with Grantley PCH 1S (no QPI/KTI) 2x 512b VPU per core (Vector Processing Units) Based on Intel® Atom™ processor (Silvermont) with many HPC enhancements • Deep out-of-order buffers • Gather/scatter in hardware • Improved branch prediction • 4 threads/core • High cache bandwidth and more
  7. 7. 7 Modernização de código em processadores Xeon® e Xeon Phi™ Identificando oportunidades de otimização - Vetorização
  8. 8. Identificando oportunidades de otimização Foco deste seminário: Modernização de código 8 Composer Edition Threading design & prototyping Parallel performance tuning Memory & thread correctness Professional Edition Intel® C++ and Fortran compilers Parallel models (e.g., OpenMP*) Optimized libraries Multi-fabric MPI library MPI error checking and tuning Cluster EditionHPC Cluster MPI Messages Vectorized & Threaded Node Otimização em um único “nó” de processamento Vetorização & Paralelismo
  9. 9. 9 Código C/C++ ou Fortran Thread 0 / Core 0 Thread 1/ Core1 Thread 2 / Core 2 Thread 12 / Core12 ... Thread 0/Core0 Thread 1/Core1 Thread 2/Core2 Thread 244 /Core61 . . . 128 Bits 256 Bits Vector Processor Unit por Core Vector Processor Unit por Core Paralelismo (Multithreading) Vetorização 512 Bits Identificando oportunidades de otimização Foco deste seminário: Modernização do código
  10. 10. Identificando oportunidades de otimização Recapitulando o que é vetorização / SIMD 10 for (i=0;i<=MAX;i++) c[i]=a[i]+b[i]; + c[i+7] c[i+6] c[i+5] c[i+4] c[i+3] c[i+2] c[i+1] c[i] b[i+7] b[i+6] b[i+5] b[i+4] b[i+3] b[i+2] b[i+1] b[i] a[i+7] a[i+6] a[i+5] a[i+4] a[i+3] a[i+2] a[i+1] a[i] Vector - Uma instrução - Oito operações + C B A Scalar - Uma instrução - Uma operação • O que é e ? • Capacidade de realizar uma operação matemática em dois ou mais elementos ao mesmo tempo. • Por que Vetorizar ? • Ganho substancial em performance !
  11. 11. Identificando oportunidades de otimização Vetorização dentro do “core” Código de exemplo - Black-Scholes Pricing Code “a mathematical model of a financial market containing certain derivative investment instruments. “ Exemplo retirado do livro “High Performance Parallelism Pearls” Código fonte: http://lotsofcores.com/pearls.code Artigo sobre otimização deste método https://software.intel.com/en-us/articles/case-study-computing-black-scholes-with-intel- advanced-vector-extensions 11
  12. 12. 12 Facilidade de Uso Ajuste Fino Intel® Math Kernel Library Array Notation: Intel® Cilk™ Plus Auto vectorization Semi-auto vectorization: #pragma (vector, ivdep, simd) C/C++ Vector Classes (F32vec16, F64vec8) Devemos avaliar três fatores:  Necessidade de performance  Disponibilidade de recursos para otimizar o código  Portabilidade do código Identificando oportunidades de otimização Maneiras de otimizar o código Intel® Data Analytics Acceleration Library
  13. 13. Identificando oportunidades de otimização Vetorização dentro do “core” • Compilar o código com parâmetro “-qopt-report[=n]” no Linux ou “/Qopt-report[:n]” no Windows . • /Qopt-report-file:vecReport.txt  Analisar relatório, encontrar dicas sobre loops não vetorizados e principal causa 13 LOOP BEGIN at ...Black-scholes-ch1902_ReferenceVersion.cpp(93,3) remark #15344: loop was not vectorized: vector dependence prevents vectorization. First dependence is shown below. Use level 5 report for details remark #15346: vector dependence: assumed OUTPUT dependence between pT line 95 and pK line 97 remark #25439: unrolled with remainder by 2 LOOP END LOOP BEGIN at ...Black-scholes-ch1902_ReferenceVersion.cpp(56,3) remark #15344: loop was not vectorized: vector dependence prevents vectorization. First dependence is shown below. Use level 5 report for details remark #15346: vector dependence: assumed ANTI dependence between pS0 line 58 and pC line 62 LOOP END Loop de inicialização de variáveis Loop dentro da função “GetOptionPrices” O código está otimizado para rodar em uma única thread ?
  14. 14. Identificando oportunidades de otimização Vetorização dentro do “core” • Rodar Intel® VTune – “General Exploration” marcar opção “Analyze memory bandwidth” • Identificar “hotspot” = função que gasta mais tempo na execução • Identificar se as funções estão vetorizadas 14
  15. 15. Identificando oportunidades de otimização Vetorização dentro do “core” Parâmetros de compilação utilizados: /GS /W3 /Gy /Zc:wchar_t /Zi /O2 /Fd"x64Releasevc110.pdb" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Qipo /Zc:forScope /Oi /MD /Fa"x64Release" /EHsc /nologo /Fo"x64Release" /Qprof-dir "x64Release" /Fp"x64ReleaseReference.pch“ Parâmetros de execução <número de elementos> <número de threads> “60000000 1” 15
  16. 16. Identificando oportunidades de otimização Vetorização dentro do “core” 16 Instruções escalares como “movsd” ou “cvtsd2ss” (“s” de scalar) estão sendo utilizadas ao invés de “vmovapd” ; “v” de AVX , “p” de packed , “d” de double SSE utiliza 128 bits ; e não 256 bits igual instruções AVX
  17. 17. Identificando oportunidades de otimização Vetorização dentro do “core” 17 O que identificamos ? • Código não está vetorizado, não utiliza instruções AVX/AVX2 de 256 bits • Compilador apontou dependência de dados • Oportunidades apontadas pelo VTune • “Back-end bound”: baixo desempenho na execução das instruções • Memory bound: aplicação dependente da troca de mensagens entre Cache – RAM • Instruções load (ram -> cache) e store ( cache -> ram ) • L1 bound: dados não são encontrados neste nível de cache • Port utilization: baixa utilização do “core” , “non-memory issues” • Funções “cdfnormf” e “GetOptionPrices” são hotspots
  18. 18. 18 Modernização de código com “semi-autovetorização”
  19. 19. Modernização de código Semi-autovetorização 19 Uso do #pragma ivdep (por enquanto utilizando apenas 1 thread/core) • Código não está vetorizado, não utiliza instruções AVX/AVX2 de 256 bits • Compilador apontou dependência de dados na linha 56 #pragma ivdep for (i = 0; i < N; i++) { d1 = (log(pS0[i] / pK[i]) + (r + sig * sig * 0.5) * pT[i]) / (sig * sqrt(pT[i])); d2 = (log(pS0[i] / pK[i]) + (r - sig * sig * 0.5) * pT[i]) / (sig * sqrt(pT[i])); p1 = cdfnormf(d1); p2 = cdfnormf(d2); pC[i] = pS0[i] * p1 - pK[i] * exp((-1.0) * r * pT[i]) * p2; } Performance – 60.000.000 elementos #pragma ivdep time = 1.886624 Código original time = 22.904422 12.1x de speedup Configuração Intel Core i5-4300 CPU 2.5 GHZ 4GB RAM Windows 8.1 x64 Intel Compiler C++ 15.0
  20. 20. Modernização de código Semi-autovetorização 20 Uso do #pragma ivdep • Entenda o que mudou rodando novamente o VTune, compare as duas versões ! Menos instruções executadas ! Menos ciclos de clock por execução ! Menos “misses” na cache L1 Melhor uso do “core”
  21. 21. Modernização de código Semi-autovetorização 21 Uso do #pragma ivdep • Entenda o que mudou rodando novamente o VTune, compare as duas versões ! Menos instruções executadas ! Menos ciclos de clock por execução ! Menos “misses” na cache L1 Melhor uso do “core”
  22. 22. Modernização de código Semi-autovetorização Uso do #pragma ivdep • Entenda o que mudou rodando novamente o VTune, compare as duas versões ! • Relatório do Compilador: análise do loop vetorizado e dicas de como vetorizar weekpdf-codigos-intel-lnccparalelismo-dia-02Black-scholes-ch1902_ReferenceVersion.cpp(63,5) ] remark #15300: LOOP WAS VECTORIZED remark #15442: entire loop may be executed in remainder remark #15448: unmasked aligned unit stride loads: 1 remark #15450: unmasked unaligned unit stride loads: 2 remark #15451: unmasked unaligned unit stride stores: 1 remark #15475: --- begin vector loop cost summary --- remark #15476: scalar loop cost: 760 remark #15477: vector loop cost: 290.250 remark #15478: estimated potential speedup: 2.560 remark #15479: lightweight vector operations: 66 remark #15480: medium-overhead vector operations: 2 remark #15482: vectorized math library calls: 5 remark #15487: type converts: 13 remark #15488: --- end vector loop cost summary --- LOOP END
  23. 23. Modernização de código Semi-autovetorização 0 5 10 15 20 BASELINE IVDEP QXAVX + IVDEP QXAVX + IVDEP + UNROLL(4) SPEEDUP OTIMIZAÇÕES “DENTRO DO CORE” – 1 THREAD 60Mi 120Mi • IVDEP • Ignora dependência entre os vetores • (QxAVX) Instruções AVX – 256 bits • Unroll ( n ) • Desmembra o loop para instruções SIMD • Link sobre unroll • Requisitos para loop ser vetorizado • Loop unrolling Configuração Intel Core i5-4300 CPU 2.5 GHZ 4GB RAM Windows 8.1 x64 Intel Compiler C++ 15.0
  24. 24. 24 Identificando oportunidades de otimização [2] Precisão numérica e alinhamento de dados
  25. 25. Identificando oportunidades de otimização Vetorização dentro do “core” – Precisão e dados alinhados LOOP BEGIN at ... Black-scholes-ch1902_ReferenceVersion.cpp(58,3) remark #15389: vectorization support: reference pS0 has unaligned access [ remark #15381: vectorization support: unaligned access used inside loop body remark #15399: vectorization support: unroll factor set to 2 remark #15417: vectorization support: number of FP up converts: single precision to double precision 1 remark #15389: vectorization support: reference pK has unaligned access [ ... Black-scholes- ch1902_ReferenceVersion.cpp(64,5) ] remark #15381: vectorization support: unaligned access used inside loop body remark #15399: vectorization support: unroll factor set to 8 remark #15417: vectorization support: number of FP up converts: single precision to double precision 1 [ ... Black-scholes-ch1902_ReferenceVersion.cpp(60,5) ] 2 oportunidades apontadas pelo Compilador ! • Redução da precisão numérica – Double (64 bits) para Single (32 bits) • Alinhamento de dados
  26. 26. Otimizando o código para precisão simples d1 = (logf(pS0[i] / pK[i]) + (r + sig * sig * 0.5f) * pT[i]) / (sig * sqrtf(pT[i])); d2 = (logf(pS0[i] / pK[i]) + (r - sig * sig * 0.5f) * pT[i]) / (sig * sqrtf(pT[i])); p1 = cdfnormf (d1); p2 = cdfnormf (d2); pC[i] = pS0[i] * p1 - pK[i] * expf((-1.0f) * r * pT[i]) * p2; d1 = (log(pS0[i] / pK[i]) + (r + sig * sig * 0.5) * pT[i]) / (sig * sqrt(pT[i])); d2 = (log(pS0[i] / pK[i]) + (r - sig * sig * 0.5) * pT[i]) / (sig * sqrt(pT[i])); p1 = cdfnormf(d1); p2 = cdfnormf(d2); pC[i] = pS0[i] * p1 - pK[i] * exp((-1.0) * r * pT[i]) * p2; 23.6x speedup vs Código original 1.4x speedup vs “AVX + Unrool + IVDEP” Identificando oportunidades de otimização Vetorização dentro do “core” – Precisão e dados alinhados
  27. 27. Otimizando o código para precisão simples 0 5 10 15 20 25 30 BASELINE IVDEP QXAVX + IVDEP QXAVX + IVDEP + UNROLL(4) ALL + REDUÇÃO DA PRECISÃO SPEEDUP OTIMIZAÇÕES “DENTRO DO CORE” – 1 THREAD 60Mi 120Mi Identificando oportunidades de otimização Vetorização dentro do “core” – Precisão e dados alinhados Configuração Intel Core i5-4300 CPU 2.5 GHZ 4GB RAM Windows 8.1 x64 Intel Compiler C++ 15.0
  28. 28. 28 Identificando oportunidades de Paralelismo (multi- threading) “Do Not Guess – Measure”
  29. 29. Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XE 29 Apesar de vetorizado (paralelismo em nível de instruções), o código está rodando em apenas uma única thread/core ! • Antes de começar a otimização no código, podemos analisar se vale a pena paraleliza- lo em mais threads ! Intel® Advisor XE • Modela e compara a performance entre vários frameworks para criação de threads tanto em processadores quanto em co-processadores • OpenMP, Intel® Cilk ™ Plus, Intel® Threading Bulding Blocks • C, C++, Fortran (apenas OpenMP) e C# (Microsoft TPL) • Prevê escalabilidade do código: relação n.º de threads/ganho de performance • Identifica oportunidades de paralelismo no código • Checa corretude do código (deadlocks, race condition)
  30. 30. Identificandooportunidades de Paralelismo Multithreads – Intel® Advisor XE 30 Passos para utilizar o Intel Advisor 1º - Inclua os headers #include "advisor-annotate.h“ 2º - Adicionar referência ao diretório “include” ; linkar lib ao projeto (Windows e Linux) Windows com Visual Studio 2012 – Geralmente localizado em “C:Program Files (x86)IntelAdvisor XEinclude” Linux - Compilando / Link com Advisor icpc -O2 -openmp 02_ReferenceVersion.cpp -o 02_ReferenceVersion -I/opt/intel/advisor_xe/include/ -L/opt/intel/advisor_xe/lib64/
  31. 31. Identificandooportunidades de Paralelismo Multithreads – Intel® Advisor XE 31 Passos para utilizar o Intel Advisor 3º - Executando o Advisor Linux $ advixe-gui & Crie um novo projeto - Interface é a mesma para Linux e Windows - No caso do Visual Studio há a opção de roda-lo de forma integrada.
  32. 32. Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XE 32 Passos para utilizar o Intel Advisor Advisor Workflow • Survey Target: analisa o código em busca de oportunidades de paralelismo • Annotate Sources: Anotações são inseridas em possíveis regiões de código paralelas • Check Suitability: Analisa as regiões paralelas anotadas, entrega previsão de ganho de performance e escalabilidade do código • Check correctness: Analisa possíveis problemas como “race conditions” e “dealocks” • Add Parallel Framework: Passo para substituir “anotações do Advisor” pelo código do framework escolhido (OpenMP, Cilk Plus, TBB, etc.)
  33. 33. Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XE Identificando “hotspots” e quais loops podem ser paralelizados
  34. 34. Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XE Inserindo as “anotações” do Advisor para executar a próxima fase: Check Suitability
  35. 35. Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XE Identificando “hotspots” e quais loops podem ser paralelizados
  36. 36. Aplicando paralelismo via OpenMP Análise de concorrência com o Intel® Vtune Código otimizado “IVDEP + AVX + UNROLL + FLOAT PRECISION” Nthreads: 1 time = 0.967425 Nthreads: 2 time = 0.569371 Nthreads: 4 time = 0.387649 Nthreads: 8 time = 0.396282 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 1 2 4 8SPEEDUP THREADS OTIMIZAÇÃO MULTI-THREAD OpenMP - 60mi Configuração Intel Core i5-4300 CPU 2.5 GHZ 4GB RAM Windows 8.1 x64 Intel Compiler C++ 15.0
  37. 37. Links úteis • Intel Developer Zone – Modern Code • Catálogo de Aplicações e Frameworks otimizados para Xeon Phi – link • Machine Learning – link • Intel Modern Code Workshops em Big Data e HPC - UNESP / Núcleo de Computação Científica – link 37
  38. 38. Intel® Xeon® Processors Intel® Xeon Phi™ Processors Intel® Xeon Phi™ Coprocessors Intel® Server Boards and Platforms Intel® Solutions for Lustre* Intel® Optane™ Technology 3D XPoint™ Technology Intel® SSDs Intel® Omni-Path Architecture Intel® True Scale Fabric Intel® Ethernet Intel® Silicon Photonics Intel® HPC Orchestrator Intel® Software Tools Intel® Cluster Ready Program Intel Supported SDVis Small Clusters Through Supercomputers Compute and Data-Centric Computing Standards-Based Programmability On-Premise and Cloud-Based Compute Memory/Storage Fabric Software Intel Silicon Photonics FuelYourInsight 38 Intel® Scalable System Framework
  39. 39. Intel® Xeon Phi™ Coprocessor Product Family Based on Intel® Many Integrated Core (MIC) Architecture 39 Per Intel’s announced products or planning process for future products 2013 Knights Corner Intel® Xeon Phi™ x100 product family • 22 nm process • Coprocessor • Over 1 TF DP Peak • Up to 61 Cores • Up to 16GB GDDR5 2016 Knights Landing The processor version of the next generation Intel Xeon Phi product family • 14 nm process • Processor & Coprocessor • Over 3 TF DP Peak • Up to 72 Cores • On Package High-Bandwidth Memory • 3x single-thread performance • Out-of-order core • Integrated Intel® Omni-Path Knights Landing Knights Landing with Fabric FUTURE Knights Hill Next generation of Intel® MIC Architecture Product Line • 10 nm process • 2nd Generation Integrated Intel® Omni-Path • In planning –
  40. 40. ©2014, Intel Corporation. All rights reserved. Intel, the Intel logo, Intel Inside, Intel Xeon, and Intel Xeon Phi are trademarks of Intel Corporation in the U.S. and/or other countries. *Other names and brands may be claimed as the property of others. 40

×