O documento descreve as novas capacidades de processamento vetorial introduzidas na máquina z13 da IBM, incluindo 139 novas instruções vetoriais para operações SIMD em registradores vetoriais de 128 bits. As instruções suportam operações com inteiros, pontos flutuantes e strings de forma paralela.
2. 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.
3. 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.
4. 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.
5. 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.
6. 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.
7. 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.
8. 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/ walter.klaey@ch.ibm.com
Europe IMS SWAT Team
IMS Technical Symposium 2015 - 16/3/2015
10. 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.
11. 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.
13. 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.
14. 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.
15. 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.
16. 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.
17. 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.
18. 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.
19. 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.
20. 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.
22. 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.
23. 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.
24. 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.
26. 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.
27. 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.
28. Enterprise Cobol 5.2 for Z/OS
28
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
29. Enterprise Cobol 5.2 for Z/OS
29
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
30. Enterprise Cobol 5.2 for Z/OS
30
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
31. 31
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
Enterprise Cobol 5.2 for Z/OS
33. 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.
34. 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.
35. 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.
36. 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.
37. 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.
38. 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.
39. Obrigado !
39
Flavio C Buccianti
flaviocb@gmail.com
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.