40
Próximo passo para a Computação Exascale Programando para Multi-core e Many-core Trilha Big Data Igor Freitas – Intel do Brasil [email protected]

TDC2016SP - Trilha BigData

Embed Size (px)

Citation preview

Page 1: TDC2016SP - Trilha BigData

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

Trilha Big Data

Igor Freitas – Intel do [email protected]

Page 2: TDC2016SP - Trilha BigData

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

Page 3: TDC2016SP - Trilha BigData

3

Próximo passo para a Computação Exascale

Page 4: TDC2016SP - Trilha BigData

Over 15 GF/Watt1

~500 GB/s sustained memory bandwidth with integrated on-package memory

Next Step: KNLSystems 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

PowerEfficiency

Exascale Vision

Next Step on Intel’s Path to Exascale Computing

Page 5: TDC2016SP - Trilha BigData

Intel® Xeon Phi™ Product Family x200

5

Host Processor in Groveport PlatformSelf-boot Intel® Xeon Phi™ processor

Ingredient of Grantley PlatformsRequires Intel® Xeon® processor host

with integrated Intel® Omni-Path Fabric

Intel® Xeon Phi™ ProcessorIntel® Xeon Phi™ Coprocessor x200

Page 6: TDC2016SP - Trilha BigData

6

Knights Landing (KNL) Architectural Diagram

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

DMIWellsburgPCH

Up to 72 cores

PCIe Gen3

x36 (KNL)x4 (KNL-

F)

MCDRAM MCDRAM MCDRAM MCDRAM

MCDRAM MCDRAM MCDRAM MCDRAM

Micr

o-Co

ax C

able

(IF

P)

Micr

o-Co

ax C

able

(IF

P)

Connector

HFI

2 VPU

1MB

L2

Core

HUB 2 VPU

Core

TILEDDR4

DDR4

DDR4

Up to 72 cores2D 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 DDR4Up to 384GB

2 ports Intel® Omni-Path Integrated Fabric (KNL-F Only)On-package50 GB/s total bi-directional BW

Common with Grantley PCH1S (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

Page 7: TDC2016SP - Trilha BigData

7

Modernização de código em processadores Xeon® e Xeon Phi™

Identificando oportunidades de otimização - Vetorização

Page 8: TDC2016SP - Trilha BigData

8

Identificando oportunidades de otimizaçãoFoco deste seminário: Modernização de código

Composer Edition

Threading design &

prototyping

Parallel performance

tuning

Memory & thread

correctness

Professional Edition

Intel® C++ and Fortran

compilersParallel 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

Page 9: TDC2016SP - Trilha BigData

9

Código C/C++ ou Fortran

Thread 0 / Core 0

Thread 1/ Core1Thread 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çãoFoco deste seminário: Modernização do código

Page 10: TDC2016SP - Trilha BigData

Identificando oportunidades de otimizaçãoRecapitulando 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

AScalar

- 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 !

Page 11: TDC2016SP - Trilha BigData

11

Identificando oportunidades de otimizaçãoVetorizaçã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

Page 12: TDC2016SP - Trilha BigData

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çãoManeiras de otimizar o código

Intel® Data Analytics Acceleration Library

Page 13: TDC2016SP - Trilha BigData

13

Identificando oportunidades de otimizaçãoVetorizaçã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

causaLOOP BEGIN at ...Black-scholes-ch19\02_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-ch19\02_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 62LOOP 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 ?

Page 14: TDC2016SP - Trilha BigData

14

Identificando oportunidades de otimizaçãoVetorizaçã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

Page 15: TDC2016SP - Trilha BigData

15

Identificando oportunidades de otimizaçãoVetorização dentro do “core”

Parâmetros de compilação utilizados:

/GS /W3 /Gy /Zc:wchar_t /Zi /O2 /Fd"x64\Release\vc110.pdb" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Qipo /Zc:forScope /Oi /MD /Fa"x64\Release\" /EHsc /nologo /Fo"x64\Release\" /Qprof-dir "x64\Release\" /Fp"x64\Release\Reference.pch“

Parâmetros de execução<número de elementos> <número de threads>“60000000 1”

Page 16: TDC2016SP - Trilha BigData

16

Identificando oportunidades de otimizaçãoVetorização dentro do “core”

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

Page 17: TDC2016SP - Trilha BigData

17

Identificando oportunidades de otimizaçãoVetorização dentro do “core”

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

Page 18: TDC2016SP - Trilha BigData

18

Modernização de código com “semi-autovetorização”

Page 19: TDC2016SP - Trilha BigData

19

Modernização de códigoSemi-autovetorização

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 originaltime = 22.904422

12.1x de speedup

ConfiguraçãoIntel Core i5-4300 CPU 2.5 GHZ4GB RAMWindows 8.1 x64Intel Compiler C++ 15.0

Page 20: TDC2016SP - Trilha BigData

20

Modernização de códigoSemi-autovetorização

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”

Page 21: TDC2016SP - Trilha BigData

21

Modernização de códigoSemi-autovetorização

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”

Page 22: TDC2016SP - Trilha BigData

Modernização de códigoSemi-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

week\pdf-codigos-intel-lncc\paralelismo-dia-02\Black-scholes-ch19\02_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

Page 23: TDC2016SP - Trilha BigData

Modernização de códigoSemi-autovetorização

Basel ine IVDEP QxAVX + IVDEP

QxAVX + IVDEP +

UNROLL(4)

05

101520

Otimizações “dentro do core” – 1 thread

60Mi 120Mi

Spee

dup

• 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 vetoriza

do• Loop unrolling

ConfiguraçãoIntel Core i5-4300 CPU 2.5 GHZ4GB RAMWindows 8.1 x64Intel Compiler C++ 15.0

Page 24: TDC2016SP - Trilha BigData

24

Identificando oportunidades de otimização [2]

Precisão numérica e alinhamento de dados

Page 25: TDC2016SP - Trilha BigData

Identificando oportunidades de otimizaçãoVetorização dentro do “core” – Precisão e dados alinhados

LOOP BEGIN at ... Black-scholes-ch19\02_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-

ch19\02_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-ch19\02_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

Page 26: TDC2016SP - Trilha BigData

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çãoVetorização dentro do “core” – Precisão e dados alinhados

Page 27: TDC2016SP - Trilha BigData

Otimizando o código para precisão simples

0102030

Otimizações “dentro do core” – 1 thread

60Mi 120Mi

Spee

dup

Identificando oportunidades de otimizaçãoVetorização dentro do “core” – Precisão e dados alinhados

ConfiguraçãoIntel Core i5-4300 CPU 2.5 GHZ4GB RAMWindows 8.1 x64Intel Compiler C++ 15.0

Page 28: TDC2016SP - Trilha BigData

28

Identificando oportunidades de Paralelismo (multi-threading)

“Do Not Guess – Measure”

Page 29: TDC2016SP - Trilha BigData

29

Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XE

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)

Page 30: TDC2016SP - Trilha BigData

30

Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XEPassos 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)\Intel\Advisor XE\include”

Linux - Compilando / Link com Advisoricpc -O2 -openmp 02_ReferenceVersion.cpp -o 02_ReferenceVersion -I/opt/intel/advisor_xe/include/ -L/opt/intel/advisor_xe/lib64/

Page 31: TDC2016SP - Trilha BigData

31

Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XE

Passos para utilizar o Intel Advisor

3º - Executando o AdvisorLinux$ 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.

Page 32: TDC2016SP - Trilha BigData

32

Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XE

Passos para utilizar o Intel AdvisorAdvisor 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.)

Page 33: TDC2016SP - Trilha BigData

Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XE

Identificando “hotspots” e quais loops podem ser paralelizados

Page 34: TDC2016SP - Trilha BigData

Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XE

Inserindo as “anotações” do Advisor para executar a próxima fase: Check Suitability

Page 35: TDC2016SP - Trilha BigData

Identificando oportunidades de Paralelismo Multithreads – Intel® Advisor XE

Identificando “hotspots” e quais loops podem ser paralelizados

Page 36: TDC2016SP - Trilha BigData

Aplicando paralelismo via OpenMPAnálise de concorrência com o Intel® VtuneCódigo otimizado “IVDEP + AVX + UNROLL +FLOAT PRECISION”Nthreads: 1 time = 0.967425Nthreads: 2time = 0.569371Nthreads: 4time = 0.387649Nthreads: 8time = 0.396282

1 2 4 811.21.41.61.8

22.22.42.6

Otimização MULTI-THREAD

OpenMP - 60mi

threadsSp

eedu

p

ConfiguraçãoIntel Core i5-4300 CPU 2.5 GHZ4GB RAMWindows 8.1 x64Intel Compiler C++ 15.0

Page 37: TDC2016SP - Trilha BigData

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

Page 38: TDC2016SP - Trilha BigData

Intel® Xeon® ProcessorsIntel® Xeon Phi™ Processors

Intel® Xeon Phi™ CoprocessorsIntel® Server Boards and Platforms

Intel® Solutions for Lustre*Intel® Optane™ Technology

3D XPoint™ TechnologyIntel® SSDs

Intel® Omni-Path ArchitectureIntel® True Scale Fabric

Intel® EthernetIntel® Silicon Photonics

Intel® HPC OrchestratorIntel® Software Tools

Intel® Cluster Ready ProgramIntel Supported SDVis

Small Clusters Through SupercomputersCompute and Data-Centric ComputingStandards-Based ProgrammabilityOn-Premise and Cloud-Based

Compute Memory/Storage

Fabric Software

Intel Silicon Photonics

Fuel Your Insight

38

Intel® Scalable System Framework

Page 39: TDC2016SP - Trilha BigData

39

Intel® Xeon Phi™ Coprocessor Product FamilyBased on Intel® Many Integrated Core (MIC) Architecture

Per Intel’s announced products or planning process for future products

2013Knights CornerIntel® Xeon Phi™ x100 product family• 22 nm process• Coprocessor• Over 1 TF DP Peak• Up to 61 Cores• Up to 16GB GDDR5

2016KnightsLandingThe processor versionof the next generationIntel Xeon Phi productfamily• 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 Landingwith Fabric

FUTUREKnights HillNext generation of Intel® MIC Architecture Product Line• 10 nm process• 2nd Generation Integrated

Intel® Omni-Path• In planning –

Page 40: TDC2016SP - Trilha BigData

©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