Escolar Documentos
Profissional Documentos
Cultura Documentos
& Otimização
Vetorização e Multithreading
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.
Processadores Multi-core e
Many-core Multithreading
Unidade de Processamento
Vetorial Vetorização
5
Introdução
SIMD Instruction Processor
7
Introdução
• O que é e ?
A
• Capacidade de realizar uma
operação matemática em dois ou + Scalar
- Uma Instrução
mais elementos ao mesmo tempo.
• Por que Vetorizar ? B - Uma Operação
Matemática
• Ganho substancial em performance !
C
for (i=0;i<=MAX;i++)
c[i]=a[i]+b[i];
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:
• Desktops
– Intel ® Core ™
10
Coprocessador Intel® Xeon® Phi™
Do Multi-core para Many-Core
Muitas threads e “largos” registradores vetorias
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™
• Computação Heterogênea
Offload Many-Core
Multi-Core
Symmetric Hosted
Hosted Aplicações com
Load Aplicações
Aplicações Seriais etapas
Balance Massivamente
e Paralelas paralelas Paralelas
16
Arquitetura Xeon® Phi™
MIC Plataform Software Stack
SSH Session
Offload SSH Offload
Aplication Native
Aplication
Aplication
17
Multithreading em Memória
Compartilhada
18
Multithreading em Memória Compartilhada
Memória compartilhada
Todos os processos compartilham um único espaço
de memória
19
Multithreading em Memória Compartilhada
I/O System
RAM
20
Multithreading em Memória Compartilhada
Facilidade de Uso
Threading
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
Extensão de
Diretivas do Extensão da linguagem para Extensão da linguagem
linguagem para
Descrição Compilador (pragmas), adicionar paralelismo via para
adicionar paralelismo
runtime library templates multithreading/vetorização
via
Keywords, atributos e
Método Pragmas Keywords Templates
pragmas
Especificação aberta
Especificação By OpenMP ISO/IEC 1539-1:2010 Open Source iniciado pela Intel®
iniciada pela Intel®
Loops paralelos,
vetorização, array
Loops paralelos, tasks, Programação Loops paralelos e algoritmos,
Funcionalidades notations, elemental
locks paralela alocação de memória
functions, compatível com
TBB
Independente de compilador,
uso em vários tipos de Garantia de performance
Funcionalidades Amplamente adotada DO CONCURRENT, aplicações, alocação de em loadbalance,
Únicas pela comunidade HPC Coarrays memória, suporte a outros vetorização, array notations
modelos de programação e elemental functions
paralela
22
Multithreading em Memória Compartilhada
OpenMP
– 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
24
Master Thread
Multithreading em Memória Compartilhada
OpenMP
Paralelizando um Loop
25
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
27
Multithreading em Memória Compartilhada
OpenMP
Reduction / Schedule
9. s[i] = sum;
10. }
28
Task Parallelism em Memória Compartilhada
OpenMP
29
Vetorização
Como Vetorizar ?
• 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
Semi-auto vectorization:
#pragma (vector, ivdep, simd)
Ajuste Fino
31
Vetorização
Auto Vetorização
*
src2
32
Vetorização
Auto Vetorização
Unrolling Loop
1. double acc1 = 0, accu2 = 0, acc3 = 0, acc4 =0;
2. for (i=0; i<NUM; i+=4) {
3. acc1 = src1[i+0] * src2 + acc1;
4. acc2 = src1[i+1] * src2 + acc1;
5. acc3 = src1[i+2] * src2 + acc1;
6. acc4 = src1[i+3] * src2 + acc1;
7. }
8. 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
• Deve conter apenas blocos básicos, ex.: uma única linha de código sem condições
(if statements) ou saltos (go to)
35
Vetorização
Intel® C++ Intrinsic
SSE Intrinsics
MIC Intrinsics
36
Vetorização
Diretivas & Parâmetros do Compilador
– Diretivas SIMD:
• Permissão ao compilador vetorizar
• Responsabilidade da vetorização é do programador
37
Vetorização
Diretivas & Parâmetros do Compilador
Diretivas:
38
Vetorização
Diretivas & Parâmetros do Compilador
Alinhamento de dados
39
Vetorização
Diretivas & Parâmetros do Compilador
“Streaming Store”
#pragma vector nontemporal | temporal ou “-opt-
streaming-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
-vec-report[n] : relatório do que foi e do que pode ser vetorizado . “n” determina
o nível de detalhes
41
Vetorização
Elemental Functions
42
Vetorização
Elemental Functions
Lib X
float my_simple_add(float x1,
float x2){
return x1 + x2;
}
Elemental Function
__attribute__(vector) float my_simple_add(float x1, float x2);
Ou
my_simple_add(inputa[:], inputb[:]);
43
Vetorização
Array Notation
44
Vetorização
Array Notation
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];
47
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
• Treinamentos
• Estudos de caso
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
• 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
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 1-
800-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.