39
SIMD no z13 – Conhecendo as novas funções Vetoriais do Mainframe. ©2015 Flavio C Buccianti 1 Proibida cópia ou divulgação sem permissão escrita do CMG Brasil.

SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Embed Size (px)

Citation preview

Page 1: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

SIMD no z13 – Conhecendo as novas funções Vetoriais do Mainframe.

©2015 Flavio C Buccianti

1

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 2: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Tecnologia anunciada no z13

Em Janeiro de 2015 foi anunciada a máquina z Systems z13, o novo Mainframe da IBM. Entre outras novidades foi anunciada a capacidade de processamento vetorial Processamento vetorial, possibilitando instruções tipo SIMD

• Suporte nativo pelos processadores da máquina

Máximo de 141 processadores configuráveis Máximo de 10 TB de memória

Cloud, Mobile, Analytics e Big Data

2

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 3: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Tecnologia anunciada no z13 Entre outras novidades, foi anunciada a capacidade de processamento vetorial

SIMD – Single Instruction Multiple Data

• Permite que vários dados compartilhem um mesmo operando para operações lógicas e aritméticas.

139 novas instruções Vetoriais • Vector Support • Vector Integer • Vector FP • Vector String

32 registradores vetoriais

• 0 a 15 são compartilhados com operações simples de ponto flutuante • 16 a 31 são Vetoriais dedicados

3

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 4: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

AltiVec AltiVec é um conjunto de instruções vetoriais/SIMD que manipulam tanto números de ponto flutuante quanto inteiros. Desenhadas entre 1996 e 1998 em conjunto pela Apple, IBM e Freescale (ex-Motorola semiconductor). A Apple foi a primeira usuária quando seus computadores usavam a plataforma Power G5. Usado para multimídia, para aceleração de gráficos e vídeos. A Adobe usou esses recursos para otimizar o processamento de imagens do Adobe Photoshop rodando em Mac OSx para POWER. A Sony lançou o Playstation 3 utilizando processadores Cell cujo interior é formado por um processador PowerPC (PPE) e mais oito processadores sinergísticos (SPE), capazes de executar instruções vetoriais e SIMD, acelerando a execução de cálculos e manuseio de gráficos. Este processador também contém a tecnologia AltiVec. O Novo processador do Z13, implementa o conceito do AltiVec com algumas mudanças e extensões (IBM Z/OS XL C/C++ 2.11 Programming Guide pp. 553 - SC14-7315-01).

4

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 5: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Operação Scalar

5

8 12 5 33 10 10 9 27

12 21 1 0 5 33 1 22

20 33 6 33 15 43 10 49

+ + + + + + + +

= = = = = = = =

t t+1 t+2 t+3 t+4 t+5 t+6 t+7

Operação Scalar (não vetorial e não SIMD)

Na operação Scalar, os elementos são individuias. Para executar a soma desse conjunto, devem-se somar os elementos aos pares (A + B) e guardar o resultado num terceiro elemento ( C ) . No exemplo acima, seriam usados 8 ciclos onde em cada ciclo, seria necessário carregar o elemento A, carregar o elemento B efetuar a soma e guardar o resultado no elemento C.

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 6: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

SIMD – Single Instruction Multiple Data

6

A1 A2 A3 A4 A5 A6 A7 A8

B1 B2 B3 B4 B5 B6 B7 B8

C1 C2 C3 C4 C5 C6 C7 C8

+

=

Vetor 1

Vetor 2

Vetor 3

Com a tecnologia vetorial, é possível colocar vários elementos dentro de um registrador vetorial e continuar a mante-los isolados entre sí.

t

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 7: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

SIMD – Single Instruction Multiple Data

7

8 12 5 33 10 10 9 27

12 21 1 0 5 33 1 22

20 33 6 33 15 43 10 49

+

=

Vetor 1

Vetor 2

Vetor 3

Os dados do Vetor 1 são carregados numa operação só; idem para o Vetor 2. A soma ocorrerá numa única operação (t). No final da operação, o Vetor 3 terá o conteúdo da soma de Vetor 1 + Vetor 2 e os números resultantes continuarão isolados entre sí.

t

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 8: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

8

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Slide extraído da apresentação IBM: z13: End-to-end Mobile,Analytics and Cloud PlatformSession B01 / A10

Walter Klaey/ [email protected] Europe IMS SWAT Team

IMS Technical Symposium 2015 - 16/3/2015

Page 9: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Registradores vetoriais FP 0 or VR 0 (bits 0-63) VR 0 (bits 64-127)

FP 1 or VR 1 (bits 0-63) VR 1 (bits 64-127)

FP 2 or VR 2 (bits 0-63) VR 2 (bits 64-127)

FP 3 or VR 3 (bits 0-63) VR 3 (bits 64-127)

FP 4 or VR 4 (bits 0-63) VR 4 (bits 64-127)

FP 5 or VR 5 (bits 0-63) VR 5 (bits 64-127)

FP 6 or VR 6 (bits 0-63) VR 6 (bits 64-127)

FP 7 or VR 7 (bits 0-63) VR 7 (bits 64-127)

FP 8 or VR 8 (bits 0-63) VR 8 (bits 64-127)

FP 9 or VR 9 (bits 0-63) VR 9 (bits 64-127)

FP 10 or VR 10 (bits 0-63) VR 10 (bits 64-127)

FP 11 or VR 11 (bits 0-63) VR 11 (bits 64-127)

FP 12 or VR 12 (bits 0-63) VR 12 (bits 64-127)

FP 13 or VR 13 (bits 0-63) VR 13 (bits 64-127)

FP 14 or VR 14 (bits 0-63) VR 14 (bits 64-127)

FP 15 or VR 15 (bits 0-63) VR 15 (bits 64-127)

VR 16 (bits 0 -127)

VR 17 (bits 0 -127)

VR 18 (bits 0 -127)

VR 19 (bits 0 -127)

VR 20 (bits 0 -127)

VR 21 (bits 0 -127)

VR 22 (bits 0 -127)

VR 23 (bits 0 -127) VR 24 (bits 0 -127)

VR 25 (bits 0 -127)

VR 26 (bits 0 -127)

VR 27 (bits 0 -127)

VR 28 (bits 0 -127)

VR 29 (bits 0 -127)

VR 30 (bits 0 -127)

VR 31 (bits 0 -127)

0

15

31

Vetoriais compartilhados com

Registradores FP

Vetoriais dedicados

9 Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 10: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Registradores vetoriais

Formato e posição dos dados nos registradores vetoriais para operações SIMD

10

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 11: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Instruções assembler vetoriais As 139 instruções Vector podem ser classificadas em quatro grupos: • Vector Support Instructions (46): fazem operações do tipo gather, generate

mask, load, merge, pack, permute, replicate, scatter, select, sign, store e unpack.

• Vector Integer (66): fazem operações do tipo add, and, average, checksum, element compare, compare, count, xor, galois field, load, maximum, multiply, nor, or, population count, rotate, shift, subtract, sum e test under mask.

• Vector String (6): possibilita a aceleração do processamento de strings com dados tipo character. As operações são do tipo find, isolate e string range compare. Total de 6 instruções

• Vector Floating-Point (21): fazem operações do tipo add, compare, convert,

divide, load, multiply, perform sign operation, square root, subtract e test data.

• O manual z/Architecture Principles of Operation – SA22-7832-10, conhecido como “POP”, traz nos capítulos 21 a 24, a descrição detalhada de todas as instruções vetoriais.

11

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 12: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Assembler

12

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 13: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Instruções assembler vetoriais

Vector Support Instructions (46):

VECTOR GATHER ELEMENT VECTOR GENERATE BYTE MASK VECTOR GENERATE MASK VECTOR LOAD VECTOR LOAD AND REPLICATE VECTOR LOAD ELEMENT VECTOR LOAD ELEMENT IMMEDIATE VECTOR LOAD GR FROM VR ELEMENT VECTOR LOAD LOGICAL ELEMENT AND ZERO VECTOR LOAD MULTIPLE VECTOR LOAD TO BLOCK BOUNDARY VECTOR LOAD VR ELEMENT FROM GR VECTOR LOAD VR FROM GRS DISJOINT VECTOR LOAD WITH LENGTH VECTOR MERGE HIGH VECTOR MERGE LOW VECTOR PACK

13

VECTOR PACK SATURATE VECTOR PACK LOGICAL SATURATE VECTOR PERMUTE VECTOR PERMUTE DOUBLEWORD IMMEDIATE VECTOR REPLICATE VECTOR REPLICATE IMMEDIATE VECTOR SCATTER ELEMENT VECTOR SELECT VECTOR SIGN EXTEND TO DOUBLEWORD VECTOR STORE VECTOR STORE ELEMENT VECTOR STORE MULTIPLE VECTOR STORE WITH LENGTH VECTOR UNPACK HIGH VECTOR UNPACK LOGICAL HIGH VECTOR UNPACK LOW VECTOR UNPACK LOGICAL LOW

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 14: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Instruções assembler vetoriais Vector Integer (66): VECTOR ADD VECTOR ADD COMPUTE CARRY VECTOR ADD WITH CARRY VECTOR ADD WITH CARRY COMPUTE CARRY VECTOR AND VECTOR AND WITH COMPLEMENT VECTOR AVERAGE VECTOR AVERAGE LOGICAL VECTOR CHECKSUM VECTOR ELEMENT COMPARE VECTOR ELEMENT COMPARE LOGICAL VECTOR COMPARE EQUAL VECTOR COMPARE HIGH VECTOR COMPARE HIGH LOGICAL VECTOR COUNT LEADING ZEROS VECTOR COUNT TRAILING ZEROS VECTOR EXCLUSIVE OR VECTOR GALOIS FIELD MULTIPLY SUM VECTOR GALOIS FIELD MULTIPLY SUM AND ACCUMULATE VECTOR LOAD COMPLEMENT VECTOR LOAD POSITIVE VECTOR MAXIMUM VECTOR MAXIMUM LOGICAL VECTOR MINIMUM VECTOR MINIMUM LOGICAL VECTOR MULTIPLY AND ADD LOW VECTOR MULTIPLY AND ADD HIGH VECTOR MULTIPLY AND ADD LOGICAL HIGH VECTOR MULTIPLY AND ADD EVEN VECTOR MULTIPLY AND ADD LOGICAL EVEN VECTOR MULTIPLY AND ADD ODD VECTOR MULTIPLY AND ADD LOGICAL ODD

14

VECTOR MULTIPLY HIGH VECTOR MULTIPLY LOGICAL HIGH VECTOR MULTIPLY LOW VECTOR MULTIPLY EVEN VECTOR MULTIPLY LOGICAL EVEN VECTOR MULTIPLY ODD VECTOR MULTIPLY LOGICAL ODD VECTOR NOR VECTOR OR VECTOR POPULATION COUNT VECTOR ELEMENT ROTATE LEFT LOGICAL VECTOR ELEMENT ROTATE AND INSERT UNDER MASK VECTOR ELEMENT SHIFT LEFT VECTOR ELEMENT SHIFT RIGHT ARITHMETIC VECTOR ELEMENT SHIFT RIGHT LOGICAL VECTOR SHIFT LEFT VECTOR SHIFT LEFT BY BYTE VECTOR SHIFT LEFT DOUBLE BY BYTE VECTOR SHIFT RIGHT ARITHMETIC VECTOR SHIFT RIGHT ARITHMETIC BY BYTE VECTOR SHIFT RIGHT LOGICAL VECTOR SHIFT RIGHT LOGICAL BY BYTE VECTOR SUBTRACT VECTOR SUBTRACT COMPUTE BORROW INDICATION VECTOR SUBTRACT WITH BORROW INDICATION VECTOR SUBTRACT WITH BORROW COMPUTE BORROW INDICATION VECTOR SUM ACROSS DOUBLEWORD VECTOR SUM ACROSS QUADWORD VECTOR SUM ACROSS WORD VECTOR TEST UNDER MASK

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 15: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Instruções assembler vetoriais

Vector String (6): VECTOR FIND ANY ELEMENT EQUAL VECTOR FIND ELEMENT EQUAL VECTOR FIND ELEMENT NOT EQUAL VECTOR ISOLATE STRING VECTOR STRING RANGE COMPARE

15

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 16: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Instruções assembler vetoriais

Vector Floating-Point (21): VECTOR FP ADD VECTOR FP COMPARE SCALAR VECTOR FP COMPARE AND SIGNAL SCALAR VECTOR FP COMPARE EQUAL VECTOR FP COMPARE HIGH VECTOR FP COMPARE HIGH OR EQUAL VECTOR FP CONVERT FROM FIXED 64-BIT VECTOR FP CONVERT FROM LOGICAL 64-BIT VECTOR FP CONVERT TO FIXED 64-BIT VECTOR FP CONVERT TO LOGICAL 64-BIT VECTOR FP DIVIDE VECTOR LOAD FP INTEGER VECTOR FP LOAD LENGTHENED VECTOR FP LOAD ROUNDED VECTOR FP MULTIPLY VECTOR FP MULTIPLY AND ADD VECTOR FP MULTIPLY AND SUBTRACT VECTOR FP PERFORM SIGN OPERATION VECTOR FP SQUARE ROOT VECTOR FP SUBTRACT VECTOR FP TEST DATA CLASS IMMEDIATE

16

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 17: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Instruções assembler vetoriais

17

Algumas operações vetoriais executam operações saturantes. Saturação para signed binary integers, significa que se houver um overflow, o resultado será convertido para o maior número positivo. Se houver um underflow, o resultado será convertido para o maior número negativo. Saturação para unsigned binary integers, significa que se houver um overflow, o resultado será convertido para o maior número representável. Se houver um underflow, o resultado será convertido para zero.

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 18: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Instruções assembler vetoriais - exemplos

18

O Conteúdo de cada elemento do segundo operando, o registrador Vector (V2), é adicionado ao conteúdo de cada elemento equivalente do terceiro operando, o registrador Vector (V3), e o resultado da soma é guardada no primeiro operando, o registrador Vector (V1). A quantidade e o tipo de elementos de cada operando (Vector Register) é determinado pelo valor especificado em M4:

Registrador VECTOR

(Vector Integer)

M4 Tamanho dos elementos

0 Byte

1 Halfword

2 Word

3 Doubleword

4 Quadword

5-15 Reservado

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 19: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Instruções assembler vetoriais - exemplos

19

Começando da esquerda para a direita, cada elemento do segundo operando é comparado por igualdade com cada elemento do terceiro operando. Um primeiro resultado intermediário é criado a partir dessa comparação, com uma indicação para cada elemento no segundo operando, se o elemento é igual a qualquer elemento no terceiro operando. A quantidade e o tipo de elementos de cada operando (Vector Register) são determindados pelo valor especificado em M4. O campo M5 é usado como indicador do resultado.

M4 Tamanho dos elementos

0 Byte

1 Halfword

2 Word

3 Doubleword

4 Quadword

5-15 Reservado

(Vector String) VECTOR FIND ANY ELEMENT EQUAL

M5

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 20: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Instruções assembler vetoriais - exemplos

20

Os elementos indexados nas posiçãos pares do segundo operando (V2) , são multiplicados pelos correspondentes elementos indexados pares do terceiro operando (V3) e os resultados individuias das multiplicaçoes de cada elemento serão colocados nas duplas correspondentes de operandos ímpar e par do primeiro operando (V1). Na instrução VECTOR MULTIPLY EVEN, os elementos são tratados como signed binary integers. A quantidade e o tipo de elementos de cada operando (Vector Register) são determindado pelo valor especificado em M4. M4 Tamanho dos

elementos

0 Byte

1 Halfword

2 Word

3 Doubleword

4 Quadword

5-15 Reservado

(Vector Integer) VECTOR MULTIPLY EVEN

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 21: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

C/C++

21

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 22: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Suporte no compilador IBM XL C/C++

22

O compilador XL C/C++ V2R1M1 para z/OS 2.1 inclui suporte à programação utilizando recursos do Vector Facility for z/Architecture. O compilador suporta processamento vetorial através de extensões na linguagem, baseadas em APIs das especificações do AltiVec com algumas mudanças e extensões. As extensões da linguagem para suporte às funções vetoriais são habilitadas somente quando todas as seguintes condições forem satisfeitas:

A opção ARCH(11) é especificada. A opção FLOAT(AFP(NOVOLATILE)) está em efeito. A opção VECTOR é especificada.

A publicação: z/OS XL C/C++ Programming Guide V2 R1 – SC14-7315-01, traz no capítulo 35, todos os statements ou extensões da linguagem que exploram as facilidades vetoriais do z13.

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 23: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Suporte no compilador IBM XL C/C++

23

Variável Tipo Conteúdo Limites vector unsigned char 16 unsigned char 0..255 vector signed char 16 signed char -128..127 vector bool char 16 unsigned char 0 (FALSE), 255 (TRUE) vector unsigned short 8 unsigned short 0..65535 vector unsigned short int 8 signed short -32768..32767 vector signed short 8 signed short -32768..32767 vector signed short int 8 unsigned short 0 (FALSE), 65535 (TRUE) vector bool short 8 unsigned short 0 (FALSE), 65535 (TRUE) vector bool short int 4 unsigned int 0..232-1 vector unsigned int 4 unsigned int 0..232-1 vector signed int 4 signed int -231..231-1 vector bool int 4 unsigned int 0 (FALSE), 232-1 (TRUE) vector unsigned long long 2 unsigned long long 0..264-1 vector signed long long 2 signed long long -263..263-1 vector bool long long 2 unsigned long long 0 (FALSE), 264-1 (TRUE) vector double 2 double IEEE-754 double (64 bit) precision floating-point values

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 24: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Exemplos em XL C/C++

24

vec_mule: Vector Multiply Even

d = vec_mule(a, b) Retorna um vetor contendo o resultado das multiplicações feitas para cada elemento par indexado do primeiro vetor especificado e seu correspondente par do segundo vetor especificado, retornando um valor correspondente com o dobro do tamanho dos campos originais.

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 25: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

COBOL

25

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 26: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Enterprise Cobol 5.2 for Z/OS

26

Quando especificado option ARCH (11) Explora as novas instruções do Vector Extension Facility (SIMD) para os statements de Cobol:

• INSPECT REPLACING • INSPECT TALLYING

• 30X mais eficiência na execução dessas instruções

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 27: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Enterprise Cobol 5.2 for Z/OS

27

INSPECT O statement INSPECT examina caracteres ou grupos de caracteres em um data item ou “string". • INSPECT executa os seguintes procedimentos: Conta as occorrências de um caractere específico (alfanumerico, DBCS, ou national-UTF-16) em um data item (formats 1 e 3). Conta as occorrências de caracteres específicos e preenche porções ou todo o data item com caracteres específicos, como por exemplo, espaços ou zeros (formats 2 and 3). Converte todas as occorrências de caracteres específicos de um data item por caracteres de substituição fornecidos pelo usuário (format 4).

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 28: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Enterprise Cobol 5.2 for Z/OS

28

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 29: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Enterprise Cobol 5.2 for Z/OS

29

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 30: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Enterprise Cobol 5.2 for Z/OS

30

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 31: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

31 Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Enterprise Cobol 5.2 for Z/OS

Page 32: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

PL/I

32

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 33: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Enterprise PL/I 4.5 for z/OS

33

z13 hardware exploitation foi implementado no compilador Enterprise PL/I for z/OS através da opção ARCHITECTURE(11). As otimizações proporcionam uma melhor performance para aplicações rodando no servidor z13, sem que sejam requeridas alterações no código fonte. Uma média de melhoria de 17% foi observada na performance em benchmarks para programas “PL/I CPU-intensivos” quando rodando no z13 e comparando os resultados com os mesmos testes no rodando no zEnterprise EC12.* Obs.: As melhorias de performance são baseadas em medidas tomadas nos laboratórios internos da IBM, usando as opções ARCH(11) e OPT(3) do compilador. Resultados de performance podem variar para aplicações específicas. Alguns fatores que podem afetar a performance são: o código fonte e as opções do compilador.

*PL/I 4.5 Fact Sheet http://www-01.ibm.com/support/docview.wss?uid=swg21691853

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 34: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Enterprise PL/I 4.5 for z/OS

34

Melhorias de performance: Quando é especificado ARCH(11), o compilador gera um código que explora as novas instruções vetoriais, se o algorítmo ou função forem elegíveis, após a compilação, à instruções assembler que utilizam SIMD. As funções SEARCH e VERIFY são as que mais se beneficiam dessas novas instruções.

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 35: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Enterprise PL/I 4.5 for z/OS

35

SEARCH SEARCH retorna um valor especificando a primeira posição num string onde aparece qualquer um dos caracter, bit,

graphic ou widechar de outro string. É possível também especificar a partir de qual posição deve-se iniciar a procura. x especifica em qual string procurar pela ocorrência de qualquer um caracter, bit, graphic ou widechar presente em y. Se x ou y forem um null string, o resultado é zero. Se não houver nenhuma ocorrência de y em x, o resultado será zero. n especifica a posição dentro de x onde dever ser iniciada a procura.

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 36: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Enterprise PL/I 4.5 for z/OS

36

Exemplo:

dcl Source char value(’ Our PL/I wields the Power ’); dcl Pos fixed bin(31); /* Find occurrences of any of the characters ’P’,’o’,or ’w’ in source * / Pos = search (Source, ’Pow’); /* returns 6 for the ’P’ */ Pos = search (Source, ’Pow’, Pos+1); /* returns 11 for the ’w’ */ Pos = search (Source, ’Pow’, Pos+1); /* returns 22 for the ’P’ */ Pos = search (Source, ’Pow’, Pos+1); /* returns 23 for the ’o’ */ Pos = search (Source, ’Pow’, Pos+1); /* returns 24 for the ’w’ */ No examplo acima, SEARCH retorna a posição onde qualquer um dos três caracteres (‘P’,’o’ ou ‘w’) aparecem na frase:

’ Our PL/I wields the Power ’ 1 6 11 22 23 24

Pos = index (source, ’Pow’,1); /* returns 22 for the ’Pow’ */ INDEX retorna a posição onde o string completo: ‘Pow’ aparece.

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 37: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Enterprise PL/I 4.5 for z/OS

37

VERIFY VERIFY retorna um valor indicando a posição em x, do caractere, widechar, gráfico ou bit mais à esquerda que não está em y. É possível também especificar a partir de qual posição do x deve ser procurado. Se todos os caracteres, widechars, graphics ou bits em x estiverem em y também, será restorndo um valor de zero. Se x é um null string, um valor de zero é retornado. Se x não é o null string e y é o null string, o valor retornado será o conteúdo de n . Valor padrão de n é um.

x String y String n Especifica o local dentro do String onde a procura deve ser iniciada.

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 38: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Enterprise PL/I 4.5 for z/OS

38

Exemplo: X = ’_ _a b’; /* Two blanks in each space */ Y = ’ ’; /* One blank */ N = 1; I = verify(X,Y,N); /* I = 3 */ do while (I > 0); display ( ’Nonblank at position ’ { trim(I) ); N = I + 1; I = verify(X,Y,N); end; Depois da primeira passagem pelo loop do while-end N=4 e VERIFY(X,Y,N) retorna 6. Depois da segunda passagem, N=7 (LENGTH(x)+1), VERIFY(X,Y,N) agora retorna 0 e o loop termina.

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.

Page 39: SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio Buccianti

Obrigado !

39

Flavio C Buccianti [email protected]

Proibida cópia ou divulgação sem

permissão escrita do CMG Brasil.