SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
Principais conceitos, técnicas e
modelos de programação
paralela
Intel Software Conference – Maio, 2014
Igor Freitas
igor.freitas@intel.com
Agenda
2
 Introdução
 Memória compartilhada
 Memória distribuida
 Desafios
 Conclusão
3
Introdução
1. Decidir a divisão dos blocos de dados entre os processadores
2. Mesma operação, dados diferentes por unidade de execução
Ex: Encontrar o maior elemento em um vetor
CPU 0 CPU 1 CPU 2 CPU 3
Decomposição de domínio
“Data Decomposition”
Introdução
4
1. Dividir tarefas entre os processadores
2. Decidir quais elementos de dados serão acessados por qual processador (leitura/escrita)
f()
s()
r()
q()h()
g()
CPU 1
CPU 0
CPU 2
f()
g()
r()
h() q()
r()
s()
Decomposição de tarefas – “Task paralellism”
Introdução
5
 Tipo especial de “Task Paralellism”. Também chamado de “Assembly line” parallelism
 Padrão utilizado tanto em software quanto em hardware
 Tasks conectadas em um modelo
“produtor-consumidor”
Pipeline
Stage 4Stage 3Stage 2Stage 1
A1 B1 C1
A2 B2 C2
A3 B3 C
A4
for( i = 0; i < 3; i++)
a[i] = b[i]/2.0;
6
b[0] b[1] b[2]
a[0] a[1] a[2]
///
2 2 2
Decomposição de domínio possível
Introdução
Detectando paralelismo
for( i = 1; i < 4; i++)
a[i] = a[i-1]*b[i];
7
b[1] b[2] b[3]
a[1] a[2] a[3]
***
a[0]
Decomposição de domínio falha neste caso
Introdução
Detectando paralelismo
Introdução
Detectando paralelismo
a = f(x,y,z);
b = g(w,x);
t = a + b;
c = h(z);
s = t/c;
8
Decomposição de
tarefas com 3 cores
x
f
w y z
ab
g
t
c
s/
h
+
CPU 0
CPU 1 CPU 2
Introdução
9
Níveis de paralelismo em relação ao hardware
 ILP - Instruction Level Parallelism
 Execução em Pipeline
 Super-scalar - Mais de uma instrução por ciclo de clock
 DLP - Data Level Parallelism
 SIMD (Single Instruction Multiple Data) vector processing
 Implementado via instruções AVX-512, AVX, AVX2, SSE etc.
 TLP - Thread-Level Parallelism
 Arquitetura Multi-core (Intel ® Xeon)
 Arquitetura Many-core (Intel ® Xeon Phi ™)
 Cache-coherent em múltiplos sockets
 CLP - Cluster Level Parallelism
 Múltiplas plataformas conectadas em rede
Introdução
10
Como aplicar tais padrões de programação paralela ?
 Das linguagens de programação mais populares, nenhuma foi criada com o
objetivo de explorar paralelismo
 Necessidade de adaptação destas linguagens
 Objetivos
 Performance
e
 Produtividade
e
 Portabilidade
Sequencial
Paralelo
Clusters
11
Memória compartilhada
12
Shared
Memory
Thread 0 Thread 2
Thread 1
f ( )
f ( )
f ( )
Ex: Decomposição de Domínio via Threads
Memória Compartilhada
Decomposição de Domínio via Threads
Memória Compartilhada
Decomposição de Domínio via Threads
Código sequencial:
Thread 0
Thread 1
13
for (i = 500; i < 1000; i++) a[i] = foo(i);
for (i = 0; i < 500; i++) a[i] = foo(i);
int a[1000], i;
for (i = 0; i < 1000; i++) a[i] = foo(i);
Private Shared
14
Shared
Memory
Thread 0 Thread 1
e ( )
g ( )h ( )
f ( )
Memória Compartilhada
Decomposição de Tarefas via Threads
15
int e;
main () {
int x[10], j, k, m; j = f(x, k); m = g(x, k);
...
}
int f(int *x, int k)
{
int a; a = e * x[k] * x[k]; return a;
}
int g(int *x, int k)
{
int a; k = k-1; a = e / x[k]; return a;
}
Thread 0
Thread 1
Static variable: Shared
Global to threads: Shared
Function’s local variables: Private
Shared
Variables
Private
Variables
Private
Variables
Thread
Thread
Memória privada e Memória compartilhada
Memória Compartilhada
Decomposição de Tarefas via Threads
16
Thread 0 Thread 2Thread 1
Shared Memory
Input Output
e ( ) f ( ) g ( )
Data
set 2
Data sets
5, 6, ...
Data
set 4 Data
set 3 Data
set 1
Memória Compartilhada
Pipeline via Threads
Memória Compartilhada
Modelos de Programação
Facilidade de Uso
Ajuste Fino
Threading
Intel® Math Kernel Library
Intel® Threading Building Blocks
OpenMP
Pthreads
Intel® Cilk™ Plus
void foo() /* Intel® Math Kernel Library - C := alpha*op(A)*op(B) + beta*C */
{
float *A, *B, *C; /* Matrices */
sgemm(&transa, &transb, &N, &N, &N, &alpha, A, &N, B, &N, &beta, C, &N);
}
Memória Compartilhada
Intel® Math Kernel Library (Intel® MKL)
Intel® Xeon® processor Intel® Xeon Phi ™ coprocessor
Implicit automatic offloading requires no code
changes, simply link with the offload MKL Library
 Paralelismo com 3 palavras-chaves
 cilk_spawn
 cilk_sync
 cilk_for
Cilk™ Plus:
 Projeto Open Source
 Load Balancing
 Sincronização
 Protocolos de comunicação
 Evita estouro de pilha
19
Learn more at http://cilkplus.org
// Parallel function invocation, in C
cilk_for (int i=0; i<n; ++i){
Foo(a[i]);
}
// Parallel spawn in a recursive fibonacci
// computation, in C
int fib (int n) {
if (n < 2) return 1;
else {
int x, y;
x = cilk_spawn fib(n-1);
y = fib(n-2);
cilk_sync;
return x + y;
}
}
Memória Compartilhada
Intel® Cilk™ Plus
20
Master Thread
Thread 1 Thread 2 Thread n-1 Thread n
Cada thread espera as outras
terminarem o trabalho – “wait state”
Master Thread
#pragma omp parallel
#pragma omp for
Thread pool
Memória Compartilhada
Modelo “Fork-Join” via OpenMP Threads
21
Paralelizando um Loop
1. double res[200]; int i;
2. #pragma omp parallel for
3. for (i=0;i< 200; i++) {
4. res[i] = foo();
5. }
Thread 1
res[0] = foo();
res[1] = foo();
res[2] = foo();
res[3] = 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();
...
Memória Compartilhada
OpenMP
Abstração de padrões de programação paralela para C++
 C++ template library
 Alocação escalável de memória
 Load-balancing
 Alocação de tasks “Work-stealing”
 Thread-safe pipeline
 STL-compatible concorrentes
 Algoritmos paralelos
 Primitivas de sincronização
 C++11 Thread Support
//Parallel function invocation example,
in C++,
//using TBB:
parallel_for (0, n, [=](int i)
{
Foo(a[i]);
});
Memória Compartilhada
Intel® Threading Building Blocks (Intel® TBB)
 O que diferre TBB de Cilk Plus ?
 TBB
 Template library:
 sem mudanças de compilador (portabilidade)
 Não suporta vetorização
 Computação paralela para C++
 Múltiplos padrões de programação paralela
 Ex.: Pipelines, dataflow, unstructure task graphs
 Alocação de memória
Memória Compartilhada
Intel® Threading Building Blocks (Intel® TBB)
Memória Compartilhada
Intel® Threading Building Blocks (Intel® TBB)
Exemplo: Padrão “Pipeline” no TBB
Fonte: Intel ® TBB distribution: diretório “examples/pipeline/square”
Artigo no Intel ® Developer Zone:
https://software.intel.com/en-us/blogs/2011/09/14/how-to-make-a-pipeline-with-an-intel-threading-building-blocks-flow-
graph
Lê um bloco de texto de um
arquivo de tamanho fixo.
Envia para a função
“transform”
Aloca um buffer de saída
Converte cada string em long
Eleva o número ao quadrado
Escreve o resultado no buffer
de saída
Filtra o resultado em ordem
sequencial
Escreve em arquivo de saída
Memória Compartilhada
Intel® Threading Building Blocks (Intel® TBB)
Exemplo: Padrão Pipeline
tbb::pipeline pipeline;
MyInputFilter input_filter( input_file );
pipeline.add_filter( input_filter );
MyTransformFilter transform_filter;
pipeline.add_filter( transform_filter );
MyOutputFilter output_filter( output_file );
pipeline.add_filter( output_filter );
pipeline.run( nthreads*4 );
class MyInputFilter: public tbb::filter {
public:
MyInputFilter( FILE* input_file_ );
~MyInputFilter();
…
/*override*/ void* operator()(void*);
};
class MyTransformFilter: public tbb::filter {
…
};
class MyOutputFilter: public tbb::filter {
...
}
Memória Compartilhada
Intel® Threading Building Blocks (Intel® TBB)
Pipeline para Task Graph
tbb::flow::graph g;
tbb::flow::limiter_node limiter( g, nthreads*4 );
tbb::flow::sequencer_node< TextSlice * > sequencer(g, sequencer_body() );
tbb::flow::source_node input( g, MyInputFilter(input_file), false );
tbb::flow::function_node transform( g, tbb::flow::unlimited, MyTransformFilter() );
tbb::flow::function_node output( g, tbb::flow::serial, MyOutputFilter( output_file ) );
tbb::flow::make_edge( input, limiter );
tbb::flow::make_edge( limiter, transform );
tbb::flow::make_edge( transform, sequencer );
tbb::flow::make_edge( sequencer, output );
tbb::flow::make_edge( output, limiter.decrement );
input.activate();
g.wait_for_all();
27
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
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®
Funcionalidades
Loops paralelos, tasks,
locks
Programação paralela
Loops paralelos e algoritmos,
alocação de memória
Loops paralelos, vetorização,
array notations, elemental
functions, compatível com
TBB
Funcionalidades
Únicas
Amplamente adotada
pela comunidade HPC
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
Memória Compartilhada
Modelos de Programação
28
Memória distribuída
29
CORE
CORE
CORE
CORE
CORE
CORE
CORE
CORE
N1
I/O
P1 P2
N2
I/O
N3
I/O
N4
I/O
Network Interconnect
P1 P2 P1 P2 P1 P2
. . .
. . .
CO-PROCESSOR
M
Memória Distribuida
Hierarquia em sistemas de memória distribuída
• Memória distribuída
• Troca de mensagens em vários níveis
• Nós
• Processadores
• Cores
P3 P4
Troca de mensagens MPI
30
Process 0
User Space
Kernel Space
Send Buffer
System Buffer
Call send
function
Copy data
Safe to reuse
send buffer
Process 1
User Space
Kernel Space
Receive Buffer
System Buffer
Call
receive
function
Receive
data
Copy data
Pontos principais:
1. Envio/Recebimento
de dados é uma
operação pareada
2. Comunicação e
sincronização são
acoplados
Message-Passing Interface (MPI)
Intel® MPI Library
Biblioteca para comunitação entre processos e troca de dados
Principais funções
 Escalável para até 120 mil processos
 Independente do tipo de conexão de rede
 Escolha da “Fabric” em tempo de execução
31
32
Desafios
33
Parallel Overhead:
Sincronização
 Bandwith suficiente para comunicação entre as threads ?
Load balance
 Distribuição de carga não otimizada
 Threads ociosas ?
Escalabilidade
 Mais threads, mais performance ?
Desafios
0
1
2
3
1 2 3 4
Threads
34
Conclusões
Conclusões
Padrões de Prog. Paralela c/ as Ferramentas corretas
 Recomendações:
 Identificar padrões de paralelismo na aplicação
 Utilizar a abordagem/ferramenta correta para cada caso
 Aproveitar todos os cores do processador
 Evitar overhead do paralelismo
 Resultados esperados:
 Ganhar performance !
 Porém, com Portabilidade & Produtividade
Arquitetura Intel® MIC para
workloads massivamente
paralelos
+
Many-core
Mesma
arquitetura de software
Multicore
Indicado para a maioria das
aplicações / workloads
Conclusões
Padrões de Prog. Paralela c/ as Ferramentas corretas
Código
©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.
37

Mais conteúdo relacionado

Mais procurados

си хэлний хичээлүүд 11 р анги
си хэлний хичээлүүд 11 р ангиси хэлний хичээлүүд 11 р анги
си хэлний хичээлүүд 11 р ангиenhsaran_tsahim
 
балабакша аруы байкауы
балабакша аруы байкауыбалабакша аруы байкауы
балабакша аруы байкауыAsem Sarsembayeva
 
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfTREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfssuser059c2c1
 
Microsoft access 2007
Microsoft access 2007Microsoft access 2007
Microsoft access 2007Akhyt
 
U.cs101 алгоритм программчлал-15
U.cs101   алгоритм программчлал-15U.cs101   алгоритм программчлал-15
U.cs101 алгоритм программчлал-15Badral Khurelbaatar
 
Систем бол зорилгыг хэрэгжүүлэх хэрэгсэл мөн илтгэл
Систем бол зорилгыг хэрэгжүүлэх хэрэгсэл мөн илтгэлСистем бол зорилгыг хэрэгжүүлэх хэрэгсэл мөн илтгэл
Систем бол зорилгыг хэрэгжүүлэх хэрэгсэл мөн илтгэлThe Business Council of Mongolia
 
Html кодчлол гэж юу вэ
Html кодчлол гэж юу вэHtml кодчлол гэж юу вэ
Html кодчлол гэж юу вэFLux YT
 
Lab10 1-it101
Lab10 1-it101Lab10 1-it101
Lab10 1-it101BPurev
 
U.IT101-Лекц-7
U.IT101-Лекц-7U.IT101-Лекц-7
U.IT101-Лекц-7taivna
 
Латинаас крилл рүү хөрвүүлэгч
Латинаас крилл рүү хөрвүүлэгчЛатинаас крилл рүү хөрвүүлэгч
Латинаас крилл рүү хөрвүүлэгчAltangerel Bilguun
 
Teaching the "T" in STEM: Technology for Young Learners
Teaching the "T" in STEM: Technology for Young LearnersTeaching the "T" in STEM: Technology for Young Learners
Teaching the "T" in STEM: Technology for Young LearnersShelly Sanchez Terrell
 

Mais procurados (20)

Tutorial of python
Tutorial of pythonTutorial of python
Tutorial of python
 
Database 1
Database 1Database 1
Database 1
 
си хэлний хичээлүүд 11 р анги
си хэлний хичээлүүд 11 р ангиси хэлний хичээлүүд 11 р анги
си хэлний хичээлүүд 11 р анги
 
балабакша аруы байкауы
балабакша аруы байкауыбалабакша аруы байкауы
балабакша аруы байкауы
 
Assembler helnii command
Assembler helnii commandAssembler helnii command
Assembler helnii command
 
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfTREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
 
Java programchlal s.uuganbayr
Java programchlal s.uuganbayrJava programchlal s.uuganbayr
Java programchlal s.uuganbayr
 
Microsoft access 2007
Microsoft access 2007Microsoft access 2007
Microsoft access 2007
 
Өгөгдлийн бүтэц 14
Өгөгдлийн бүтэц 14Өгөгдлийн бүтэц 14
Өгөгдлийн бүтэц 14
 
U.cs101 алгоритм программчлал-15
U.cs101   алгоритм программчлал-15U.cs101   алгоритм программчлал-15
U.cs101 алгоритм программчлал-15
 
Access sem2
Access sem2Access sem2
Access sem2
 
Систем бол зорилгыг хэрэгжүүлэх хэрэгсэл мөн илтгэл
Систем бол зорилгыг хэрэгжүүлэх хэрэгсэл мөн илтгэлСистем бол зорилгыг хэрэгжүүлэх хэрэгсэл мөн илтгэл
Систем бол зорилгыг хэрэгжүүлэх хэрэгсэл мөн илтгэл
 
Html кодчлол гэж юу вэ
Html кодчлол гэж юу вэHtml кодчлол гэж юу вэ
Html кодчлол гэж юу вэ
 
Java lecture4
Java lecture4Java lecture4
Java lecture4
 
Lab10 1-it101
Lab10 1-it101Lab10 1-it101
Lab10 1-it101
 
U.IT101-Лекц-7
U.IT101-Лекц-7U.IT101-Лекц-7
U.IT101-Лекц-7
 
database 9
database 9database 9
database 9
 
IP hicheel 1
IP hicheel 1IP hicheel 1
IP hicheel 1
 
Латинаас крилл рүү хөрвүүлэгч
Латинаас крилл рүү хөрвүүлэгчЛатинаас крилл рүү хөрвүүлэгч
Латинаас крилл рүү хөрвүүлэгч
 
Teaching the "T" in STEM: Technology for Young Learners
Teaching the "T" in STEM: Technology for Young LearnersTeaching the "T" in STEM: Technology for Young Learners
Teaching the "T" in STEM: Technology for Young Learners
 

Destaque

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
 
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
 
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
 
Identificando Hotspots e Intel® VTune™ Amplifier - Intel Software Conference
Identificando Hotspots e Intel® VTune™ Amplifier - Intel Software ConferenceIdentificando Hotspots e Intel® VTune™ Amplifier - Intel Software Conference
Identificando Hotspots e Intel® VTune™ Amplifier - Intel Software ConferenceIntel 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
 
Desafios do Desenvolvimento Multi-plataforma
Desafios do Desenvolvimento Multi-plataformaDesafios do Desenvolvimento Multi-plataforma
Desafios do Desenvolvimento Multi-plataformaIntel 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
 
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
 
Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Intel 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
 
Computação Paralela: Benefícios e Desafios - Intel Software Conference 2013
Computação Paralela: Benefícios e Desafios - Intel Software Conference 2013Computação Paralela: Benefícios e Desafios - Intel Software Conference 2013
Computação Paralela: Benefícios e Desafios - Intel Software Conference 2013Intel Software Brasil
 
Intel® MPI Library e OpenMP* - Intel Software Conference 2013
Intel® MPI Library e OpenMP* - Intel Software Conference 2013Intel® MPI Library e OpenMP* - Intel Software Conference 2013
Intel® MPI Library e OpenMP* - Intel Software Conference 2013Intel 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
 

Destaque (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™
 
Benchmarking para sistemas de alto desempenho
Benchmarking para sistemas de alto desempenhoBenchmarking para sistemas de alto desempenho
Benchmarking para sistemas de alto desempenho
 
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
 
Identificando Hotspots e Intel® VTune™ Amplifier - Intel Software Conference
Identificando Hotspots e Intel® VTune™ Amplifier - Intel Software ConferenceIdentificando Hotspots e Intel® VTune™ Amplifier - Intel Software Conference
Identificando Hotspots e Intel® VTune™ Amplifier - Intel Software Conference
 
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
 
Html5 fisl15
Html5 fisl15Html5 fisl15
Html5 fisl15
 
Desafios do Desenvolvimento Multi-plataforma
Desafios do Desenvolvimento Multi-plataformaDesafios do Desenvolvimento Multi-plataforma
Desafios do Desenvolvimento Multi-plataforma
 
IoT FISL15
IoT FISL15IoT FISL15
IoT FISL15
 
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
 
Yocto - 7 masters
Yocto - 7 mastersYocto - 7 masters
Yocto - 7 masters
 
Intel tools to optimize HPC systems
Intel tools to optimize HPC systemsIntel tools to optimize HPC systems
Intel tools to optimize HPC systems
 
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
 
Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013
 
Intel Technologies for High Performance Computing
Intel Technologies for High Performance ComputingIntel Technologies for High Performance Computing
Intel Technologies for High Performance Computing
 
Computação Paralela: Benefícios e Desafios - Intel Software Conference 2013
Computação Paralela: Benefícios e Desafios - Intel Software Conference 2013Computação Paralela: Benefícios e Desafios - Intel Software Conference 2013
Computação Paralela: Benefícios e Desafios - Intel Software Conference 2013
 
Intel® MPI Library e OpenMP* - Intel Software Conference 2013
Intel® MPI Library e OpenMP* - Intel Software Conference 2013Intel® MPI Library e OpenMP* - Intel Software Conference 2013
Intel® MPI Library e OpenMP* - Intel Software Conference 2013
 
como fazer sabão caseiro
como fazer sabão caseirocomo fazer sabão caseiro
como fazer sabão caseiro
 
Notes on NUMA architecture
Notes on NUMA architectureNotes on NUMA architecture
Notes on NUMA architecture
 
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...
 
CV-LucianoPalma
CV-LucianoPalmaCV-LucianoPalma
CV-LucianoPalma
 

Semelhante a Programação paralela conceitos técnicas modelos

Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
Computação Manycore: Uma Arquitetura muito além do Multicore!
Computação Manycore: Uma Arquitetura muito além do Multicore!Computação Manycore: Uma Arquitetura muito além do Multicore!
Computação Manycore: Uma Arquitetura muito além do Multicore!Intel Software Brasil
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!Intel Software Brasil
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!Luciano Palma
 
Hands On TensorFlow and Keras
Hands On TensorFlow and KerasHands On TensorFlow and Keras
Hands On TensorFlow and KerasSandro Moreira
 
Programação Assíncrona com C# 5
Programação Assíncrona com C# 5Programação Assíncrona com C# 5
Programação Assíncrona com C# 5iMasters
 
Programação assíncrona com C# 5
Programação assíncrona com C# 5Programação assíncrona com C# 5
Programação assíncrona com C# 5Thiago Coelho
 
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...Marcio Machado Pereira
 
Python ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao TensorflowPython ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao TensorflowFabrício Vargas Matos
 
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Intel Software Brasil
 
Construindo um analisador de executáveis
Construindo um analisador de executáveisConstruindo um analisador de executáveis
Construindo um analisador de executáveisFernando Mercês
 
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...Vale Security Conference
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2Daniel
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesJoao Galdino Mello de Souza
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatchflisolmaringa
 

Semelhante a Programação paralela conceitos técnicas modelos (20)

Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Computação Manycore: Uma Arquitetura muito além do Multicore!
Computação Manycore: Uma Arquitetura muito além do Multicore!Computação Manycore: Uma Arquitetura muito além do Multicore!
Computação Manycore: Uma Arquitetura muito além do Multicore!
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
Hands On TensorFlow and Keras
Hands On TensorFlow and KerasHands On TensorFlow and Keras
Hands On TensorFlow and Keras
 
Programação Assíncrona com C# 5
Programação Assíncrona com C# 5Programação Assíncrona com C# 5
Programação Assíncrona com C# 5
 
Programação assíncrona com C# 5
Programação assíncrona com C# 5Programação assíncrona com C# 5
Programação assíncrona com C# 5
 
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
[Pereira, IC'2013] Uma nova abordagem para detecção e extracao de paralelismo...
 
Python ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao TensorflowPython ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao Tensorflow
 
Inpe
InpeInpe
Inpe
 
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
 
Construindo um analisador de executáveis
Construindo um analisador de executáveisConstruindo um analisador de executáveis
Construindo um analisador de executáveis
 
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno Domingues
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatch
 

Mais de Intel Software Brasil

Desafios do Desenvolvimento Multiplataforma
Desafios do Desenvolvimento MultiplataformaDesafios do Desenvolvimento Multiplataforma
Desafios do Desenvolvimento MultiplataformaIntel 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
 
O uso de tecnologias Intel na implantação de sistemas de alto desempenho
O uso de tecnologias Intel na implantação de sistemas de alto desempenhoO uso de tecnologias Intel na implantação de sistemas de alto desempenho
O uso de tecnologias Intel na implantação de sistemas de alto desempenhoIntel Software Brasil
 
Escreva sua App Android sem gastar energia - Intel Sw Day
Escreva sua App Android sem gastar energia - Intel Sw DayEscreva sua App Android sem gastar energia - Intel Sw Day
Escreva sua App Android sem gastar energia - Intel Sw DayIntel Software Brasil
 
Using multitouch and sensors in Java
Using multitouch and sensors in JavaUsing multitouch and sensors in Java
Using multitouch and sensors in JavaIntel Software Brasil
 
Entenda de onde vem toda a potência do Intel® Xeon Phi™
Entenda de onde vem toda a potência do Intel® Xeon Phi™ Entenda de onde vem toda a potência do Intel® Xeon Phi™
Entenda de onde vem toda a potência do Intel® Xeon Phi™ Intel Software Brasil
 
Across the Silicon Spectrum: Xeon Phi to Quark – Unleash the Performance in Y...
Across the Silicon Spectrum: Xeon Phi to Quark – Unleash the Performance in Y...Across the Silicon Spectrum: Xeon Phi to Quark – Unleash the Performance in Y...
Across the Silicon Spectrum: Xeon Phi to Quark – Unleash the Performance in Y...Intel Software Brasil
 
Livros eletrônicos interativos com html5 e e pub3
Livros eletrônicos interativos com html5 e e pub3Livros eletrônicos interativos com html5 e e pub3
Livros eletrônicos interativos com html5 e e pub3Intel Software Brasil
 
Intel XDK New - Intel Software Day 2013
Intel XDK New - Intel Software Day 2013Intel XDK New - Intel Software Day 2013
Intel XDK New - Intel Software Day 2013Intel Software Brasil
 

Mais de Intel Software Brasil (16)

Desafios do Desenvolvimento Multiplataforma
Desafios do Desenvolvimento MultiplataformaDesafios do Desenvolvimento Multiplataforma
Desafios do Desenvolvimento Multiplataforma
 
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
 
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
 
O uso de tecnologias Intel na implantação de sistemas de alto desempenho
O uso de tecnologias Intel na implantação de sistemas de alto desempenhoO uso de tecnologias Intel na implantação de sistemas de alto desempenho
O uso de tecnologias Intel na implantação de sistemas de alto desempenho
 
Escreva sua App Android sem gastar energia - Intel Sw Day
Escreva sua App Android sem gastar energia - Intel Sw DayEscreva sua App Android sem gastar energia - Intel Sw Day
Escreva sua App Android sem gastar energia - Intel Sw Day
 
Using multitouch and sensors in Java
Using multitouch and sensors in JavaUsing multitouch and sensors in Java
Using multitouch and sensors in Java
 
Entenda de onde vem toda a potência do Intel® Xeon Phi™
Entenda de onde vem toda a potência do Intel® Xeon Phi™ Entenda de onde vem toda a potência do Intel® Xeon Phi™
Entenda de onde vem toda a potência do Intel® Xeon Phi™
 
Across the Silicon Spectrum: Xeon Phi to Quark – Unleash the Performance in Y...
Across the Silicon Spectrum: Xeon Phi to Quark – Unleash the Performance in Y...Across the Silicon Spectrum: Xeon Phi to Quark – Unleash the Performance in Y...
Across the Silicon Spectrum: Xeon Phi to Quark – Unleash the Performance in Y...
 
Livros eletrônicos interativos com html5 e e pub3
Livros eletrônicos interativos com html5 e e pub3Livros eletrônicos interativos com html5 e e pub3
Livros eletrônicos interativos com html5 e e pub3
 
Intel XDK New - Intel Software Day 2013
Intel XDK New - Intel Software Day 2013Intel XDK New - Intel Software Day 2013
Intel XDK New - Intel Software Day 2013
 
Hackeando a Sala de Aula
Hackeando a Sala de AulaHackeando a Sala de Aula
Hackeando a Sala de Aula
 
Android Native Apps Hands On
Android Native Apps Hands OnAndroid Native Apps Hands On
Android Native Apps Hands On
 
Android Fat Binaries
Android Fat BinariesAndroid Fat Binaries
Android Fat Binaries
 
Android Native Apps Development
Android Native Apps DevelopmentAndroid Native Apps Development
Android Native Apps Development
 

Programação paralela conceitos técnicas modelos

  • 1. Principais conceitos, técnicas e modelos de programação paralela Intel Software Conference – Maio, 2014 Igor Freitas igor.freitas@intel.com
  • 2. Agenda 2  Introdução  Memória compartilhada  Memória distribuida  Desafios  Conclusão
  • 3. 3 Introdução 1. Decidir a divisão dos blocos de dados entre os processadores 2. Mesma operação, dados diferentes por unidade de execução Ex: Encontrar o maior elemento em um vetor CPU 0 CPU 1 CPU 2 CPU 3 Decomposição de domínio “Data Decomposition”
  • 4. Introdução 4 1. Dividir tarefas entre os processadores 2. Decidir quais elementos de dados serão acessados por qual processador (leitura/escrita) f() s() r() q()h() g() CPU 1 CPU 0 CPU 2 f() g() r() h() q() r() s() Decomposição de tarefas – “Task paralellism”
  • 5. Introdução 5  Tipo especial de “Task Paralellism”. Também chamado de “Assembly line” parallelism  Padrão utilizado tanto em software quanto em hardware  Tasks conectadas em um modelo “produtor-consumidor” Pipeline Stage 4Stage 3Stage 2Stage 1 A1 B1 C1 A2 B2 C2 A3 B3 C A4
  • 6. for( i = 0; i < 3; i++) a[i] = b[i]/2.0; 6 b[0] b[1] b[2] a[0] a[1] a[2] /// 2 2 2 Decomposição de domínio possível Introdução Detectando paralelismo
  • 7. for( i = 1; i < 4; i++) a[i] = a[i-1]*b[i]; 7 b[1] b[2] b[3] a[1] a[2] a[3] *** a[0] Decomposição de domínio falha neste caso Introdução Detectando paralelismo
  • 8. Introdução Detectando paralelismo a = f(x,y,z); b = g(w,x); t = a + b; c = h(z); s = t/c; 8 Decomposição de tarefas com 3 cores x f w y z ab g t c s/ h + CPU 0 CPU 1 CPU 2
  • 9. Introdução 9 Níveis de paralelismo em relação ao hardware  ILP - Instruction Level Parallelism  Execução em Pipeline  Super-scalar - Mais de uma instrução por ciclo de clock  DLP - Data Level Parallelism  SIMD (Single Instruction Multiple Data) vector processing  Implementado via instruções AVX-512, AVX, AVX2, SSE etc.  TLP - Thread-Level Parallelism  Arquitetura Multi-core (Intel ® Xeon)  Arquitetura Many-core (Intel ® Xeon Phi ™)  Cache-coherent em múltiplos sockets  CLP - Cluster Level Parallelism  Múltiplas plataformas conectadas em rede
  • 10. Introdução 10 Como aplicar tais padrões de programação paralela ?  Das linguagens de programação mais populares, nenhuma foi criada com o objetivo de explorar paralelismo  Necessidade de adaptação destas linguagens  Objetivos  Performance e  Produtividade e  Portabilidade Sequencial Paralelo Clusters
  • 12. 12 Shared Memory Thread 0 Thread 2 Thread 1 f ( ) f ( ) f ( ) Ex: Decomposição de Domínio via Threads Memória Compartilhada Decomposição de Domínio via Threads
  • 13. Memória Compartilhada Decomposição de Domínio via Threads Código sequencial: Thread 0 Thread 1 13 for (i = 500; i < 1000; i++) a[i] = foo(i); for (i = 0; i < 500; i++) a[i] = foo(i); int a[1000], i; for (i = 0; i < 1000; i++) a[i] = foo(i); Private Shared
  • 14. 14 Shared Memory Thread 0 Thread 1 e ( ) g ( )h ( ) f ( ) Memória Compartilhada Decomposição de Tarefas via Threads
  • 15. 15 int e; main () { int x[10], j, k, m; j = f(x, k); m = g(x, k); ... } int f(int *x, int k) { int a; a = e * x[k] * x[k]; return a; } int g(int *x, int k) { int a; k = k-1; a = e / x[k]; return a; } Thread 0 Thread 1 Static variable: Shared Global to threads: Shared Function’s local variables: Private Shared Variables Private Variables Private Variables Thread Thread Memória privada e Memória compartilhada Memória Compartilhada Decomposição de Tarefas via Threads
  • 16. 16 Thread 0 Thread 2Thread 1 Shared Memory Input Output e ( ) f ( ) g ( ) Data set 2 Data sets 5, 6, ... Data set 4 Data set 3 Data set 1 Memória Compartilhada Pipeline via Threads
  • 17. Memória Compartilhada Modelos de Programação Facilidade de Uso Ajuste Fino Threading Intel® Math Kernel Library Intel® Threading Building Blocks OpenMP Pthreads Intel® Cilk™ Plus
  • 18. void foo() /* Intel® Math Kernel Library - C := alpha*op(A)*op(B) + beta*C */ { float *A, *B, *C; /* Matrices */ sgemm(&transa, &transb, &N, &N, &N, &alpha, A, &N, B, &N, &beta, C, &N); } Memória Compartilhada Intel® Math Kernel Library (Intel® MKL) Intel® Xeon® processor Intel® Xeon Phi ™ coprocessor Implicit automatic offloading requires no code changes, simply link with the offload MKL Library
  • 19.  Paralelismo com 3 palavras-chaves  cilk_spawn  cilk_sync  cilk_for Cilk™ Plus:  Projeto Open Source  Load Balancing  Sincronização  Protocolos de comunicação  Evita estouro de pilha 19 Learn more at http://cilkplus.org // Parallel function invocation, in C cilk_for (int i=0; i<n; ++i){ Foo(a[i]); } // Parallel spawn in a recursive fibonacci // computation, in C int fib (int n) { if (n < 2) return 1; else { int x, y; x = cilk_spawn fib(n-1); y = fib(n-2); cilk_sync; return x + y; } } Memória Compartilhada Intel® Cilk™ Plus
  • 20. 20 Master Thread Thread 1 Thread 2 Thread n-1 Thread n Cada thread espera as outras terminarem o trabalho – “wait state” Master Thread #pragma omp parallel #pragma omp for Thread pool Memória Compartilhada Modelo “Fork-Join” via OpenMP Threads
  • 21. 21 Paralelizando um Loop 1. double res[200]; int i; 2. #pragma omp parallel for 3. for (i=0;i< 200; i++) { 4. res[i] = foo(); 5. } Thread 1 res[0] = foo(); res[1] = foo(); res[2] = foo(); res[3] = 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(); ... Memória Compartilhada OpenMP
  • 22. Abstração de padrões de programação paralela para C++  C++ template library  Alocação escalável de memória  Load-balancing  Alocação de tasks “Work-stealing”  Thread-safe pipeline  STL-compatible concorrentes  Algoritmos paralelos  Primitivas de sincronização  C++11 Thread Support //Parallel function invocation example, in C++, //using TBB: parallel_for (0, n, [=](int i) { Foo(a[i]); }); Memória Compartilhada Intel® Threading Building Blocks (Intel® TBB)
  • 23.  O que diferre TBB de Cilk Plus ?  TBB  Template library:  sem mudanças de compilador (portabilidade)  Não suporta vetorização  Computação paralela para C++  Múltiplos padrões de programação paralela  Ex.: Pipelines, dataflow, unstructure task graphs  Alocação de memória Memória Compartilhada Intel® Threading Building Blocks (Intel® TBB)
  • 24. Memória Compartilhada Intel® Threading Building Blocks (Intel® TBB) Exemplo: Padrão “Pipeline” no TBB Fonte: Intel ® TBB distribution: diretório “examples/pipeline/square” Artigo no Intel ® Developer Zone: https://software.intel.com/en-us/blogs/2011/09/14/how-to-make-a-pipeline-with-an-intel-threading-building-blocks-flow- graph Lê um bloco de texto de um arquivo de tamanho fixo. Envia para a função “transform” Aloca um buffer de saída Converte cada string em long Eleva o número ao quadrado Escreve o resultado no buffer de saída Filtra o resultado em ordem sequencial Escreve em arquivo de saída
  • 25. Memória Compartilhada Intel® Threading Building Blocks (Intel® TBB) Exemplo: Padrão Pipeline tbb::pipeline pipeline; MyInputFilter input_filter( input_file ); pipeline.add_filter( input_filter ); MyTransformFilter transform_filter; pipeline.add_filter( transform_filter ); MyOutputFilter output_filter( output_file ); pipeline.add_filter( output_filter ); pipeline.run( nthreads*4 ); class MyInputFilter: public tbb::filter { public: MyInputFilter( FILE* input_file_ ); ~MyInputFilter(); … /*override*/ void* operator()(void*); }; class MyTransformFilter: public tbb::filter { … }; class MyOutputFilter: public tbb::filter { ... }
  • 26. Memória Compartilhada Intel® Threading Building Blocks (Intel® TBB) Pipeline para Task Graph tbb::flow::graph g; tbb::flow::limiter_node limiter( g, nthreads*4 ); tbb::flow::sequencer_node< TextSlice * > sequencer(g, sequencer_body() ); tbb::flow::source_node input( g, MyInputFilter(input_file), false ); tbb::flow::function_node transform( g, tbb::flow::unlimited, MyTransformFilter() ); tbb::flow::function_node output( g, tbb::flow::serial, MyOutputFilter( output_file ) ); tbb::flow::make_edge( input, limiter ); tbb::flow::make_edge( limiter, transform ); tbb::flow::make_edge( transform, sequencer ); tbb::flow::make_edge( sequencer, output ); tbb::flow::make_edge( output, limiter.decrement ); input.activate(); g.wait_for_all();
  • 27. 27 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 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® Funcionalidades Loops paralelos, tasks, locks Programação paralela Loops paralelos e algoritmos, alocação de memória Loops paralelos, vetorização, array notations, elemental functions, compatível com TBB Funcionalidades Únicas Amplamente adotada pela comunidade HPC 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 Memória Compartilhada Modelos de Programação
  • 29. 29 CORE CORE CORE CORE CORE CORE CORE CORE N1 I/O P1 P2 N2 I/O N3 I/O N4 I/O Network Interconnect P1 P2 P1 P2 P1 P2 . . . . . . CO-PROCESSOR M Memória Distribuida Hierarquia em sistemas de memória distribuída • Memória distribuída • Troca de mensagens em vários níveis • Nós • Processadores • Cores P3 P4
  • 30. Troca de mensagens MPI 30 Process 0 User Space Kernel Space Send Buffer System Buffer Call send function Copy data Safe to reuse send buffer Process 1 User Space Kernel Space Receive Buffer System Buffer Call receive function Receive data Copy data Pontos principais: 1. Envio/Recebimento de dados é uma operação pareada 2. Comunicação e sincronização são acoplados
  • 31. Message-Passing Interface (MPI) Intel® MPI Library Biblioteca para comunitação entre processos e troca de dados Principais funções  Escalável para até 120 mil processos  Independente do tipo de conexão de rede  Escolha da “Fabric” em tempo de execução 31
  • 33. 33 Parallel Overhead: Sincronização  Bandwith suficiente para comunicação entre as threads ? Load balance  Distribuição de carga não otimizada  Threads ociosas ? Escalabilidade  Mais threads, mais performance ? Desafios 0 1 2 3 1 2 3 4 Threads
  • 35. Conclusões Padrões de Prog. Paralela c/ as Ferramentas corretas  Recomendações:  Identificar padrões de paralelismo na aplicação  Utilizar a abordagem/ferramenta correta para cada caso  Aproveitar todos os cores do processador  Evitar overhead do paralelismo  Resultados esperados:  Ganhar performance !  Porém, com Portabilidade & Produtividade
  • 36. Arquitetura Intel® MIC para workloads massivamente paralelos + Many-core Mesma arquitetura de software Multicore Indicado para a maioria das aplicações / workloads Conclusões Padrões de Prog. Paralela c/ as Ferramentas corretas Código
  • 37. ©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. 37