13
QUANTAS INSTRUÇÕES POR CICLO? Preparado por Luiz Carlos Orsoni 18 de Maio de 2.016 A partir das z990 (T-Rex, em 2.003), os Mainframes da Série z voltaram a ser Super Escalares, ou seja, capazes de executar mais de uma Instrução por Ciclo. Embora sejam indiscutivelmente capazes , isto não significa que sempre executarão mais do que uma Instrução por Ciclo, podem não executar nenhuma ! Como já enfatizamos anteriormente, isto é extremamente dependente da qualidade do Software e outras atividades ocorrendo simultaneamente nos CECs. Esta palestra procurará aclarar os conceitos envolvidos, tendo como exemplos os detalhes internos das z13, capazes de executar até dez Instruções por Ciclo. COPYRIGHT CMG BRASIL - DIREITOS RESERVADOS AO CMG BRASIL SOBRE QUALQUER FORMA DE REPRODUÇÃO, CÓPIA E DIVULGAÇÃO DESTE MATERIAL

Quantas Instruções por Ciclo?

Embed Size (px)

Citation preview

Page 1: Quantas Instruções por Ciclo?

QUANTAS INSTRUÇÕES POR CICLO?

Preparado por Luiz Carlos Orsoni18 de Maio de 2.016

A partir das z990 (T-Rex, em 2.003), os Mainframes da Série z voltaram a ser Super Escalares, ou seja, capazes de executar mais de uma Instrução por Ciclo.Embora sejam indiscutivelmente capazes, isto não significa que sempre executarão mais do que uma Instrução por Ciclo, podem não executar nenhuma!Como já enfatizamos anteriormente, isto é extremamente dependente da qualidade do Software e outras atividades ocorrendo simultaneamente nos CECs.Esta palestra procurará aclarar os conceitos envolvidos, tendo como exemplos os detalhes internos das z13, capazes de executar até dez Instruções por Ciclo.

COPYRIGHT CMG BRASIL - DIREITOS RESERVADOS AO CMG BRASIL SOBRE QUALQUER FORMA DE REPRODUÇÃO, CÓPIA E DIVULGAÇÃO DESTE MATERIAL

Page 2: Quantas Instruções por Ciclo?

1.1 – O que foi acrescentado? Mais PUs!

A quantidade de PUs aumentou de 144 para 192, sendo que o máximo de PUs ativas foi de 120 para 168, podendo ser CPUs de 101 a 141. Este aumento foi, em parte, tornado possível devido ao fato dos chips elevarem de 6 para 8 cores (=PUs) e, em parte, porque os até 4 MCMs das zEC12 com seus 6 chips hexa core mais dois chips de SC em cada um dos 4 possíveis Books, foram substituídos por até 6 SCMs com seus chips octo core mais dois SC em dois SCMs, em cada uma das 4 possíveis Drawers da z13.

Todos estes elementos que foram adicionados, trabalhando em Paralelo, mais do que compensam a redução da Frequência (ou elevação do Cycle Time), de forma que, no cômputo geral, se espera que a z13 produza em torno de 10% a mais de throughput.

1.2 – Mais Caches, mais Memória, mais Canais e maior Aggregate!

A Memória aumentou de 3TB para 10TB. Acima temos quantidades e percentuais de acréscimo nos Caches. Os chips de SC, com seus 4 bancos de

120MB cada, totalizam 480MB por chip e 960MB por Drawer, ou 150% de acréscimo.Acrescentou-se dois LCSS, aumentando a quantidade de Canais (CHPIDs) de 1.024 para 1.536, SubChannel Sets aumentou de 3 para 4 [255,75K Devices], a vazão máxima por Canal foi de 8GB/s para 16GB/s e o Aggregate Data Rate (System I/O BandWidth) foi elevado de 384GB/s para 832GB/s: +117%.A quantidade máxima de LPs foi de 60 para 85 (o sexto LCSS só admite 10, os demais 15 LPs).

É visível o aumento percentual nos tamanhos dos Caches, permitindo que muito mais Lines fiquem à disposição nos Caches, antes que se tenha de recorrer aos Caches de níveis inferiores, impactando o RNI.

A Figura de Charles F Webb acima é um SnapShot do vídeo: HTTP://WWW.YOUTUBE.COM/WATCH?V=EMLZ43N9ZP0

COPYRIGHT CMG BRASIL - DIREITOS RESERVADOS AO CMG BRASIL SOBRE QUALQUER FORMA DE REPRODUÇÃO, CÓPIA E DIVULGAÇÃO DESTE MATERIAL

Page 3: Quantas Instruções por Ciclo?

2 – E a Frequência baixou de 5,5 para 5,0 GHz?

Pretende-se “desmistificar” as consequências da redução da Frequência (de 5,504GHz para 5,0GHz), ou o que é o mesmo, da elevação do Cycle Time de 0,182ns para 0,2ns, algo em torno de 10%. Lembrando da “Regra de Ouro” da Performance: “Nenhum número isolado consegue expressar Performance”, afirmamos que nenhum dos números presentes nestas Colunas é capaz de explicar os 10% (depende do tipo de carga!) aferidos.

3.1 – Porque até 10 Instruções por Ciclo?

A z196 ‘Fetchava’, por ciclo, até 3 Instruções, Decodificava até 4 (algumas são ‘quebradas’ em micro ops) e Completava no máximo 5 Instruções nas 6 Execution Units [Binário e Decimal Floating Point não executavam no mesmo ciclo].A zEC12 elevou para 7 o máximo de Instruções Completadas por ciclo, nas suas 6 Execution Units.Na z13, cada core ‘Fetcha’ e Decodifica o dobro, 6 Instruções/Ciclo e as 10 Execution Units podem completar até 10 Instruções/Ciclo (dependendo...)! Notar que Execution Units de Ponto Fixo e Flutuante dobraram em relação à zEC12. Nota:F=Número de Instruções ‘Fetched’ por CicloD=Quantidade de Instruções DecodificadasC=Quantidade máxima de Instruções Completadas

3.2 – 2 LOAD and STORE Units Caches L2D e L1D+TLB1D

Primeiramente observamos a LOAD and STORE Unit que é dupla (e o acesso ao Cache L1D é Dual Ported), tendo em seu interior o Cache L1D e sua TLB1D, comunicando-se com o Cache L2D, ambos Caches de Dados, podendo ser alterados (flechas vermelhas).

3.3 – Instruction Cache and Merge Caches L2I e L1I + TLB1I

Em seguida a Instruction Cache and Merge Unit, que abriga em seu interior o Cache L1I e sua TLB1I, comunicando-se com o Cache L2I, ambos Caches de Instruções, não podendo ser alterados (só flechas verdes).Caso uma Instrução queira alterar uma Line do Cache L1I, ela será invalidada no L1I, uma cópia virá do L3 para o L2D e para o L1D onde é declarada “exclusive” para que possa ser alterada. Em seguida, é feito ‘flush’ pra o L2D e daí ao L3 (são Inclusives!), tal Line é invalidada no L1D, para que a nova cópia seja trazida do L3 para o L2I e, finalmente, para o L1I, para poder executar a próxima Instrução!

COPYRIGHT CMG BRASIL - DIREITOS RESERVADOS AO CMG BRASIL SOBRE QUALQUER FORMA DE REPRODUÇÃO, CÓPIA E DIVULGAÇÃO DESTE MATERIAL

Page 4: Quantas Instruções por Ciclo?

3.4 – Instruction Fetch and Branch + Instruction Decode Unit

Cabe à Instruction Fetch and Branch Unit o ‘fetch’ de todas as Instruções e a previsão se Branches Condicionais serão ou não executados.Para tanto, esta Unidade se vale de ‘estatísticas’ que são atualizadas em suas Tabelas BHT, PHT e BTB.Speculative execution significa uma ‘tentativa’ de antecipar resultados, mas que será desprezada, caso a Lógica do Programa siga por outro ‘caminho’.Esta Unidade consegue prever o resultado de até 13 Branches dentro de um Código...

Branch Unit:Uma quantidade bastante significativa de Instruções são Branches Condicionais (tomadas de Decisão), tanto nas Rotinas do z/Os, quanto dos Aplicativos. É crescente o aprimoramento das Técnicas de Predição de Branches e também fundamental para a obtenção da melhor Performance possível. Nas z13 são duas Unidades que analisam, por Ciclo, 6 Branches cada.

Speculative Execution:Em determinadas situações, após Branch Condicional, Instruções são selecionadas e ‘tentadas’ as suas execuções, antecipando resultados, ou ignoradas, caso não seja o caminho lógico ditado pelo Programa.

Transactional Execution:Da mesma forma, dentro do âmbito de Transactional Execution (TBEGIN), modificações realizadas por Instruções de Programa podem ser ‘comitadas’ de Lines do Cache L1 para a Memória (TEND), ou ignoradas (TABORT).

3.5 – Instruction Sequencing Unit: Onde a “mágica” é feita!

A Instruction Sequencing Unit mantém filas e detecta dependências entre Instruções, podendo desta maneira decidir quantas e quais Instruções serão enviadas às Execution Units.Usando a Técnica de Registradores Virtuais, ou Register ReNaming, até 10 Instruções, por Ciclo, podem ser enviadas às Execution Units.Operandos continuam sendo obtidos fora de ordem e, desde as z196, Instruções também podem ser executadas fora de Ordem.A tabelinha exibe a evolução na quantidade de Registradores Virtuais, que potencialmente aumentam o número de Instruções que podem ser executadas em paralelo, no mesmo Ciclo.

Registradores Virtuais ou Register Renaming:Arquiteturalmente, a quantidade de Registradores é 16 (Gerais, de Ponto Flutuante, de Acesso e de Controle), de tal forma que as Instruções que os usam contém campos de 4 bits para designá-los.Para que Instruções diferentes, referenciando o mesmo Registrador sejam executadas em paralelo, o Hardware provê mais Registradores do que a Arquitetura define. Os números dos Registradores indicados nas Instruções passam a ser índices nas tabelas dos Registradores realmente existentes. Exemplo:

Programa: exige 5 Ciclos: Hardware: usa 3 Ciclos:LA 9,@OPERAND LA 28,@OPERAND

L 43,PARCELA OoOMVC RESULTD,0(9) AP TOTAL,VALOROoO

L 9,PARCELA MVC RESULTD,0(28)

S 43,DESCONTOS 9,DESCONTO

ST 43,COMDESCTST 9,COMDESCTAP TOTAL,VALOR

COPYRIGHT CMG BRASIL - DIREITOS RESERVADOS AO CMG BRASIL SOBRE QUALQUER FORMA DE REPRODUÇÃO, CÓPIA E DIVULGAÇÃO DESTE MATERIAL

Page 5: Quantas Instruções por Ciclo?

3.6 – 4 Fixed Point Units

Nas z13 existem 4 Fixed Point Units: 2 para as Instruções que não modificam os

Registradores (a grande maioria: ST, MVC, C) 2 para as Instruções que modificam os

Registradores (também grande número: L, A)O maior número destas Execution Units se deve ao fato de que toda a ‘estrutura’ de qualquer Programa, incluindo aqui o Sistema Operacional, SubSistemas, Utilitários, bem como os Aplicativos do Usuário, seja formada por tais Instruções.

3.7 – 2 Hex+Bin Floating Point Units+Mult.2 Vector Units (SIMD)2 Decimal Floating Point Units+Div

Exibidas no mesmo slide acima estão as Binary Floating Point Units (também encarregadas de executar Ponto Flutuante Hexadecimal e Multiplicações de Ponto Fixo), as Decimal Floating Point Units (que também se encarregam de executar Decimal Compactado bem como Divisões de Ponto Fixo) e as Vector Execution Units, encarregadas das 139 Instruções SIMD=Single Instruction on Multiple Data. Dos 32 Registradores de 128 bits (Vector) usados por estas Unidades, os 16 primeiros (64bits) são usados pelas demais Unidades de Floating Point.Todas são duplas, podendo ser usadas por duas Instruções do mesmo Programa ou por Instruções diferentes de Threads diferentes.

Ressalte-se que a VFU é um ‘complexo’ de Execution Units, com Lógica e PipeLines próprias, pois há Instruções SIMD que demandam Cálculos em Ponto Flutuante Binário de Formato Longo, em Ponto Fixo (Aritmético ou Lógico) ou em Strings:

BFU:Binary Floating PointHexaDecimal Floating PointComplex Fixed Point Multitplication

DFU:Decimal Floating PointDFX: Packed Decimal (BCD)FPD: Complex Fixed Point Division + SqRt

VXU: SIMDPM: Vector PermuteST: StringsXM: MultiplyXS: Fixed Point (Arithmetic & Logical)

Cada um dos 32 Registradores da VXU podem operar com 16 operandos de 1 byte, ou 8 operandos de 2 bytes, ou 4 operandos de 4 bytes, ou 2 operandos de 8 bytes ou um único operando de 16 bytes.

3.8 – Support Units: XU+DAT+TLB2, RU, PC, CoProc.

Unidades que dão Suporte às demais Unidades são: XU=Translation Unit, que contém o DAT e a

TLB2 (e provavelmente a ALB!). RU=Recovery Unit, a Unidade que mantém o

Status do Processador e cuida de eventual Recovery e Retry de Instruções.

PC=Core Pervasive Unit, usada para coletar Informações de Erro e fazer a Instrumentação (CPUMF+HIS).

O CoProcessador, encarregado das Instruções de Compressão de Dados e Criptografia.

COPYRIGHT CMG BRASIL - DIREITOS RESERVADOS AO CMG BRASIL SOBRE QUALQUER FORMA DE REPRODUÇÃO, CÓPIA E DIVULGAÇÃO DESTE MATERIAL

Page 6: Quantas Instruções por Ciclo?

3.9 – LOAD and STORE Unit e RNI

Ilustramos o conteúdo de uma Drawer, conceituando Memória Local (à Drawer) e Remota (à Drawer, portanto em outras Drawers).Em seguida, caracterizamos os Nodes, cada qual com metade do L4 e três L3 nos SCM onde também se encontram os 8 Cores de PUs.Em cada Core encontraremos a ICMU que contém o L1I + TLB1I e se comunica com o L2I, mais duas Load And Store Units, que contém o L1D + TLB1D e se comunicam com o L2D.Interessante notar a relação existente entre os Tamanhos dos diversos níveis de Caches.

O item mais impactante na Performance de um Programa, chamado RNI=Relative Nest Intensity, representa a quantidade de Lines que terão de ser trazidas, dos níveis inferiores de Cache, e até das Memórias, para que o Programa possa obter suas Instruções e Dados, bem como produzir Resultados.

3.10 – 10 Execution Units

Finalmente, podemos ver todas as 10 Execution Units funcionando em Paralelo, alimentadas por Instruções vindas da ISU e por Dados vindos dos Caches através das duas Load and Store Units. Quando uma Instrução produz uma alteração de Memória, este resultado é primeiro enviado à Store Queue, de onde pode ser realimentado para outra Instrução que necessite dele, bem como ser encaminhado para a Memória via L1D, L2D e L3 (inclusives e L1D e L2D são Store Through) mas o L3 é Store In, devendo aguardar o ‘flush’ para o L4 e daí para a Memória Local ou Remota.

3.11 – z13 PipeLines: Quantas Instruções Terminaram?

Este diagrama das PipeLines da z13 aparece no JR&D Vol.=59 Number=4/5 de Jul/Set/2.015, indicando a sequência de “estações” nas PipeLines, desde o Instruction Fetch (à esquerda) até a Instrução ser Completada (mostrado à direita). É desta maneira que pode-se determinar quantas Instruções estão sendo executadas e, usando-se o CPUMF+HIS, pode-se obter o Contador 0, que registra a quantidade de Ciclos de Máquina e o Contador 1, que registra a quantidade de Instruções Executadas, permitindo que se calcule o CPAI, a quantidade de Ciclos por Instrução Média, de onde se calcula o Tempo Médio das Instruções e seu inverso, que se chama MIPS.

COPYRIGHT CMG BRASIL - DIREITOS RESERVADOS AO CMG BRASIL SOBRE QUALQUER FORMA DE REPRODUÇÃO, CÓPIA E DIVULGAÇÃO DESTE MATERIAL

Page 7: Quantas Instruções por Ciclo?

4.1 – VARIABILIDADE?

Para esclarecer que a Variabilidade nos Tempos de CPU não é assunto novo, ao contrário, sempre convivemos com ela, apresentamos este SnapShot do Manual Principles of Operation.

Também convidamos a consultar a Lista de “motivadores”, expressa no Manual de SMF.

Isto significa então que os novos ‘motivadores’ de Variabilidade devem ser considerados, em adição aos já conhecidos.

4.2 – “Convivência”!

Mais uma fonte de explicações e “dicas” de convivência com estas Variações, é esta Palestra de Frank Kyne, na IBM-STU Brasil em Atibaia, em 2.014.

Se o Tempo de CPU é variável (e incontrolável!), significará um impacto na Contabilização de Recursos e no Planejamento de Capacidade, que deve ser considerado, justificando a frase de Bob Rogers acima.

Dados mais precisos podem ser obtidos através dos Registros de SMF tipo 30, que, a partir do z/OS2.2, passaram a conter informações de Counter Data Section (CPUMF + HISprecisa estar ativo!).

4.3 – Simultaneous Multi Threading

Até a zEC12, cada core possuía um conjunto de Registradores definidos pela Arquitetura e, portanto, um Programa podia executar suas Instruções neste core, fazendo uso deste conjunto de Registradores. As Unidades Funcionais não usadas por este Programa ficavam “idle”, claramente um “desperdício”!Simultaneous Multi Threading é a criação do segundo [quarto, oitavo, enésimo] conjunto de Registradores (=Thread) podendo iniciar a execução de um outro Programa, completamente independente do primeiro, no mesmo core, passando a compartilhar todas as suas Unidades Funcionais: Caches, TLBs, ALBs, Instruction Fetch (BHT, PHT, BTB), CoProcessador e Execution Units, o que obviamente pode gerar conflitos.

4.4 – Experiências em outras Plataformas

Dados obtidos em outras Plataformas [O chip Power8 possui SMT8, ou seja: até 8 Threads por core] permitem afirmar, indiscutivelmente, que SMT aumenta a eficiência de cada core, evidenciado pelos valores acima dos 100%, entretanto, a consequência é que:No SMT2 [140%] cada Programa “anda” a +-70%No SMT4 [160%] cada Programa “anda” a +-40%Significando que temos mais Paralelismo e menos Dispatchable Units aguardando em filas, mas “andando” mais devagar (ou bem mais devagar, aumentando o Elapsed Time) e usando mais Tempo de CPU (devido ao efeito MultiThread e ao maior tempo de “conflito”).

COPYRIGHT CMG BRASIL - DIREITOS RESERVADOS AO CMG BRASIL SOBRE QUALQUER FORMA DE REPRODUÇÃO, CÓPIA E DIVULGAÇÃO DESTE MATERIAL

Page 8: Quantas Instruções por Ciclo?

5 – Conclusões: Quantas Instruções, por Ciclo?

A melhor maneira de se obter as vantagens é conhecendo as novas facilidades das z13 e, claro, sabendo usá-las.São raras as Aplicações que dependem dos GHz, mas não custa nada “ficar de olho” nelas.Multi Threading já é uma realidade para zIIPs e IFLs, devendo-se esperar para breve em CPUs.Variabilidades sempre existiram, apenas ficarão mais complexas e presentes doravante.Espera-se ter contribuído para esclarecer as fontes de variabilidade para a quantidade de Instruções executadas, afastando a ‘sensação’ de que as PUs tenham vazão constante e independente de outras Variáveis, pois comportam-se como os automóveis, no trânsito diário das grandes capitais.

Questões: Se desejar maiores detalhes e/ou quiser trocar informações, contactar: [email protected].

Agradecimentos: Contribuiram para esta Palestra:Moacyr Jardim Maffei, Alvaro Guimarães Salla, Luiz Antonio Fadel, Frank Kyne, Bob Rogers, Anderson Bassani e, claro, Charles F. Webb.

Referências Bibliográficas:o z13 Technical Guide SG24 8251-10o z13 Technical Introduction SG24 8250-00o z13 MultiThreaded Micro Processor B. W. Currano z13 SIMD Deep Dive Dra. Silvia M Muellero IBM z System Optimization Primer C Kevin Shumo LSPR SC28 1187-18o Principles of Operation SA22 7832-10o z13 Simultaneous Multi Threading Redp5144o SIMD Business Analytics Acceleration Redp5145o z13 Functional Matrix Redp5157

Todos os Manuais e RedBooks: IBMCursos MFTS00 e MFTS3x: MAFFEI

Acrônimos:o BHT Branch History Tableo Book Estrutura eletrônica onde ficam o MCM,

Memórias e Interfaces com os Canais, até a zEC12o BTB Branch Target Buffero Cache Memória mais rápida, próxima e menor!o CEC Central Electronic Complexo Chips Local onde são construídos os circuitoso CHPID CHannel Path IDentificationo Core Circuitos permitindo executar Instruçõeso CPouCPU PU habilitada para executar todo o z/OSo CPUMF CPU Measurement Facilityo Cycle Time O inverso da Frequência em GHzo DAT Dynamic Address Translation,

circuitos que traduzem endereços VirtuaisReaiso Decode Interpreta/Prepara o que executaro Dispatchable Unit: TCB ou SRBs do z/OSo Drawer Estrutura eletrônica onde ficam SCMs,

as Memórias e as Interfaces com os Canais nas z13o Exec. Unit Circuito com ALU que obtém resultadoso Fetch Obtenção de Instruções para execuçãoo FXU Fixed Point Execution Unitso HIS Hardware Instrumentation Serviceso ICM Instruction Cache and Mergeo IDU Instruction Decode Unito IFB Instruction Fetch and Branch Unito ISU Instruction Sequencing Unito LCSS Logical Channel SubSystemo Line Pedaços de 256 bytes dos Caches/Memo LP Logical Partition, Partição Lógicao LSPR Large Systems Performance Referenceo LSU Load and Store Unito L1 I Cache de nível 1 para Instruçõeso L1D Cache de nível 1 para Dadoso L2 I Cache de nível 2 para Instruçõeso L2D Cache de nível 2 para Dadoso L3 Cache de nível 3 (on Chip)o L4 Cache de nível 4 (on Drawer/Book)o MCM Multi Chip Module, usados até a zEC12o OoO Execução fora de Ordemo PCI Processor Capacity Indexo PHT Pattern History Tableo PU Processing Unit, os circuitos Físicoso RNI Relative Nest Intensityo SC Storage Controller, chip que contém L4o SCM Single Chip Module, usado nas z13o SIMD Single Instruction on Multiple Datao SMF System Management Facilitieso SMT Simultaneous Multi Threadingo SRB Service Request Block

COPYRIGHT CMG BRASIL - DIREITOS RESERVADOS AO CMG BRASIL SOBRE QUALQUER FORMA DE REPRODUÇÃO, CÓPIA E DIVULGAÇÃO DESTE MATERIAL

Page 9: Quantas Instruções por Ciclo?

o TCB Task Control Blocko TLB Translation Lookaside Buffero TLB1 I TLB do Cache L1 de Instruçõeso TLB1D TLB do Cache L1 de Dadoso TLB2 TLB dos Caches de demais níveiso VFU Vector and Floating Point Units

COPYRIGHT CMG BRASIL - DIREITOS RESERVADOS AO CMG BRASIL SOBRE QUALQUER FORMA DE REPRODUÇÃO, CÓPIA E DIVULGAÇÃO DESTE MATERIAL