Programação em Assembly SIMD

Slides:



Advertisements
Apresentações semelhantes
Paralelismo em Máquinas Multiprocessadas
Advertisements

Arquitetura de Computadores
Nível de arquitetura do conjunto de instrução
Processadores AMD.
Arquitetura de Computadores
1 O Conjunto de Instruções ISA – Instruction Set Architecture.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 03: Computador.
Fernando Moraes, Ney Calazans 26/10/2005
Exemplo de arquitetura registrador-registrador- MIPS
Processadores risc: sparc – powerpc – arm - mips.
Processador Intel Itanium
Extensões Multimídia Alunos: Daniel Machado de Faria – RA015783
Arquiteturas Superescalares
Paralelismo em nível de instrução: Arquiteturas VLIW Grupo 01: Júlia Martinez Perdigueiro ra Tatiane Baggio Borili ra
Conjunto de Instruções Multimídia
MO Título do Trabalho: Arquitetura Raw Ricardo M Nishihara RA
Organização de Computadores Inserindo o Controle Identifica pontos de controle no caminho de dados – Busca da instrução – Operações lógicas e aritméticas.
SSC144 Arquitetura de Computadores Introdução
SSC144 Arquitetura de Computadores Evolução Arquitetura von Neumann (parte II) Aula 3 13/08/10 Profa. Sarita.
SSC144 Arquitetura de Computadores Evolução Arquitetura von Neumann (parte I) Aula 2 11/08/10 Profa. Sarita.
Estudo comparativo entre as arquiteturas Opteron e Itanium
Exemplo: TMS320C6701 Ponto flutuante de 32 bits e de 64 bits
REPRESENTAÇÃO DE INSTRUÇÕES
Arquitetura de Computadores I
Fundação Educacional de Barretos Faculdade de Engenhariarmação
Processadores.
Autor: Fernando de Mesentier Silva
2002/2003 Programação Orientada para Objectos 1 Aula 4 Memória, unidade básica de memória e conceito de endereço Ponteiros Relação de ponteiros com matrizes.
A arquitectura IA32 A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador. Tamanho da palavra Número.
Programação em Assembly Optimização do código
Arquitecturas RISC Arquitectura e Conjunto de Instruções
Programação em Assembly Variáveis estruturadas
Arquitecturas RISC Programação em assembly
Programação em assembly
Processamento Vectorial: Single Instruction Multiple Data
Optimização do Desempenho: Técnicas Dependentes da Máquina
Prof. João Paulo de Toledo Gomes
Afonso Ferreira Miguel
Arrays em Java Revisão Assuntos Aulas Anteriores
Unidade Central de Processamento
Tipos básicos de variáveis em C++.
Representação de Instruções
Aula 3©Universidade do Algarve 1 Do alto-nível ao assembly Compiladores, Aula Nº 3 João M. P. Cardoso.
Fundamentos de programação CUDA
Tópicos em redes e sistemas distribuídos B
Família Intel P5 e P6 P5 P6 NetBurst Incluindo cache L2.
ORGANIZAÇÃO DE COMPUTADORES
Arquitetura de computadores
Prof. Ricardo Santos PONTEIROS
VII Semana de Iniciação Científica do CBPF
Organização do Ambiente de Execução (Runtime System)
Organização e Arquitetura de Computadores
Davi de Andrade Lima Castro RA:  A plataforma C6000: ◦ Ponto-fixo:  C62x  C64 / C64x+ ◦ Ponto-flutuante:  C67x / C67x+ ◦ Arquitetura VLIW:
Processamento de dados na UCP e memória UCP
Contextualização de Paralelismo em nível de instrução
DUAL CHANNEL Adinan Southier Soares Senai – São Lourenço do Oeste.
Arquitetura de Computadores
IMM Instalação e Manutenção de Microcomputadores
8088 Assembly Software Básico Mitsuo Takaki.
DSC/CEEI/UFCG Introdução à Computação. DSC/CEEI/UFCG 2 Hardware – Memória  Componente de um sistema de computação cuja função é armazenar informações.
Arquitetura IA32 Eduardo Augusto Bezerra
Parte 3 Seção de Dados e Unidade de Controle
MO401 – Trabalho 2 Fábio Augusto Menocci Cappabianco RA:991724
Processadores.
A CPU E SUA EVOLUÇÃO.
ARQUITETURA DE COMPUTADORES Nível do Conjunto de Instruções
A linguagem de Máquina – Instruções Básicas
ARM – Movimentação de Dados
Introdução a Ciência da Computação Aula 05 Prof. Francisco G. Rodrigues.
Processamento Vectorial: Single Instruction Multiple Data
Transcrição da apresentação:

Programação em Assembly SIMD IA32 AC1 – IA32: SIMD

Single Instruction Multiple Data 1994 – Pentium II e Pentium with MMX – Intel introduz a primeira extensão SIMD ao conjunto de instruções (MMX - MultiMedia eXtensions) 1995 – Introdução de Streaming Simd Extensions (SSE) no Pentium III 2000 – Introdução de SSE2 no Pentium IV 200… - Introdução de SSE3 no Pentium IV HT AC1 – IA32: SIMD

Single Instruction Multiple Data A mesma instrução é aplicada a múltiplos elementos de dados add_simd op1, op2 op1 op2 + AC1 – IA32: SIMD

Single Instruction Multiple Data Vantagens Uma única instrução para processar n elementos de dados Acesso coerente à memória Os dados devem estar em posições consecutivas de memória Se os dados estiverem alinhados ao parágrafo (múltiplos de 16) o acesso é mais eficiente (SSE) Paralelismo declarado explicitamente Não existem dependências de dados entre as operações; Se o hardware possuir as unidades funcionais as operações podem ser realizadas em paralelo AC1 – IA32: SIMD

MultiMedia eXtensions (MMX) Operações sobre inteiros 8 registos de 8 bytes (64 bits): mmx0 .. mmx7 Estes registos são os mesmos da FPU Tipos de Dados Ambiente de Programação AC1 – IA32: SIMD

Streaming SIMD Extensions (SSE) Operações em vírgula flutuante Operações adicionais sobre inteiros 8 novos registos de 16 bytes (128 bits): xmm0 .. xmm7 Tipos de Dados Ambiente de Programação AC1 – IA32: SIMD

Instruções: Transferência de Dados Operandos orig, dest Obs. MOVQ mm/m64, mm mm, mm/m64 Mover palavra quádrupla (8 bytes) de memória para registo mmx ou de registo mmx para memória (Apenas para inteiros) MOVDQA MOVDQU xmm/m128, xmm xmm, xmm/m128 Mover 2 palavras quádruplas (2*8 bytes) Apenas para inteiros A - addr alinhado M16; U – addr não alinhado MOVAP[S|D] MOVUP[S|D] Mover 4 FP precisão simples ou 2 FP precisão dupla A – addr alinhado M16 U – addr não alinhado AC1 – IA32: SIMD

Instruções: Operações Inteiras Operandos orig, dest Obs. PADD? PSUB? PAND? POR? mm/m64, mm xmm/m128, xmm Adição, subtracção, conjunção ou disjunção do tipo de dados indicado Operação realizada sobre o número de elementos determinado pelo registo+tipo de dados Endereços em memória alinhados O resultado não pode ser em memória ? = B | W | D | Q B – byte W – 2 bytes D – 4 bytes Q – 8 bytes AC1 – IA32: SIMD

Instruções: Operações FP Operandos orig, dest Obs. ADDP? SUBP? MULP? DIVP? SQRTP? MAXP? MINP? ANDP? ORP? xmm/m128, xmm Operação sobre o tipo de dados indicado Operação realizada sobre o número de elementos determinado pelo tipo de dados (S = 4 ; D = 2) Endereços em memória alinhados O resultado não pode ser em memória ? = S | D S – precisão simples D – dupla precisão AC1 – IA32: SIMD

Exemplo MMX int a[100], b[100], r[100]; func (int n, int *a, int *b, int *r) { int i; for (i=0 ; i<n ; i++) r[i] = a[i] + b[i]; } func: … movl 8(%ebp), %edx movl 12(%ebp), %eax movl 16(%ebp), %ebx movl 20(%ebp), %esi movl $0, %ecx ciclo: movq (%eax, %ecx, 4), %mm0 paddd (%ebx, %ecx, 4), %mm0 movq %mm0, (%esi, %ecx, 4) addl $2, %ecx cmpl %edx, %ecx jle ciclo emms AC1 – IA32: SIMD

SSE - Exemplo struct { float a, b, r; } arr[100]; func (int n) { int i; for (i=0 ; i<n ; i++) arr[i].r = arr[i].a*arr[i].b; } a b r [0] [1] Vectores de estruturas resultam num layout em memória em que os diferentes elementos do mesmo campo não estão em endereços consecutivos! Usar estrutras de vectores! AC1 – IA32: SIMD

SSE - Exemplo float a[100], b[100], r[100]; func (int n) { int i; for (i=0 ; i<n ; i++) r[i] = a[i] * b[i]; } func: … movl 8(%ebp), %edx movl $a, %eax movl $b, %ebx movl $r, %esi movl $0, %ecx ciclo: movaps (%eax, %ecx, 4), %xmm0 mulps (%ebx, %ecx, 4), %xmm0 movaps %xmm0, (%esi, %ecx, 4) addl $4, %ecx cmpl %edx, %ecx jle ciclo AC1 – IA32: SIMD

IA32 – SIMD Tema IA32 – SIMD Intel 64 and IA-32 Software Developer’s Manual – Basic Architecture – Volume 1 Intel 64 and IA-32 Software Developer’s Manual – Instruction Set Reference – Volume 2 AC1 – IA32: SIMD