BR112021008844A2 - instrução de separação e fusão para um processador de propósito geral - Google Patents

instrução de separação e fusão para um processador de propósito geral Download PDF

Info

Publication number
BR112021008844A2
BR112021008844A2 BR112021008844-0A BR112021008844A BR112021008844A2 BR 112021008844 A2 BR112021008844 A2 BR 112021008844A2 BR 112021008844 A BR112021008844 A BR 112021008844A BR 112021008844 A2 BR112021008844 A2 BR 112021008844A2
Authority
BR
Brazil
Prior art keywords
instruction
register
list
lists
operand
Prior art date
Application number
BR112021008844-0A
Other languages
English (en)
Inventor
Bruce Conrad Giamei
Martin Recktenwald
Donald William Schmidt
Timothy Slegel
Aditya Nitin Puranik
Mark Farrell
Christian Jacobi
Jonathan Bradbury
Christian Gerhard Zoellin
Original Assignee
International Business Machines Corporation
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corporation filed Critical International Business Machines Corporation
Publication of BR112021008844A2 publication Critical patent/BR112021008844A2/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/06Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
    • G06F7/08Sorting, i.e. grouping record carriers in numerical or other ordered sequence according to the classification of at least some of the information they carry
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • G06F16/2443Stored procedures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/06Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
    • G06F7/14Merging, i.e. combining at least two sets of record carriers each arranged in the same ordered sequence to produce a single set having the same ordered sequence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30163Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

INSTRUÇÃO DE SEPARAÇÃO E FUSÃO PARA UM PROCESSADOR DE PROPÓSITO GERAL. Uma instrução de Separar Listas é provida para executar uma operação de separação e/ou uma fusão. A instrução é uma instrução de máquina de arquitetura de uma arquitetura de conjunto de instruções e é executada por um processador de propósito geral do ambiente de computação. A execução inclui separar uma pluralidade de listas de entrada para obter uma ou mais listas de saída separadas, que são transmitidas.

Description

“INSTRUÇÃO DE SEPARAÇÃO E FUSÃO PARA UM PROCESSADOR DE PROPÓSITO GERAL” ANTECEDENTES
[0001] Um ou mais aspectos se referem, em geral, à facilitação do processamento em um ambiente de computação e em particular, à facilitação do processamento de separação e fusão.
[0002] Um aspecto do processamento de computador no qual o processamento de separação e fusão é empregado é em processamento de banco de dados. Um banco de dados é uma coleção organizada de dados, tipicamente dividida em registros de dados. A separação e fusão de coleções de registros de dados são operações comuns de bancos de dados executadas por aplicações de software. Quando tais aplicações são destinados a serem executados em um processador de propósito geral, é responsabilidade da aplicação gerar a sequência de muitas instruções primitivas utilizadas para executar a operação desejada do banco de dados.
[0003] Para otimizar o desempenho, uma aplicação pode tentar também otimizar a sequência de instruções primitivas para cada modelo de processador no qual a aplicação pode executar, desse modo exacerbando a complexidade da aplicação.
SUMÁRIO
[0004] As desvantagens do estado da técnica são superadas e vantagens adicionais são providas através da provisão de um produto de programa de computador para facilitar processamento em um ambiente de computação. O produto de programa de computador inclui uma mídia de armazenamento legível por computador legível por um circuito de processamento e armazenado instruções para executar um método. O método inclui obter uma instrução para executar uma operação de separação. A instrução é uma instrução de máquina de arquitetura única de uma arquitetura de conjunto de instruções e é executada por um processador de propósito geral do ambiente de computação. A execução inclui separar uma pluralidade de listas de entrada para obter uma ou mais listas de saída separadas, e prover como saída uma ou mais listas de saída separadas.
[0005] Por utilizar uma instrução de arquitetura única para executar uma operação de separação (e/ou fusão) em um processador de propósito geral, um subconjunto significativo de instruções de software primitivas para executar essas operações é substituído pela instrução de arquitetura única. A substituição dessas instruções primitivas com uma instrução de arquitetura única reduz a complexidade do programa e elimina a necessidade de incluir código para otimizar as instruções primitivas. Adicionalmente, o desempenho em geral é aperfeiçoado.
[0006] Em um exemplo, a instrução inclui um campo de código de operação incluindo um código de operação para especificar uma operação de separar lista e um campo a ser utilizado para designar uma localização, a uma localização a ser utilizado no armazenamento de uma ou mais listas de saída separadas. Em um exemplo adicional, a instrução inclui outro campo a ser utilizado para designar outra localização, a outra localização a armazenar uma ou mais delineações de lista de saída.
[0007] Como exemplo, o um campo é um campo de registro, o campo de registro designando um registro, o registro incluindo um endereço de uma localização e o outro campo é outro campo de registro, o outro campo de registro designando outro registro, o outro registro incluindo um endereço do outra localização.
[0008] Em um exemplo, a instrução emprega um registro implícito para determinar uma função a ser executada pela instrução. A função é selecionada a partir de um grupo de funções consistindo em uma função de consultar funções disponíveis, uma função de separar registros de comprimento fixo e uma função de separar registros de comprimento variável.
[0009] Como exemplo adicional, a instrução emprega outro registro implícito para localizar um bloco de parâmetros em memória utilizada pela instrução. O bloco de parâmetros inclui informações utilizadas pela instrução dependendo da função a ser executada. Em um exemplo, a função a ser executada é uma função de separar registros de comprimento fixo ou uma função de separar registros de comprimento variável e o bloco de parâmetros inclui informações para localizar a pluralidade de listas de entrada e informações para continuar a separação, com base na interrupção da separação.
[00010] Em uma concretização adicional, o um registro implícito inclui ainda um indicador de modo de operação a ser utilizado para especificar se uma fusão de uma ou mais listas de saída separadas deve ser executada.
[00011] Como um exemplo específico, a instrução inclui um campo de código de operação incluindo um código de operação para especificar uma operação de separar lista, um campo de primeiro registrador incluindo uma designação de um primeiro registrador, o primeiro registrador incluindo um endereço utilizado na separação de uma ou mais listas de saída separadas, e um segundo campo de registro incluindo uma designação de um segundo registrador, o segundo registrador incluindo um endereço utilizado na separação de uma ou mais delineações de lista de saída. A instrução emprega um primeiro registrador implícito para determinar uma função a ser executada pela instrução e um segundo registrador implícito para localizar um bloco de parâmetros em memória utilizado pela instrução.
[00012] Métodos implementados por computador e sistemas referentes a um ou mais aspectos também são descritos e reivindicações na presente invenção. Adicionalmente, serviços referentes a um ou mais aspectos também são descritos e podem ser reivindicados na presente invenção.
[00013] Características e vantagens adicionais são realizadas através das técnicas descritas na presente invenção. Outras concretizações e aspectos são descritos em detalhe na presente invenção e são considerados parte dos aspectos reivindicados.
BREVE DESCRIÇÃO DOS DESENHOS
[00014] Um ou mais aspectos são particularmente indicados e distintamente reivindicados como exemplos nas reivindicações na conclusão do relatório descritivo. Os objetivos, características e vantagens acima de um ou mais aspectos são evidentes a partir da seguinte descrição detalhada tomada em combinação com os desenhos em anexo, nos quais: A Figura 1A mostra um exemplo de um ambiente de computação para incorporar e utilizar um ou mais aspectos da presente invenção; A Figura 1B mostra detalhes adicionais de um processador da Figura 1A, de acordo com um ou mais aspectos da presente invenção; A Figura 2 mostra outro exemplo de um ambiente de computação para incorporar e utilizar um ou mais aspectos da presente invenção; A Figura 3A mostra um formato de uma instrução de Separar Listas, de acordo com um aspecto da presente invenção; A Figura 3B mostra um exemplo de campos de um registrador implícito, registrador geral 0 utilizado pela instrução de Separar Listas, de acordo com um aspecto da presente invenção; A Figura 3C mostra um exemplo de códigos de função para a instrução de Separar Listas, de acordo com um aspecto da presente invenção; A Figura 3D mostra um exemplo de um campo de um registrador implícito, registrador geral 1, utilizado pela instrução de Separar Listas de acordo com um aspecto da presente invenção; A Figura 3E mostra um exemplo de conteúdo de um registrador, R1, especificado pela instrução de Separar Listas, de acordo com um aspecto da presente invenção; A Figura 3F mostra um exemplo de conteúdo de um registrador, R1+1, utilizado pela instrução de Separar Listas, de acordo com um aspecto da presente invenção;
A Figura 3G mostra um exemplo de conteúdo de um registrador, R2, especificado pela instrução de Separar Listas, de acordo com um aspecto da presente invenção; A Figura 3H mostra um exemplo de conteúdo de um registrador, R2 + 1, utilizado pela instrução de Separar Listas, de acordo com um aspecto da presente invenção; A Figura 3I mostra um exemplo de conteúdo de um bloco de parâmetros utilizado pela função SORTL-QAF da instrução de Separar Listas, de acordo com um aspecto da presente invenção; A Figura 3J mostra um exemplo de um formato de gravação de comprimento fixo utilizado pela instrução de Separar Listas, de acordo com um aspecto da presente invenção; A Figura 3K mostra um exemplo de conteúdo de um bloco de parâmetros utilizado pela função SORTL-SFLR da instrução de Separar Listas, de acordo com um aspecto da presente invenção; As Figuras 4A-4B mostram exemplos de SORTL-SFLR, de acordo com um ou mais aspectos da presente invenção; A Figura 5A mostra um exemplo de um sumário de valores para entradas na função SORTL-SFLR, de acordo com um aspecto da presente invenção; A Figura 5B mostra um exemplo de restrições para modificações nos campos de comprimento e endereço de lista de entrada para a função SORTL-SFLR, de acordo com um aspecto da presente invenção; A Figura 6A mostra um exemplo de um primeiro local de operando/primeiro operando antes de executar SORTL com uma indicação de modo de fusão definida em zero, de acordo com um aspecto da presente invenção; A Figura 6B mostra um exemplo de um primeiro local de operando/primeiro operando após executar SORTL com uma indicação de modo de fusão definida em zero, de acordo com um aspecto da presente invenção; A Figura 6C mostra um exemplo de um segundo local de operando/segundo operando antes de executar SORTL com uma indicação de modo de fusão definida em zero, de acordo com um aspecto da presente invenção; A Figura 6D mostra um exemplo de um segundo local de operando/segundo operando após executar SORTL com uma indicação de modo de fusão definida em zero, de acordo com um aspecto da presente invenção; A Figura 7A mostra um exemplo de um primeiro local de operando/primeiro operando antes de executar SORTL com uma indicação de modo de fusão definida em um, de acordo com um aspecto da presente invenção; A Figura 7B mostra um exemplo de um primeiro local de operando/primeiro operando após executar SORTL com uma indicação de modo de fusão definida em um, de acordo com um aspecto da presente invenção; A Figura 8 mostra um exemplo de certos campos de um bloco de parâmetros utilizado de acordo com um aspecto da presente invenção; A Figura 9 mostra um exemplo de um formato de gravação de comprimento variável utilizado pela instrução de Separar Listas, de acordo com um aspecto da presente invenção; As Figuras 10A-10B mostram um exemplo de processamento associado à instrução de Separar Listas, de acordo com um aspecto da presente invenção, As Figuras 11A - 11B mostram um exemplo de facilitar processamento em um ambiente de computação, de acordo com um aspecto da presente invenção, A Figura 12A mostra outro exemplo de um ambiente de computação para incorporar e utilizar um ou mais aspectos da presente invenção, A Figura 12B mostra detalhes adicionais da memória da Figura 12A, A Figura 13 mostra uma concretização de um ambiente de computação em nuvem; e A Figura 14 mostra um exemplo de camadas de modelo de abstração.
DESCRIÇÃO DETALHADA
[00015] De acordo com um aspecto da presente invenção, é provida uma capacidade para facilitar o processamento em um ambiente de computação. Como exemplo, uma única instrução (por exemplo, uma instrução de máquina de hardware com arquitetura única na interface de hardware/software) é provida para executar uma operação, como separar e/ou fundir gravações de dados. A instrução é executada, por exemplo, em um processador de propósito geral. Utilizando uma instrução única para separar e/ou fundir gravações de dados, por exemplo, de um banco de dados, o tempo de execução em um processador, como um processador de propósito geral, é reduzido e uma quantidade de memória utilizada na separação e/ou fusão é reduzida.
[00016] Uma concretização de um ambiente de computação para incorporar e utilizar um ou mais aspectos da presente invenção é descrita com referência à Figura 1A. Um ambiente de computação 100 inclui, por exemplo, um processador 102 (por exemplo, uma unidade de processamento central), uma memória 104 (por exemplo, memória principal, também conhecida como memória de sistema, armazenamento principal, armazenamento central, armazenamento) e um ou mais dispositivos de entrada/saída (I/O) e/ou interfaces 106 acoplados entre si através, por exemplo, de um ou mais barramentos 108 e/ou outras conexões.
[00017] Em um exemplo, o processador 102 se baseia na arquitetura de hardware z/Architecture® oferecida pela International Business Machines Corporation, Armonk, Nova York, e faz parte de um servidor, como um servidor IBM Z®, que também é oferecido pela International Business Machines Corporation e implementa a arquitetura de hardware z/Architecture. Uma concretização da arquitetura de hardware z/Architecture é descrita em uma publicação intitulada “z/Architecture Principles of Operation,” Publicação da IBM No. SA22-7832-11, 12ª edição, setembro de 2017, que é incorporada pelo presente por referência na íntegra. A arquitetura de hardware z/Architecture, entretanto, é apenas uma arquitetura de exemplo outras arquiteturas e/ou outros tipos de ambientes de computação podem incluir e/ou utilizar um ou mais aspectos da presente invenção. Em um exemplo, o processador executa um sistema operacional, como o sistema operacional z/OS®, também oferecido pela International Business Machines Corporation.
[00018] O processador 102 inclui uma pluralidade de componentes funcionais utilizados para executar instruções.
Como mostrado na Figura 1B, esses componentes funcionais incluem, por exemplo, um componente de buscar instrução 120 para buscar instruções a serem executadas; uma unidade de decodificar instrução 122 para decodificar as instruções buscadas e obter operandos das instruções decodificadas; um componente de executar instrução 124 para executar as instruções decodificadas; um componente de acesso de memória 126 para acessar a memória para execução de instrução, se necessário, e um componente de writeback 130 para fornecer os resultados das instruções executadas. Um ou mais desses componentes podem, de acordo com um ou mais aspectos da presente invenção, incluir pelo menos uma porção de ou ter acesso a um ou mais outros componentes que fornecem processamento de separação/fusão (ou outro processamento que pode utilizar um ou mais aspectos da presente invenção). O um ou mais outros componentes incluem, por exemplo, um componente de separação/fusão (ou outro componente) 136. A funcionalidade provida pelo componente 136 é descrita em detalhe adicional abaixo.
[00019] Outro exemplo de um ambiente de computação para incorporar e utilizar um ou mais aspectos da presente invenção é descrito com referência à Figura 2. Em um exemplo, o ambiente de computação se baseia na arquitetura de hardware z/Architecture; entretanto, o ambiente de computação pode ser baseado em outras arquiteturas oferecidas pela International Business Machines Corporation ou outras.
[00020] Com referência à Figura 2, em um exemplo, o ambiente de computação inclui um complexo central de eletrônica (CEC) 200. CEC 200 inclui uma pluralidade de componentes, como, por exemplo, uma memória 202 (também conhecida como uma memória de sistema, memória principal, armazenamento principal, armazenamento central, armazenamento) acoplada a um ou mais processadores (também conhecido como unidades de processamento central (CPUs)) 204 e a um subsistema de entrada/saída 206.
[00021] A memória 202 inclui, por exemplo, uma ou mais partições lógicas 208, um hipervisor 210 que gerencia as partições lógicas e firmware de processador 212. Um exemplo de hipervisor 210 é o hipervisor Processor Resource/System Manager (PR/SM) oferecido pela International Business Machines Corporation, Armonk, Nova York. Como utilizado na presente invenção, firmware inclui, por exemplo, o microcódigo do processador. Inclui, por exemplo, as instruções a nível de hardware e/ou estruturas de dados utilizadas na implementação de código de máquina de nível mais alto. Em uma concretização, inclui, por exemplo, código de propriedade que é tipicamente fornecido como microcódigo que inclui software confiável ou microcódigo específico para o hardware subjacente e controla o acesso do sistema operacional ao hardware do sistema.
[00022] Cada partição lógica 208 é capaz de funcionar como um sistema separado. Isto é, cada partição lógica pode ser independentemente redefinida, rodar um sistema operacional convidado 220 como um sistema operacional z/OS, ou outro sistema operacional, e operar com programas diferentes 222. Um sistema operacional ou programa de aplicação que roda em uma partição lógica parece ter acesso a um sistema cheio e completo, porém na realidade, apenas uma porção dele está disponível.
[00023] A memória 202 é acoplada a processadores (por exemplo, CPUs) 204, que são recursos de processador físico que podem ser alocados às partições lógicas. Por exemplo, uma partição lógica 208 inclui um ou mais processadores lógicos, cada um dos quais representa todo ou uma fatia de um recurso de processador físico 204 que pode ser dinamicamente alocado à partição lógica.
[00024] Além disso, a memória 202 é acoplada ao subsistema I/O 206. O subsistema I/O 206 pode ser uma parte do complexo central de eletrônica ou separado do mesmo. Orienta o fluxo de informação entre o armazenamento principal 202 e unidades de controle de entrada/saída 230 e dispositivos de entrada/saída (I/O) 240 acoplados ao complexo central de eletrônica.
[00025] Muitos tipos de dispositivos I/O podem ser utilizados. Um tipo particular é um dispositivo de armazenamento de dados 250. O dispositivo de armazenamento de dados 250 pode armazenar um ou mais programas 252, uma ou mais instruções de programa legíveis por computador 254 e/ou dados etc. As instruções de programa legíveis por computador podem ser configuradas para realizar funções de concretizações de aspectos da invenção.
[00026] Em um exemplo, o processador 204 inclui um componente de separação/fusão (ou outro componente) 260 para executar uma ou mais de separação e/ou fusão (ou outras operações que podem utilizar um ou mais aspectos da presente invenção). Em vários exemplos, pode haver um ou mais componentes executando essas tarefas. São possíveis muitas variações.
[00027] O complexo central de eletrônica 200 pode incluir e/ou ser acoplado a mídia de armazenamento do sistema de computador volátil/não volátil, removível/não removível. Por exemplo, pode incluir e/ou ser acoplado a uma mídia magnética não volátil, não removível (tipicamente chamada um “disco rígido”), uma unidade de disco magnético para leitura a partir de e gravação para um disco magnético removível, não volátil (por exemplo, um “disco flexível”) e/ou uma unidade de disco ótico para leitura a partir de ou gravação para um disco ótico não volátil, removível como um CD-ROM, DVD-ROM ou outra mídia ótica. Deve ser entendido que outros componentes de hardware e/ou software poderiam ser utilizados em combinação com o complexo central de eletrônica 200. Os exemplos incluem, porém não são limitados a: microcódigo, drivers de dispositivo, unidades de processamento redundante, arranjos de unidade de disco externa, sistemas RAID, unidades de fita e sistemas de armazenamento de arquivo de dados etc.
[00028] Adicionalmente, o complexo central de eletrônica 200 pode ser operacional com inúmeros outras configurações ou ambientes de sistema de computação de propósito geral ou propósito especial. Os exemplos de sistemas, ambientes e/ou configurações de computação bem conhecidos que podem ser adequados para utilização com o complexo central de eletrônica 200 incluem, porém não são limitados a, sistemas de computador pessoal (PC), sistemas de computador de servidor, clientes thin, clientes thick, dispositivos de laptop ou portáteis, sistemas multiprocessadores, sistemas baseados em microprocessador,
decodificadores, eletrônica programável de consumidor, PCs de rede, sistemas de minicomputador, sistemas de computador mainframe, e ambientes de computação distribuídos de nuvem que incluem quaisquer dos sistemas ou dispositivos acima e similares.
[00029] Embora vários exemplos de ambientes de computação sejam descritos na presente invenção, um ou mais aspectos da presente invenção podem ser utilizados com muitos tipos de ambientes. Os ambientes de computação fornecidos na presente invenção são apenas exemplos.
[00030] De acordo com um aspecto da presente invenção, um processador, como processador 102 ou 204, emprega uma instalação de separação aperfeiçoada que provê um mecanismo para separar múltiplas listas de dados de entrada não separados em uma ou mais listas de dados de saída separados. Em um exemplo, a instalação de separação aperfeiçoada é instalada no sistema quando um indicador de instalação é definido, por exemplo, em um. Como um exemplo específico da arquitetura de hardware z/Architecture, o bit de instalação 150 é definido, por exemplo, em um, quando a instalação de separação aperfeiçoada, é instalada no modo de arquitetura z/Architecture. A instalação provê também, em uma concretização, um mecanismo para fundir múltiplas listas de dados de entrada separados em uma única lista de dados de saída separados. A instalação inclui, por exemplo, uma instrução de Separar Listas, cuja concretização é descrita abaixo.
[00031] Uma concretização de detalhes referente a uma instrução de Separar Listas é descrita com referência às
Figuras 3A-3K. Essa instrução é executada, em um exemplo, em um processador de propósito geral (por exemplo, processador 102 ou 204). Na descrição da presente invenção, locais específicos, campos específicos e/ou tamanhos específicos dos campos são indicados (por exemplo, bytes e/ou bits específicos). Entretanto, outros locais, campos e/ou tamanhos podem ser providos. Adicionalmente, embora a definição de um bit em um valor particular, por exemplo, um ou zero, seja especificada, esse é somente um exemplo. O bit pode ser definido em um valor diferente, como o valor oposto ou em outro valor, em outros exemplos. São possíveis muitas variações.
[00032] Com referência à Figura 3A, em um exemplo, um formato de uma instrução de Separar Listas (SORTL) 300 é um formato RRE que indica um registrador e operação de registrador com um código de operação estendida (opcode). Como exemplo, a instrução inclui um campo de código de operação 302 (por exemplo, bits 0-15) tendo um código de operação que indica uma operação de separar e/ou fundir, um campo de primeiro registrador (R1) 304 (por exemplo, bits 24- 27) designando um primeiro par de registradores gerais e um segundo campo de registrador (R2) 306 (por exemplo, bits 28- 31) designando um segundo par de registradores gerais. O conteúdo de um registrador designado pelo campo R1 304 especifica uma localização do primeiro operando (em armazenamento) e o conteúdo de um registrador designado pelo campo R2 306 especifica uma localização do segundo operando (em armazenamento). O conteúdo de R1 + 1 especifica o comprimento do primeiro operando e o conteúdo de R2 + 1 especifica o comprimento do segundo operando. Em um exemplo, os bits 16-23 da instrução são reservados e devem conter zeros, de outro modo, o programa não pode operar compativelmente no futuro. Como utilizado na presente invenção, o programa é um que emite a instrução de Separar Listas. Pode ser um programa de usuário, um sistema operacional ou outro tipo de programa.
[00033] Em uma concretização, a execução da instrução inclui o uso de um ou mais registradores gerais implícitos (isto é, registrados não explicitamente designados pela instrução). Por exemplo, os registradores gerais 0 e 1 são utilizados na execução da instrução de Separar Listas, como descrito na presente invenção. O registrador geral 0 é utilizado, em um exemplo, para especificar se a fusão deve ser executada e especificar uma função de separação a ser executada pela instrução e o registrador geral 1 é utilizado para fornecer uma localização de um bloco de parâmetros utilizado pela instrução. Em outro exemplo, o registrador geral 0 não é utilizado para especificar se a fusão deve ser executada; ao invés, a fusão é definida/não definida pela máquina (por exemplo, processador) e não é alterável por um indicador de modo. São possíveis outras variações.
[00034] Como exemplo, com referência à Figura 3B, um registrador geral 0 (308) inclui um campo de modo de fusão 310 (descrito abaixo) e um campo de código de função 312. Em um exemplo específico, posições de bit 57-63 do registrador geral 0 contêm um código de função; porém em outras concretizações, outros bits podem ser utilizados para conter o código de função. Quando os bits 57-63 do registrador geral
0 designam um código de função não atribuído ou não instalado, uma exceção de especificação é reconhecida em um exemplo.
[00035] Os códigos de função atribuídos de exemplo para a instrução de Separar Listas são mostrados na Figura 3C e incluem, por exemplo, o código de função 0 (313) indicando uma função SORTL-QAF (consultar funções disponíveis), código de função 1 (315) indicando uma função SORTL-SFLR (registros de separar comprimento fixo), e código de função 2 (317) indicando uma função SORTL-SVLR (registros de separar de comprimento variável). Cada código utiliza um bloco de parâmetros e o tamanho do bloco de parâmetros depende, em um exemplo, da função. Por exemplo, para a função SORTL-QAF, o bloco de parâmetros tem 32 bytes, e para SORTL- SFLR e SORTL-SVLR, o bloco de parâmetros é 576 + 16 x Nis, onde Nis é um número de listas de entrada, como especificado por um tamanho de interface. Outros códigos de função não são atribuídos nesse exemplo. Embora as funções de exemplo e códigos de função sejam descritas, outras funções e/ou códigos de função podem ser utilizados.
[00036] Como anteriormente indicado, o registrador geral 0 inclui também um campo de modo de fusão 310. Em um exemplo, o bit 56 do registrador geral 0 especifica um modo de operação (modo de fusão) que se aplica as. por exemplo, funções SORTL-SFLR e SORLT-SVLR. O bit 56 do registrador geral 0 é ignorado, em um exemplo, quando a função especificada é SORTL-QAF. Adicionalmente, em um exemplo, as posições de bit 0-55 do registrador geral 0 são ignoradas.
[00037] Detalhes adicionais referentes a outro registrador implícito, o registrador geral 1, utilizado pela instrução de Separar Listas são descritos com referência à Figura 3D. O conteúdo do registrador geral 1 (314) específica, por exemplo, um endereço lógico 316 do byte mais à esquerda de um bloco de parâmetros em armazenamento. O bloco de parâmetros deve ser designado em um limite de palavra dupla, em um exemplo; de outro modo, uma exceção de especificação é reconhecida. Detalhes adicionais referentes ao bloco de parâmetro são descritos adicionalmente abaixo.
[00038] Para as funções especificadas (por exemplo, SORTL-QAF, SORTL-SFLR, SORTL-SVLR), o conteúdo de registradores gerais 0 e 1 não é modificado. Adicionalmente, em um exemplo, o campo R1 304 designa um par de par-ímpar de registradores gerais. É para designar um registrador de número par e não é para designar o registrador geral 0, de outro modo, uma exceção de especificação é reconhecida. Quando a função especificada é SORTL-SFLR ou SORTL-SVLR, como mostrado nas Figuras 3E-3F, os conteúdos de um registrador geral R1 318 especificam, por exemplo, um endereço lógico 320 do byte mais à esquerda do primeiro operando, e os conteúdos de um registrador geral R1 + 1 (322) especificam um comprimento 324 do primeiro operando, por exemplo, em bytes. Quando a função especificada é SORTL-SFLR ou SORTL-SVLR, o primeiro operando, por exemplo, deve ser designado em um limite de palavra dupla, de outro modo, uma exceção de especificação é reconhecida. Dados, na forma de registros, são selecionados a partir de um conjunto de listas de entrada e são armazenados no primeiro local de operando (por exemplo, começando no endereço especificado utilizando R1). Quando a função SORTL-QAF é especificada, os conteúdos dos registradores gerais R1 e R1 + 1 são ignorados.
[00039] Além disso, para as funções especificadas (por exemplo, SORTL-QAF, SORTL-SFLR, SORTL-SVLR), em um exemplo, o campo R2 306 designa um par de par-ímpar de registradores gerais. É para designar um registrador de número par e não é para designar o registrador geral 0, de outro modo, uma exceção de especificação é reconhecida. Quando a função especificada é SORTL-SFLR ou SORTL-SVLR e o modo de fusão (MM) é zero, como mostrado nas Figuras 3G-3H, os conteúdos de um registrador geral R2 326 especificam, por exemplo, um endereço lógico 328 do byte mais à esquerda do segundo operando, e os conteúdos de um registrador geral R2 + 1 (330) especificam um comprimento 332 do segundo operando, por exemplo, em bytes. Quando a função especificada é SORTL- SFLR ou SORTL-SVLR, e o modo de fusão (MM) é zero, o segundo operando deve ser designado em um limite de palavra dupla, de outro modo uma exceção de especificação é reconhecida, em um exemplo. O endereço de partida e o comprimento de cada lista de saída, mencionados como delineações de lista de saída (OLD), são armazenados no segundo local de operando (por exemplo, começando no endereço especificado utilizando R2) quando MM é zero. Quando a função SORTL-QAF é especificada, ou MM é um, os conteúdos dos registradores gerais R2 e R2 + 1 são ignorados.
[00040] Em execução, em uma concretização, uma função especificada pelo código de função no registrador geral 0 é executada. Como parte da operação quando a função especificada é SORTL-SFLR ou SORTL-SVLR, o que se segue ocorre, em uma concretização:
O endereço no registrador geral R1 é incrementado pelo número de bytes armazenados no primeiro local de operando e o comprimento no registrador geral R1 + 1 é diminuído pelo mesmo número. Quando MM é zero, o endereço no registrador geral R2 é aumentado pelo número de bytes armazenados no segundo local de operando, e o comprimento no registrador geral R2 + 1 é diminuído pelo mesmo número.
[00041] Em um exemplo, a formação e atualização dos endereços e comprimentos são dependentes do modo de endereçamento.
[00042] No modo de endereçamento de 24 bits, o que se segue se aplica, em uma concretização: Os conteúdos de posições de bit 40-63 dos registradores gerais 1, R1, e R2 constituem os endereços do bloco de parâmetros, primeiro operando e segundo operando, respectivamente e os conteúdos de posições de bits 0-39 são ignoradas. Os bits 40-63 dos endereços atualizados de primeiro operando e segundo operando substituem os bits correspondentes nos registradores gerais R1 e R2, respectivamente. Transportes de posição de bit 40 dos endereços atualizados são ignorados, e os conteúdos das posições de bits 32-39 dos registradores gerais R1 e R2 são definidos em zeros. Os conteúdos de posições de bits 0-31 dos registradores gerais R1 e R2 permanecem inalterados. Os conteúdos de posições de bits 32-63 dos registradores gerais R1 + 1 e R2 + 1 formam inteiros binários sem sinal de 32 bits que especificam o número de bytes no primeiro e no segundo operandos, respectivamente. Os conteúdos de posições de bits 0-31 dos registradores gerais R1 + 1 e R2 + 1 são ignorados. Os bits 32-63 dos comprimentos atualizados de primeiro operando e segundo operando substituem os bits correspondentes nos registradores gerais R1 + 1 e R2 + 1, respectivamente. Os conteúdos das posições de bits 0-31 dos registradores gerais R1 + 1 e R2 + 1 permanecem inalterados.
[00043] No modo de endereçamento de 31 bits, o que se segue se aplica, em uma concretização: Os conteúdos das posições de bits 33-63 dos registradores gerais 1, R1, e R2 constituem os endereços do bloco de parâmetros, primeiro operando e segundo operando, respectivamente, e os conteúdos de posições de bits 0-32 são ignorados. Os bits 33-63 dos endereços atualizados de primeiro operando e segundo operando substituem os bits correspondentes nos registradores gerais R1 e R2, respectivamente. Transportes da posição de bit 33 dos endereços atualizados são ignorados, e o conteúdo da posição de bit 32 dos registradores gerais R1, e R2 é definido em zero. Os conteúdos das posições de bits 0-31 dos registradores gerais R1, e R2 permanecem inalterados. Os conteúdos de posições de bits 32-63 dos registradores gerais R1 + 1 e R2 + 1 formam inteiros binários sem sinal de 32 bits que especificam o número de bytes no primeiro e no segundo operandos, respectivamente. Os conteúdos de posições de bits 0-31 dos registradores gerais R1 + 1 e R2 + 1 são ignorados.
Os bits 32-63 dos comprimentos atualizados de primeiro operando e segundo operando substituem os bits correspondentes nos registradores gerais R1 + 1 e R2 + 1, respectivamente. Os conteúdos das posições de bits 0-31 dos registradores gerais R1 + 1 e R2 + 1 permanecem inalterados.
[00044] No modo de endereçamento de 64 bits, o que se segue se aplica, em uma concretização: Os conteúdos das posições de bits 0-63 dos registradores gerais 1, R1, e R2 constituem os endereços do bloco de parâmetros, primeiro operando e segundo operando, respectivamente. Os bits 0-63 dos endereços atualizados de primeiro operando e segundo operando substituem os bits correspondentes nos registradores gerais R1 e R2, respectivamente. Transportes da posição de bits 0 dos endereços atualizados são ignorados. Os conteúdos das posições de bits 0-63 dos registradores gerais R1 + 1 e R2 + 1 formam inteiros binários sem sinal de 64 bits, que especificam o número de bytes no primeiro e no segundo operandos, respectivamente. Os bits 0-63 dos comprimentos atualizados de primeiro operando e segundo operando substituem os bits correspondentes nos registradores gerais R1 + 1 e R2 + 1, respectivamente.
[00045] No modo de registrador de acesso, registradores de acesso 1, R1 e R2 especificam os espaços de endereço contendo o bloco de parâmetros, primeiro operando e segundo operando, respectivamente.
[00046] Detalhes adicionais referentes às várias funções são descritos abaixo: Código de função 0: SORTL-QAF (Funções de consulta disponível)
[00047] A função SORTL-QAF (consulta) provê um mecanismo para indicar a disponibilidade de todas as funções instaladas, formatos de bloco de parâmetro instalados e tamanhos de interface disponíveis. Um tamanho de interface é o número de listas de entrada disponíveis para o programa. O tamanho do bloco de parâmetros para as funções SORT-SFLR e SORT-SVLR é proporcional ao tamanho de interface especificado pelo programa.
[00048] Um formato de exemplo do bloco de parâmetros para a função SORTL-QAF é descrito com referência à Figura 3I. Em um exemplo, um bloco de parâmetros 340 para a função SORTL-QAF (por exemplo, código de função 0) inclui um vetor de funções instaladas 342, um vetor de tamanhos de interface instalados 344 e um vetor de formatos de bloco de parâmetro instalados 346. Em um exemplo específico, esses vetores são armazenados em bytes 0-15, byte 16 e bytes 24-25, respectivamente, do bloco de parâmetros. Cada dos vetores é adicionalmente descrito abaixo.
[00049] Como exemplo, bits 0-127 de vetor de funções instaladas 342 correspondem a códigos de função 0-127, respectivamente, da instrução de Separar Listas. Quando um bit é, por exemplo, um, a função correspondente é instalada; de outro modo, a função não é instalada.
[00050] Adicionalmente, em um exemplo, os bits 0-7 de vetor de tamanhos de interface instalados 344 indicam os tamanhos de interface disponíveis para o programa. Um tamanho de interface é o número de listas de entrada a serem especificadas pelo programa para as funções SORT-SFLR e SORTL-SVLR. Os bits 0-7 de vetor de tamanhos de interface instalados 344 correspondem aos seguintes tamanhos de interface, em um exemplo: Bits 0, 1, 5-7 reservados; bit 2 - listas de 32 entradas; bit 3 - listas de 64 entradas e bit 4 - listas de 128 entradas. Outros exemplos também são possíveis.
[00051] Quando um bit de vetor de tamanhos de interface instalados 344 é, por exemplo, um, o tamanho de interface correspondente está disponível para o programa. Um ou mais bits podem ser armazenados como uns. Por exemplo, um valor de 00101000 binário indica que tamanhos de interfaces de listas de 32 e 128 entradas são disponíveis. Em um exemplo, bits 0-1 e 5-7 são reservados e armazenados como zeros. Adicionalmente, em um exemplo, o tamanho de interface de listas de 32 entradas é disponível quando a instalação de aumentar separação é instalada. Portanto, o bit 2 é armazenado como um. Outros exemplos também são possíveis.
[00052] Além do acima, em um exemplo, bits 0-15 de vetor de formatos de bloco de parâmetro instalados 346 correspondem a formatos de blocos de parâmetro 0-15, respectivamente. Quando um bit é, por exemplo, um, o formato de bloco de parâmetro correspondente é instalado; de outro modo, o formato de bloco de parâmetro não é instalado. Em um exemplo, zeros são armazenados em bytes reservados 17-23 e 26-31 do bloco de parâmetros.
[00053] Os conteúdos dos registradores gerais R1 R2, R1 + 1, e R2 + 1 são ignorados pela função SORT-QAF.
[00054] Um evento de alteração de armazenamento PER (gravação de evento de programa) é reconhecido, quando aplicável, para o bloco de parâmetros. Um evento de detecção de endereço zero PER é reconhecido, quando aplicável, para o bloco de parâmetros.
[00055] O código de condição 0 é definido quando a execução da função SORTL-QAF completa; códigos de condição 1, 2 e 3 não são aplicáveis à função de consulta, em um exemplo. Código de função 1: SORTL-SFLR (Registros de Separar comprimento fixo)
[00056] Em um exemplo, um conjunto de listas de entrada é separado e armazenado como um conjunto de listas de saída no local do primeiro operando. Cada lista é um conjunto de registros e com referência à Figura 3J, cada registro 350 inclui uma chave 352 (por exemplo, uma chave de comprimento fixo) e uma carga útil 354 (por exemplo, uma carga útil de comprimento fixo).
[00057] Os registros a partir das listas de entrada são separados com base nos valores das chaves. Os registros podem ser separados em ordem ascendente ou descendente, como especificado em um campo de separar ordem (SO) do bloco de parâmetros associado ao código de função 1, descrito abaixo. Os registros de uma lista de entradas podem, ou não podem ser listados em ordem separada.
[00058] Os registros de uma lista de saída podem ser originados a partir de múltiplas listas de entradas, e são armazenados em ordem separada. O número de listas de saída armazenadas no local do primeiro operando depende dos dados de entrada. Em um exemplo, quando toda lista de entradas ativas contém registros listados na mesma ordem como especificado no campo SO, somente uma lista de saída é produzida.
[00059] Como indicado acima, o bit 56 do registrador geral 0 especifica um modo de operação, mencionado como modo de fusão (MM) que se aplica à função SORTL-SFLR. Quando o modo de fusão é, por exemplo, zero, para cada lista de saída armazenada no local do primeiro operando, uma delineação de lista de saída correspondente (OLD) é armazenada no local do segundo operando. Cada OLD inclui, por exemplo, um endereço OLD de 8 bytes, que designa o local do primeiro registrador na lista de saída correspondente e um comprimento OLD de 7 bytes, que especifica o comprimento, por exemplo, em bytes, da lista de saída correspondente. Quando o modo de fusão é um, as listas de entrada são consideradas separadas previamente. Isto é, toda lista de entrada ativa é considerada como contendo registros na mesma ordem como especificado pelo campo SO do bloco de parâmetros.
[00060] Quando MM é um e cada lista de entrada é separada previamente, o resultado armazenado no local do primeiro operando é uma lista de saída única de registros em ordem separada. Quando MM é um e cada lista de entrada não é separada previamente, os resultados são imprevisíveis.
[00061] Quando MM é por exemplo, um, os conteúdos de registradores gerais R2 e R2 + 1 são ignorados e nenhuma informação é armazenada no local do segundo operando. Quando MM é um, os procedimentos utilizados para distinguir separações entre Listas de saída podem não ser executados,
desse modo melhorando potencialmente o desempenho da operação. Quando MM é um, dados não são armazenados em um buffer de recordação de registro de continuação, descrito abaixo.
[00062] Para gerar uma lista única de registros em ordem separada a partir de um conjunto de registros em ordem aleatória, um programa pode executar o seguinte procedimento, em um exemplo:
1. Dividir uniformemente o conjunto de registros entre um conjunto inicial de listas, onde cada lista contém registros em ordem aleatória. Executar a instrução de Separar Listas com o conjunto inicial de listas como listas de entrada e modo de fusão igual a zero, para gerar um conjunto intermediário de listas (cada um dos quais contém registros em ordem separada), e os locais de armazenamento e comprimentos para cada lista do conjunto intermediário de listas.
2. Executar a instrução Separar Listas com o conjunto intermediário de listas como listas de entrada e modo de fusão igual a um, para gerar a lista única e final, que contém os registros em ordem separada.
[00063] Um exemplo do SORTL-SFLR com modo de fusão igual a zero é ilustrado na Figura 4A. As entradas e saídas resultantes são incluídas no exemplo. Como mostrado, há três listas de entrada 400, lista de entrada0, lista de entrada1 e lista de entrada2. Além disso, um exemplo de um primeiro operando resultante 402 e um segundo operando 404 é mostrado. Em um exemplo, há três listas no primeiro operando 402 (Figura 4A), e como mostrado no segundo operando 404, uma pessoa começa no endereço 1000 e tem um comprimento de 18; outra começa no endereço 1018 e tem um comprimento de 28, e uma terceira começa no endereço 1040 e tem um comprimento de 20.
[00064] Em um exemplo, quando duas operações executam a mesma função SORTL-SFLR com modo de fusão igual a zero no mesmo conjunto de registros de entrada não separados e a única diferença entre as duas operações é o número de listas de entrada utilizadas para especificar os dados de entrada, a operação com o número maior de listas de entrada resulta em menos listas de saída. A Figura 4B ilustra um exemplo de utilizar seis listas de entrada 450 para operar nos mesmos dados de entrada como o exemplo na Figura 4A, que utiliza três listas de entrada. Um primeiro operando resultante 452 com duas listas de saída, ao invés de três, e um segundo operando 454 fornecendo delineações das duas listas de saída são também mostrados.
[00065] Como indicado, a função SORTL-SFLR utiliza um bloco de parâmetros, cujo exemplo é descrito com referência à Figura 3K. No bloco de parâmetros de exemplo descrito na presente invenção, locais específicos no bloco de parâmetros para campos específicos e tamanhos específicos dos campos são indicados (por exemplo, bytes e/ou bits específicos). Entretanto, outros locais e/ou tamanhos podem ser providos para um ou mais dos campos. Adicionalmente, embora a definição de um bit em um valor específico, por exemplo, um ou zero, é especificada, isso é somente um exemplo. O bit pode ser definido em um valor diferente, como o valor oposto ou em outro valor, em outros exemplos. São possíveis muitas variações.
[00066] Em um exemplo, um bloco de parâmetros 360 para a função SORTL-SFLR inclui o que se segue: Número de versão do Bloco de parâmetros (PBVN) 362: Os bytes 0-1 do bloco de parâmetros especificam a versão e tamanho do bloco de parâmetros. Os bits 0-7 do PBVN têm o mesmo formato e definição que os bits 0-7 do Vetor de lista de tamanhos de interface instalado (byte 16) do bloco de parâmetros para a função SORTL-QAF (consulta). Os bits 0-7 especificam o número de listas de entrada descritas no bloco de parâmetros, Nis-. O tamanho do bloco de parâmetros, em bytes, é determinado por avaliar a fórmula (576 + 16 x Nis). Um bit dos bits 0-7 deve ter um valor de um; de outro modo, uma exceção de dados de operando geral é reconhecida. Os bits 8-11 do PBVN são reservados e devem conter zeros; de outro modo, o programa não pode operar compativelmente no futuro. Os bits 12-15 do PBVN contêm um inteiro binário sem sinal especificando o formato do bloco de parâmetros. A função SORTL-QAF provê o mecanismo de indicar os formatos de bloco de parâmetros disponíveis. Quando o tamanho ou formato do bloco de parâmetros especificado não é suportado pelo modelo, uma exceção de dados de operando geral é reconhecida. O PBVN é especificado pelo programa e não é modificado durante a execução da instrução. Número de Versão de Modelo (MVN) 364: O byte 2 do bloco de parâmetros é um inteiro binário sem sinal identificando o modelo que executou a instrução. O MVN é atualizado durante execução da instrução, por exemplo, pelo processador. O valor armazenado no MVN é dependente do modelo.
[00067] Quando o flag de continuação (CF) 368,
descrito abaixo, é um, o MVN é uma entrada para a operação. Quando CF é um e o MVN identifica o mesmo modelo que o modelo executando atualmente a instrução, os dados a partir do buffer de estado de continuação (CSG) 390, descrito abaixo, podem ser utilizados para reiniciar a operação. Quando CF é um e o MVN identifica um modelo diferente do modelo atualmente executando a instrução, parte, ou todo o campo CSB pode ser ignorado.
[00068] Em um exemplo, o programa inicializa o MVN em zeros. Espera-se que o programa não modifique o MVN no evento da instrução ser executada novamente para fins de reiniciar a operação; de outro modo os resultados são imprevisíveis.
[00069] Ordem de Separação (SO) 366: O bit 56 do bloco de parâmetros, quando zero, especifica a ordem de separação ascendente, e quando um, especifica uma ordem de separação descendente. Quando a ordem de separação ascendente é especificada, cada registro de uma lista de saída contém uma chave que é maior, ou igual à chave do registro adjacente, por exemplo, à esquerda, na mesma lista de saídas. Quando a ordem de separação descendente é especificada, cada registro de uma lista de saídas contém uma chave que é menor que, ou igual à chave do registro adjacente, por exemplo, à esquerda na mesma lista de saídas. A SO não é atualizada durante execução da instrução.
[00070] Flag de continuação (CF) 368: O bit 63 do bloco de parâmetros, quando um, indica que a operação está parcialmente completa e o conteúdo do buffer de estado de continuação 390 e quando o modo de fusão (MM) é zero, o conteúdo de um buffer de recordação do registro de continuação pode ser utilizado para reiniciar a operação. O programa deve inicializar o flag de continuação (CF) em zero e não modificar o CF no evento da instrução ser executada novamente para fins de reiniciar a operação; de outro modo os resultados são imprevisíveis. O processador, em um exemplo, modifica o CF no evento da instrução ser executada novamente.
[00071] Comprimento de chave de registro 370: Os bytes 10-11 do bloco de parâmetros contêm um inteiro binário sem sinal especificando o tamanho, em bytes, das chaves, nos registros processados durante a operação. Uma exceção de dados de operando geral é reconhecida para quaisquer das seguintes condições, em um exemplo: Um tamanho de chave de zero bytes é especificado. Um tamanho de chave que não é um múltiplo de 8 é especificado. Um tamanho de chave maior que 4096 bytes é especificado. O comprimento de chave de registro não é atualizado durante execução da instrução.
[00072] Comprimento de carga útil de registro 372: Quando a função SORTL-SFLR é especificada, os bytes 14-15 do bloco de parâmetros contêm um inteiro binário sem sinal especificando o tamanho, em bytes, das cargas úteis, nos registros processados durante a operação. Uma exceção de dados de operando geral é reconhecida para quaisquer das seguintes condições, em um exemplo: Um tamanho de carga útil que não é um múltiplo de 8 é especificado. A soma dos tamanhos de carga útil e chave especificados é maior que 4096 bytes.
Um tamanho de carga útil de zero é válido.
[00073] Quando a função SORTL-SVLR é especificada, o campo do comprimento de carga útil de registro do bloco de parâmetros é ignorado. O comprimento da carga útil de registro não é atualizado durante execução da instrução.
[00074] Intenção de acesso de operando (OAI) 374: Os bits 0-1 do byte 32 do bloco de parâmetros sinalizam intenção de acesso futuro para a CPU para listas de entrada e o primeiro operando. Intenções de acesso providas podem ser utilizadas para modificar programas de instalação e substituição de linha de cache para os locais de armazenamento correspondentes em vários níveis de cache na hierarquia de armazenamento.
[00075] Quando o bit 0 do campo OAI é um, locais de armazenamento designados para conter dados para qualquer lista de entrada ativa serão referenciados como um ou mais operandos de instruções subsequentes. Quando o bit 0 do campo OAI é zero, locais de armazenamento designados para conter dados para qualquer lista de entrada ativa não serão referenciados como um ou mais operandos de instruções subsequentes.
[00076] Quando o bit 1 do campo OAI é um, locais de armazenamento designados para conter o primeiro operando serão referenciados como um ou mais operandos de instruções subsequentes. Quando o bit 1 do campo OAI é zero, locais de armazenamento designados para conter o primeiro operando não serão referenciados como um ou mais operandos de instruções subsequentes.
[00077] Não é garantido que a CPU utiliza essa informação. A duração que essa informação pode ser utilizada é indefinida, porém é finita.
[00078] Quando a instrução sequencial seguinte após a Intenção de Acesso da próxima instrução (NIAI) é Separar Listas (SORTL), a execução de SORTL não é efetuada por NIAI.
[00079] O OAI não é atualizado durante execução da instrução.
[00080] Código de contagem das Listas de entrada ativa (AILCC) 376: Os bits 1-7 do byte 33 do bloco de parâmetros são um inteiro sem sinal de 7 bits que especifica o número da lista de entrada que indica o limite entre listas de entrada ativa e inativa. Listas de entrada com números de lista, por exemplo, menores ou iguais ao valor do campo de AILCC estão no estado ativo. Listas de entrada com números de listas, por exemplo, maiores que o valor do campo AILCC estão no estado inativo. O número de listas de entrada no estado ativo é um maior que o valor no campo AILCC.
[00081] Listas de entrada no estado ativo participam na operação. Listas de entrada no estado inativo não participam na operação.
[00082] O bit 0 do byte 33 do bloco de parâmetros é reservado e deve conter zero, de outro modo o programa pode não operar compativelmente no futuro.
[00083] Quando o valor do campo AILCC mais um é maior que o número de listas de entrada descritas no bloco de parâmetros, como especificado por bits 0-7 do campo PBVN, uma exceção de dados de operando geral é reconhecida, em um exemplo.
[00084] O valor especificado no campo AILCC não afeta o tamanho do bloco de parâmetros. Exceções de acesso se aplicam a referências a campos do bloco de parâmetro especificando um endereço de lista de entrada ou comprimento correspondendo a uma lista de entrada no estado inativo.
[00085] O AILCC não é atualizado durante execução da instrução.
[00086] Controle de Listas de Entrada vazias (EILCL) 378: Quando o bit 0 do byte 40 do bloco de parâmetros é um, a operação termina quando o comprimento da lista de entrada 0 se torna zero durante a operação. Quando o bit 0 do byte 40 do bloco de parâmetros é zero, a operação continua a prosseguir quando o comprimento da lista de entrada 0 se torna zero durante a operação. Quando o bit 1 do byte 40 do bloco de parâmetros é um, a operação termina quando o comprimento de uma lista de entrada ativa, diferente da lista de entrada 0, se torna zero durante a operação. Quando o bit 1 do byte 40 do bloco de parâmetros é zero, a operação continua a prosseguir quando o comprimento de uma lista de entrada ativa, diferente da lista de entrada 0, se torna zero durante a operação.
[00087] Quando o comprimento de uma lista de entrada ativa é inicialmente zero antes da execução da instrução, o bit correspondente do EILCL não se aplica.
[00088] O EILCL não é atualizado durante execução da instrução.
[00089] Espera-se que o programa não modifique o EILCL no evento da instrução ser executada novamente para fins de reiniciar a operação; de outro modo, os resultados são imprevisíveis.
[00090] Flag de Lista de entrada vazia (EILF) 380: Quando o EILCL é 11 binário, e a operação termina devido ao comprimento atualizado de uma lista de entrada ativa sendo igual a zero e o código de condição 2 é definido, o valor de um é armazenado, por exemplo, pelo processador, para o bit 2, do byte 40, do bloco de parâmetros; de outro modo, o valor de zero é armazenado para o bit 2, do byte 40, do bloco de parâmetros. Quando o EILF contém um valor de um, o número da lista de entrada da lista de entrada que se tornou vazia durante a operação é colocado no campo EILN do bloco de parâmetros. Em um exemplo, o programa inicializa o EILF em zero.
[00091] O EILF pode ser referenciado no início de execução da instrução quando a operação está sendo reiniciada. Espera-se que o programa não modifique o EILF no evento da instrução ser executada novamente para fins de reiniciar a operação; de outro modo, os resultados são imprevisíveis.
[00092] Número de lista de entrada vazia (EILN) 382: Quando as condições fazem com que um valor de um seja armazenado no campo EILF, o número de lista de entrada da lista de entrada que se tornou vazio durante a operação é armazenado, por exemplo, pelo processador, no byte 41 do bloco de parâmetros; de outro modo, o valor de zero é armazenado no byte 41 do bloco de parâmetros.
[00093] O EILN é ignorado no início da operação. Em um exemplo, o programa inicializa o EILN em zeros.
[00094] Flag de Lista de entrada incompleta (IILF) 384: Quando a operação termina como resultado de tentar processar uma lista de entrada incompleta, o valor de um é armazenado, por exemplo, pelo processador, no bit 0, do byte 46, do bloco de parâmetros; de outro modo, o valor de zero é armazenado no bit 0, do byte 46, do bloco de parâmetros. Uma lista de entrada ativa é considerada como estando incompleta quando o comprimento de lista de entrada correspondente é maior que zero e menor que o número de bytes do registro designado pelo endereço de lista de entrada. A condição pode existir no início da operação, ou pode ser encontrada durante a operação. Quando o IILF contém um valor de um, o número de lista de entrada, da lista de entrada incompleta encontrada, é colocado no campo IILN do bloco de parâmetros. Em um exemplo, o programa inicializa o IILF em zero.
[00095] Quando a operação termina com a definição do código de condição 2 e o valor resultante no campo IILF é zero, a operação terminou devido a uma lista de entrada vazia: Quando a operação termina com a definição do código de condição 2 e o valor resultante no campo IILF é um, a operação terminou devido a uma lista de entrada incompleta.
[00096] O IILF pode ser referenciado no início da execução da instrução quando a operação está sendo reiniciada. Espera-se que o programa não modifique o IILF no evento da instrução ser executada novamente para fins de reiniciar a operação; de outro modo os resultados são imprevisíveis.
[00097] Número da Lista de entrada incompleta (IILN) 386: Quando as condições fazem com que um valor de um seja armazenado no campo IILF, o número de lista de entrada, da lista de entrada incompleta encontrada, é armazenado, por exemplo, pelo processador, no byte 47 do bloco de parâmetros; de outro modo, o valor de zero é armazenado no byte 47 do bloco de parâmetros. Quando múltiplas listas de entrada são incompletas, é dependente de modelo qual número de lista de entrada incompleta é armazenada no campo IILN. Em um exemplo, o programa inicializa o IILN em zero.
[00098] O IILN é ignorado no início da operação.
[00099] Origem do Buffer de recordação de registro de continuação 388: Um buffer de 4 K-byte em armazenamento, chamado o buffer de recordação de registro de continuação, é provido pelo programa para a CPU armazenar e referenciar dados entre duas execuções da mesma instrução de Separar Listas, caso uma operação termine e possa ser reiniciada posteriormente. Cinquenta e dois bits, começando com o bit 0 do byte 56, através do bit 3 do byte 62, do bloco de parâmetros contêm um inteiro binário sem sinal utilizado na formação do endereço de recordação de registro de continuação, que é alinhado em um limite de 4 K-byte. O endereço de recordação de registro de continuação é, por exemplo, o endereço lógico do byte mais à esquerda do buffer de recordação de registro de continuação.
[000100] No modo de endereçamento de 24 bits, os bits 40-51 da origem de buffer de recordação de registro de continuação com 12 zeros anexados à direita formam o endereço de recordação de registro de continuação. No modo de endereçamento de 31 bits, os bits 33-51 da origem de buffer de recordação de registro de continuação com 12 zeros anexados à direita formam o endereço de recordação de registro de continuação. No modo de endereçamento de 64 bits, os bits 0-
51 da origem de buffer de recordação de registro de continuação com 12 zeros anexados à direita formam o endereço de recordação de registro de continuação.
[000101] No modo de registrador de acesso, o registrador de acesso 1 especifica o espaço de endereço contendo o buffer de recordação de registro de continuação em armazenamento.
[000102] Quando o modo de fusão (MM) é zero, a operação termina após armazenamento de um ou mais registros e a conclusão normal não ocorre, a chave do último registro armazenado para o primeiro operando também é armazenada para o buffer de recordação de registro de continuação. Quando MM é um, a origem de buffer de recordação do registro de continuação é ignorada.
[000103] A origem de buffer de recordação do registro de continuação não é modificada durante execução da instrução.
[000104] Espera-se que o programa não modifique a origem de buffer de recordação do registro de continuação no evento da instrução ser executada novamente para fins de reiniciar a operação; de outro modo os resultados são imprevisíveis.
[000105] Buffer de estado de continuação (CSB) 390: Quando as condições fazem com que um valor de um seja armazenado no campo CF, dados de estado interno são armazenados, por exemplo, pelo processador, em bytes 64-575 do bloco de parâmetros; de outro modo, os bytes 64-575 do bloco de parâmetros são indefinidos e podem ser modificados. Os dados de estado interno armazenados são dependentes de modelo e podem ser utilizados subsequentemente para reiniciar a operação quando a instrução é executada novamente. Em um exemplo, o programa inicializa o buffer de estado de continuação em zeros. Espera-se que o programa não modifique o buffer de estado de continuação no evento da instrução ser executada novamente para fins de reiniciar a operação; de outro modo os resultados são imprevisíveis.
[000106] Como exemplo, os dados de estado interno incluem informações referentes às listas de entrada, como informações referentes a comparações anteriores de registros das listas de entrada para determinar as próximas comparações a serem feitas. Os dados de estado interno são dependentes de modelo em que podem ser armazenadas ou apresentadas de modo diferente dependendo do modelo de processador. São possíveis outras variações.
[000107] Em uma concretização, a instrução pode ser parcialmente concluída por um modelo em uma configuração e a execução pode reiniciar em um modelo diferente na configuração. Embora modelos diferentes, em uma concretização, possam manter estados internos diferentes, em um exemplo, cada modelo deve ser capaz de interpretar esses conteúdos do CSB, caso haja, que são empregados para reiniciar a operação. Quando uma operação reinicia, o MVN indica quais conteúdos do CSB, caso haja algum, a máquina é capaz de interpretar.
[000108] Endereço de Lista N de Entrada 392, 394, 396: O bloco de parâmetros define múltiplas listas de entrada. O número de listas de entrada definidas no bloco de parâmetros, Nis, é especificado por bits 0-7 de PBVN 362. As listas de entrada são numeradas a partir de zero até (Nis-1). Para cada lista de entrada, o bloco de parâmetros especifica, por exemplo, um endereço de lista de entrada de 8 bytes. Para o número de lista de entrada N, os conteúdos de bytes 576 + 16 x N até 583 + 16 x N, do bloco de parâmetros, especificam, por exemplo, o endereço lógico do byte mais à esquerda do número de lista de entrada N em armazenamento.
[000109] Cada endereço de lista de entrada correspondendo a uma lista de entrada no estado ativo, como especificado pelo campo AILCC, é uma entrada na operação e é atualizado pela operação. Cada endereço de lista de entrada correspondendo a uma lista de entrada no estado inativo, como especificado pelo campo AILCC, é ignorado pela operação.
[000110] Quando um endereço de lista de entrada é uma entrada para a operação, o que se segue se aplica, em uma concretização: No modo de endereçamento de 24 bits, os bits 40-63, do endereço de lista de entrada, designam a localização do byte mais à esquerda da lista de entrada em armazenamento e os conteúdos dos bits 0-39, do endereço de lista de entrada são tratados como zeros. No modo de endereçamento de 31 bits, os bits 33-63, do endereço de lista de entrada, designam a localização do byte mais à esquerda da lista de entrada em armazenamento e os conteúdos dos bits 0-32, do endereço de lista de entrada são tratados como zeros. No modo de endereçamento de 64 bits, os bits 0-63, do endereço de lista de entrada, designam a localização do byte mais à esquerda da lista de entrada em armazenamento.
[000111] No modo de registrador de acesso, o registrador de acesso 1 especifica o espaço de endereço contendo as listas de entrada ativas em armazenamento.
[000112] Para as listas de entrada no estado ativo, o endereço de lista de entrada correspondente deve ser designado em um limite de palavra dupla; de outro modo, uma exceção de dados de operando geral é reconhecida, em um exemplo.
[000113] Quando um endereço de lista de entrada é atualizado pela operação, o que se segue se aplica, em uma concretização: Quando um ou mais registros da lista de entrada foram processados como parte da operação, o endereço da lista de entrada correspondente é incrementado pelo número de bytes que os registros processadores ocupam em armazenamento. A formação e atualização do endereço de lista de entrada são dependentes do modo de endereçamento. No modo de endereçamento de 24 bits, os bits 40-63 do endereço da lista de entrada atualizada substituem os bits correspondentes no campo de endereço da lista de entrada do bloco de parâmetros, um transporte da posição de bit 40 do endereço da lista de entrada atualizada é ignorado, e os conteúdos das posições de bit 0-39 do campo de endereço da lista de entrada do bloco de parâmetros são definidos em zeros. No modo de endereçamento de 31 bits, os bits 33-63 do endereço da lista de entrada atualizada substituem os bits correspondentes no campo de endereço da lista de entrada do bloco de parâmetros, um transporte da posição de bit 33 do endereço da lista de entrada atualizada é ignorado, e os conteúdos das posições de bit 0-32 do campo de endereço da lista de entrada do bloco de parâmetros são definidos em zeros. No modo de endereçamento de 64 bits, os bits 0-63 do endereço de lista de entrada atualizada substituem os bits correspondentes no campo de endereço de lista de entrada do bloco de parâmetros, e um transporte da posição de bit 0 do endereço de lista de entrada atualizada é ignorado.
[000114] Em modos de endereçamento de 24 e 31 bits, quando a execução da instrução termina e a instrução não é suprimida, anulada ou terminada, cada endereço de lista de entrada de 64 bits correspondendo a uma lista de entrada ativa é atualizado, mesmo quando o endereço não é incrementado.
[000115] Comprimento de Lista N de Entrada 393, 395, 397: Para cada lista de entrada, o bloco de parâmetros especifica um comprimento de lista de entrada de 8 bytes. Para o número de lista de entrada N, bytes 584 + 16 x N até 591 + 16 x N do bloco de parâmetros, contêm um inteiro sem sinal que especifica o número de bytes no número de lista de entrada N.
[000116] Cada comprimento de lista de entrada correspondendo a uma lista de entrada no estado ativo, como especificado pelo campo AILCC, é uma entrada na operação e é atualizado pela operação. Cada comprimento de lista de entrada correspondendo a uma lista de entrada no estado inativo, como especificado pelo campo AILCC, é ignorado pela operação.
[000117] Nos vários modos de endereçamento, os conteúdos das posições de bit 0-63 de um campo de comprimento de lista de entrada especificam o comprimento da lista de entrada correspondente.
[000118] Quando um ou mais registros de uma lista de entrada foram processados como parte da operação, o comprimento de lista de entrada correspondente é diminuído pelo número de bytes que os registros processados ocupam em armazenamento. Nos vários modos de endereçamento, os bits 0- 63 de um comprimento de lista de entrada atualizado substituem bits 0-63 no campo de comprimento de lista de entrada correspondente do bloco de parâmetros.
[000119] Reservado: há diversos campos reservados no bloco de parâmetros (por exemplo, os campos que não incluem outras informações). Como uma entrada na operação, campos reservados devem conter zeros; de outro modo, o programa pode não operar compativelmente no futuro. Quando a operação termina, campos reservados podem ser armazenados como zeros ou podem permanecer inalterados.
[000120] As Figuras 5A-5B resumem um exemplo dos valores original e final para entradas para a função SORTL- SFLR, incluindo campos no bloco de parâmetros.
[000121] Em uma concretização, não é exigido e não é esperado que o programa modifique o bloco de parâmetros entre o término da operação com o código de condição 3 definido e ramificação de volta para a instrução, para executar novamente a instrução, para fins de reiniciar a operação.
[000122] Em uma concretização, a função SORTL-SFLR inclui múltiplas comparações entre chaves de registros a partir de listas de entrada diferentes. Ao comparar chaves,
o que se segue se aplica, em um exemplo: As chaves são tratadas como inteiros binários sem sinal, também mencionados como dados não estruturados. Pode não ser necessário acessar todos os bytes de cada chave sendo comparada ao determinar qual chave contém o valor mais baixo ou mais alto. O número de bytes de cada chave comparado em um momento, mencionado como unidade de comparação de chave, é dependente de modelo. O número de bytes de uma chave que são acessados é um número inteiro de unidades de comparação de chave. Ao comparar chaves de valor igual, em um exemplo, a chave a partir da lista de entrada com o número de lista de entrada mais alto é selecionada para estar em ordem de separação antes de outras chaves com o mesmo valor. Nesse caso, o registro correspondente a partir da lista de entrada com o número de lista de entrada mais alto é armazenado no primeiro operando antes de outros registros com o mesmo valor de chave. Isso se aplica a ordens de separação crescente e decrescente.
[000123] Uma implementação pode manter um histórico de comparações anteriores entre registros a partir das listas de entrada ativas. Quando o histórico está disponível e aplicável, no lugar de acessar e comparar registros que foram anteriormente comparados, o histórico pode ser referenciado. As referências ao histórico reduzem o tempo de execução necessário para gerar resultados, melhorando o processamento no ambiente de computação.
[000124] A função SORTL-SFLR inclui selecionar registros a partir de um conjunto de listas de entrada, na ordem de separação especificada, e colocar os registros selecionados no local do primeiro operando. À medida que a operação prossegue, valores atuais para o endereço do primeiro operando e endereços para as listas de entrada ativas são mantidos. A função prossegue em unidades de operação. Durante cada unidade de operação, para cada lista de entrada ativa, a chave designada pelo endereço de lista de entrada atual correspondente é examinada e um registro é colocado no local do primeiro operando.
[000125] Quando o modo de fusão (MM) é zero, as listas de entrada ativas designam listas, cada uma das quais é tratada como contendo registros, por exemplo, da esquerda para a direita, em ordem aleatória. Quando MM é zero, os registros armazenados no local do primeiro operando constituem uma ou mais listas de saída e o endereço de partida e comprimento de cada lista de saída é armazenado no local do segundo operando. Quando MM é zero, cada unidade de operação inclui as seguintes etapas, na ordem especificada, como um exemplo:
1. Determinar se o próximo registro a armazenar o local do primeiro operando pode ser incluído na lista de saída mais recente (a lista de saída que inclui o registro mais recentemente armazenado no local do primeiro operando), como a seguir: Quando o flag de continuação (CF) é zero, e a primeira unidade de operação está sendo processada, nenhum registro foi armazenado no local do primeiro operando e o próximo registro a armazenar será o primeiro registrador de uma lista de saída. Quando CF é um, a execução anterior da instrução terminou com o código de condição 1 e a primeira unidade de operação está sendo processada para a execução atual da instrução, o próximo registro a armazenar será o primeiro registrador de uma lista de saída. Quando CF é um, IILF é zero, EILF é zero, a execução anterior da instrução terminou com o código de condição 2 e a primeira unidade de operação está sendo processada para a execução atual da instrução, o próximo registro a armazenar será o primeiro registrador de uma lista de saída. Quando CF é um, IILF ou EILF é um, a execução anterior da instrução terminou com o código de condição 2, e a primeira unidade de operação está sendo processada para a execução atual da instrução, o próximo registro a armazenar pode ser incluído na lista de saída mais recente. Quando CF é um, a execução anterior da instrução terminou com o código de condição 3, e a primeira unidade de operação está sendo processada para a execução atual da instrução, o próximo registro a armazenar pode ser incluído na lista de saída mais recente. Quando a unidade de operação sendo processada não é a primeira unidade de operação para a execução atual da instrução, o próximo registro a armazenar pode ser incluído na lista de saída mais recente.
2. Quando o próximo registro a armazenar pode ser incluído na lista de saída mais recente, determinar o conjunto de registros que qualificam para serem incluídos na lista de saída mais recente. Para cada lista de entrada que é ativa, não vazia e não incompleta, comparar a chave do registro designado pelo endereço de lista de entrada atual (chave de entrada atual) com a chave do registro mais recentemente armazenada no local do primeiro operando (chave anteriormente armazenada). Para essa finalidade, a referência à chave anteriormente armazenada não é uma referência ao local do primeiro operando. Ao invés, é uma referência à lista de entrada a partir da qual a chave foi selecionada, ou é uma referência ao buffer de recordação de registro de continuação. É uma referência ao buffer de recordação de registro de continuação quando a operação está sendo reiniciada e a execução atual da instrução não colocou ainda nenhum registro no local do primeiro operando. Quando a ordem de separação é crescente e o valor da chave de entrada atual é maior ou igual ao valor da chave anteriormente armazenada, considere a chave de entrada atual como pertencendo a um conjunto de chaves qualificando para inclusão na lista de saída mais recente. Quando a ordem de separação é decrescente e o valor da chave de entrada atual é menor ou igual ao valor da chave anteriormente armazenada, considere a chave de entrada atual como pertencendo a um conjunto de chaves qualificando para inclusão na lista de saída mais recente. Quando o número de chaves no conjunto de chaves qualificando para inclusão na lista de saída mais recente é zero, o próximo registro a armazenar será o primeiro registrador de uma lista de saída. Quando o número de chaves no conjunto de chaves qualificando para inclusão na lista de saída mais recente é não zero, o próximo registro a armazenar será incluído na lista de saída mais recente.
3. Quando o próximo registro a armazenar for incluído na lista de saída mais recente, comparar as chaves no conjunto de chaves qualificando para inclusão na lista de saída mais recente. Quando a ordem de separação é crescente, selecionar o valor de chave menor e registro correspondente. Quando a ordem de separação é decrescente, selecionar o valor de chave maior e registro correspondente.
4. Quando o próximo registro a armazenar for o primeiro registrador de uma lista de saída, comparar as chaves dos registros designados pelos endereços de lista de entrada atuais correspondendo às listas de entrada que são ativas, não vazias e não incompletas. Quando a ordem de separação é crescente, selecionar o valor de chave menor e registro correspondente. Quando a ordem de separação é decrescente, selecionar o valor de chave maior e registro correspondente.
5. O registro selecionado é colocado no local atual do primeiro operando.
6. O endereço atual do primeiro operando é aumentado pelo número de bytes igual ao comprimento do registro selecionado.
7. O endereço de lista de entrada atual, correspondendo à lista de entrada contendo o registro selecionado, é aumentado pelo número de bytes igual ao comprimento do registro selecionado.
[000126] Como parte da operação quando o modo de fusão é zero, para cada lista de saída armazenada no local do primeiro operando, uma delineação de lista de saída correspondente (OLD) é armazenada no local do segundo operando. Cada OLD inclui, por exemplo, um endereço OLD de 8 bytes, que designa o local do primeiro registrador na lista de saída correspondente, e, por exemplo, um comprimento OLD de 8 bytes, que especifica o comprimento, em bytes, da lista de saída correspondente. Quando a operação termina com o código de condição 3, código de condição 2 e EILF igual a um, ou código de condição 2 e IILF igual a um, a lista de saída mais recente sendo processada no término da operação pode ser parcialmente processada e não completamente processada. Isto é, o número de registros na lista de saída parcialmente processada é um valor intermediário e pode ser aumentado quando a operação reinicia. Nesse caso, uma delineação de lista de saída (OLD), correspondendo à lista de saída parcialmente processada, não é colocada no local do segundo operando, até após a operação ser reiniciada e a lista de saída ser totalmente processada.
[000127] Quando o modo de fusão é zero e a operação termina após armazenamento de um ou mais registros e a conclusão normal não ocorre, a chave do último registro armazenado no local do primeiro operando é armazenada também no buffer de recordação de registro de continuação.
[000128] Quando o modo de fusão é zero e a operação termina devido à conclusão normal, uma ou mais listas de saída foram colocadas no local do primeiro operando e delineações de lista de saída foram colocadas no local do segundo operando. O programa pode utilizar delineações de lista de saída como valores de comprimento e endereço de lista de entrada em um bloco de parâmetros para uma operação SORTL subsequente.
[000129] As Figuras 6A-6D ilustram o primeiro e segundo operandos, antes e após execução de SORTL-SFLR com modo de fusão igual a zero. Com referência às Figuras 6A-6B,
FOSA 600 é endereço de partida de primeiro operando: local especificado por R1; FOEA 602 é endereço de término de primeiro operando especificado por R1 + (R1 + 1) — 1; e OL 604 é lista de saída (por exemplo, lista de saída 1... Lista de saída N). Além disso, com referência às Figuras 6C-6D, SOSA 610 é endereço de partida de segundo operando: local especificado por R2; SOEA 612 é endereço de término de segundo operando: local especificado por R2 + (R2 + 1) - 1; e OLD 614 é designação de lista de saída (por exemplo, designação de lista de saída 1... Designação de lista de saída N).
[000130] Quando o modo de fusão (MM) é um, as listas de entrada ativa designam listas, cada uma das quais é tratada como contendo registros, da esquerda para à direita, na ordem separada, como especificado pelo campo SO do bloco de parâmetros. Quando MM é um, os registros armazenados no local do primeiro operando constituem uma lista de saída única. Quando MM é um, cada unidade de operação inclui, por exemplo, as seguintes etapas, na ordem especificada, como um exemplo:
1. Comparar as chaves dos registros designados pelos endereços de lista de entrada atuais correspondendo às listas de entrada que são ativas, não vazias e não incompletas. Quando a ordem de separação é crescente, selecionar o valor de chave menor e registro correspondente. Quando a ordem de separação é decrescente, selecionar o valor de chave maior e registro correspondente.
2. O registro selecionado é colocado no local atual do primeiro operando.
3. O endereço atual do primeiro operando é aumentado pelo número de bytes igual ao comprimento do registro selecionado.
4. O endereço de lista de entrada atual, correspondendo à lista de entrada contendo o registro selecionado, é aumentado pelo número de bytes igual ao comprimento do registro selecionado.
[000131] As Figuras 7A-7B ilustram o primeiro operando, antes e após executar SORTL-SFLR com modo de fusão igual a um. Com referência às Figuras 7A-7B, FOSA 700 é endereço de partida do primeiro operando: local especificado por R1; FOEA 702 é endereço de término do primeiro operando: local especificado por R1 + (R1 + 1) - 1; e OL 704 é lista de saída (por exemplo, lista de saída 1).
[000132] Como parte da operação quando o modo de fusão é zero ou um, os endereços de lista de entrada e comprimentos para as listas de entrada no estado ativo são atualizados. Para cada lista de entrada no estado ativo, o endereço de lista de entrada é aumentado pelo número de bytes dos registros a partir da lista de entrada que foram selecionados e colocados no local do primeiro operando durante a operação e o comprimento de lista de entrada é diminuído pelo mesmo número. A formação e atualização dos endereços de lista de entrada são dependentes do modo de endereçamento.
[000133] À medida que a operação prossegue, uma lista de entrada incompleta pode ser encontrada. Uma lista de entrada incompleta é reconhecida durante uma unidade de operação que tenta referenciar um registro a partir de uma lista de entrada que é incompleta. Múltiplas unidades de operação podem ser concluídas antes de reconhecer uma lista de entrada incompleta. Isso se aplica quando o modo de fusão é zero ou um.
[000134] À medida que a operação prossegue, uma exceção de acesso para um acesso a uma lista de entrada, o primeiro operando, ou o segundo operando, quando aplicável, pode ser encontrada. Uma exceção de acesso é reconhecida durante uma unidade de operação que tenta acessar uma localização de armazenamento e uma exceção de acesso existe para aquele local. Múltiplas unidades de operação podem ser concluídas antes de reconhecer uma exceção de acesso. Isso se aplica quando o modo de fusão é zero ou um.
[000135] Quando a operação termina com conclusão parcial, dados de estado interno, que podem incluir um histórico de comparações anteriores entre registros, são armazenados no campo de buffer de estado de continuação (CSB) do bloco de parâmetros. Subsequentemente, quando a instrução é executada novamente, para fins de reiniciar a operação, os conteúdos do CSB podem ser carregados na implementação e o histórico pode ser referenciado quando a operação reinicia. Isso se aplica quando o modo de fusão é zero ou um.
[000136] A conclusão normal ocorre quando os registros a partir das listas de entrada ativa foram separados e armazenados para o primeiro operando. Quando a operação termina devido à conclusão normal, o que se segue ocorre, em uma concretização. O endereço e comprimento em registradores gerais R1 e R1 + 1, respectivamente, são atualizados. O endereço e comprimento em registradores gerais R2 e R2 + 1, respectivamente, são atualizados quando MM é zero. Os campos de endereço da lista de entrada N e comprimento da lista de entrada N são atualizados para as listas de entrada no estado ativo. O número de versão de modelo é definido. O flag de continuação é definido em zero. O flag de lista de entrada vazia é definido em zero. O número de lista de entrada vazia é definido em zero. O flag de lista de entrada incompleta é definido em zero. O número de lista de entrada incompleta é definido em zero. O código de condição 0 é definido.
[000137] A formação e atualização dos endereços e comprimentos são dependentes do modo de endereçamento.
[000138] Quando a conclusão normal ocorre, o campo CSB do bloco de parâmetros é indefinido após término da operação.
[000139] Quando um número de bytes determinado por CPU foi processado, a operação termina e o que se segue ocorre, em uma concretização. O endereço e comprimento em registradores gerais R1 e R1 + 1 , respectivamente, são atualizados. O endereço e comprimento em registradores gerais R2 e R2 + 1 , respectivamente, são atualizados quando MM é zero. Os campos de endereço da lista de entrada N e comprimento da lista de entrada N são atualizados para as listas de entrada no estado ativo. O número de versão de modelo é definido. O flag de continuação é definido em um. Um valor de chave é armazenado no buffer de recordação de registro de continuação quando MM é zero e um ou mais registros foram colocados no local do primeiro operando durante a execução da instrução. O buffer de estado de continuação é atualizado. O flag de lista de entrada vazia é definido em zero. O número de lista de entrada vazia é definido em zero. O flag de lista de entrada incompleta é definido em zero. O número de lista de entrada incompleta é definido em zero. O código de condição 3 é definido.
[000140] A formação e atualização dos endereços e comprimentos são dependentes no modo de endereçamento.
[000141] O número de bytes determinado pela CPU depende do modelo e pode ser um número diferente cada vez que a instrução é executada. O número de bytes determinado pela CPU é tipicamente não zero. Embora o número possa ser zero e aparecer como um caso sem progresso, a CPU protege contra recorrência sem fim desse caso sem progresso.
[000142] Subsequente ao término da instrução com, por exemplo, o código de condição 3 definido, espera-se que o programa não modifique qualquer especificação de entrada ou saída para a instrução e derive de volta para executar novamente a instrução para reiniciar a operação.
[000143] Quando o bit 0 do controle de listas de entrada vazia (EILCL) é um e o comprimento da lista de entrada 0 se torna zero durante a operação e a conclusão normal não se aplica, a operação termina e o que se segue ocorre, em uma concretização: O endereço e comprimento nos registradores gerais R1 e R1 + 1, respectivamente, são atualizados.
O endereço e comprimento em registradores gerais R2 e R2 + 1 , respectivamente, são atualizados quando MM é zero. Os campos de endereço da lista de entrada N e comprimento da lista de entrada N são atualizados para as listas de entrada no estado ativo. O número de versão de modelo é definido. O flag de continuação é definido em um. Um valor de chave pode ser armazenado no buffer de recordação de registro de continuação quando EILCL é 10 binário e MM é zero. Um valor de chave é armazenado no buffer de recordação de registro de continuação quando EILCL é 11 binário e MM é zero. Em qualquer caso, um ou mais registros foram colocados no local do primeiro operando durante execução da instrução. O buffer de estado de continuação é atualizado. O flag de lista de entrada vazia é definido (consulte a Figura 8, que mostra vários campos de bloco de parâmetros quando uma operação termina). O número de lista de entrada vazia é definido (consulte a Figura 8). O flag de lista de entrada incompleta é definido em zero. O número de lista de entrada incompleta é definido em zero. O código de condição 2 é definido.
[000144] A formação e atualização dos endereços e comprimentos são dependentes do modo de endereçamento.
[000145] Quando o bit 1 do controle de listas de entrada vazia (EILCL) é um e o comprimento da lista de entrada ativa, diferente da lista de entrada 0, se torna zero durante a operação e conclusão normal não se aplica, a operação termina e o que se segue ocorre, em uma concretização: O endereço e comprimento em registradores gerais R1 e R1 + 1 , respectivamente, são atualizados. O endereço e comprimento em registradores gerais R2 e R2 + 1 , respectivamente, são atualizados quando MM é zero. Os campos de endereço da lista de entrada Ne comprimento da lista de entrada N são atualizados para as listas de entrada no estado ativo. O número de versão de modelo é definido. O flag de continuação é definido em um. Um valor de chave pode ser armazenado no buffer de recordação de registro de continuação quando EILCL é 01 binário e MM é zero. Um valor de chave é armazenado no buffer de recordação de registro de continuação quando EILCL é 11 binário e MM é zero. Em qualquer caso, um ou mais registros foram colocados no local do primeiro operando durante a execução da instrução. O buffer de estado de continuação é atualizado. O flag de lista de entrada vazia é definido (consulte a Figura 8). O número de lista de entrada vazia é definido (consulte a Figura 8). O flag de lista de entrada incompleta é definido em zero. O número de lista de entrada incompleta é definido em zero. O código de condição 2 é definido.
[000146] A formação e atualização dos endereços e comprimentos são dependentes do modo de endereçamento.
[000147] Quando uma lista de entrada incompleta no estado ativo é encontrada, a operação termina e o que se segue ocorre, em uma concretização: O endereço e comprimento em registradores gerais R1 e R1 + 1 , respectivamente, são atualizados. O endereço e comprimento em registradores gerais R2 e R2 + 1 , respectivamente, são atualizados quando MM é zero. Os campos de endereço da lista de entrada N e comprimento da lista de entrada N são atualizados para as listas de entrada no estado ativo. O número de versão de modelo é definido. O flag de continuação é definido em um. Um valor de chave é armazenado no buffer de recordação de registro de continuação quando MM é zero e um ou mais registros foram colocados no local do primeiro operando durante a execução da instrução. O buffer de estado de continuação é atualizado. O flag de lista de entrada vazia é definido em zero. O número de lista de entrada vazia é definido em zero. O flag de lista de entrada incompleto (IILF) é definido em um. O número de lista de entrada da lista de entrada incompleta encontrada é colocado no campo do número de lista de entrada incompleta (IILN) do bloco de parâmetros. O código de condição 2 é definido.
[000148] A formação e atualização dos endereços e comprimentos são dependentes do modo de endereçamento.
[000149] Quando o comprimento do primeiro operando é insuficiente para armazenar outro registro, a operação termina e o que se segue ocorre, em uma concretização: O endereço e comprimento em registradores gerais R1 e R1 + 1 , respectivamente, são atualizados. O endereço e comprimento em registradores gerais R2 e R2 + 1 , respectivamente, são atualizados quando MM é zero. Os campos de endereço da lista de entrada N e comprimento de da lista de entrada N são atualizados para as listas de entrada no estado ativo. O número de versão de modelo é definido. O flag de continuação é definido em um. Um valor de chave pode ser armazenado no buffer de recordação de registro de continuação quando MM é zero e um ou mais registros foram colocados no local do primeiro operando durante execução da instrução. O buffer de estado de continuação é atualizado. O flag de lista de entrada vazia é definido em zero. O número de lista de entrada vazia é definido em zero. O flag de lista de entrada incompleta é definido em zero. O número de lista de entrada incompleto é definido em zero. O código de condição 1 é definido.
[000150] A formação e atualização dos endereços e comprimentos são dependentes do modo de endereçamento.
[000151] Quando o modo de fusão (MM) é zero e o comprimento do segundo operando é menor que 16, a operação termina e o que se segue ocorre, em uma concretização: O endereço e comprimento em registradores gerais R1 e R1 + 1, respectivamente, são atualizados. O endereço e comprimento em registradores gerais R2 e
R2 + 1 respectivamente, são atualizados. Os campos de endereço da lista de entrada N e comprimento da lista de entrada N são atualizados para as listas de entrada no estado ativo. O número de versão de modelo é definido. O flag de continuação é definido em um. Um valor de chave pode ser armazenado no buffer de recordação de registro de continuação quando um ou mais registros foram colocados no local do primeiro operando durante a execução da instrução. O buffer de estado de continuação é atualizado. O flag de lista de entrada vazia é definido em zero. O número de lista de entrada vazia é definido em zero. O flag de lista de entrada incompleta é definido em zero. O número de lista de entrada incompleta é definido em zero. O código de condição 1 é definido.
[000152] A formação e atualização dos endereços e comprimentos são dependentes do modo de endereçamento.
[000153] A condição de término de operação é chada conclusão parcial quando a execução da instrução termina em conclusão (não termina em supressão, anulação ou cessação) e a conclusão normal não ocorre.
[000154] Um evento de alteração de armazenamento PER é reconhecido, quando aplicável, para o local do primeiro operando, o local do segundo operando, o buffer de recordação de registro de continuação e a porção do bloco de parâmetro que é armazenado. Quando um evento de alteração de armazenamento PER é reconhecido, menos de 4K bytes adicionais são armazenados no local de operando intersectando com a área de armazenamento PER designada, antes do evento ser relatado.
[000155] Um evento de detecção de endereço zero PER é reconhecido, quando aplicável, para o bloco de parâmetro, local do primeiro operando, e local do segundo operando. A detecção de endereço zero não se aplica aos endereços de lista de entrada e a origem de buffer de recordação de registro de continuação, que são especificados no bloco de parâmetros.
[000156] Consulte as Outras Condições abaixo para descrições de exemplos de outras condições que se aplicam à função SORTL-SFLR.
[000157] Quando a instrução termina com o código de condição 1, o programa pode modificar o endereço de primeiro operando, o comprimento do primeiro operando, o endereço do segundo operando, o comprimento do segundo operando, qualquer endereço de lista de entrada ativo, e qualquer comprimento de lista de entrada ativa, como apropriado, e subsequentemente reiniciar a operação.
[000158] Quando a instrução termina com o código de condição 2, IILF igual a zero e EILF igual a zero, o programa pode modificar o endereço do primeiro operando, o comprimento do primeiro operando, o endereço do segundo operando, o comprimento do segundo operando, qualquer endereço de lista de entrada ativa, e qualquer comprimento de lista de entrada ativa, como apropriado, e subsequentemente, reiniciar a operação.
[000159] Quando a instrução termina com o código de condição 2 e EILF igual a um, o programa pode modificar o endereço de lista de entrada e comprimento para a lista de entrada especificada pelo EILN, como apropriado, e subsequentemente reiniciar a operação. Nesse caso, o programa pode modificar também o endereço de primeiro operando e comprimento de primeiro operando quando o modo de fusão (MM) é um.
[000160] Quando a instrução termina com o código de condição 2 e IILF igual a um, o programa pode modificar o endereço de lista de entrada e comprimento para a lista de entrada especificada pelo IILN, como apropriado, e subsequentemente, reiniciar a operação. Nesse caso, o programa pode modificar também o endereço de primeiro operando e comprimento de primeiro operando quando o modo de fusão (MM) é um.
[000161] Quando a instrução termina com o código de condição 3, e antes de executar novamente a instrução para reiniciar a operação, o programa modifica qualquer comprimento ou endereço de lista de entrada ativa, o endereço ou comprimento do primeiro operando, ou o endereço ou comprimento do segundo operando, os resultados são imprevisíveis. Código de função 2: SORTL-SVLR (Registros de Separar Comprimento variável)
[000162] A função SORTL-SVLR operar do mesmo modo que a função SORTL-SFLR, exceto pelo que se segue: Os registros incluem, por exemplo, como mostrado na Figura 9, uma chave de comprimento fixo 900, um comprimento de carga útil de 8 bytes (PL) 902) e uma carga útil de comprimento variável 904. Portanto, os registros têm um comprimento variável.
Os bytes 14-15 do bloco de parâmetros para a função SORTL-SVLR são ignorados.
O menos significativo, por exemplo, 2 bytes do campo de comprimento de carga útil de cada registro contém um inteiro binário sem sinal especificando o comprimento, em bytes, da carga útil no mesmo registro.
Um comprimento de carga útil de zero é válido.
O comprimento de carga útil deve ser um múltiplo, por exemplo, de 8; de outro modo, uma exceção de dados de operando geral é reconhecida, em um exemplo.
Os 6 bytes mais significativos (como exemplo) do campo de comprimento de carga útil são reservados e devem conter zeros; de outro modo, o programa não pode operar compativelmente no futuro.
A soma do comprimento de chave, oito, e o comprimento de carga útil não deve ser maior que, por exemplo, 4096; de outro modo, uma exceção de dados de operando geral é reconhecida, em um exemplo.
Quando uma exceção de dados de operando geral é reconhecida como resultado de um comprimento de carga útil inapropriado, o endereço de lista de entrada correspondendo à lista de entrada ativa encontrando a exceção especifica o endereço lógico do byte mais esquerdo do registro errante.
Quando um registro de comprimento variável é armazenado no local do primeiro operando, os bytes reservados do campo de comprimento de carga útil não são modificados.
Uma lista de entrada incompleta não pode ser reconhecida durante uma unidade de operação que tenta apenas referenciar a chave de um registro a partir de uma lista de entrada com um comprimento de lista de entrada maior que o tamanho de chave e menor que o tamanho de registro.
Nesse caso, a lista de entrada incompleta será reconhecida ao tentar armazenar o registro a partir da lista de entrada incompleta, no local do primeiro operando.
[000163] O bloco de parâmetros para a função SORTL- SVLR é igual ao bloco de parâmetros para a função SORTL-SFLR, exceto pelos bytes 14-15, como indicado acima.
[000164] Consulte Outras Condições abaixo para descrições de outras condições que se aplicam à função SORTL- SVLR. Condições especiais
[000165] Uma exceção de especificação é reconhecida quando a execução de Separar Listas é tentada e qualquer do que se segue se aplica, em uma concretização: Bits 57-63 do registrador geral 0 designam um código de função não atribuído ou não instalado. O campo R1 designa um registrador de número ímpar ou registrador geral 0. O campo R2 designa um registrador de número ímpar ou registrador geral 0. Isso se aplica quando o modo de fusão (MM) é zero ou um. O bloco de parâmetros não é designado em um limite de palavra dupla. A função SORTL-SFLR ou a função SORTL-SVLR é especificada e o primeiro operando não é designado em um limite de palavra dupla. A função SORTL-SFLR ou SORTL-SVLR é especificada e o segundo operando não é designado em um limite de palavra dupla quando MM é zero.
[000166] Uma exceção de dados de operando geral é reconhecida quando a execução de Separar Listas é tentada e qualquer dos que se seguem se aplica, em uma concretização: A função SORTL-SFLR ou SORT-SVLR é especificada e nenhuma bit, ou múltiplos bits, de bits 0-7 do número de versão de bloco de parâmetros, contêm um valor de um, em cujo caso a operação é suprimida.
A função SORTL-SFLR ou SORTL-SVLR é especificada e o tamanho ou formato do bloco de parâmetros, como especificado pelo número de versão do bloco de parâmetros, não é suportada pelo modelo, em cujo caso a operação é suprimida.
A função SORTL-SFLR ou SORTL-SVLR é especificada e o comprimento de chave de registro especifica um tamanho de chave de zero, um tamanho de chave que não é um múltiplo de 8, ou um tamanho de chave maior que 4096, em cujo caso a operação é suprimida.
A função SORTL-SFLR é especificada e o comprimento de carga útil de registro especifica um tamanho de carga útil que não é um múltiplo de 8, ou um tamanho de carga útil, quando adicionado ao tamanho de chave, é maior que 4096, em cujo caso a operação é suprimida.
A função SORTL-SVLR é especificada e o comprimento de carga útil de registro especifica um tamanho de carga útil que não é um múltiplo de 8, ou um tamanho de carga útil, quando adicionado ao tamanho de chave, é maior que 4088, em cujo caso é dependente de modelo se a operação for suprimida ou terminada.
A função SORTL-SFLR ou SORTL-SVLR é especificada e o valor do código de contagem de listas de entrada ativa (AILCC) mais um é maior que o número de listas de entrada descritas pelo bloco de parâmetros, em cujo caso a operação é suprimida.
A função SORTL-SFLR ou SORTL-SVLR é especificada e um endereço de lista de entrada, correspondendo a uma lista de entrada ativa, não é designada em um limite de palavra dupla, em cujo caso a operação é suprimida. Outras condições
[000167] Em uma concretização, as seguintes condições se aplicam: A execução da instrução é interrompível. Quando uma interrupção ocorre, os endereços em registradores gerais R1 e R2, os comprimentos em registradores gerais R1 + 1 e R2 + 1 e campos específicos do bloco de parâmetros são atualizados, de modo que a instrução, quando executada novamente, reinicia no ponto de interrupção.
[000168] Exceções de acesso não são reconhecidas para locais maiores que 4 K-bytes à direita do local designado pelo endereço do primeiro operando. Exceções de acesso não são reconhecidas para locais maiores que 4 K-bytes à direita do local designado por um endereço de lista de entrada.
[000169] Se uma exceção de acesso está prevista ser reconhecida para o primeiro operando, segundo operando, ou qualquer lista de entrada, o resultado é que a exceção é reconhecida ou o código de condição 3 é definido. Se o código de condição 3 for definido, a exceção será reconhecida quando a instrução é executada novamente para continuar o processamento dos mesmos operandos, assumindo que a condição de exceção ainda existe.
[000170] Quando a chave de um registro cruza um limite de página e as condições de exceção de acesso existem para ambas as páginas, qualquer exceção de acesso pode ser reconhecida.
[000171] Quando as condições de exceção de acesso existem para múltiplas chaves sendo processadas durante uma unidade de operação única, quaisquer dessas condições podem ser reconhecidas.
[000172] Quando o bloco de parâmetros cruza um limite de página e as condições de exceção de acesso existem para ambas as páginas, a exceção de acesso para a página mais à esquerda é reconhecida.
[000173] Quando a operação termina com conclusão parcial, até 4 K-bytes de dados podem ter sido armazenados em locais no primeiro operando que está no, ou à direita do local designado pelo endereço atualizado do primeiro operando. Tais armazenamentos resultam em definição de bits de alteração, quando aplicáveis, e reconhecimento de eventos de alteração de armazenamento PER, quando aplicáveis. O armazenamento desses locais será repetido quando a instrução é executada novamente para continuar o processamento dos mesmos operandos.
[000174] Como observado por essa CPU, outras CPUs, e programas de canal, referências ao bloco de parâmetros, o primeiro operando, o buffer de delineações de listas de saída e as listas de entrada no estado ativo podem ser múltiplas referências de acesso, acessos a esses locais de armazenamento não são necessariamente simultâneos em bloco, e a sequência desses acessos ou referências é indefinida.
[000175] Os resultados são imprevisíveis quando a função especificada é SORTL-SFLR ou SORTL-SVLR e quaisquer dos que se seguem se aplicam, em uma concretização:
O bloco de parâmetros sobrepõe qualquer lista de entrada ativa ou o primeiro operando. Qualquer lista de entrada ativa sobrepõe o primeiro operando. O modo de fusão é zero e o bloco de parâmetros sobrepõe o segundo operando ou o buffer de recordação de registro de continuação. O modo de fusão é zero e qualquer lista de entrada ativa sobrepõe o segundo operando ou o buffer de recordação de registro de continuação. O modo de fusão é zero e o primeiro operando sobrepõe o segundo operando ou o buffer de recordação de registro de continuação. O modo de fusão é zero e o segundo operando sobrepõe o buffer de recordação de registro de continuação. Outra CPU ou programa de canal armazena em uma chave de um registro em uma lista de entrada ou o buffer de recordação de registro de continuação.
[000176] Códigos de condição resultantes de exemplo: 0 Conclusão normal 1 O comprimento do primeiro operando é menor que o tamanho de um registro, ou modo de fusão é zero e o comprimento do segundo operando é menor que 16 (isto é, o comprimento do primeiro ou segundo operando é insuficiente para continuar) 2 Uma lista de entrada incompleta foi encontrada (IILF = 1) ou o EILCL é não zero e o comprimento de uma lista de entrada se tornou igual a zero durante a operação (isto é, lista de entrada incompleta ou vazia encontrada).
3 Quantidade determinada por CPU de dados processados (isto é, conclusão determinada por CPU)
[000177] Exceções de programa: Acesso (buscar, listas de entrada; buscar e armazenar, bloco de parâmetros e buffer de recordação de registro de continuação; armazenar, operandos 1 e 2) Dados com DXC (Código de exceção de dados) 0, operando geral Operação (se a instalação de separação aperfeiçoada não for instalada) Especificação Limitação de transação
[000178] Um exemplo da prioridade de execução para a instrução Separar Listas é mostrado abaixo. Quando múltiplas condições que têm valores de prioridade começando com 13 existem, a condição reconhecida é a que é encontrada primeiramente, à medida que a operação prossegue. Quando a operação está sendo reiniciada (o flag de continuação é um no início da execução da instrução), um histórico de comparações anteriores entre chaves pode ser utilizado no lugar de acessar inicialmente as listas de entrada que são ativas e não vazias. Como resultado, uma exceção de acesso para um acesso a uma lista de entrada específica pode não ser encontrada no mesmo ponto de processamento, em comparação com quando nenhum histórico de comparações anteriores é utilizado. Quando registros de comprimento variável são processados, as condições que são uma função de um comprimento de registro podem ser parcialmente avaliadas antes do comprimento de carga útil ser determinado, e avaliadas completamente após o comprimento de carga útil ser determinado. Como resultado, a prioridade observada entre tais condições pode diferir quando uma condição é determinada existir após avaliar apenas parcialmente as exigências, ao invés de após avaliar completamente todas as exigências.
[000179] Prioridade de execução de exemplo (SORTL) 1-6. Exceções com a mesma prioridade que a prioridade de condições de interrupção de programa para o caso geral.
7.A Exceções de acesso para a meia-palavra de segunda instrução.
7.B Exceção de operação
7.C Limitação de transação
8.A Exceção de especificação devido ao código de função inválido ou número de registro inválido.
8.B Exceção de especificação devido ao primeiro operando não designado no limite de palavra dupla.
8.C Exceção de especificação devido ao primeiro operando não designado no limite de palavra dupla.
8.D Exceção de especificação devido ao segundo operando não designado em limite de palavra dupla e modo de fusão é zero.
9. Exceções de acesso para um acesso a bytes 0-7 do bloco de parâmetros.
10. Exceção de dados de operando geral devido a um valor não suportado do campo PBVN no bloco de parâmetros.
11. Exceções de acesso para um acesso a bytes do bloco de parâmetros diferente de bytes 0-7.
12. Exceção de dados de operando geral devido a um valor inválido de um campo no bloco de parâmetros diferente do PBVN.
13.A Exceções de acesso para um acesso a uma lista de entrada ativa.
13.B Exceções de acesso para um acesso ao buffer de recordação de registro de continuação quando o modo de fusão é zero.
13.C Exceções de acesso para um acesso ao primeiro operando.
13.D Exceções de acesso para um acesso ao segundo operando quando o modo de fusão é zero.
13.E Código de condição 2 devido a uma lista de entrada incompleta.
13.F Código de condição 1 devido ao comprimento insuficiente do primeiro operando.
13.G Código de condição 1 devido ao comprimento insuficiente do segundo operando quando o modo de fusão é zero.
13.H Exceção de dados de operando geral devido a um comprimento de carga útil inválido de um registro de comprimento variável.
13.I Código de condição 2 devido a uma lista de entrada vazia.
14. Código de condição 3.
[000180] Notas de programação. Em uma concretização:
1. Os usos pretendidos do controle de listas de entrada vazia (EILCL) são como a seguir: EILCL (0:1) (Binário) Descrição 00 Parar após os registros das listas de entrada ativa serem separadas (por exemplo, todos os registros de todas as listas de entrada ativa). 10 Parar após a lista de entrada 0 (sempre ativa) se tornar vazia. 11 Parar após qualquer lista de entrada ativa se tornar vazia.
2. Quando o código de contagem de listas de entrada ativa (AILCC) é zero, há, por exemplo, somente uma lista de entrada ativa e os resultados armazenados no local do primeiro operando são iguais aos dados buscados a partir da lista de entrada 0.
3. Modelos implementando caches de dados e instrução separados podem utilizar o cache de instrução para executar referências de busca de operando de armazenamento para dados em listas de entrada ativa.
4. Quando um programa espera invocar Separar Listas múltiplas vezes com o modo de fusão igual a zero, como parte de processamento de um conjunto grande de dados, o programa é utilizar, em um exemplo, as listas de entrada disponíveis e dividir uniformemente registros entre as listas de entrada. Isso reduz o número de vezes que os dados são acessados ao separar o conjunto de dados inteiro.
5. Subsequente à Separação de Listas com modo de fusão igual a zero que termina com o conjunto de códigos de condição 0 e múltiplas delineações de lista de saída (OLDs) no segundo operando, um programa que pretende gerar uma lista única de registros em ordem separada é invocar outra operação de Separar Listas com listas de entrada especificadas como sendo os OLDs resultantes a partir da invocação anterior de Separar Listas. Nesse caso, em um exemplo, a segunda invocação de separar listas especifica o modo de fusão igual a um. Similarmente, em uma concretização subsequente à invocação de Separar Listas com o modo de fusão igual a zero, por tantas vezes quanto necessário ou desejado, para gerar um conjunto completo de listas separadas a partir de um número grande de registros aleatoriamente ordenados, Separar Listas é invocado, em um exemplo, com o modo de fusão igual a um, por tantas vezes quanto necessário ou desejado, para gerar uma lista separada única.
6. Para reduzir o número de vezes que cada registro é acessado ao fundir múltiplas separadas em uma lista única com ordem de separação crescente (por exemplo, o programa executa o seguinte processo, em uma concretização. Determinar o número máximo, N, de listas de entrada disponíveis para Separar Listas. Comparar as chaves do primeiro registrador das listas separadas que não foram fundidas ainda na lista única. Selecionar as N listas que têm os valores da primeira chave mais baixos. Executar Separar Listas com modo de fusão (MM) igual a um, controle de listas de entrada vazia (EILCL) igual a 10 binário, lista de entrada 0 especificando apenas o primeiro registrador da lista com o valor mais alto da primeira chave das N listas selecionadas, e as listas de entrada restantes especificando as outras N-1 listas selecionadas. Subsequente a Separar listas que terminam com o código de condição 2, IILF igual a zero, e EILF igual a zero, repetir o processo.
7. Subsequente a Separar Listas que terminam com o código de condição 1 definido, o programa executa as seguintes ações, em um exemplo, antes de invocar Separar Listas novamente, para reiniciar a operação: Se o comprimento do primeiro operando for menor que o maior comprimento de registro dos registros sendo processados, então o comprimento do primeiro operando ou o endereço do primeiro operando e comprimento deve ser atualizado, como apropriado. Se o modo de fusão (MM) for zero e o comprimento do segundo operando for menor que 16, então o comprimento do segundo operando ou endereço do segundo operando e comprimento deve ser atualizado, como apropriado. Se o comprimento de qualquer lista de entrada ativa for igual a zero, então o comprimento e o endereço de lista de entrada correspondente podem ser atualizados para designar outra lista de registros a serem incluídos na operação de separação.
8. Subsequente a Separar Listas que terminam com o código de condição 2 definido, o programa executa as seguintes ações, em um exemplo, antes de invocar Separar Listas novamente, para reiniciar a operação: Se o flag de lista de entrada incompleta (IILF) for um, então o comprimento de lista de entrada ou endereço de lista de entrada e comprimento da lista de entrada identificada pelo número de lista de entrada incompleta (IILN) devem ser atualizados, como apropriado. Se o flag de lista de entrada vazia (EILF) for um, então o comprimento de lista de entrada ou endereço de lista de entrada e comprimento da lista de entrada identificada pelo número de lista de entrada vazia (EILN) devem ser atualizados, como apropriado.
Se o IILF for zero, o EILF é zero, e o comprimento da lista de entrada zero é zero, então o comprimento de lista de entrada 0 ou endereço de lista de entrada 0 e comprimento devem ser atualizados, como apropriado.
Adicionalmente, o endereço de lista de entrada e comprimento para as listas de entrada ativa podem ser atualizadas, que podem ser a ação apropriada se houvesse apenas um registro designado pela lista de entrada originalmente, e o controle de listas de entrada vazia (EILCL) é 10 binário.
Se o modo de fusão (MM) for um e o comprimento de primeiro operando for menor que o maior comprimento de registro dos registros sendo processados, então o comprimento de primeiro operando ou endereço de primeiro operando e comprimento deve ser atualizado, como apropriado.
Se MM for zero e IILF for um, ou EILF for um, então o endereço e comprimento de primeiro operando, e o comprimento e endereço de segundo operando não devem ser atualizados.
Se MM for zero, IILF for zero, EILF for zero, e o comprimento de primeiro operando é menor que o maior comprimento de registro dos registros sendo processados, então o comprimento de primeiro operando ou comprimento e endereço de primeiro operando devem ser atualizados, como apropriado.
Se MM for zero, IILF for zero, EILF for zero, e o comprimento de segundo operando for menor que 16, então o comprimento do segundo operando ou comprimento e endereço do segundo operando devem ser atualizados, como apropriado.
[000181] Como descrito na presente invenção, em um aspecto, uma instrução única (por exemplo, uma instrução de máquina de arquitetura única, Separar Listas) é fornecida para executar as operações de separação e/ou fusão em um processador de propósito geral. Em um exemplo, um programa implementando as operações de separação e/ou fusão para um banco de dados e sendo executado em um processador de propósito geral, é capaz de substituir um subconjunto significativo de instruções primitivas para implementar as operações com uma instrução única. Essa instrução é, por exemplo, uma instrução de hardware definida em uma Arquitetura de Conjunto de instruções (ISA). Como resultado, a complexidade do programa relacionado às operações de separação e/ou fusão é reduzida. Além disso, o desempenho das operações e desse modo, o processador, é aperfeiçoado.
[000182] Vantajosamente, a instrução de Separar Listas é executada em um processador de propósito geral (por exemplo, uma unidade de processamento central, mencionado na presente invenção como um processador) ao invés de um processador de propósito especial, como uma unidade de processamento gráfico (GPU), um motor de banco de dados (DBE) ou outros tipos de processadores de propósito especial.
[000183] Embora vários campos e registradores sejam descritos, um ou mais aspectos da presente invenção podem utilizar outros, adicionais ou menos campos ou registradores, ou outros tamanhos de campos e registradores etc. Muitas variações são possíveis. Por exemplo, registradores implícitos podem ser utilizados ao invés de registradores explicitamente especificados ou campos da instrução e/ou registradores ou campos explicitamente especificados podem ser utilizados ao invés de registradores ou campos implícitos. Outras variações são possíveis também.
[000184] Em um exemplo, a instrução de Separar Listas funciona em uma grande quantidade de dados de um banco de dados (por exemplo, um banco de dados comercial), como megabytes ou terabytes de dados. Portanto, a instrução é interrompível e o processamento pode reiniciar onde interrompido.
[000185] Detalhes adicionais de uma concretização de processamento associados à instrução de Separar Listas são descritos com referência à Figura 10A-10B. Em um exemplo, esse processamento é executado por um processador, como processador 102 ou 204.
[000186] Em um exemplo, a instrução de Separar Listas é obtida e a execução tem início, ETAPA 1000. Como indicado acima, uma pluralidade de funções pode ser especificada para a instrução Separar Listas, e portanto, uma determinação é feita com relação à função a ser executada, ETAPA 1002. Se a função for uma função de consulta (por exemplo, código de função 0 é especificado no registrador geral 0), CONSULTA 1004, então as funções disponíveis são providas, ETAPA 1006. Por exemplo, o vetor de funções instalado 342, vetor de tamanhos de interface instalado 344 e vetor de formatos de bloco de parâmetro instalado 346 são armazenados no bloco de parâmetros.
[000187] Entretanto, se a função consulta não for solicitada, CONSULTA 1004, então uma determinação é feita com relação a se uma função de separar, como registros de comprimento fixo de separação ou registros de comprimento variável de separação, está sendo solicitada, CONSULTA 1008. Se uma função de consultar ou separar não for especificada, então em um exemplo, o processamento termina com, por exemplo, uma exceção de especificação, ETAPA 1010. entretanto, se uma função de separar for especificada, então, uma determinação adicional é feita com relação a se a fusão é solicitada (por exemplo, o modo de fusão 310 é definido em um), CONSULTA 1012.
[000188] Se a fusão não está sendo solicitada, então a separação é executada em uma pluralidade de listas de entrada obtidas utilizando o bloco de parâmetros especificado pelo registrador geral 1 (por exemplo, campos de endereço de lista de entrada 392, 394, 396 do bloco de parâmetros), ETAPA
1020. Em uma concretização, uma pluralidade de registros é dividida (por exemplo, uniformemente) pelo programa emitindo a instrução de Separar Listas na pluralidade de listas de entrada. A pluralidade de listas de entrada é separada utilizando as chaves dos registros, ETAPA 1022. A separação pode ser crescente ou decrescente, como indicado no campo de ordem de separação 366 do bloco de parâmetros.
[000189] A separação produz listas de saída intermediárias, cada uma das quais em uma ordem separada. Essas listas de saída são armazenadas no primeiro operando, ETAPA 1024, e uma delineação de cada lista é armazenada no segundo operando, ETAPA 1026.
[000190] Se uma única lista de registros separados for desejada, então a instrução de Separar Listas é executada novamente, em uma concretização, especificando a opção de fusão.
[000191] Voltando para CONSULTA 1012, se fusão for especificada, então a entrada é uma pluralidade de listas em ordem separada previamente, que em um exemplo, são especificadas utilizando o bloco de parâmetros, ETAPA 1030. Essas listas são fundidas em uma lista única utilizando as chaves dos registros nas listas, ETAPA 1032. A lista fundida é armazenada no primeiro operando, ETAPA 1034.
[000192] Em uma concretização com referência à Figura 10B, a operação de separação ou fusão pode ser interrompida, e portanto, em um exemplo, se a operação for interrompida, CONSULTA 1050, então um indicador de continuação (por exemplo, flag de continuação 368 do bloco de parâmetros) é definido, por exemplo, em um, ETAPA 1052. Além disso, informações que podem ser utilizadas para reiniciar subsequentemente a operação são armazenadas, por exemplo, no bloco de parâmetros, ETAPA 1054. Por exemplo, metadados, como informações referentes a comparações anteriormente realizadas são armazenadas em buffer de estado de continuação 390, de modo que essas comparações não tenham de ser repetidas. Informações adicionais ou outras também podem ser armazenadas, e/ou outros indicadores podem ser definidos. São possíveis muitas variações.
[000193] Um ou mais aspectos da presente invenção são inextricavelmente vinculados à tecnologia de computador para facilitar o processamento em um computador, melhorando o desempenho do mesmo. O uso de uma instrução de máquina de arquitetura única para executar separação e/ou fusão de um número grande de registros de banco de dados de um banco de dados substitui muitas instruções de software, melhorando o desempenho no ambiente de computação. Esses registros separados e/ou fundidos podem ser utilizados em muitos campos técnicos que gerenciam e/ou utilizam grandes quantidades de dados, como em processamento de computador, processamento médico, segurança etc. Por fornecer otimizações de separação/fusão, esses campos técnicos são melhorados por reduzir o tempo de execução na obtenção de informações e utilização das informações, e reduzindo exigências de armazenamento.
[000194] Detalhes adicionais de uma concretização de facilitar processamento em um ambiente de computação, como se refere a um ou mais aspectos da presente invenção, são descritos com referência às Figuras 11A - 11B.
[000195] Com referência à Figura 11A, uma instrução para executar uma operação de separação é obtida (1100). A instrução é uma instrução de máquina de arquitetura única de uma arquitetura de conjunto de instruções (1102), e é executada por um processador de propósito geral do ambiente de computação (1104). A execução inclui, por exemplo, separar uma pluralidade de listas de entrada para obter uma ou mais listas de saída separadas (1106) e fornecer como saída a uma ou mais listas de saída separadas (1108).
[000196] Em uma concretização, a instrução inclui um campo de código de operação incluindo um código de operação para especificar uma operação de separação de lista e um campo a ser utilizado para designar uma localização, a uma localização a ser utilizado na separação de uma ou mais listas de saída separadas (1110). Em uma concretização adicional, a instrução inclui outro campo a ser utilizado para designar outra localização, a outra localização a armazenar uma ou mais delineações de listas de saída (1112). Como exemplos, o um campo é um campo de registrador, o campo de registrador designando um registrador, o registrador incluindo um endereço de uma localização, e o outro campo é outro campo de registrador, o outro campo de registrador designando outro registrador, o outro registrador incluindo um endereço do outra localização (1114).
[000197] Em um exemplo, com referência à Figura 11B, a instrução emprega um registrador implícito para determinar uma função a ser executada pela instrução (1120). Como exemplo, a função é selecionada a partir de um grupo de funções consistindo em uma função de consultar funções disponíveis, uma função de separar registros de comprimento fixo e uma função de separar registros de comprimento variável (1122).
[000198] Como exemplo adicional, a instrução emprega outro registrador para localizar um bloco de parâmetros em memória utilizada pela instrução (1123). O bloco de parâmetros inclui informações utilizadas pela instrução dependendo da função a ser executada (1124). Em um exemplo específico, a função a ser executada é uma função de separar registros de comprimento fixo ou uma função de separar registros de comprimento variável, e o bloco de parâmetros inclui informações para localizar a pluralidade de listas de entrada e informações para continuar a separação, com base na separação sendo interrompida (1126).
[000199] Em uma concretização, o um registrador implícito inclui ainda um indicador de modo de operação, o indicador de modo de operação a ser utilizado para especificar se uma fusão de uma ou mais listas de saída separadas deve ser executada (1128).
[000200] Como um exemplo específico, a instrução inclui um campo de código de operação incluindo um código de operação para especificar uma operação de separar lista, um campo de primeiro registrador incluindo uma designação de um primeiro registrador, o primeiro registrador incluindo um endereço utilizado na separação de uma ou mais listas de saída separadas; e um segundo campo de registrador incluindo uma designação de um segundo registrador, o segundo registrador incluindo um endereço utilizado na separação de uma ou mais delineações de lista de saída e em que a instrução emprega um primeiro registrador implícito para determinar uma função a ser executada pela instrução e um segundo registrador implícito para localizar um bloco de parâmetros em memória utilizado pela instrução (1130).
[000201] Outras variações e concretizações são possíveis.
[000202] Os aspectos da presente invenção podem ser utilizados por muitos tipos de ambientes de computação. Outra concretização de um ambiente de computação a incorporar e utilizar um ou mais aspectos da presente invenção é descrita com referência à Figura 12A. Nesse exemplo, um ambiente de computação 10 inclui, por exemplo, uma unidade de processamento central nativa (CPU) 12, uma memória 14, e um ou mais dispositivos de entrada/saída e/ou interfaces 16 acopladas a uma outra via, por exemplo, um ou mais barramentos 18 e/ou outras conexões. Como exemplos, o ambiente de computação 10 pode incluir um processador PowerPC® oferecido pela International Business Machines Corporation, Armonk, Nova York; um HP Superdome com processadores Itanium II oferecido por Hewlett Packard Co., Palo Alto, California; e/ou outras máquinas baseadas em arquiteturas oferecidas por International Business Machines Corporation, Hewlett Packard, Intel Corporation, Oracle ou outros. IBM, z/Architecture, IBM Z, z/OS, PR/SM e PowerPC são marcas ou marcas registradas da International Business Machines Corporation pelo menos em uma jurisdição. Intel e Itanium são marcas ou marcas registradas da Intel Corporation ou suas subsidiárias nos Estados Unidos da América e em outros países.
[000203] A unidade de processamento central nativa 12 inclui um ou mais registradores nativos 20, tais como um ou mais registradores de propósito geral e/ou um ou mais registradores de propósito especial utilizados durante processamento no ambiente. Esses registradores incluem informações que representam o estado do ambiente em qualquer ponto em tempo específico.
[000204] Além disso, a unidade de processamento central nativa 12 executa instruções e código que são armazenados na memória 14. Em um exemplo específico, a unidade de processamento central executa o código emulador 22 armazenado na memória 14. Esse código habilita o ambiente de computação configurado em uma arquitetura a emular outra arquitetura. Por exemplo, o código emulador 22 permite que máquinas baseadas em arquiteturas diferentes da arquitetura de hardware z/Architecture, tais como processadores PowerPC, servidores HP Superdome ou outros, emulem a arquitetura de hardware z/Architecture e executem software e instruções desenvolvidas com base na arquitetura de hardware z/Architecture.
[000205] Detalhes adicionais referentes ao código emulador 22 são descritos com referência à Figura 12B. Instruções de convidado 30 armazenadas na memória 14 compreendem instruções de software (por exemplo, correlacionando com instruções de máquina) que foram desenvolvidas para serem executadas em uma arquitetura diferente daquela da CPU nativa 12. Por exemplo, instruções de convidado 30 podem ter sido projetadas para executar em um processador com base na arquitetura de hardware z/Architecture, porém ao invés, estão sendo emuladas em CPU nativa 12, que pode ser, por exemplo, um processador Intel Itanium II. Em um exemplo, o código emulador 22 inclui uma rotina de busca de instrução 32 para obter uma ou mais instruções de convidado 30 a partir da memória 14 e prover opcionalmente buffering local para as instruções obtidas. Inclui também uma rotina de tradução de instrução 34 para determinar o tipo de instrução de convidado que foi obtida e traduzir a instrução de convidado para uma ou mais instruções nativas correspondentes 36. Essa tradução inclui, por exemplo, identificar a função a ser executada pela instrução de convidado e escolher a(s) instrução(ões) nativa(s) para executar aquela função.
[000206] Além disso, o código emulador 22 inclui uma rotina de controle de emulação 40 para fazer com que as instruções nativas sejam executadas. A rotina de controle de emulação 40 pode fazer com que a CPU nativa 12 execute uma rotina de instruções nativas que emulam uma ou mais instruções de convidado anteriormente obtidas e, na conclusão de tal execução, retorne o controle à rotina de busca de instrução para emular a obtenção da próxima instrução de convidado ou um grupo de instruções de convidado. A execução das instruções nativas 36 pode incluir carregar dados em um registrador a partir da memória 14; armazenar dados de volta na memória a partir de um registrador; ou executar algum tipo de operação aritmética ou lógica, como determinado pela rotina de tradução.
[000207] Cada rotina é, por exemplo, implementada em software, que é armazenado na memória e executado pela unidade de processamento central nativa 12. Em outros exemplos, uma ou mais das rotinas ou operações são implementadas em firmware, hardware, software ou alguma combinação dos mesmos. Os registradores do processador emulado podem ser emulados utilizando registradores 20 da CPU nativa ou utilizando locais na memória 14. Em concretizações, instruções de convidado 30, instruções nativas 36 e código emulador 22 podem residir na mesma memória ou podem ser disponibilizados entre dispositivos de memória diferentes.
[000208] Os ambientes de computação descritos acima são apenas exemplos de ambientes de computação que podem ser utilizados. Outros ambientes, incluindo, porém, não limitados a, outros ambientes não divididos, outros ambientes divididos, e/ou outros ambientes emulados, podem ser utilizados; as concretizações não são limitados a qualquer ambiente.
[000209] Cada ambiente de computação é capaz de ser configurado para incluir um ou mais aspectos da presente invenção. Por exemplo, cada pode ser configurado para fornecer separação e/ou fusão, de acordo com um ou mais aspectos da presente invenção.
[000210] Um ou mais aspectos podem se referir à computação em nuvem.
[000211] Deve ser entendido que embora essa revelação inclua uma descrição detalhada sobre computação em nuvem, a implementação dos ensinamentos citados na presente invenção não é limitada a um ambiente de computação em nuvem. Ao invés, as concretizações da presente invenção são capazes de serem implementadas em combinação com qualquer outro tipo de ambiente de computação agora conhecido ou posteriormente desenvolvido.
[000212] A computação em nuvem é um modelo de fornecimento de serviço para habilitar acesso à rede em demanda, conveniente, a um pool compartilhado de recursos de computação configuráveis (por exemplo, redes, largura de banda de rede, servidores, processamento, memória, armazenamento, aplicações, máquinas virtuais e serviços) que podem ser rapidamente provisionados e liberados com esforço mínimo de gerenciamento ou interação com um provedor do serviço. Esse modelo de nuvem pode incluir pelo menos cinco características, pelo menos três modelos de serviço e pelo menos quatro modelos de implantação.
[000213] As características são como a seguir: Autosserviço em demanda: um consumidor de nuvem pode provisionar unilateralmente capacidades de computação, tais como tempo de servidor e armazenamento de rede, conforme necessário automaticamente sem exigir interação humana com o provedor do serviço.
Acesso amplo à rede: capacidades estão disponíveis sobre uma rede e acessadas através de mecanismos padrão que promovem uso por plataformas de cliente thin ou thick heterogêneas (por exemplo, telefones móveis, laptops e PDAs). Agrupamento de recursos: os recursos de computação do provedor são agrupados para servir a múltiplos consumidores utilizando um modelo de multi0tenant, com recursos físicos e virtuais diferentes dinamicamente atribuídos e atribuídos novamente de acordo com a demanda.
Há um sentido de independência de localização em que o consumidor não tem em geral controle ou conhecimento sobre a localização exata dos recursos fornecidos, porém pode ser capaz de especificar a localização em um nível mais alto de abstração (por exemplo, país, estado ou centro de dados). Elasticidade rápida: as capacidades podem ser provisionadas rápida e elasticamente, em alguns casos automaticamente, para exceder rapidamente e liberadas rapidamente para dimensionar de modo acelerado.
Para o consumidor, as capacidades disponíveis para provisionamento parecem frequentemente ser ilimitadas e podem ser adquiridas em qualquer quantidade a qualquer momento.
Serviço medido: os sistemas de nuvem controlam e otimizam, automaticamente, o uso de recurso por alavancar uma capacidade de medição em algum nível de abstração apropriado ao tipo de serviço (por exemplo, armazenamento, processamento, largura de banda e contas ativas de usuário). O uso de recursos pode ser monitorado, controlado e relatado,
fornecendo transparência tanto para o provedor como para o consumidor do serviço utilizado.
[000214] Os Modelos de Serviço são como a seguir: Software como um Serviço (SaaS): a capacidade fornecida ao consumidor é utilizar as aplicações do provedor que rodam em uma infraestrutura de nuvem. As aplicações são acessíveis a partir de vários dispositivos de clientes através de uma interface de cliente thin tal como um navegador de rede (por exemplo, e-mail baseado em rede). O consumidor não gerencia ou controla a infraestrutura de nuvem subjacente incluindo rede, servidores, sistemas operacionais, armazenamento ou mesmo capacidades de aplicação individuais, com a exceção possível de definições limitadas de configuração de aplicação específicas para o usuário. Plataforma como um Serviço (PaaS): a capacidade fornecida ao consumidor é implantar sobre a infraestrutura de nuvem aplicações adquiridos ou criados pelo consumidor criados utilizando linguagens de programação e ferramentas suportadas pelo provedor. O consumidor não gerencia ou controla a infraestrutura de nuvem subjacente incluindo redes, servidores, sistemas operacionais ou armazenamento, porém tem controle sobre os aplicações implantadas e possivelmente aplicação hospedando configurações de ambiente. Infraestrutura como um Serviço (IaaS): a capacidade fornecida para o consumidor é provisionar processamento, armazenamento, redes e outros recursos de computação fundamentais onde o consumidor é capaz de implantar e rodar software arbitrário, que pode incluir sistemas operacionais e aplicações. O consumidor não gerencia ou controla a infraestrutura de nuvem subjacente, porém tem controle sobre os sistemas operacionais, armazenamento, aplicações implantadas e possivelmente controle limitado de componentes de funcionamento em rede selecionados (por exemplo, firewalls hospedeiros).
[000215] Os Modelos de implantação são como a seguir: Nuvem privada: a infraestrutura de nuvem é operada exclusivamente para uma organização. Pode ser gerenciada pela organização ou por um terceiro e pode existir nas dependências ou fora das dependências. Nuvem de comunidade: a infraestrutura de nuvem é compartilhada por várias organizações e suporta uma comunidade específica que tem preocupações compartilhadas (por exemplo, missão, exigências de segurança, programa e considerações de conformidade). Pode ser gerenciada pelas organizações ou por um terceiro e podem existir nas dependências ou fora das dependências. Nuvem pública: a infraestrutura de nuvem é tornada disponível ao público em geral ou a um grupo de indústria grande e pertence a uma organização que vende serviços de nuvem. Nuvem híbrida: a infraestrutura de nuvem é uma composição de duas ou mais nuvens (privada, comunidade ou pública) que permanecem entidades exclusivas, porém são ligadas por tecnologia padronizada ou de propriedade que habilita a portabilidade de aplicação e dados (por exemplo, rajada de nuvem para equilíbrio de carga entre as nuvens).
[000216] Um ambiente de computação em nuvem é orientado para serviço com foco sobre falta de estado, acoplamento baixo, modularidade e interoperabilidade semântica. No coração de computação em nuvem está uma infraestrutura que inclui uma rede de nós interconectados.
[000217] Com referência agora à Figura 13, ambiente de computação em nuvem ilustrativo, 50, é mostrado. Como mostrado, o ambiente de computação em nuvem 50 inclui um ou mais nós de computação em nuvem 52 com os quais dispositivos de computação locais usados por consumidores de nuvem, tais como, por exemplo, assistente pessoal digital (PDA) ou telefone celular 54A, computador de mesa 54B, computador laptop 54C, e/ou sistema de computador de automóvel 54N podem se comunicar. Os nós 52 podem comunicar um com o outro. Eles podem ser agrupados (não mostrados) física ou virtualmente, em uma ou mais redes, tais como nuvens Privada, Comunidade, Pública ou Híbrida, como descrito acima, ou uma combinação das mesmas. Isso permite que o ambiente de computação em nuvem 50 ofereça infraestrutura, plataformas e/ou software como serviços, para os quais um consumidor de nuvem não precisa manter recursos em um dispositivo de computação local. Entende-se que os tipos de dispositivos de computação 54A-N mostrados na Figura 13 são destinados a serem apenas ilustrativos e que nós de computação 52 e ambiente de computação em nuvem 50 podem comunicar com qualquer tipo de dispositivo computadorizado através de qualquer tipo de rede e/ou conexão endereçável de rede (por exemplo, utilizando um navegador de rede).
[000218] Com referência agora a Figura 14, um conjunto de camadas de abstração funcionais providas pelo ambiente de computação de rede 50 (Figura 13) é mostrado. Deve ser entendido antecipadamente que os componentes, camadas e funções mostrados na Figura 14 pretendem ser apenas ilustrativos e concretizações da invenção não são limitadas aos mesmos. Como mostrado, as seguintes camadas e funções correspondentes são providas: A camada de hardware e software 60 inclui componentes de hardware e software. Os exemplos de componentes de hardware incluem: mainframes 61; servidores baseados em arquitetura RISC (Computador com Conjunto de instruções reduzido) 62; servidores 63; servidores blade 64; dispositivos de armazenamento 65; e redes e componentes de funcionamento em rede 66. Em algumas concretizações, os componentes de software incluem software de servidor de aplicação de rede 67 e software de banco de dados 68. A camada de virtualização 70 provê uma camada de abstração a partir da qual os seguintes exemplos de entidades virtuais podem ser providas: servidores virtuais 71; armazenamento virtual 72; redes virtuais 73, incluindo redes privadas virtuais; aplicações virtuais e sistemas operacionais 74; e clientes virtuais 75.
[000219] Em um exemplo, a camada de gerenciamento 80 pode fornecer as funções descritas abaixo. O provisionamento de recursos 81 provê obtenção dinâmica de recursos de computação e outros recursos que são utilizados para executar as tarefas no ambiente de computação em nuvem. Medição e Tarifação 82 fornecem rastreamento de custo quando recursos são utilizados no ambiente de computação em nuvem, e cobrança ou faturamento para consumo desses recursos. Em um exemplo,
esses recursos podem incluir licenças de software de aplicação. Segurança provê verificação de identidade para consumidores de nuvem e tarefas, bem como proteção para dados e outros recursos. O portal de usuário 83 provê acesso ao ambiente de computação em nuvem para consumidores e administradores do sistema. O gerenciamento de nível de serviço 84 provê alocação e gerenciamento de recursos de computação em nuvem de tal modo que níveis exigidos de serviço sejam atendidos. Planejamento e Cumprimento do Contrato de Nível de serviço (SLA) 85 fornecem pré-arranjo para, e obtenção de, recursos de computação em nuvem para os quais uma exigência futura é prevista de acordo com um SLA.
[000220] A camada de cargas de trabalho 90 provê exemplos de funcionalidade para os quais o ambiente de computação em nuvem pode ser utilizado. Os exemplos de cargas de trabalho e funções que podem ser providas a partir dessa camada incluem: mapeamento e navegação 91; desenvolvimento de software e gerenciamento de ciclo de vida 92; fornecimento de educação em sala de aula virtual 93; processamento de analítica de dados 94; processamento de transação 95; e processamento de separação e/ou fusão 96.
[000221] Os aspectos da presente invenção podem ser um sistema, um método e/ou um produto de programa de computador em qualquer nível de integração de detalhe técnico possível. O produto de programa de computador pode incluir um meio (ou mídia) de armazenamento legível por computador tendo instruções de programa legíveis por computador no mesmo para fazer com que um processador realize aspectos da presente invenção.
[000222] O meio de armazenamento legível por computador pode ser um dispositivo tangível que pode reter e armazenar instruções para uso por um dispositivo de execução de instrução.
O meio de armazenamento legível por computador pode ser, por exemplo, porém não é limitado a, um dispositivo de armazenamento eletrônico, um dispositivo de armazenamento magnético, um dispositivo de armazenamento ótico, um dispositivo de armazenamento eletromagnético, um dispositivo de armazenamento semicondutor ou qualquer combinação adequada dos acima.
Uma lista não exaustiva de exemplos mais específicos do meio de armazenamento legível por computador inclui os que se seguem: um disquete de computador portátil, um disco rígido, uma memória de acesso aleatória (RAM), uma memória somente de leitura (ROM), uma memória somente de leitura programável apagável (EPROM ou memória Flash), uma memória de acesso aleatório estática (SRAM), uma memória somente de leitura de disco compacto portátil (CD-ROM), um disco versátil digital (DVD), um cartão de memória, um disco flexível, um dispositivo mecanicamente codificado tais como cartões de perfuração ou estruturas em relevo em um entalhe tendo instruções gravadas nas mesmas e qualquer combinação adequada dos acima.
Um meio de armazenamento legível por computador, como utilizado na presente invenção, não deve ser interpretado como sendo sinais transitórios por si, tais como ondas de rádio ou outras ondas eletromagnéticas de propagação livre, ondas eletromagnéticas que se propagam através de um guia de onda ou outra mídia de transmissão (por exemplo, pulsos de luz que passam através de um cabo de fibra ótica), ou sinais elétricos transmitidos através de um fio.
[000223] Instruções de programa legíveis por computador descritas na presente invenção podem ser baixadas para dispositivos de processamento/computação respectivos a partir de um meio de armazenamento legível por computador ou para um computador externo ou dispositivo de armazenamento externo através de uma rede, por exemplo, a Internet, uma rede de área local, uma rede de área remota e/ou uma rede sem fio. A rede pode compreender cabos de transmissão de cobre, fibras de transmissão ótica, transmissão sem fio, roteadores, firewalls, comutadores, computadores de gateway e/ou servidores de borda. Um cartão de adaptador de rede ou interface de rede em cada dispositivo de processamento/computação recebe instruções de programa legíveis por computador a partir da rede e envia as instruções de programa legíveis por computador para armazenamento em um meio de armazenamento legível por computador no respectivo dispositivo de processamento/computação.
[000224] Instruções de programa legíveis por computador para realizar operações da presente invenção podem ser instruções de montador, instruções de arquitetura de conjunto de instruções (ISA), instruções de máquina, instruções dependentes de máquina, microcódigo, instruções de firmware, dados de definição de estado, dados de configuração para conjunto de circuitos integrados, ou código de fonte ou código de objeto gravado em qualquer combinação de uma ou mais linguagens de programação, incluindo uma linguagem de programação orientada para objeto tal como Smalltalk, C++ ou similar, e linguagens de programação de procedimento, tais como a linguagem de programação “.C” ou linguagens de programação similares. As instruções de programa legíveis por computador podem executar totalmente no computador do usuário, parcialmente no computador do usuário, como um pacote de software independente, parcialmente no computador do usuário e parcialmente em um computador remoto ou totalmente no servidor ou computador remoto. No cenário mencionado por último o computador remoto pode ser ligado ao computador do usuário através de qualquer tipo de rede, incluindo uma rede de área local (LAN) ou uma rede de área remota (WAN) ou a conexão pode ser feita a um computador externo (por exemplo, através da Internet utilizando um provedor de serviço de Internet). Em algumas concretizações, o conjunto de circuitos eletrônico incluindo, por exemplo, conjunto de circuitos de lógica programável, dispositivos de porta programável em campo (FPGA) ou dispositivos lógicos programáveis (PLA) pode executar as instruções de programa legíveis por computador utilizando informações de estado das instruções de programa legíveis por computador para personalizar o conjunto de circuitos eletrônico, para executar aspectos da presente invenção.
[000225] Aspectos da presente invenção são descritos aqui com referência a ilustrações de fluxograma e/ou diagramas de blocos de métodos, aparelho (sistemas) e produtos de programa de computador de acordo com concretizações da invenção. Será entendido que cada bloco das ilustrações de fluxograma e/ou diagramas de blocos e combinações de blocos nas ilustrações de fluxograma e/ou diagramas de bloco, pode ser implementado por instruções de programa legíveis por computador.
[000226] Essas instruções de programa legíveis por computador podem ser providas a um processador de um computador de propósito geral, computador de propósito especial ou outro aparelho de processamento de dados programável para produzir uma máquina, de tal modo que as instruções que executam através do processador do computador ou outro aparelho de processamento de dados programável, criam meio para implementar as funções/atos especificados no fluxograma e/ou bloco ou blocos do diagrama de blocos. Essas instruções de programa legíveis por computador podem ser armazenadas também em um meio de armazenamento legível por computador que pode orientar um computador, um aparelho de processamento de dados programável e/ou outros dispositivos a funcionar em um modo específico, de tal modo que o meio de armazenamento legível por computador tendo instruções armazenadas no mesmo compreenda um produto industrial incluindo instruções que implementam aspectos da função/ato especificado no fluxograma e/ou bloco ou blocos de diagrama de blocos.
[000227] As instruções de programa legíveis por computador também podem ser carregadas em um computador, outro aparelho de processamento de dados programável ou outro dispositivo para fazer com que uma série de etapas operacionais seja executada no computador, outro aparelho programável ou outro dispositivo para produzir um processo implementado por computador, de tal modo que as instruções que são executadas no computador, outro aparelho programável ou outro dispositivo implementam as funções/atos especificados no fluxograma e/ou bloco ou blocos de diagrama de blocos.
[000228] O fluxograma e diagramas de blocos nas Figuras ilustram a arquitetura, funcionalidade e operação de possíveis implementações de sistemas, métodos e produtos de programa de computador de acordo com várias concretizações da presente invenção. A esse respeito, cada bloco no fluxograma ou diagramas de blocos pode representar um módulo, segmento ou porção de instruções, que compreende uma ou mais instruções executáveis para implementar a(s) função(ões) lógica(s) especificada(s). Em algumas implementações alternativas, as funções observadas no bloco podem ocorrer fora da ordem mencionada nas Figuras. Por exemplo, dois blocos mostrados em sucessão podem, na realidade, ser executados substancialmente simultaneamente ou os blocos podem às vezes ser executados na ordem inversa, dependendo da funcionalidade envolvida. Será também observado que cada bloco dos diagramas de blocos e/ou ilustração de fluxograma, e combinações de blocos nos diagramas de blocos e/ou ilustração de fluxograma, pode ser implementado por sistemas baseados em hardware de propósito especial que executam as funções ou atos especificados ou realizam combinações de instruções de computador e hardware de propósito especial.
[000229] Além do acima, um ou mais aspectos podem ser providos, oferecidos, implantados, gerenciados, atendidos etc., por um provedor de serviços oferecem gerenciamento de ambientes de clientes. Por exemplo, o provedor de serviços pode criar, manter, suportar etc. código de computador e/ou uma infraestrutura de computador que executa um ou mais aspectos para um ou mais clientes. Em retorno, o provedor de serviço pode receber pagamento a partir do cliente de acordo com uma assinatura e/ou contrato de taxa, como exemplos. Adicionalmente, ou alternativamente, o provedor de serviço pode receber pagamento a partir da venda de conteúdo de publicidade para um ou mais terceiros.
[000230] Em um aspecto, uma aplicação pode ser implantada para executar uma ou mais concretizações. Como exemplo, a implantação de uma aplicação compreende fornecer infraestrutura de computador operável para executar uma ou mais concretizações.
[000231] Como um aspecto adicional, uma infraestrutura de computação pode ser implantada compreendendo integrar código legível por computador em um sistema de computação, no qual o código em combinação com o sistema de computação é capaz de executar uma ou mais concretizações.
[000232] Ainda como um aspecto adicional, pode ser provido um processo para integrar infraestrutura de computação compreendendo integrar código legível por computador em um sistema de computador. O sistema de computador compreende um meio legível por computador, no qual o meio de computador compreende uma ou mais concretizações. O código em combinação com o sistema de computador é capaz de executar uma ou mais concretizações.
[000233] Embora várias concretizações sejam descritas acima, essas são apenas exemplos. por exemplo, ambientes de computação de outras arquiteturas podem ser utilizadas para incorporar e utilizar uma ou mais concretizações. Além disso, instruções ou operações diferentes podem ser utilizadas. Adicionalmente, registradores diferentes podem ser utilizados e/ou outros tipos de indicações (diferente de números de registrador) podem ser especificados. São possíveis muitas variações.
[000234] Além disso, outros tipos de ambientes de computação podem se beneficiar e serem utilizados. Como exemplo, um sistema de processamento de dados adequado para armazenar e/ou executar código de programa é utilizável que inclui pelo menos dois processadores acoplados direta ou indiretamente a elementos de memória através de um barramento de sistema. Os elementos de memória incluem, por exemplo, memória local empregada durante execução efetiva do código de programa, armazenamento de volume e memória cache que fornecem armazenamento temporário de pelo menos algum código de programa a fim de reduzir o número de vezes que o código deve ser recuperado a partir de armazenamento de volume durante execução.
[000235] Dispositivos de entrada/saída ou I/O (incluindo, porém, não limitado a, teclados, telas, dispositivos apontadores, DASD, fita, CDs, DVDs, thumb drives e outra mídia de memória etc.) podem ser acoplados ao sistema diretamente ou através de controladores de I/O intermediários. Adaptadores de rede também podem ser acoplados ao sistema para habilitar que o sistema de processamento de dados se torne acoplado a outros sistemas de processamento de dados ou impressoras remotas ou dispositivos de armazenamento através de redes públicas ou privadas intermediárias. Modems, modems a cabo e cartões de Ethernet são apenas alguns dos tipos disponíveis de adaptadores de rede.
[000236] A terminologia utilizada na presente invenção é para fins de descrever concretizações específicas apenas e não é destinada a ser limitadora. Como utilizado na presente invenção, as formas singulares “um”, “uma” e “o, a” pretendem incluir as formas plurais também, a menos que o contexto claramente indique de outro modo. Será adicionalmente entendido que os termos “compreende” e/ou “compreendendo” quando utilizados nesse relatório descritivo, especificam a presença de características, inteiros, etapas, operações, elementos e/ou componentes mencionados, porém não preclude a presença ou adição de uma ou mais outras características, inteiros, etapas, operações, elementos, componentes e/ou grupos dos mesmos.
[000237] As estruturas, materiais, atos e equivalentes correspondentes de todos os meios ou elementos de etapa mais função nas reivindicações abaixo, caso haja, pretendem incluir qualquer estrutura, material ou fato para executar a função em combinação com outros elementos reivindicados como especificamente reivindicado. A descrição de uma ou mais concretizações foi apresentada para fins de ilustração e descrição, porém não pretende ser exaustiva ou limitada na forma revelada. Muitas modificações e variações serão evidentes para aqueles técnicos no assunto. A concretização foi escolhida e descrita para explicar melhor vários aspectos e a aplicação prática e permitir que outros técnicos no assunto entendam várias concretizações com várias modificações como são adequadas ao uso específico considerado.

Claims (20)

REIVINDICAÇÕES
1. Produto de programa de computador para facilitar processamento em um ambiente de computação, o produto de programa de computador sendo caracterizado pelo fato de que compreende: um meio de armazenamento legível por computador legível por um circuito de processamento e armazenando instruções para executar um método compreendendo: obter uma instrução para executar uma operação de separação, a instrução sendo uma instrução de máquina de arquitetura única de uma arquitetura de conjunto de instruções; e executar, por um processador de propósito geral do ambiente de computação, a instrução, a execução compreendendo: separar uma pluralidade de listas de entrada para obter uma ou mais listas de saída separadas; e fornecer como saída uma ou mais listas de saída separadas.
2. Produto de programa de computador, de acordo com a reivindicação 1, caracterizado pelo fato de que a instrução inclui um campo de código de operação incluindo um código de operação para especificar uma operação de separação de lista, e um campo a ser utilizado para designar uma localização, a uma localização a ser utilizado no armazenamento de uma ou mais listas de saída separadas.
3. Produto de programa de computador, de acordo com a reivindicação 2, caracterizado pelo fato de que a instrução inclui ainda outro campo a ser utilizado para designar outra localização, a outra localização para armazenar uma ou mais delineações de lista de saída.
4. Produto de programa de computador, de acordo com a reivindicação 3, caracterizado pelo fato de que o um campo é um campo de registrador, o campo de registrador designando um registrador, o registrador incluindo um endereço de uma localização, e o outro campo é outro campo de registrador, o outro campo de registrador designando outro registrador, o outro registrador incluindo um endereço da outra localização.
5. Produto de programa de computador de acordo com a reivindicação 1, caracterizado pelo fato de que a instrução emprega um registrador implícito para determinar uma função a ser executada pela instrução.
6. Produto de programa de computador, de acordo com a reivindicação 5, caracterizado pelo fato de que a função é selecionada a partir de um grupo de funções consistindo em uma função de consultar funções disponíveis, uma função de separar registros de comprimento fixo e uma função de separar registros de comprimento variável.
7. Produto de programa de computador de acordo com a reivindicação 5, caracterizado pelo fato de que a instrução emprega outro registrador implícito para localizar um bloco de parâmetros em memória utilizado pela instrução, o bloco de parâmetros incluindo informações utilizadas pela instrução dependendo da função a ser executada.
8. Produto de programa de computador, de acordo com a reivindicação 7, caracterizado pelo fato de que a função a ser executada é uma função de separar registros de comprimento fixo ou uma função de separar registros de comprimento variável e o bloco de parâmetros inclui informações para localizar a pluralidade de listas de entrada e informações para continuar a separação, com base na separação sendo interrompida.
9. Produto de programa de computador, de acordo com a reivindicação 5, caracterizado pelo fato de que um registrador implícito compreende ainda um indicador de modo de operação, o indicador de modo de operação a ser utilizado para especificar se uma fusão de uma ou mais listas de saída separadas deve ser realizada.
10. Produto de programa de computador de acordo com a reivindicação 1, caracterizado pelo fato de que a instrução inclui um campo de código de operação incluindo um código de operação para especificar uma operação de separação de lista; um campo de primeiro registrador incluindo uma designação de um primeiro registrador, o primeiro registrador incluindo um endereço utilizado no armazenamento de uma ou mais listas de saída separadas e um campo de segundo registrador incluindo uma designação de um segundo registrador, o segundo registrador incluindo um endereço utilizado no armazenamento de uma ou mais delineações de lista de saída, e em que a instrução emprega um primeiro registrador implícito para determinar uma função a ser executada pela instrução e um segundo registrador implícito para localizar um bloco de parâmetros na memória utilizada pela instrução.
11. Sistema de computador para facilitar o processamento em um ambiente de computação, o sistema de computador sendo caracterizado pelo fato de que compreende:
uma memória; e um processador de propósito geral acoplado à memória, em que o sistema de computador é configurado para executar um método que compreende obter uma instrução para executar uma operação de separação, a instrução sendo uma instrução de máquina de arquitetura única de uma arquitetura de conjunto de instruções; e executar, pelo processador de propósito geral do ambiente de computação, a instrução, a execução compreendendo: separar uma pluralidade de listas de entrada para obter uma ou mais listas de saída separadas; e fornecer como saída uma ou mais listas de saída separadas.
12. Sistema de computador, de acordo com a reivindicação 11, caracterizado pelo fato de que a instrução inclui um campo de código de operação incluindo um código de operação para especificar uma operação de separação de lista, e um campo a ser utilizado para designar uma localização, a uma localização a ser utilizada no armazenamento de uma ou mais listas de saída separadas.
13. Sistema de computador, de acordo com a reivindicação 12, caracterizado pelo fato de que a instrução inclui ainda outro campo a ser utilizado para designar outra localização, a outra localização a armazenar uma ou mais delineações de lista de saída.
14. Sistema de computador, de acordo com a reivindicação 11, caracterizado pelo fato de que a instrução emprega um registrador implícito para determinar uma função a ser realizada pela instrução.
15. Sistema de computador, de acordo com a reivindicação 14, caracterizado pelo fato de que a instrução emprega outro registrador implícito para localizar um bloco de parâmetros em memória utilizada pela instrução, o bloco de parâmetros incluindo informações utilizadas pela instrução dependendo da função a ser executada.
16. Método implementado por computador de facilitar processamento em um ambiente de computação, o método implementado por computador sendo caracterizado pelo fato de que compreende: obter uma instrução para executar uma operação de separação, a instrução sendo uma instrução de máquina de arquitetura única de uma arquitetura de conjunto de instruções; e executar, pelo processador de propósito geral do ambiente de computação, a instrução, a execução compreendendo: separar uma pluralidade de listas de entrada para obter uma ou mais listas de saída separadas; e fornecer como saída uma ou mais listas de saída separadas.
17. Método implementado por computador, de acordo com a reivindicação 16, caracterizado pelo fato de que a instrução inclui um campo de código de operação incluindo um código de operação para especificar uma operação de separação de lista e um campo a ser utilizado para designar uma localização, a uma localização a ser utilizado no armazenamento de uma ou mais listas de saída separadas.
18. Método implementado por computador, de acordo com a reivindicação 17, caracterizado pelo fato de que a instrução inclui ainda outro campo a ser utilizado para designar outra localização, a outra localização para armazenar uma ou mais delineações de lista de saída.
19. Método implementado por computador, de acordo com a reivindicação 16, caracterizado pelo fato de que a instrução emprega um registrador implícito para determinar uma função a ser executada pela instrução.
20. Método implementado por computador, de acordo com a reivindicação 19, caracterizado pelo fato de que a instrução emprega outro registrador implícito para localizar um bloco de parâmetros em memória utilizado pela instrução, o bloco de parâmetros incluindo informações utilizadas pela instrução dependendo da função a ser executada.
BR112021008844-0A 2018-11-06 2019-11-05 instrução de separação e fusão para um processador de propósito geral BR112021008844A2 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/181,923 US10831478B2 (en) 2018-11-06 2018-11-06 Sort and merge instruction for a general-purpose processor
US16/181,923 2018-11-06
PCT/EP2019/080160 WO2020094600A1 (en) 2018-11-06 2019-11-05 Sort and merge instruction for a general-purpose processor

Publications (1)

Publication Number Publication Date
BR112021008844A2 true BR112021008844A2 (pt) 2021-08-17

Family

ID=68468733

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021008844-0A BR112021008844A2 (pt) 2018-11-06 2019-11-05 instrução de separação e fusão para um processador de propósito geral

Country Status (21)

Country Link
US (2) US10831478B2 (pt)
EP (1) EP3877840B1 (pt)
JP (1) JP7288048B2 (pt)
KR (1) KR102527963B1 (pt)
CN (1) CN112970000A (pt)
AU (1) AU2019377216B2 (pt)
BR (1) BR112021008844A2 (pt)
CA (1) CA3118173A1 (pt)
DK (1) DK3877840T3 (pt)
ES (1) ES2929826T3 (pt)
HU (1) HUE060425T2 (pt)
IL (1) IL282055B2 (pt)
LT (1) LT3877840T (pt)
MX (1) MX2021005005A (pt)
PL (1) PL3877840T3 (pt)
PT (1) PT3877840T (pt)
SG (1) SG11202102996YA (pt)
SI (1) SI3877840T1 (pt)
TW (1) TWI736912B (pt)
WO (1) WO2020094600A1 (pt)
ZA (1) ZA202103133B (pt)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10831478B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Sort and merge instruction for a general-purpose processor
US10831503B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Saving and restoring machine state between multiple executions of an instruction
US11790085B2 (en) * 2020-10-29 2023-10-17 Electronics And Telecommunications Research Institute Apparatus for detecting unknown malware using variable opcode sequence and method using the same
US11803509B1 (en) 2022-05-23 2023-10-31 Apple Inc. Parallel merge sorter circuit
CN115510450B (zh) * 2022-09-20 2023-08-01 中国人民解放军国防科技大学 一种面向计算机二进制程序的比对依赖识别方法与系统
CN118194790A (zh) * 2024-05-15 2024-06-14 北京壁仞科技开发有限公司 芯片设计方法以及芯片设计系统

Family Cites Families (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH077385B2 (ja) * 1983-12-23 1995-01-30 株式会社日立製作所 データ処理装置
US4890220A (en) 1984-12-12 1989-12-26 Hitachi, Ltd. Vector processing apparatus for incrementing indices of vector operands of different length according to arithmetic operation results
US5210870A (en) 1990-03-27 1993-05-11 International Business Machines Database sort and merge apparatus with multiple memory arrays having alternating access
JPH07104784B2 (ja) * 1990-04-03 1995-11-13 富士ゼロックス株式会社 デジタルデータ処理装置
US5307485A (en) 1991-05-31 1994-04-26 International Business Machines Corporation Method and apparatus for merging sorted lists in a multiprocessor shared memory system
DE69418646T2 (de) * 1993-06-04 2000-06-29 Sun Microsystems Inc Gleitkommaprozessor für einen hochleistungsfähigen dreidimensionalen Graphikbeschleuniger
US5475882A (en) 1993-10-15 1995-12-19 Sereboff; Joel L. Gel filled deformable cushion and composition contained therein
US20060136923A1 (en) 1995-05-30 2006-06-22 Kahn Robert E System for distributed task execution
US5909544A (en) * 1995-08-23 1999-06-01 Novell Inc. Automated test harness
US5796997A (en) * 1996-05-15 1998-08-18 Hewlett-Packard Company Fast nullify system and method for transforming a nullify function into a select function
US5799167A (en) * 1996-05-15 1998-08-25 Hewlett-Packard Company Instruction nullification system and method for a processor that executes instructions out of order
US5941983A (en) * 1997-06-24 1999-08-24 Hewlett-Packard Company Out-of-order execution using encoded dependencies between instructions in queues to determine stall values that control issurance of instructions from the queues
US5995962A (en) 1997-07-25 1999-11-30 Claritech Corporation Sort system for merging database entries
US6016539A (en) 1997-11-03 2000-01-18 Teragen Corporation Datapath control logic for processors having instruction set architectures implemented with hierarchically organized primitive operations
US6795966B1 (en) 1998-05-15 2004-09-21 Vmware, Inc. Mechanism for restoring, porting, replicating and checkpointing computer systems using state extraction
US6460121B1 (en) 1998-09-14 2002-10-01 Compaq Information Technologies Group, L.P. Method for providing an atomic memory read using a compare-exchange instruction primitive
JP2001256062A (ja) 2000-03-09 2001-09-21 Omron Corp 割込処理方法およびその方法を用いた演算処理装置
EP1217540A1 (en) 2000-11-29 2002-06-26 Lafayette Software Inc. Methods of organizing data and processing queries in a database system, and database system and software product for implementing such method
US7080159B2 (en) 2000-12-15 2006-07-18 Ntt Docomo, Inc. Method and system for effecting migration of application among heterogeneous devices
JP3955741B2 (ja) * 2001-04-02 2007-08-08 株式会社リコー ソート機能を有するsimd型マイクロプロセッサ
US7107320B2 (en) 2001-11-02 2006-09-12 Dot Hill Systems Corp. Data mirroring between controllers in an active-active controller pair
JP3799423B2 (ja) * 2002-07-30 2006-07-19 財団法人理工学振興会 命令制御装置、機能ユニット、プログラム変換装置および言語処理装置
US7464254B2 (en) * 2003-01-09 2008-12-09 Cisco Technology, Inc. Programmable processor apparatus integrating dedicated search registers and dedicated state machine registers with associated execution hardware to support rapid application of rulesets to data
US7561571B1 (en) 2004-02-13 2009-07-14 Habanero Holdings, Inc. Fabric address and sub-address resolution in fabric-backplane enterprise servers
JP4465598B2 (ja) 2004-07-05 2010-05-19 ソニー株式会社 集積回路およびその処理制御方法、並びに、プログラム
US8719819B2 (en) 2005-06-30 2014-05-06 Intel Corporation Mechanism for instruction set based thread execution on a plurality of instruction sequencers
US7987158B2 (en) 2005-02-09 2011-07-26 International Business Machines Corporation Method, system and article of manufacture for metadata replication and restoration
CN100587663C (zh) * 2005-03-18 2010-02-03 富士通株式会社 数据提示装置以及数据提示方法
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
US7502888B2 (en) * 2006-02-07 2009-03-10 Hewlett-Packard Development Company, L.P. Symmetric multiprocessor system
US7945789B2 (en) 2006-09-12 2011-05-17 International Business Machines Corporation System and method for securely restoring a program context from a shared memory
CN101542434A (zh) * 2006-11-21 2009-09-23 日本电气株式会社 指令操作码生成系统
DE102007025397B4 (de) 2007-05-31 2010-07-15 Advanced Micro Devices, Inc., Sunnyvale System mit mehreren Prozessoren und Verfahren zu seinem Betrieb
US8266112B1 (en) 2007-12-19 2012-09-11 Symantec Corporation Techniques for recovery of application level objects
US9947130B2 (en) 2008-01-23 2018-04-17 Intel Corporation Method, apparatus, and computer program product for improved graphics performance
US8230410B2 (en) 2009-10-26 2012-07-24 International Business Machines Corporation Utilizing a bidding model in a microparallel processor architecture to allocate additional registers and execution units for short to intermediate stretches of code identified as opportunities for microparallelization
US8850423B2 (en) 2009-10-29 2014-09-30 International Business Machines Corporation Assisting server migration
US20120054731A1 (en) 2010-08-24 2012-03-01 International Business Machines Corporation Method, System and Computer Programs to Assist Migration to a Cloud Computing Environment
US8695010B2 (en) 2011-10-03 2014-04-08 International Business Machines Corporation Privilege level aware processor hardware resource management facility
US9015083B1 (en) 2012-03-23 2015-04-21 Google Inc. Distribution of parameter calculation for iterative optimization methods
US9513915B2 (en) 2012-03-28 2016-12-06 International Business Machines Corporation Instruction merging optimization
CN104204991B (zh) * 2012-03-30 2018-01-02 英特尔公司 将较小的已排序向量合并和排序为较大的已排序向量的指令的方法和装置
CN104583956B (zh) * 2012-06-15 2019-01-04 英特尔公司 用于实现加载存储重新排序和优化的指令定义
US20140089646A1 (en) 2012-09-27 2014-03-27 Texas Instruments Incorporated Processor with interruptable instruction execution
US9710874B2 (en) 2012-12-27 2017-07-18 Nvidia Corporation Mid-primitive graphics execution preemption
US9405538B2 (en) * 2012-12-28 2016-08-02 Intel Corporation Functional unit having tree structure to support vector sorting algorithm and other algorithms
US9727594B2 (en) 2013-01-10 2017-08-08 Microsoft Technology Licensing, Llc Adaptive range filters for range and point queries
US20160162293A1 (en) 2013-03-26 2016-06-09 Via Technologies, Inc. Asymmetric processor with cores that support different isa instruction subsets
US10203958B2 (en) 2013-07-15 2019-02-12 Texas Instruments Incorporated Streaming engine with stream metadata saving for context switching
US9665533B2 (en) 2013-12-20 2017-05-30 Rambus Inc. Blob pools, selectors, and command set implemented within a memory appliance for accessing memory
WO2015145191A1 (en) * 2014-03-27 2015-10-01 Intel Corporation Instruction and logic for sorting and retiring stores
US9766888B2 (en) * 2014-03-28 2017-09-19 Intel Corporation Processor instruction to store indexes of source data elements in positions representing a sorted order of the source data elements
US9329850B2 (en) 2014-06-24 2016-05-03 International Business Machines Corporation Relocation of instructions that use relative addressing
US9703733B2 (en) 2014-06-27 2017-07-11 Intel Corporation Instructions and logic to interrupt and resume paging in a secure enclave page cache
US9600442B2 (en) * 2014-07-18 2017-03-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
US10318292B2 (en) 2014-11-17 2019-06-11 Intel Corporation Hardware instruction set to replace a plurality of atomic operations with a single atomic operation
US10318297B2 (en) 2015-01-30 2019-06-11 Huawei Technologies Co., Ltd. Method and apparatus for operating a self-timed parallelized multi-core processor
US10942748B2 (en) 2015-07-16 2021-03-09 Nxp B.V. Method and system for processing interrupts with shadow units in a microcontroller
US10102231B2 (en) 2015-10-20 2018-10-16 International Business Machines Corporation Ordering heterogeneous operations in bulk processing of tree-based data structures
US9996361B2 (en) 2015-12-23 2018-06-12 Intel Corporation Byte and nibble sort instructions that produce sorted destination register and destination index mapping
US9665626B1 (en) 2016-02-02 2017-05-30 International Business Machines Corporation Sorted merge of streaming data
US10725677B2 (en) 2016-02-19 2020-07-28 Sandisk Technologies Llc Systems and methods for efficient power state transitions
US10261790B2 (en) 2016-03-31 2019-04-16 Intel Corporation Memory copy instructions, processors, methods, and systems
US10296655B2 (en) 2016-06-24 2019-05-21 International Business Machines Corporation Unbounded list processing
US20180011768A1 (en) 2016-07-05 2018-01-11 International Business Machines Corporation Control state preservation during transactional execution
US10037267B2 (en) 2016-10-21 2018-07-31 Advanced Micro Devices, Inc. Instruction set architecture and software support for register state migration
US10162859B2 (en) 2016-10-31 2018-12-25 International Business Machines Corporation Delayable query
US10496371B2 (en) * 2017-06-29 2019-12-03 Intel Corporation Key-value compaction
US10698792B2 (en) 2018-05-02 2020-06-30 Microsoft Technology Licensing, Llc Execution control with cross-level trace mapping
US10831502B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Migration of partially completed instructions
US20200142669A1 (en) 2018-11-06 2020-05-07 International Business Machines Corporation Controlling storage accesses for merge operations
US10831503B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Saving and restoring machine state between multiple executions of an instruction
US10831478B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Sort and merge instruction for a general-purpose processor

Also Published As

Publication number Publication date
KR102527963B1 (ko) 2023-05-03
US20200142696A1 (en) 2020-05-07
PT3877840T (pt) 2022-11-03
CA3118173A1 (en) 2020-05-14
US10831478B2 (en) 2020-11-10
TWI736912B (zh) 2021-08-21
AU2019377216A1 (en) 2021-04-22
MX2021005005A (es) 2021-12-02
DK3877840T3 (da) 2022-11-14
LT3877840T (lt) 2023-01-25
TW202034160A (zh) 2020-09-16
EP3877840B1 (en) 2022-10-19
JP7288048B2 (ja) 2023-06-06
EP3877840A1 (en) 2021-09-15
ZA202103133B (en) 2022-07-27
SG11202102996YA (en) 2021-04-29
CN112970000A (zh) 2021-06-15
US11221850B2 (en) 2022-01-11
US20210011719A1 (en) 2021-01-14
IL282055B1 (en) 2023-09-01
AU2019377216B2 (en) 2022-11-24
WO2020094600A1 (en) 2020-05-14
HUE060425T2 (hu) 2023-02-28
ES2929826T3 (es) 2022-12-01
KR20210055771A (ko) 2021-05-17
JP2022503925A (ja) 2022-01-12
IL282055A (en) 2021-05-31
IL282055B2 (en) 2024-01-01
PL3877840T3 (pl) 2023-01-02
SI3877840T1 (sl) 2023-01-31

Similar Documents

Publication Publication Date Title
BR112021008844A2 (pt) instrução de separação e fusão para um processador de propósito geral
US11281469B2 (en) Saving and restoring machine state between multiple executions of an instruction
US20200142669A1 (en) Controlling storage accesses for merge operations
BR112021015073A2 (pt) Instrução de compressão/descompressão especificando um buffer de histórico a ser utilizado na compressão/descompressão de dados
US20210232638A1 (en) Vector string search instruction
EP3877842B1 (en) Migration of partially completed instructions
US11880350B2 (en) Identifying resource lock ownership across a clustered computing environment