SlideShare una empresa de Scribd logo
1 de 55
Descargar para leer sin conexión
Computação Paralela
& Otimização
Vetorização e Multithreading

Igor José F. Freitas

igor.freitas@intel.com
Principais pontos abordados
Introdução ao Coprocessador Intel® Xeon® Phi™
Vetorização de código (Atom® ao Xeon® Phi™ )
Multithreading
– OpenMP

2
Agenda

Introdução
Coprocessador Xeon® Phi™

Multithreading em Memória Compartilhada
Vetorização
Conclusões
Dúvidas
3
Introdução
Necessidade de maior poder computacional em diversos
setores
– Indústria & Universidades
•
•
•
•
•

Previsão do tempo, clima
Imagens médicas
Óleo & Gás
Bioinformática
Simulações em diversas áreas
– Aeronáutica, automobilística, mecânica, financeira, telecomunicações, etc.

– Aplicações mais rápidas que consomem menos energia

4

• Usuários de Smpartphones, Ultrabooks e Tablets não toleram
aplicativos “famintos” por bateria
• Otimizar o código leva ao uso ótimo da CPU, portanto, gastando
menos recursos do dispositivo
Introdução
Como ganhar desempenho ?
– Utilizar 100% a capacidade do seu processador !
Processadores Multi-core e
Many-core
Unidade de Processamento
Vetorial

5

Multithreading

Vetorização
Introdução
SIMD Instruction

Processor

AVX-512
CORE-AVX2

4th Generation Intel® Core™ Processors

CORE-AVX-I

3rd Generation Intel® Core™ i7 Processors ; 3rd Generation Intel® Core™ i5 Processors

AVX

2nd Generation Intel® Core™ i7 Processors ; 2nd Generation Intel® Core™ i5 Processors ; 2nd
Generation Intel® Core™ i3 Processors ; Intel® Xeon® Processor E5 Family ;Intel® Xeon® Processor E3
Family

SSE4.2

Previous Generation Intel® Core™ i7 Processors ; Previous Generation Intel® Core™ i5 Processors ;
Previous Generation Intel® Core™ i3 Processors ; Intel® Xeon® 55XX series ; Intel® Xeon® 56XX series
Intel® Xeon® 75XX series ; Intel® Xeon® Processor E7 Family

ATOM_SSE4.2

Intel® Atom™ processors that support Intel® SSE4.2 instructions.

SSE4.1

Intel® Xeon® 74XX series ; Quad-Core Intel® Xeon 54XX, 33XX series ; Dual-Core Intel® Xeon 52XX,
31XX series ; Intel® Core™ 2 Extreme 9XXX series ; Intel® Core™ 2 Quad 9XXX series ; Intel® Core™ 2
Duo 8XXX series ; Intel® Core™ 2 Duo E7200

SSSE3

Quad-Core Intel® Xeon® 73XX, 53XX, 32XX series ; Dual-Core Intel® Xeon® 72XX, 53XX, 51XX, 30XX
series ; Intel® Core™ 2 Extreme 7XXX, 6XXX series ; Intel® Core™ 2 Quad 6XXX series ; Intel® Core™ 2
Duo 7XXX (except E7200), 6XXX, 5XXX, 4XXX series ; Intel® Core™ 2 Solo 2XXX series ; Intel® Pentium®
dual-core processor E2XXX, T23XX series

ATOM_SSSE3

Intel® Atom™ processors

SSE3

Dual-Core Intel® Xeon® 70XX, 71XX, 50XX Series ; Dual-Core Intel® Xeon® processor (ULV and LV) 1.66,
2.0, 2.16 ; Dual-Core Intel® Xeon® 2.8 ; Intel® Xeon® processors with SSE3 instruction set support
Intel® Core™ Duo ; Intel® Core™ Solo ; Intel® Pentium® dual-core processor T21XX, T20XX series ;
Intel® Pentium® processor Extreme Edition ; Intel® Pentium® D ; Intel® Pentium® 4 processors with
SSE3 instruction set support

SSE2
6

Intel® Xeon Phi™ Prodruct Family

Intel® Xeon® processors ; Intel® Pentium® 4 processors ; Intel® Pentium® M

IA32

Intel® Pentium® III Processor ; Intel® Pentium® II Processor ; Intel® Pentium® Processor
Introdução
Processamento Vetorial
– Instruções SIMD

Histórico das instruções SIMD – Processadores Intel®
7
Introduçã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 !

A

+
B

Scalar
- Uma Instrução
- Uma Operação
Matemática

C

for (i=0;i<=MAX;i++)
c[i]=a[i]+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]

+

b[i+7] b[i+6] b[i+5] b[i+4] b[i+3] b[i+2] b[i+1] b[i]
c[i+7]

c[i+6]

c[i+5]

c[i+4]

c[i+3]

c[i+2]

c[i+1]

Vector
- Uma Instrução
- Oito operações
matemáticas1

c[i]

1. Número de operações por instrução varia de acordo com a instrução SIMD utilizada (tamanho da instrução e operando)
8
Introdução
Multithreading
– Número de cores/threads/processador era de
uma unidade até 2004
– Atualmente os processadores possuem cada vez
mais cores/threads
– Ferramentas que facilitam uso de multithreading
– Performance não é mais orientada a alta
frequência do processador

9
Introdução
Computação Paralela & Otimização
– Aplicada em:

• Clusters de Alto Desempenho (HPC)
– Xeon® & Xeon® Phi™

• Microservers (Avotom – Atom ™)

– Intel® Atom™ processor C2000 (Avotom )

• Desktops

– Intel ® Core ™

• Mobile (Smartphones & Tablets)
– Bay Trail ™, Clover Trail+ ™

10
Coprocessador Intel® Xeon® Phi™
Do Multi-core para Many-Core
Muitas threads e “largos” registradores vetorias

Coprocessador Intel® Xeon® Phi™™ (KNC chip) Bottom

Coprocessador Intel® Xeon® Phi™
(KNC chip)
11

Servidor com 8 Coprocessadores Intel® Xeon® Phi™
(passive-cooling solution)
Coprocessador Intel® Xeon® Phi™
Contectado ao slot PCI-e
57+ cores por die
VPU / Core de 64-bits e registradores de 512-bit
Cada Core possuie 4 hardware threads
Processamento “In order”
L2 de 512KB/Core fully coherent (Least Recently
Used) 31MB para todos os cores
L1 de 32KB

12
Coprocessador Intel® Xeon® Phi™
Portabilidade do código
– Xeon® Phi™ é x86
– Aplicações existentes C/C++, Fortran pode ser
portadas para Xeon® Phi™
– Xeon® e Xeon® Phi™ suportamo mesmo modelo
de paralelismo
– Possuem as mesmas Ferramentas de
desenvolvimento e execução

13
Coprocessador Intel® Xeon® Phi™
Ferramentas
– Compiladores: Intel® C/C++ e Intel® Fortran
– Otimização: Intel® VTune Amplifier XE e Intel®
Trace Analyzer and Collector (ITAC)
– Bibliotecas matemáticas: Intel® Math Kernel
Library (MKL)
– Bibliotecas de execução paralela: Intel® MPI e
Intel® OpenMP

14
Arquitetura Xeon® Phi™

Integração com o Host
– Perspectiva do Desenvolvedor:
• Cada Xeon® Phi™ é um “nó” Linux
• Acessível via SSH (Secure Shell Protocol)
• Suporte a NFS (Network File Sharing Protocol)

– MPSS – MIC Plataform Software Stack
• Drivers , Daemons, Comand Line e
Ferramentas Gráficas
• Boot, Load Linux, Enable node
15
Coprocessador Intel® Xeon® Phi™

• Computação Heterogênea
Xeon® Multi-Core
Centric

Multi-Core
Hosted
Aplicações Seriais
e Paralelas

16

Offload
Aplicações com
etapas
paralelas

MIC – Many Core Centric

Symmetric
Load
Balance

Many-Core
Hosted
Aplicações
Massivamente
Paralelas
Arquitetura Xeon® Phi™
MIC Plataform Software Stack
Linux/Windows Host

Intel® Xeon® Phi™ Coprocessor
SSH Session

Offload
Aplication

SSH

System Level Code

System Level Code

Coprocessor
Communication and applaunching support

MPSS
PCI-e Bus
Windows/
Linux OS
17

Offload
Aplication

Native
Aplication

PCI-e Bus

Linux uOS
Multithreading em Memória
Compartilhada

18
Multithreading em Memória Compartilhada

Memória compartilhada




Comunicação através de escrita e leitura de
variáveis compartilhadas



19

Todos os processos compartilham um único espaço
de memória

SMPs – Symmetric Multiprocessors

Fácil programação

Overhead na comunicação entre processador
e memória
Multithreading em Memória Compartilhada



Difícil de escalar, pois quanto mais
processadores, mais overhead de comunicação

CPU[0]

CPU[1]

CPU[2]
I/O System

RAM

20
Multithreading em Memória Compartilhada
Facilidade de Uso
Threading
Intel® Math Kernel Library MPI
Intel® Threading Building Blocks
Intel® Cilk™ Plus
OpenMP
Pthreads

Ajuste Fino
21
Multithreading em Memória Compartilhada
OpenMP

Fortran 2008

Intel® TBB

Intel® Cilk Plus

Site

openmp.org

fortranwiki.org

opentbb.org

cilkplus.org

Lançamento

1997

2010

2006

2010

Linguagens

Fortan, C, C++

Fortran

C++

C/C++

Descrição

Diretivas do
Compilador (pragmas),
runtime library

Extensão de
linguagem para
adicionar paralelismo
via

Extensão da linguagem para
adicionar paralelismo via
templates

Extensão da linguagem
para
multithreading/vetorização

Método

Pragmas

Keywords

Templates

Keywords, atributos e
pragmas

Especificação

By OpenMP

ISO/IEC 1539-1:2010

Open Source iniciado pela Intel®

Especificação aberta
iniciada pela Intel®

Programação
paralela

Loops paralelos e algoritmos,
alocação de memória

Loops paralelos,
vetorização, array
notations, elemental
functions, compatível com
TBB

DO CONCURRENT,
Coarrays

Independente de compilador,
uso em vários tipos de
aplicações, alocação de
memória, suporte a outros
modelos de programação
paralela

Garantia de performance
em loadbalance,
vetorização, array notations
e elemental functions

Funcionalidades

Funcionalidades
Únicas
22

Loops paralelos, tasks,
locks

Amplamente adotada
pela comunidade HPC
Multithreading em Memória Compartilhada
OpenMP

API Padrão para memória compartilhada
Consiste em:
– Diretivas/Pragmas
– Runtime Library
• omp_set_num_threads(n)

– Variáveis de Ambiente
• OMP_NUM_THREADS

Importante:
– Uma Thread OpenMP para cada Core (ideal)
• Permite mais de uma thread/core

23
Multithreading em Memória Compartilhada
OpenMP

Execução de um programa OpenMP
Master Thread

#pragma omp parallel
Thread pool

Thread 1

Thread 2

Thread n-1

Thread n

#pragma omp for
Cada thread espera as outras
terminarem o trabalho – “wait state”

24

Master Thread
Multithreading em Memória Compartilhada
OpenMP

Paralelizando um Loop

1.
2.
3.
4.
5.

Thread 1
res[0] = foo();
res[1] = foo();
res[2] = foo();
res[3] = foo();
25

double res[200]; int i;
#pragma omp parallel for
for (i=0;i< 200; i++) {
res[i] = foo();
}

Thread 2
res[4] = foo();
res[5] = foo();
res[6] = foo();
res[7] = foo();

...

Thread N
res[MAX-3] = foo();
res[MAX-2] = foo();
res[MAX-1] = foo();
res[MAX] = foo();
Multithreading em Memória Compartilhada
OpenMP

Scheduling mode
– static :
• Distribui tasks entre as threads antes do início do loop .
Menor overhead de comunicação, porém pode perder
performance no load-balance

– dynamic:
• Distribui parte da carga no início, e durante o loop as tasks
são distribuídas de acordo com a disponibilidade

– guided:
• Similar ao “dynamic”, porém a granularidade aumenta
assim que a carga de processamento diminui. Pode resultar
melhor load-balance
26
Multithreading em Memória Compartilhada
OpenMP

Scheduling mode
– Quanto maior o tamanho do bloco, menor
overhead, porém pior loadbalance
– Quanto menor o tamanho do bloco, maior
overhead, porém melhor loadbalance
Especificando modo “dynamic” e bloco com tamanho 4
#pragma omp parallel for schedule(dynamic, 4)
// ...

– Ponto de partida para tamanho do bloco:
• > 1, menor que Num. Loops/Parallel Threads

27
Multithreading em Memória Compartilhada
OpenMP

Reduction / Schedule
1.
2.
3.
4.
5.
6.
7.
8.

void SumColumns(const int m, const int n, long* M, long* s, char*
method){
for (int i = 0; i < m; i++) {
long sum = 0;
// Distribui cada linha entre as threads
// reduction para somar todas as colunas
#pragma omp parallel for schedule(guided)
reduction(+: sum)
for (int j = 0; j < n; j++)
sum += M[i*n+j];

9. s[i] = sum;
10. }
28
Task Parallelism em Memória Compartilhada
OpenMP

Performance – OpenMP Scheduling modes - Jacobi solver
29
Vetorização

Como Vetorizar ?

– Cinco possíveis abordagens:
• Bibliotecas matemáticas

– Ex.: Intel® Math Kernel Library (MKL)

• Auto vetorização

– Trabalho a cargo do Compilador

• Diretivas/Pragmas
–
–
–
–

SIMD
IVDEP
VECTOR E NOVECTOR
Intel® Intrinsics

• Array Notation – Cilk Plus

– Notação vetorial na linguagem de programação explicitando a
vetorização

• Elemental Functions – Cilk Plus

– Vetorizar código existente mantendo sua modularidade

30
Vetorização

Como Vetorizar ?

Facilidade de Uso
Vectors
Intel® Math Kernel Library
Auto vectorization
Array Notation: Intel® Cilk™ Plus
Semi-auto vectorization:
#pragma (vector, ivdep, simd)
C/C++ Vector Classes
(F32vec16, F64vec8)

Ajuste Fino
31
Vetorização

Auto Vetorização

Ajudando o compilador a vetorizar
– Evitar “loop unrolling” manual pois:
• Atrela otimização a arquitetura de hardware (Vector Processor Unit)
• Prejudica a leitura do código

src1
[0]

src1
[1]

src1
[2]

src1
[3]

*
src2

acc1

32

acc2

acc3

acc4

acc
Vetorização

Auto Vetorização

Unrolling Loop
1.
2.
3.
4.
5.
6.
7.
8.

double acc1 = 0, accu2 = 0, acc3 = 0, acc4 =0;
for (i=0; i<NUM; i+=4) {
acc1 = src1[i+0] * src2 + acc1;
acc2 = src1[i+1] * src2 + acc1;
acc3 = src1[i+2] * src2 + acc1;
acc4 = src1[i+3] * src2 + acc1;
}
accu = acc1 + acc2 + acc3 + acc4;

Forma simplificada
double acc = 0;
for (i=0; i<NUM; i+=4) {
accu = src1[i]*src2 + accu;
}
33
Vetorização

Auto Vetorização

Requisitos para um loop ser vetorizado
• Em loops encadeados, o loop mais interno será vetorizado
• Deve conter apenas blocos básicos, ex.: uma única linha de código sem condições
(if statements) ou saltos (go to)
• Quantidade de iterações do loop deve ser conhecida antes de sua execução,

mesmo que em tempo de execução
• Sem dependências entre os elementos a serem calculados
• GAP – Guided Autoparallelization (Intel® Compiler “-guide” ) pode ajudar

Loop Não Vetorizável – Dependência sobre a[i-1]
for (i=1; i<MAX; i++) {
d[i] = e[i] – a[i-1];
a[i] = b[i] + c[i];
}
34
Vetorização

Intel® C++ Intrinsic

O que é Intel® C++ Intrinsic ?
– Provê acesso a ISA (Instruction Set Architecture)
através de código C/C++ ao invés de código
Assembly
– Ganho de performance próximo a códigos Assembly
com a facilidade de C/C++

– Vetorização – Extensões SIMD (Simple Instructions
Multiple Data)
35
Vetorização

Intel® C++ Intrinsic

SSE Intrinsics

MIC Intrinsics
36
Vetorização

Diretivas & Parâmetros do Compilador

– Nem mesmo o mais fantástico compilador consegue
vetorizar automaticamente o código
– Ponteiros em C/C++ dificultam a vetorização
• Dois ponteiros podem apontar para o mesmo endereço de
memória

– Diretivas SIMD:
• Permissão ao compilador vetorizar
• Responsabilidade da vetorização é do programador
37
Vetorização

Diretivas & Parâmetros do Compilador
Diretivas:

#pragma simd [clause[ [,] clause] ... ] : guia o compilador para
casos onde a auto-vetorização não é possível
Atributos padrão:
VECTORLENGTH N : tamanho do vetor (2, 4, 8 ou 16)
VECTORLENGTHFOR (data-type) : tamanho_vetor/sizeof(type)
PRIVATE (VAR1[, VAR2]...) : variável privada para cada iteração do loop
FIRSTPRIVATE (VAR1[, VAR2]...) : broadcast do valor inicial a todas as outras instâncias para cada iteração
LASTPRIVATE (VAR1[, VAR2]...) : broadcast do valor final a todas as outras instâncias
LINEAR (var1:step [, var2:step2]...) : incrementa número de steps para cada variável em um loop, unit-stride
vector
REDUCTION (oper:var1[, var2]...) : Aplica operação de redução (+, *, -, AND, OR, EQV, NEQV) nas variáveis
indicadas
ASSERT : Direciona o compilador a produzir um erro ou um warning quando a vetorização falha

38
Vetorização

Diretivas & Parâmetros do Compilador

Alinhamento de dados
#pragma vector aligned | unaligned : comunica ao compilador que os dados
estão alinhados
__assume_aligned keyword : elimita checagem se os dados estão alinhados,
porém e´specífico para cada vetor
__attribute__((aligned(64)) ou __mm_malloc() / __mm__free() : alocação
estática e dinâmica de dados alinhados
-opt-assume-safe-padding : completa os vetores com bytes extras para que
fiquem múltiplos do tamanho da cache. Evita “loop sobressalente”

39
Vetorização

Diretivas & Parâmetros do Compilador

Removendo “Pointer Aliasing”

#pragma ivdep

: Ignora dependências de variáveis

“restrict” ou “-restrict (argumento de linha de
comando) : similar a “ivdep” , informa que determinada
variável não possui restrições/dependências
“Streaming Store”
#pragma vector nontemporal | temporal ou “-optstreaming-store always” : uso ótimo do cache em casos de write-only
onde os dados não precisam ser armazenados na cache, e sim diretamente na
memória. Usar “vector aligned” antes.
40
Vetorização

Diretivas & Parâmetros do Compilador

#pragma loop count : Informa ao compilador o número de loops . Útil para
melhores predições de vetorização

-vec-report[n] : relatório do que foi e do que pode ser vetorizado . “n” determina
o nível de detalhes

-guide

: GAP – Guided Auto-parallelization . Sugestões de como vetorizar os loops

-O[n] : Nível de otimização O2 (default) já inclui auto-vetorização
-x[code] : Otimiza as instruções de acordo com a arquitetura do processador. Ex.: xAVX , -xSSE2

#pragma novector : Instrui o compilador a não vetorizar. Útil em loops com
muitas condições (ifs)

#pragma vector always : força vetorização automática independente da
heurística do compilador
41
Vetorização

Elemental Functions

Possibilita chamar versão vetorizada da
função escalar

Excelente em casos onde as funções estão
implementadas em biblioteca de terceiros

42
Vetorização

Elemental Functions

Lib X
float
my_simple_add(float
float x2){
return x1 + x2;
}

x1,

Elemental Function
__attribute__(vector) float my_simple_add(float x1, float x2);

// ...em outro arquivo de código
#pragma simd
for (int i=0; i < N, ++i) {
output[i] = my_simple_add(inputa[i], inputb[i]);
}

43

Ou
my_simple_add(inputa[:], inputb[:]);
Vetorização
Array Notation

Extensões C++ Intel® Cilk Plus para
operações com vetores

Indica paralelismo para vetorização
automática

44
Vetorização
Array Notation
A[:] += B[:];

// todo o vetor é computado

A[0:16] += B[32:16];

// A(0 até 15) + B(32 até 47)

A[0:16:2] += B[32:16:4]

// A(0, 2, 4, ...30) + B(32, 36, 38, ...

92)

Compatibilidade com compiladores não-Intel
#ifdef __INTEL_COMPILER
A[:] += B[:];
#else
for (int i=0; i<16; i++)
A[i] += B[i];
#endif

45
Vetorização
Exemplos

Diretivas SIMD
Adição de vetores – C/C++
1.__declspec(align(16)) float a[MAX], b[MAX], c[MAX];
2.#pragma simd
3.for (i=0; i<MAX; i++)
4.

c[i] = a[i]+b[i];

Array Notation Cilk Plus
Adição de vetores – C/C++ - Dados alinhados
1.__declspec(align(16)) float a[MAX], b[MAX], c[MAX];
2.c[i:MAX] = a[i:MAX]+b[i:MAX];
46
Vetorização
Exemplos

Array Notation Cilk Plus
Adição de vetores – C/C++ - Dados alinhados
1.__declspec(align(16)) float a[MAX], b[MAX], c[MAX];
2.__declspec(vector(uniform(B,C), linear(i:1)))

3.float foo(float* B, float *C, int i){
4.

return B[i]+C[i];

5.}
6....
7.for (i=0; i<MAX; i++) {
8.
9.}
47

a[i] = foo(b,c,i);
Conclusões

Fatos
– Há muita computacional na indústria e nas
universidades
– No mundo desktop e mobile há muito espaço
para otimizações
– Existem ferramentas que facilitam a
programação paralela
– Multithreading e Vetorização são suportados
pelos processadores atuais

48
Conclusões

Técnicas de Otimização
– Multithreading
• Explorar multiplos cores por processador, múltiplas
threads por core
• Já passou da fase de tendência, hoje é realidade !

– Vetorização
• Outra forma de paralelismo “data paralelism”
• Processamento Vetorial disponível em smpartphones,
ultrabooks e servidores

49
Links Importantes
Intel®® Xeon® Phi™™ COPROCESSOR DEVELOPER SITE

•

Arquitetura, setup e recursos de
programação

•

Treinamentos

•

Estudos de caso

•

Informações sobre as Ferramentas

•

Suporte através da comunidade
(fóruns de discussão, artigos, etc.)

http://software.intel.com/mic-developer/

50
Links Importantes

Vetorização:
• http://software.intel.com/en-us/intel-vectorization-tools

Treinamentos:
• An Overview of Programming for Intel®® Xeon®® processors and Intel®® Xeon® Phi™™ coprocessors
• Intel®® Xeon® Phi™™ Coprocessor Developer’s Quick Start Guide
• http://software.intel.com/mic-developer
• The Training tab has Beginner and Advanced workshop videos, and links to past/future webinars

• The Tools & Downloads tab has a link to Intel® and Third Party Tools and Libraries
• This page has links to available beta and production for developers

51
Links Importantes
Ferramentas de Desenvolvimento Intel® para o
coprocessador Intel® Xeon® Phi™ coprocessor
Intel® Advisor XE 2013
Informações: software.intel.com/en-us/intel-advisor-xe
Video de demonstração: insidehpc.com/2012/11/30/demo-intel-advisor-xe-2013-transforms-code-for-intel-Xeon®-phi-at-sc12/

Intel® Parallel Studio XE
Informações: software.intel.com/en-us/intel-parallel-studio-xe
Video de demonstração: insidehpc.com/2012/11/28/video-intel-parallel-studio-xe-demo-at-sc12/

Intel® Cluster Studio XE
Informações: software.intel.com/en-us/intel-cluster-studio-xe
Video de demonstração: insidehpc.com/2012/11/29/intel-cluster-studio-xe-demo-at-sc12/

James Reinders on Exploiting Parallelism
in the new Intel®® Xeon® Phi™™ coprocessors
youtube.com/watch?v=g9ehO6duNuE&list=UUH5Rft7GYM8KZpxA-4Ohihg&index=9&feature=plcp

52
Nota sobre Otimização
Legal Disclaimer
• INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR
OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND
CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED
WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A
PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT.
• A "Mission Critical Application" is any application in which failure of the Intel Product could result, directly or indirectly, in personal injury or
death. SHOULD YOU PURCHASE OR USE INTEL'S PRODUCTS FOR ANY SUCH MISSION CRITICAL APPLICATION, YOU SHALL INDEMNIFY AND
HOLD INTEL AND ITS SUBSIDIARIES, SUBCONTRACTORS AND AFFILIATES, AND THE DIRECTORS, OFFICERS, AND EMPLOYEES OF EACH,
HARMLESS AGAINST ALL CLAIMS COSTS, DAMAGES, AND EXPENSES AND REASONABLE ATTORNEYS' FEES ARISING OUT OF, DIRECTLY OR
INDIRECTLY, ANY CLAIM OF PRODUCT LIABILITY, PERSONAL INJURY, OR DEATH ARISING IN ANY WAY OUT OF SUCH MISSION CRITICAL
APPLICATION, WHETHER OR NOT INTEL OR ITS SUBCONTRACTOR WAS NEGLIGENT IN THE DESIGN, MANUFACTURE, OR WARNING OF THE
INTEL PRODUCT OR ANY OF ITS PARTS.
• Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or
characteristics of any features or instructions marked "reserved" or "undefined". Intel reserves these for future definition and shall have no
responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change
without notice. Do not finalize a design with this information.
• The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from
published specifications. Current characterized errata are available on request.
• Intel processor numbers are not a measure of performance. Processor numbers differentiate features within each processor family, not across
different processor families. Go to: http://www.intel.com/products/processor_number.
• Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order.
• Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1800-548-4725, or go to: http://www.intel.com/design/literature.htm
• Intel, Core, Atom, Pentium, Intel inside, Sponsors of Tomorrow, Pentium, 386, 486, DX2 and the Intel logo are trademarks of Intel Corporation in
the United States and other countries.
• *Other names and brands may be claimed as the property of others.
• Copyright ©2012 Intel Corporation.
Computação Paralela e Otimização. Vetorização e Multithreading (Igor Freitas)

Más contenido relacionado

Destacado

Ae cfb mar 2013 ultima versão 14 mar 13
Ae cfb mar 2013 ultima versão 14 mar 13Ae cfb mar 2013 ultima versão 14 mar 13
Ae cfb mar 2013 ultima versão 14 mar 13maolosa
 
Manual da Bateria Eletrônica Fenix EFD 300 (PORTUGUÊS)
Manual da Bateria Eletrônica Fenix EFD 300 (PORTUGUÊS)Manual da Bateria Eletrônica Fenix EFD 300 (PORTUGUÊS)
Manual da Bateria Eletrônica Fenix EFD 300 (PORTUGUÊS)Habro Group
 
Actos Voluntátios Grupo3
Actos Voluntátios Grupo3Actos Voluntátios Grupo3
Actos Voluntátios Grupo3Vitor Dalcégio
 
Boas praticas EE Dr. "Nestor Sampaio Bittencuort"
Boas praticas   EE Dr. "Nestor Sampaio Bittencuort"Boas praticas   EE Dr. "Nestor Sampaio Bittencuort"
Boas praticas EE Dr. "Nestor Sampaio Bittencuort"Alexandre Borgonovi
 
Slides para postar blog
Slides para postar blogSlides para postar blog
Slides para postar blogValportugues
 
áLbum de fotografías
áLbum de fotografíasáLbum de fotografías
áLbum de fotografíasfanny yagloa
 
Els ocells de vacarisses (ii)
Els ocells de vacarisses (ii)Els ocells de vacarisses (ii)
Els ocells de vacarisses (ii)Fotosorpina
 
CASOS DE DIFICULTADES O R T O G R Á F I C A S
CASOS DE DIFICULTADES O R T O G R Á F I C A SCASOS DE DIFICULTADES O R T O G R Á F I C A S
CASOS DE DIFICULTADES O R T O G R Á F I C A SMALTLuengo
 
Páscoa, Chocolate e hábitos saudáveis
Páscoa, Chocolate e hábitos saudáveisPáscoa, Chocolate e hábitos saudáveis
Páscoa, Chocolate e hábitos saudáveisConsumoteca
 
Gimnasia rítmica
Gimnasia rítmicaGimnasia rítmica
Gimnasia rítmicapilarmo24
 
Atividades acadêmicas na reestruturação dos Hospitais Universitários
Atividades acadêmicas na reestruturação dos Hospitais UniversitáriosAtividades acadêmicas na reestruturação dos Hospitais Universitários
Atividades acadêmicas na reestruturação dos Hospitais Universitáriosproplan
 

Destacado (20)

Ae cfb mar 2013 ultima versão 14 mar 13
Ae cfb mar 2013 ultima versão 14 mar 13Ae cfb mar 2013 ultima versão 14 mar 13
Ae cfb mar 2013 ultima versão 14 mar 13
 
Aula geo solo
Aula geo soloAula geo solo
Aula geo solo
 
Perspectivas
PerspectivasPerspectivas
Perspectivas
 
Manual da Bateria Eletrônica Fenix EFD 300 (PORTUGUÊS)
Manual da Bateria Eletrônica Fenix EFD 300 (PORTUGUÊS)Manual da Bateria Eletrônica Fenix EFD 300 (PORTUGUÊS)
Manual da Bateria Eletrônica Fenix EFD 300 (PORTUGUÊS)
 
Actos Voluntátios Grupo3
Actos Voluntátios Grupo3Actos Voluntátios Grupo3
Actos Voluntátios Grupo3
 
China
ChinaChina
China
 
Historia
HistoriaHistoria
Historia
 
O sono
O sonoO sono
O sono
 
Boas praticas EE Dr. "Nestor Sampaio Bittencuort"
Boas praticas   EE Dr. "Nestor Sampaio Bittencuort"Boas praticas   EE Dr. "Nestor Sampaio Bittencuort"
Boas praticas EE Dr. "Nestor Sampaio Bittencuort"
 
Slides para postar blog
Slides para postar blogSlides para postar blog
Slides para postar blog
 
áLbum de fotografías
áLbum de fotografíasáLbum de fotografías
áLbum de fotografías
 
Els ocells de vacarisses (ii)
Els ocells de vacarisses (ii)Els ocells de vacarisses (ii)
Els ocells de vacarisses (ii)
 
CASOS DE DIFICULTADES O R T O G R Á F I C A S
CASOS DE DIFICULTADES O R T O G R Á F I C A SCASOS DE DIFICULTADES O R T O G R Á F I C A S
CASOS DE DIFICULTADES O R T O G R Á F I C A S
 
Páscoa, Chocolate e hábitos saudáveis
Páscoa, Chocolate e hábitos saudáveisPáscoa, Chocolate e hábitos saudáveis
Páscoa, Chocolate e hábitos saudáveis
 
Muerelentamente (1)
Muerelentamente (1)Muerelentamente (1)
Muerelentamente (1)
 
Gimnasia rítmica
Gimnasia rítmicaGimnasia rítmica
Gimnasia rítmica
 
Atividades acadêmicas na reestruturação dos Hospitais Universitários
Atividades acadêmicas na reestruturação dos Hospitais UniversitáriosAtividades acadêmicas na reestruturação dos Hospitais Universitários
Atividades acadêmicas na reestruturação dos Hospitais Universitários
 
Casamento
CasamentoCasamento
Casamento
 
Ponchar cable jds
Ponchar cable jdsPonchar cable jds
Ponchar cable jds
 
Sociologia
SociologiaSociologia
Sociologia
 

Más de Intel Software Brasil

Modernização de código em Xeon® e Xeon Phi™
Modernização de código em Xeon® e Xeon Phi™  Modernização de código em Xeon® e Xeon Phi™
Modernização de código em Xeon® e Xeon Phi™ Intel Software Brasil
 
Escreva sua App sem gastar energia, agora no KitKat
Escreva sua App sem gastar energia, agora no KitKatEscreva sua App sem gastar energia, agora no KitKat
Escreva sua App sem gastar energia, agora no KitKatIntel Software Brasil
 
Desafios do Desenvolvimento Multiplataforma
Desafios do Desenvolvimento MultiplataformaDesafios do Desenvolvimento Multiplataforma
Desafios do Desenvolvimento MultiplataformaIntel Software Brasil
 
Desafios do Desenvolvimento Multi-plataforma
Desafios do Desenvolvimento Multi-plataformaDesafios do Desenvolvimento Multi-plataforma
Desafios do Desenvolvimento Multi-plataformaIntel Software Brasil
 
Getting the maximum performance in distributed clusters Intel Cluster Studio XE
Getting the maximum performance in distributed clusters Intel Cluster Studio XEGetting the maximum performance in distributed clusters Intel Cluster Studio XE
Getting the maximum performance in distributed clusters Intel Cluster Studio XEIntel Software Brasil
 
Methods and practices to analyze the performance of your application with Int...
Methods and practices to analyze the performance of your application with Int...Methods and practices to analyze the performance of your application with Int...
Methods and practices to analyze the performance of your application with Int...Intel Software Brasil
 
Principais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralelaPrincipais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralelaIntel Software Brasil
 
Principais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoPrincipais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoIntel Software Brasil
 
Intel Technologies for High Performance Computing
Intel Technologies for High Performance ComputingIntel Technologies for High Performance Computing
Intel Technologies for High Performance ComputingIntel Software Brasil
 
Benchmarking para sistemas de alto desempenho
Benchmarking para sistemas de alto desempenhoBenchmarking para sistemas de alto desempenho
Benchmarking para sistemas de alto desempenhoIntel Software Brasil
 
Yocto no 1 IoT Day da Telefonica/Vivo
Yocto no 1 IoT Day da Telefonica/VivoYocto no 1 IoT Day da Telefonica/Vivo
Yocto no 1 IoT Day da Telefonica/VivoIntel Software Brasil
 
Otávio Salvador - Yocto project reduzindo -time to market- do seu próximo pr...
Otávio Salvador - Yocto project  reduzindo -time to market- do seu próximo pr...Otávio Salvador - Yocto project  reduzindo -time to market- do seu próximo pr...
Otávio Salvador - Yocto project reduzindo -time to market- do seu próximo pr...Intel Software Brasil
 
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5Intel Software Brasil
 

Más de Intel Software Brasil (20)

Modernização de código em Xeon® e Xeon Phi™
Modernização de código em Xeon® e Xeon Phi™  Modernização de código em Xeon® e Xeon Phi™
Modernização de código em Xeon® e Xeon Phi™
 
Escreva sua App sem gastar energia, agora no KitKat
Escreva sua App sem gastar energia, agora no KitKatEscreva sua App sem gastar energia, agora no KitKat
Escreva sua App sem gastar energia, agora no KitKat
 
Desafios do Desenvolvimento Multiplataforma
Desafios do Desenvolvimento MultiplataformaDesafios do Desenvolvimento Multiplataforma
Desafios do Desenvolvimento Multiplataforma
 
Desafios do Desenvolvimento Multi-plataforma
Desafios do Desenvolvimento Multi-plataformaDesafios do Desenvolvimento Multi-plataforma
Desafios do Desenvolvimento Multi-plataforma
 
Yocto - 7 masters
Yocto - 7 mastersYocto - 7 masters
Yocto - 7 masters
 
Getting the maximum performance in distributed clusters Intel Cluster Studio XE
Getting the maximum performance in distributed clusters Intel Cluster Studio XEGetting the maximum performance in distributed clusters Intel Cluster Studio XE
Getting the maximum performance in distributed clusters Intel Cluster Studio XE
 
Intel tools to optimize HPC systems
Intel tools to optimize HPC systemsIntel tools to optimize HPC systems
Intel tools to optimize HPC systems
 
Methods and practices to analyze the performance of your application with Int...
Methods and practices to analyze the performance of your application with Int...Methods and practices to analyze the performance of your application with Int...
Methods and practices to analyze the performance of your application with Int...
 
Principais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralelaPrincipais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralela
 
Principais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoPrincipais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorização
 
Notes on NUMA architecture
Notes on NUMA architectureNotes on NUMA architecture
Notes on NUMA architecture
 
Intel Technologies for High Performance Computing
Intel Technologies for High Performance ComputingIntel Technologies for High Performance Computing
Intel Technologies for High Performance Computing
 
Benchmarking para sistemas de alto desempenho
Benchmarking para sistemas de alto desempenhoBenchmarking para sistemas de alto desempenho
Benchmarking para sistemas de alto desempenho
 
Yocto no 1 IoT Day da Telefonica/Vivo
Yocto no 1 IoT Day da Telefonica/VivoYocto no 1 IoT Day da Telefonica/Vivo
Yocto no 1 IoT Day da Telefonica/Vivo
 
Html5 fisl15
Html5 fisl15Html5 fisl15
Html5 fisl15
 
IoT FISL15
IoT FISL15IoT FISL15
IoT FISL15
 
IoT TDC Floripa 2014
IoT TDC Floripa 2014IoT TDC Floripa 2014
IoT TDC Floripa 2014
 
Otávio Salvador - Yocto project reduzindo -time to market- do seu próximo pr...
Otávio Salvador - Yocto project  reduzindo -time to market- do seu próximo pr...Otávio Salvador - Yocto project  reduzindo -time to market- do seu próximo pr...
Otávio Salvador - Yocto project reduzindo -time to market- do seu próximo pr...
 
Html5 tdc floripa_2014
Html5 tdc floripa_2014Html5 tdc floripa_2014
Html5 tdc floripa_2014
 
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5
Desenvolvimento e análise de performance de jogos Android com Coco2d-HTML5
 

Computação Paralela e Otimização. Vetorização e Multithreading (Igor Freitas)

  • 1. Computação Paralela & Otimização Vetorização e Multithreading Igor José F. Freitas igor.freitas@intel.com
  • 2. Principais pontos abordados Introdução ao Coprocessador Intel® Xeon® Phi™ Vetorização de código (Atom® ao Xeon® Phi™ ) Multithreading – OpenMP 2
  • 3. Agenda Introdução Coprocessador Xeon® Phi™ Multithreading em Memória Compartilhada Vetorização Conclusões Dúvidas 3
  • 4. Introdução Necessidade de maior poder computacional em diversos setores – Indústria & Universidades • • • • • Previsão do tempo, clima Imagens médicas Óleo & Gás Bioinformática Simulações em diversas áreas – Aeronáutica, automobilística, mecânica, financeira, telecomunicações, etc. – Aplicações mais rápidas que consomem menos energia 4 • Usuários de Smpartphones, Ultrabooks e Tablets não toleram aplicativos “famintos” por bateria • Otimizar o código leva ao uso ótimo da CPU, portanto, gastando menos recursos do dispositivo
  • 5. Introdução Como ganhar desempenho ? – Utilizar 100% a capacidade do seu processador ! Processadores Multi-core e Many-core Unidade de Processamento Vetorial 5 Multithreading Vetorização
  • 6. Introdução SIMD Instruction Processor AVX-512 CORE-AVX2 4th Generation Intel® Core™ Processors CORE-AVX-I 3rd Generation Intel® Core™ i7 Processors ; 3rd Generation Intel® Core™ i5 Processors AVX 2nd Generation Intel® Core™ i7 Processors ; 2nd Generation Intel® Core™ i5 Processors ; 2nd Generation Intel® Core™ i3 Processors ; Intel® Xeon® Processor E5 Family ;Intel® Xeon® Processor E3 Family SSE4.2 Previous Generation Intel® Core™ i7 Processors ; Previous Generation Intel® Core™ i5 Processors ; Previous Generation Intel® Core™ i3 Processors ; Intel® Xeon® 55XX series ; Intel® Xeon® 56XX series Intel® Xeon® 75XX series ; Intel® Xeon® Processor E7 Family ATOM_SSE4.2 Intel® Atom™ processors that support Intel® SSE4.2 instructions. SSE4.1 Intel® Xeon® 74XX series ; Quad-Core Intel® Xeon 54XX, 33XX series ; Dual-Core Intel® Xeon 52XX, 31XX series ; Intel® Core™ 2 Extreme 9XXX series ; Intel® Core™ 2 Quad 9XXX series ; Intel® Core™ 2 Duo 8XXX series ; Intel® Core™ 2 Duo E7200 SSSE3 Quad-Core Intel® Xeon® 73XX, 53XX, 32XX series ; Dual-Core Intel® Xeon® 72XX, 53XX, 51XX, 30XX series ; Intel® Core™ 2 Extreme 7XXX, 6XXX series ; Intel® Core™ 2 Quad 6XXX series ; Intel® Core™ 2 Duo 7XXX (except E7200), 6XXX, 5XXX, 4XXX series ; Intel® Core™ 2 Solo 2XXX series ; Intel® Pentium® dual-core processor E2XXX, T23XX series ATOM_SSSE3 Intel® Atom™ processors SSE3 Dual-Core Intel® Xeon® 70XX, 71XX, 50XX Series ; Dual-Core Intel® Xeon® processor (ULV and LV) 1.66, 2.0, 2.16 ; Dual-Core Intel® Xeon® 2.8 ; Intel® Xeon® processors with SSE3 instruction set support Intel® Core™ Duo ; Intel® Core™ Solo ; Intel® Pentium® dual-core processor T21XX, T20XX series ; Intel® Pentium® processor Extreme Edition ; Intel® Pentium® D ; Intel® Pentium® 4 processors with SSE3 instruction set support SSE2 6 Intel® Xeon Phi™ Prodruct Family Intel® Xeon® processors ; Intel® Pentium® 4 processors ; Intel® Pentium® M IA32 Intel® Pentium® III Processor ; Intel® Pentium® II Processor ; Intel® Pentium® Processor
  • 7. Introdução Processamento Vetorial – Instruções SIMD Histórico das instruções SIMD – Processadores Intel® 7
  • 8. Introduçã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 ! A + B Scalar - Uma Instrução - Uma Operação Matemática C for (i=0;i<=MAX;i++) c[i]=a[i]+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] + b[i+7] b[i+6] b[i+5] b[i+4] b[i+3] b[i+2] b[i+1] b[i] c[i+7] c[i+6] c[i+5] c[i+4] c[i+3] c[i+2] c[i+1] Vector - Uma Instrução - Oito operações matemáticas1 c[i] 1. Número de operações por instrução varia de acordo com a instrução SIMD utilizada (tamanho da instrução e operando) 8
  • 9. Introdução Multithreading – Número de cores/threads/processador era de uma unidade até 2004 – Atualmente os processadores possuem cada vez mais cores/threads – Ferramentas que facilitam uso de multithreading – Performance não é mais orientada a alta frequência do processador 9
  • 10. Introdução Computação Paralela & Otimização – Aplicada em: • Clusters de Alto Desempenho (HPC) – Xeon® & Xeon® Phi™ • Microservers (Avotom – Atom ™) – Intel® Atom™ processor C2000 (Avotom ) • Desktops – Intel ® Core ™ • Mobile (Smartphones & Tablets) – Bay Trail ™, Clover Trail+ ™ 10
  • 11. Coprocessador Intel® Xeon® Phi™ Do Multi-core para Many-Core Muitas threads e “largos” registradores vetorias Coprocessador Intel® Xeon® Phi™™ (KNC chip) Bottom Coprocessador Intel® Xeon® Phi™ (KNC chip) 11 Servidor com 8 Coprocessadores Intel® Xeon® Phi™ (passive-cooling solution)
  • 12. Coprocessador Intel® Xeon® Phi™ Contectado ao slot PCI-e 57+ cores por die VPU / Core de 64-bits e registradores de 512-bit Cada Core possuie 4 hardware threads Processamento “In order” L2 de 512KB/Core fully coherent (Least Recently Used) 31MB para todos os cores L1 de 32KB 12
  • 13. Coprocessador Intel® Xeon® Phi™ Portabilidade do código – Xeon® Phi™ é x86 – Aplicações existentes C/C++, Fortran pode ser portadas para Xeon® Phi™ – Xeon® e Xeon® Phi™ suportamo mesmo modelo de paralelismo – Possuem as mesmas Ferramentas de desenvolvimento e execução 13
  • 14. Coprocessador Intel® Xeon® Phi™ Ferramentas – Compiladores: Intel® C/C++ e Intel® Fortran – Otimização: Intel® VTune Amplifier XE e Intel® Trace Analyzer and Collector (ITAC) – Bibliotecas matemáticas: Intel® Math Kernel Library (MKL) – Bibliotecas de execução paralela: Intel® MPI e Intel® OpenMP 14
  • 15. Arquitetura Xeon® Phi™ Integração com o Host – Perspectiva do Desenvolvedor: • Cada Xeon® Phi™ é um “nó” Linux • Acessível via SSH (Secure Shell Protocol) • Suporte a NFS (Network File Sharing Protocol) – MPSS – MIC Plataform Software Stack • Drivers , Daemons, Comand Line e Ferramentas Gráficas • Boot, Load Linux, Enable node 15
  • 16. Coprocessador Intel® Xeon® Phi™ • Computação Heterogênea Xeon® Multi-Core Centric Multi-Core Hosted Aplicações Seriais e Paralelas 16 Offload Aplicações com etapas paralelas MIC – Many Core Centric Symmetric Load Balance Many-Core Hosted Aplicações Massivamente Paralelas
  • 17. Arquitetura Xeon® Phi™ MIC Plataform Software Stack Linux/Windows Host Intel® Xeon® Phi™ Coprocessor SSH Session Offload Aplication SSH System Level Code System Level Code Coprocessor Communication and applaunching support MPSS PCI-e Bus Windows/ Linux OS 17 Offload Aplication Native Aplication PCI-e Bus Linux uOS
  • 19. Multithreading em Memória Compartilhada Memória compartilhada   Comunicação através de escrita e leitura de variáveis compartilhadas  19 Todos os processos compartilham um único espaço de memória SMPs – Symmetric Multiprocessors  Fácil programação  Overhead na comunicação entre processador e memória
  • 20. Multithreading em Memória Compartilhada  Difícil de escalar, pois quanto mais processadores, mais overhead de comunicação CPU[0] CPU[1] CPU[2] I/O System RAM 20
  • 21. Multithreading em Memória Compartilhada Facilidade de Uso Threading Intel® Math Kernel Library MPI Intel® Threading Building Blocks Intel® Cilk™ Plus OpenMP Pthreads Ajuste Fino 21
  • 22. Multithreading em Memória Compartilhada OpenMP Fortran 2008 Intel® TBB Intel® Cilk Plus Site openmp.org fortranwiki.org opentbb.org cilkplus.org Lançamento 1997 2010 2006 2010 Linguagens Fortan, C, C++ Fortran C++ C/C++ Descrição Diretivas do Compilador (pragmas), runtime library Extensão de linguagem para adicionar paralelismo via Extensão da linguagem para adicionar paralelismo via templates Extensão da linguagem para multithreading/vetorização Método Pragmas Keywords Templates Keywords, atributos e pragmas Especificação By OpenMP ISO/IEC 1539-1:2010 Open Source iniciado pela Intel® Especificação aberta iniciada pela Intel® Programação paralela Loops paralelos e algoritmos, alocação de memória Loops paralelos, vetorização, array notations, elemental functions, compatível com TBB DO CONCURRENT, Coarrays Independente de compilador, uso em vários tipos de aplicações, alocação de memória, suporte a outros modelos de programação paralela Garantia de performance em loadbalance, vetorização, array notations e elemental functions Funcionalidades Funcionalidades Únicas 22 Loops paralelos, tasks, locks Amplamente adotada pela comunidade HPC
  • 23. Multithreading em Memória Compartilhada OpenMP API Padrão para memória compartilhada Consiste em: – Diretivas/Pragmas – Runtime Library • omp_set_num_threads(n) – Variáveis de Ambiente • OMP_NUM_THREADS Importante: – Uma Thread OpenMP para cada Core (ideal) • Permite mais de uma thread/core 23
  • 24. Multithreading em Memória Compartilhada OpenMP Execução de um programa OpenMP Master Thread #pragma omp parallel Thread pool Thread 1 Thread 2 Thread n-1 Thread n #pragma omp for Cada thread espera as outras terminarem o trabalho – “wait state” 24 Master Thread
  • 25. Multithreading em Memória Compartilhada OpenMP Paralelizando um Loop 1. 2. 3. 4. 5. Thread 1 res[0] = foo(); res[1] = foo(); res[2] = foo(); res[3] = foo(); 25 double res[200]; int i; #pragma omp parallel for for (i=0;i< 200; i++) { res[i] = foo(); } Thread 2 res[4] = foo(); res[5] = foo(); res[6] = foo(); res[7] = foo(); ... Thread N res[MAX-3] = foo(); res[MAX-2] = foo(); res[MAX-1] = foo(); res[MAX] = foo();
  • 26. Multithreading em Memória Compartilhada OpenMP Scheduling mode – static : • Distribui tasks entre as threads antes do início do loop . Menor overhead de comunicação, porém pode perder performance no load-balance – dynamic: • Distribui parte da carga no início, e durante o loop as tasks são distribuídas de acordo com a disponibilidade – guided: • Similar ao “dynamic”, porém a granularidade aumenta assim que a carga de processamento diminui. Pode resultar melhor load-balance 26
  • 27. Multithreading em Memória Compartilhada OpenMP Scheduling mode – Quanto maior o tamanho do bloco, menor overhead, porém pior loadbalance – Quanto menor o tamanho do bloco, maior overhead, porém melhor loadbalance Especificando modo “dynamic” e bloco com tamanho 4 #pragma omp parallel for schedule(dynamic, 4) // ... – Ponto de partida para tamanho do bloco: • > 1, menor que Num. Loops/Parallel Threads 27
  • 28. Multithreading em Memória Compartilhada OpenMP Reduction / Schedule 1. 2. 3. 4. 5. 6. 7. 8. void SumColumns(const int m, const int n, long* M, long* s, char* method){ for (int i = 0; i < m; i++) { long sum = 0; // Distribui cada linha entre as threads // reduction para somar todas as colunas #pragma omp parallel for schedule(guided) reduction(+: sum) for (int j = 0; j < n; j++) sum += M[i*n+j]; 9. s[i] = sum; 10. } 28
  • 29. Task Parallelism em Memória Compartilhada OpenMP Performance – OpenMP Scheduling modes - Jacobi solver 29
  • 30. Vetorização Como Vetorizar ? – Cinco possíveis abordagens: • Bibliotecas matemáticas – Ex.: Intel® Math Kernel Library (MKL) • Auto vetorização – Trabalho a cargo do Compilador • Diretivas/Pragmas – – – – SIMD IVDEP VECTOR E NOVECTOR Intel® Intrinsics • Array Notation – Cilk Plus – Notação vetorial na linguagem de programação explicitando a vetorização • Elemental Functions – Cilk Plus – Vetorizar código existente mantendo sua modularidade 30
  • 31. Vetorização Como Vetorizar ? Facilidade de Uso Vectors Intel® Math Kernel Library Auto vectorization Array Notation: Intel® Cilk™ Plus Semi-auto vectorization: #pragma (vector, ivdep, simd) C/C++ Vector Classes (F32vec16, F64vec8) Ajuste Fino 31
  • 32. Vetorização Auto Vetorização Ajudando o compilador a vetorizar – Evitar “loop unrolling” manual pois: • Atrela otimização a arquitetura de hardware (Vector Processor Unit) • Prejudica a leitura do código src1 [0] src1 [1] src1 [2] src1 [3] * src2 acc1 32 acc2 acc3 acc4 acc
  • 33. Vetorização Auto Vetorização Unrolling Loop 1. 2. 3. 4. 5. 6. 7. 8. double acc1 = 0, accu2 = 0, acc3 = 0, acc4 =0; for (i=0; i<NUM; i+=4) { acc1 = src1[i+0] * src2 + acc1; acc2 = src1[i+1] * src2 + acc1; acc3 = src1[i+2] * src2 + acc1; acc4 = src1[i+3] * src2 + acc1; } accu = acc1 + acc2 + acc3 + acc4; Forma simplificada double acc = 0; for (i=0; i<NUM; i+=4) { accu = src1[i]*src2 + accu; } 33
  • 34. Vetorização Auto Vetorização Requisitos para um loop ser vetorizado • Em loops encadeados, o loop mais interno será vetorizado • Deve conter apenas blocos básicos, ex.: uma única linha de código sem condições (if statements) ou saltos (go to) • Quantidade de iterações do loop deve ser conhecida antes de sua execução, mesmo que em tempo de execução • Sem dependências entre os elementos a serem calculados • GAP – Guided Autoparallelization (Intel® Compiler “-guide” ) pode ajudar Loop Não Vetorizável – Dependência sobre a[i-1] for (i=1; i<MAX; i++) { d[i] = e[i] – a[i-1]; a[i] = b[i] + c[i]; } 34
  • 35. Vetorização Intel® C++ Intrinsic O que é Intel® C++ Intrinsic ? – Provê acesso a ISA (Instruction Set Architecture) através de código C/C++ ao invés de código Assembly – Ganho de performance próximo a códigos Assembly com a facilidade de C/C++ – Vetorização – Extensões SIMD (Simple Instructions Multiple Data) 35
  • 36. Vetorização Intel® C++ Intrinsic SSE Intrinsics MIC Intrinsics 36
  • 37. Vetorização Diretivas & Parâmetros do Compilador – Nem mesmo o mais fantástico compilador consegue vetorizar automaticamente o código – Ponteiros em C/C++ dificultam a vetorização • Dois ponteiros podem apontar para o mesmo endereço de memória – Diretivas SIMD: • Permissão ao compilador vetorizar • Responsabilidade da vetorização é do programador 37
  • 38. Vetorização Diretivas & Parâmetros do Compilador Diretivas: #pragma simd [clause[ [,] clause] ... ] : guia o compilador para casos onde a auto-vetorização não é possível Atributos padrão: VECTORLENGTH N : tamanho do vetor (2, 4, 8 ou 16) VECTORLENGTHFOR (data-type) : tamanho_vetor/sizeof(type) PRIVATE (VAR1[, VAR2]...) : variável privada para cada iteração do loop FIRSTPRIVATE (VAR1[, VAR2]...) : broadcast do valor inicial a todas as outras instâncias para cada iteração LASTPRIVATE (VAR1[, VAR2]...) : broadcast do valor final a todas as outras instâncias LINEAR (var1:step [, var2:step2]...) : incrementa número de steps para cada variável em um loop, unit-stride vector REDUCTION (oper:var1[, var2]...) : Aplica operação de redução (+, *, -, AND, OR, EQV, NEQV) nas variáveis indicadas ASSERT : Direciona o compilador a produzir um erro ou um warning quando a vetorização falha 38
  • 39. Vetorização Diretivas & Parâmetros do Compilador Alinhamento de dados #pragma vector aligned | unaligned : comunica ao compilador que os dados estão alinhados __assume_aligned keyword : elimita checagem se os dados estão alinhados, porém e´specífico para cada vetor __attribute__((aligned(64)) ou __mm_malloc() / __mm__free() : alocação estática e dinâmica de dados alinhados -opt-assume-safe-padding : completa os vetores com bytes extras para que fiquem múltiplos do tamanho da cache. Evita “loop sobressalente” 39
  • 40. Vetorização Diretivas & Parâmetros do Compilador Removendo “Pointer Aliasing” #pragma ivdep : Ignora dependências de variáveis “restrict” ou “-restrict (argumento de linha de comando) : similar a “ivdep” , informa que determinada variável não possui restrições/dependências “Streaming Store” #pragma vector nontemporal | temporal ou “-optstreaming-store always” : uso ótimo do cache em casos de write-only onde os dados não precisam ser armazenados na cache, e sim diretamente na memória. Usar “vector aligned” antes. 40
  • 41. Vetorização Diretivas & Parâmetros do Compilador #pragma loop count : Informa ao compilador o número de loops . Útil para melhores predições de vetorização -vec-report[n] : relatório do que foi e do que pode ser vetorizado . “n” determina o nível de detalhes -guide : GAP – Guided Auto-parallelization . Sugestões de como vetorizar os loops -O[n] : Nível de otimização O2 (default) já inclui auto-vetorização -x[code] : Otimiza as instruções de acordo com a arquitetura do processador. Ex.: xAVX , -xSSE2 #pragma novector : Instrui o compilador a não vetorizar. Útil em loops com muitas condições (ifs) #pragma vector always : força vetorização automática independente da heurística do compilador 41
  • 42. Vetorização Elemental Functions Possibilita chamar versão vetorizada da função escalar Excelente em casos onde as funções estão implementadas em biblioteca de terceiros 42
  • 43. Vetorização Elemental Functions Lib X float my_simple_add(float float x2){ return x1 + x2; } x1, Elemental Function __attribute__(vector) float my_simple_add(float x1, float x2); // ...em outro arquivo de código #pragma simd for (int i=0; i < N, ++i) { output[i] = my_simple_add(inputa[i], inputb[i]); } 43 Ou my_simple_add(inputa[:], inputb[:]);
  • 44. Vetorização Array Notation Extensões C++ Intel® Cilk Plus para operações com vetores Indica paralelismo para vetorização automática 44
  • 45. Vetorização Array Notation A[:] += B[:]; // todo o vetor é computado A[0:16] += B[32:16]; // A(0 até 15) + B(32 até 47) A[0:16:2] += B[32:16:4] // A(0, 2, 4, ...30) + B(32, 36, 38, ... 92) Compatibilidade com compiladores não-Intel #ifdef __INTEL_COMPILER A[:] += B[:]; #else for (int i=0; i<16; i++) A[i] += B[i]; #endif 45
  • 46. Vetorização Exemplos Diretivas SIMD Adição de vetores – C/C++ 1.__declspec(align(16)) float a[MAX], b[MAX], c[MAX]; 2.#pragma simd 3.for (i=0; i<MAX; i++) 4. c[i] = a[i]+b[i]; Array Notation Cilk Plus Adição de vetores – C/C++ - Dados alinhados 1.__declspec(align(16)) float a[MAX], b[MAX], c[MAX]; 2.c[i:MAX] = a[i:MAX]+b[i:MAX]; 46
  • 47. Vetorização Exemplos Array Notation Cilk Plus Adição de vetores – C/C++ - Dados alinhados 1.__declspec(align(16)) float a[MAX], b[MAX], c[MAX]; 2.__declspec(vector(uniform(B,C), linear(i:1))) 3.float foo(float* B, float *C, int i){ 4. return B[i]+C[i]; 5.} 6.... 7.for (i=0; i<MAX; i++) { 8. 9.} 47 a[i] = foo(b,c,i);
  • 48. Conclusões Fatos – Há muita computacional na indústria e nas universidades – No mundo desktop e mobile há muito espaço para otimizações – Existem ferramentas que facilitam a programação paralela – Multithreading e Vetorização são suportados pelos processadores atuais 48
  • 49. Conclusões Técnicas de Otimização – Multithreading • Explorar multiplos cores por processador, múltiplas threads por core • Já passou da fase de tendência, hoje é realidade ! – Vetorização • Outra forma de paralelismo “data paralelism” • Processamento Vetorial disponível em smpartphones, ultrabooks e servidores 49
  • 50. Links Importantes Intel®® Xeon® Phi™™ COPROCESSOR DEVELOPER SITE • Arquitetura, setup e recursos de programação • Treinamentos • Estudos de caso • Informações sobre as Ferramentas • Suporte através da comunidade (fóruns de discussão, artigos, etc.) http://software.intel.com/mic-developer/ 50
  • 51. Links Importantes Vetorização: • http://software.intel.com/en-us/intel-vectorization-tools Treinamentos: • An Overview of Programming for Intel®® Xeon®® processors and Intel®® Xeon® Phi™™ coprocessors • Intel®® Xeon® Phi™™ Coprocessor Developer’s Quick Start Guide • http://software.intel.com/mic-developer • The Training tab has Beginner and Advanced workshop videos, and links to past/future webinars • The Tools & Downloads tab has a link to Intel® and Third Party Tools and Libraries • This page has links to available beta and production for developers 51
  • 52. Links Importantes Ferramentas de Desenvolvimento Intel® para o coprocessador Intel® Xeon® Phi™ coprocessor Intel® Advisor XE 2013 Informações: software.intel.com/en-us/intel-advisor-xe Video de demonstração: insidehpc.com/2012/11/30/demo-intel-advisor-xe-2013-transforms-code-for-intel-Xeon®-phi-at-sc12/ Intel® Parallel Studio XE Informações: software.intel.com/en-us/intel-parallel-studio-xe Video de demonstração: insidehpc.com/2012/11/28/video-intel-parallel-studio-xe-demo-at-sc12/ Intel® Cluster Studio XE Informações: software.intel.com/en-us/intel-cluster-studio-xe Video de demonstração: insidehpc.com/2012/11/29/intel-cluster-studio-xe-demo-at-sc12/ James Reinders on Exploiting Parallelism in the new Intel®® Xeon® Phi™™ coprocessors youtube.com/watch?v=g9ehO6duNuE&list=UUH5Rft7GYM8KZpxA-4Ohihg&index=9&feature=plcp 52
  • 54. Legal Disclaimer • INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. • A "Mission Critical Application" is any application in which failure of the Intel Product could result, directly or indirectly, in personal injury or death. SHOULD YOU PURCHASE OR USE INTEL'S PRODUCTS FOR ANY SUCH MISSION CRITICAL APPLICATION, YOU SHALL INDEMNIFY AND HOLD INTEL AND ITS SUBSIDIARIES, SUBCONTRACTORS AND AFFILIATES, AND THE DIRECTORS, OFFICERS, AND EMPLOYEES OF EACH, HARMLESS AGAINST ALL CLAIMS COSTS, DAMAGES, AND EXPENSES AND REASONABLE ATTORNEYS' FEES ARISING OUT OF, DIRECTLY OR INDIRECTLY, ANY CLAIM OF PRODUCT LIABILITY, PERSONAL INJURY, OR DEATH ARISING IN ANY WAY OUT OF SUCH MISSION CRITICAL APPLICATION, WHETHER OR NOT INTEL OR ITS SUBCONTRACTOR WAS NEGLIGENT IN THE DESIGN, MANUFACTURE, OR WARNING OF THE INTEL PRODUCT OR ANY OF ITS PARTS. • Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined". Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information. • The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request. • Intel processor numbers are not a measure of performance. Processor numbers differentiate features within each processor family, not across different processor families. Go to: http://www.intel.com/products/processor_number. • Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order. • Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1800-548-4725, or go to: http://www.intel.com/design/literature.htm • Intel, Core, Atom, Pentium, Intel inside, Sponsors of Tomorrow, Pentium, 386, 486, DX2 and the Intel logo are trademarks of Intel Corporation in the United States and other countries. • *Other names and brands may be claimed as the property of others. • Copyright ©2012 Intel Corporation.