KR20230160934A - 서브-텐서들의 제공을 위한 텐서들의 재포맷 - Google Patents

서브-텐서들의 제공을 위한 텐서들의 재포맷 Download PDF

Info

Publication number
KR20230160934A
KR20230160934A KR1020237037675A KR20237037675A KR20230160934A KR 20230160934 A KR20230160934 A KR 20230160934A KR 1020237037675 A KR1020237037675 A KR 1020237037675A KR 20237037675 A KR20237037675 A KR 20237037675A KR 20230160934 A KR20230160934 A KR 20230160934A
Authority
KR
South Korea
Prior art keywords
tensor
sub
tensors
data
dimension
Prior art date
Application number
KR1020237037675A
Other languages
English (en)
Inventor
세드릭 리히테나우
카일라쉬 고팔라크리쉬난
비자얄락슈미 스리니바산
앤서니 사포리또
수닐 수클라
스와가스 벤카타라마니
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
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 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20230160934A publication Critical patent/KR20230160934A/ko

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/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/10Interfaces, programming languages or software development kits, e.g. for simulating neural networks
    • G06N3/105Shells for specifying net layout

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Neurology (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Spinning Or Twisting Of Yarns (AREA)
  • Fertilizers (AREA)

Abstract

제 1 선택 차원의 텐서는 제 2 선택 차원의 하나 또는 그 이상의 서브-텐서들을 제공하기 위해 재포맷된다. 상기 재포맷하는 단계는 상기 텐서를 나타내는 데 사용되기 위해 다수의 서브-텐서들을 결정하는 단계를 포함한다. 상기 재포맷하는 단계는 상기 다수의 서브-텐서들을 생성하는 단계를 더 포함하고, 서브-텐서는 메모리 유닛의 경계에서 시작한다. 상기 텐서의 데이터는 상기 다수의 서브-텐서들에 맞도록 재조정된다.

Description

서브-텐서들의 제공을 위한 텐서들의 재포맷
[0001] 본 발명의 하나 또는 그 이상의 실시예들은, 일반적으로, 컴퓨팅 환경 내에서의 처리를 용이하게 하는 것과, 특히, 그러한 처리를 개선하는 것에 관한 것이다.
[0002] 데이터 및/또는 계산 집약적인 컴퓨팅 환경에서 처리를 향상시키기 위해, 인공 지능 가속기들(신경망 프로세서들 또는 신경망 가속기들이라고도 함)와 같은 보조 프로세서들(co-processors)이 이용된다. 그러한 가속기들은, 예를 들어, 행렬들이나 또는 텐서들(matrices or tensors)에 관한 계산들과 같은, 관련 계산들을 수행하는 데 사용되는 상당한 컴퓨팅 성능을 제공한다.
[0003] 예를 들어, 텐서 계산들은, 머신 러닝의 서브세트인, 딥 러닝을 포함한 복잡한 처리에 사용된다. 인공지능의 한 실시예인, 딥 러닝 또는 머신 러닝은, 엔지니어링, 제조, 의료 기술, 자동차 기술, 컴퓨터 처리, 등 다양한 기술들에 사용된다.
[0004] 텐서들 및 텐서 계산들을 통해 대량의 데이터 및/또는 세부 데이터가 딥러닝 처리에 입력될 수 있다. 그러나, 종종, 가속기는 가속기와 주고받는(to/from) 데이터의 대역폭에 의해 제한된다. 이전에는 이러한 제한을 해결하기 위해, 데이터 지역성 및 데이터 재-사용(data locality and data re-use)이 가속기에서채용되었다. 텐서들의 사용 및/또는 그러한 텐서들을 사용하는 처리에서의 진보들은, 컴퓨터 처리를 포함하는, 머신 러닝을 사용하는 기술을 향상시킬 것이다.
[0005] 종래 기술의 단점들은 극복되고, 컴퓨팅 환경 내에서 처리를 용이하게 하기 위한 컴퓨터 프로그램 제품의 제공을 통해 추가적인 이점들이 제공된다.상기 컴퓨터 프로그램 제품은 하나 또는 그 이상의 컴퓨터 판독 가능 저장 매체들 및 방법을 수행하기 위해 하나 또는 그 이상의 컴퓨터 판독 가능 저장 매체들에 집합적으로 저장된 프로그램 명령들을 포함한다. 상기 방법은 제1 선택 차원의 텐서(a tensor of a first select dimension)를 획득하는 단계를 포함한다. 상기 텐서는 제2 선택 차원의 하나 또는 그 이상의 서브-텐서들을 제공하기 위해 재포맷된다(reformatted). 상기 재포맷하는 단계는 상기 텐서를 나타내는데 사용될 다수의 서브-텐서들(a number of sub-tensors)을 결정하는 단계, 상기 다수의 서브-텐서들을 생성하는 단계(creating) - 서브-텐서는 메모리 유닛의 경계 상에서 시작함-, 및 상기 다수의 서브-텐서들 내에 맞도록(fit) 상기 텐서의 데이터를 재조정하는 단계(rearranging)를 포함한다.
[0006] 메모리 유닛의 경계에서 시작하는 서브-텐서들을 생성함으로써, 다수의 주소 변환 요청들을 감소시키고 데이터 전송 속도를 증가시킬 수 있어서 처리가 용이하게 된다. 또한 상기 서브-텐서들에 대한 메모리 주소들이 쉽게 계산될 수 있어서, 복잡한 주소 계산들에 대한 오버헤드를 감소시킬 수 있다.
[0007] 일 실시예에서, 상기 다수의 서브-텐서들을 결정하는 단계는, 적어도, 상기 텐서에 포함된 다수의 엘리멘트 값들과 상기 메모리 유닛의 크기에 기초하여 하나 또는 그 이상의 실 함수들(ceil functions)을 사용하는 단계를 포함한다.
[0008] 일 실시예에서, 상기 다수의 서브-텐서들 중 적어도 하나의 서브-텐서에 대한 데이터를 재조정하는 단계는 상기 적어도 하나의 서브-텐서를 완성하기 위해(complete) 적어도 하나의 차원에서 상기 다수의 서브-텐서들 중 적어도 하나의 서브-텐서를 패딩하는 단계(padding)를 포함한다.
[0009] 일 실시예에서, 상기 다수의 서브-텐서들 중 선택된 서브-텐서에 대한 데이터를 재조정하는 단계는 상기 텐서를 나타내는 복수의 행렬들에서 동일한 위치의 데이터를 선택하는 단계, 상기 선택된 서브-텐서의 한 행에서 선택된 데이터를 배치하는 단계(placing), 및 상기 복수의 행렬들의 복수의 위치들에 대해 상기 선택하는 단계 및 배치하는 단계를 반복하는 단계를 포함한다.
[0010] 또한, 일 실시예에서, 상기 데이터 재조정하는 단계는 상기 선택된 서브-텐서의 하나 또는 그 이상의 행들이 상기 선택된 서브-텐서의 크기에 의해 수용되는 것보다 더 적은 데이터를 갖는 것에 기초하여, 상기 선택된 서브-텐서의 하나 또는 그 이상의 행들을 패딩하는 단계, 및 상기 선택된 서브-텐서가 상기 선택된 서브-텐서의 크기에 의해 수용되는 것보다 더 적은 행들을 갖는 것에 기초하여, 상기 선택된 서브-텐서를 하나 또는 그 이상의 추가 패딩된 행들(additional padded rows)로 패딩하는 단계를 더 포함한다. 다시 말하지만, 상기 패딩하는 단계는 주소 계산들 및 데이터 전송에서 효율성을 제공하는 고정된 차원들(fixed dimensions)의 서브-텐서들을 제공한다.
[0011] 일 예로서, 상기 메모리 유닛은 메모리 페이지이고, 상기 메모리 유닛의 경계는 페이지 경계이다. 페이지 경계에서 시작하는 서브-텐서들을 생성함으로써, 상기 다수의 주소 변환 요청들을 감소시키고 데이터 전송 속도를 높일 수 있어서 처리가 촉진된다.
[0012] 일 실시예에서, 상기 하나 또는 그 이상의 서브-텐서들은 텐서 계산들에 사용하기 위해 프로세서에 제공된다. 상기 하나 또는 그 이상의 서브-텐서들을 제공하는 단계는, 예를 들어, 하나의 연산으로(in one operation) 상기 하나 또는 그 이상의 서브-텐서들의 데이터를 저장하는 데(store) 사용되기 위해 상기 프로세서에 주소 정보 및 상기 제2 선택 차원에 관한 정보를 제공하는 단계를 포함한다.
[0013] 일 실시예에서, 상기 하나 또는 그 이상의 서브-텐서들을 제공하는 단계는 하나의 연산으로(in one operation) 상기 하나 또는 그 이상의 서브-텐서들의 데이터를 로드하는 데(load) 사용되기 위해 상기 프로세서에 주소 정보 및 상기 제2 선택 차원에 관한 정보를 제공하는 단계를 포함한다. 이를 통해 하나의 연산으로 데이터를 블록 로드(block loading)할 수 있어 시스템 성능이 향상된다.
[0014] 일 예로서, 상기 제1 선택 차원은 4-차원들이고, 상기 제2 선택 차원은 2-차원들이며, 하나 또는 그 이상의 2-차원 서브-텐서들은 하나의 4-차원 텐서를 나타낸다.
[0015] 하나 또는 그 이상의 실시 예들과 관련된 컴퓨터 구현 방법들 및 시스템들도 여기에 설명되고 청구된다. 또한, 하나 또는 그 이상의 실시 예들과 관련된 서비스도 설명되고 여기에 청구될 수 있다.
[0016] 추가의 특징들 및 이점들이 여기에 기술된 기술들을 통해 실현된다. 다른 실시 예들 및 특징들이 본 명세서에서 상세하게 설명되고 청구된 실시 예들의 일부로 간주된다.
[0017] 하나 혹은 그 이상의 실시 예들이 명세서의 결론에 있는 청구범위들의 예들로서 구체적으로 기재되고 명확하게 청구된다. 본 발명의 하나 또는 그 이상의 실시 예들의 전술한 내용 및 목적들, 특징들, 그리고 이점들은 첨부 도면들과 함께 취해진 다음의 상세한 설명으로부터 명백하다:
도 1a는 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하기 위한 컴퓨팅 환경의 일 예를 도시한다;
도 1b는 본 발명의 하나 또는 그 이상의 실시예들에 따라 도 1a의 프로세서(processor)의 추가 세부 사항을 도시한다;
도 2a는 본 발명의 하나 또는 그 이상의 실시예들에 따른 2D-텐서의 한 예를 도시한다.
도 2b-2c는 본 발명의 하나 또는 그 이상의 실시예들에 따라 텐서의 서브-텐서들을 생성하는 데 사용되는 처리의 한 예를 도시한다.
도 3a는 본 발명의 하나 또는 그 이상의 실시예들에 따른 신경망 처리 지원 명령 포맷의 한 예를 도시한다.
도 3b는 본 발명의 하나 또는 그 이상의 실시예들에 따라 신경망 처리 지원 명령에 의해 사용되는 일반 레지스터의 일 예를 도시한다.
도 3c는 본 발명의 하나 또는 그 이상의 실시예들에 따라 신경망 처리 지원 명령에 의해 지원되는 함수 코드들의 예를 도시한다.
도 3d는 본 발명의 하나 또는 그 이상의 실시예들에 따라 신경망 처리 지원 명령에 의해 사용되는 다른 일반 레지스터의 일 예를 도시한다.
도 3e는 본 발명의 하나 또는 그 이상의 실시예들에 따라 신경망 처리 지원 명령의 쿼리 함수에 의해 사용되는 파라미터 블록의 일 예를 도시한다.
도 3f는 본 발명의 하나 또는 그 이상의 실시예들에 따라 신경망 처리 지원 명령의 하나 또는 그 이상의 비-쿼리 함수에 의해 사용되는 파라미터 블록의 일 예를 도시한다.
도 3g는 본 발명의 하나 또는 그 이상의 실시예들에 따라 신경망 처리 지원 명령에 의해 사용되는 텐서 설명자의 한 예를 도시한다.
도 4는 본 발명의 하나 또는 그 이상의 실시예들에 따른 신경망 처리(NNP)-데이터-유형-1 데이터 유형의 형식의 일 예를 도시한다.
도 5a-5c는 본 발명의 하나 또는 그 이상의 실시예들에 따라 신경망 처리 지원 명령에 의해 사용되는 입력 데이터 레이아웃의 예들을 도시한다.
도 6a-6c는 본 발명의 하나 또는 그 이상의 실시예들에 따른 도 5a-5c의 입력 데이터 레이아웃에 대응하는 예시적인 출력을 도시한다.
도 7a-7b는 본 발명의 하나 또는 그 이상의 실시예들에 따라 컴퓨팅 환경 내에서 처리를 용이하게 하는 일 예를 도시한다.
도 8a는 본 발명의 하나 또는 그 이상의 실시예들을 포함하고 사용하기 위한 컴퓨팅 환경의 다른 예를 도시한다;
도 8b는 본 발명의 하나 또는 그 이상의 실시예들에 따라 도 8a의 메모리(memory)의 추가 세부 사항의 한 예를 도시한다;
도 8c는 본 발명의 하나 또는 그 이상의 실시예들에 따라 도 8a의 메모리의 추가 세부 사항의 다른 예를 도시한다;
도 9a는 본 발명의 하나 또는 그 이상의 실시예들을 포함하고 사용하기 위한 컴퓨팅 환경의 또 다른 예를 도시한다;
도 9b는 본 발명의 하나 또는 그 이상의 실시예들에 따라 도 9a의 메모리의 추가 세부 사항을 도시한다;
도 10은 본 발명의 하나 또는 그 이상의 실시예들에 따라 클라우드 컴퓨팅 환경(a cloud computing environment)의 일 실시예를 도시한다; 그리고
도 11은 본 발명의 하나 또는 그 이상의 실시예들에 따라 추상화 모델 계층(abstraction model layers)의 한 예를 도시한다.
[0018] 본 발명의 실시예에 따라, 컴퓨팅 환경 내에서 처리를 용이하게 하는 기능이 제공된다. 한 예로서, 하나 또는 그 이상의 서브-텐서들이 원래 텐서를 나타내는, 서브-텐서들을 제공하기 위해 텐서를 재포맷하는 기능이 제공된다. 이는 메모리 주소 계산, 로드/저장 동작들 및/또는 프리페칭을 포함하되 이에 국한되지 않는 처리를 최적화한다. 예를 들어, 텐서를 나타내는 서브-텐서들이 메모리 유닛(예: 메모리 페이지)의 경계에서 시작하고 텐서의 정보가 하나 또는 그 이상의 선택 차원들(예: 2D)의 서브-텐서들(일명 타일) 내에 맞게(fit) 재조정되도록(rearranged) 텐서는 재포맷 된다. 재포맷하는 것에 기초하여, 서브-텐서들은 쉽게 계산 가능한 주소를 가지며 블록 로드 및/또는 저장될 수 있어(예를 들어, 한 번의 연산으로 로드/저장) 서브-텐서들을 사용할 때 효율성을 제공한다.
[0019] 서브-텐서들을 포함하는 생성된 텐서를 사용하기 위한 명령의 한 예는 신경망 처리 지원 명령(a Neural Network Processing Assist instruction)이며, 이는 다수의 기능들(multiple functions) 수행하도록 구성된 단일 명령(예: 하드웨어/소프트웨어 인터페이스의 단일 아키텍처된 하드웨어 머신 명령)이다. 상기 기능들 각각은 단일 명령(예: 단일 아키텍처된 명령)의 일부로 구성되어 시스템 자원들의 사용과 복잡성을 감소시키고 시스템 성능을 향상시킨다.
[0020] 상기 명령은, 범용 프로세서와 같은, 프로세서 상의 프로그램에 의해 디스패치되는, 범용 프로세서 명령 세트 아키텍처(ISA)의 일부일 수 있다. 이는 범용 프로세서에 의해 실행될 수 있으며/또는 상기 명령의 하나 또는 그 이상의 기능들은, 범용 프로세서에 결합되거나 또는 범용 프로세서의 일부인, 특정 기능들을 위해 구성된 보조-프로세서(a co-processor)와 같은, 특수-목적 프로세서에 의해 실행될 수 있다. 다른 변형들도 가능하다.
[0021] 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하기 위한 컴퓨팅 환경의 일 실시예가 도 1a를 참조하여 기술된다. 일 예로, 컴퓨팅 환경은 뉴욕주, 아몽크 소재의, 인터내셔널 비즈니스 머신즈 코포레이션에서 제공하는, z/Architecture 하드웨어 아키텍처를 기반으로 한다. z/Architecture 하드웨어 아키텍처의 일 실시예는 "z/Architecture Principles of Operation", IBM 간행물 번호 SA22-7832-12, 13판, 2019년 9월에 설명되어 있으며, 전체 내용이 여기에 참조로 통합된다. 그러나, z/Architecture 하드웨어 아키텍처는 한 가지 예일뿐이다; 인터내셔널 비즈니스 머신즈 코포레이션 및/또는 다른 주체들의 다른 아키텍처들 및/또는 다른 유형들의 컴퓨팅 환경들도 본 발명의 하나 또는 그 이상의 실시예들을 포함할 수 있고 및/또는 사용할 수 있다. z/Architecture 및 IBM은 적어도 하나의 관할 지역에서 인터내셔널 비즈니스 머신즈 코포레이션의 상표들 또는 등록 상표들이다.
[0022] 도 1a에 도시된 바와 같이, 컴퓨팅 환경(100)은, 예를 들어, 범용 컴퓨팅 디바이스의 형태로 도시된, 예를 들어, 컴퓨터 시스템(102)를 포함한다. 컴퓨터 시스템(102)은, 하나 혹은 그 이상의 버스들 및/또는 다른 연결들(110)을 통해 서로 결합된, 하나 혹은 그 이상의 프로세서들 또는 처리 유닛들(104) (예를 들어, 중앙 처리 유닛들(CPU들)), 신경망 프로세서(a neural network processor)와 같은, 적어도 하나의 특수-목적 프로세서(105), 메모리(106)(예들로서, 일명, 시스템 메모리, 메인 메모리, 메인 스토리지, 중앙 스토리지 또는 스토리지), 및 하나 또는 그 이상의 버스들 및/또는 다른 연결들을 통해 서로 결합된 하나 혹은 그 이상의 입/출력(I/O) 인터페이스들(108)을 포함할 수 있으나, 이들로 제한되지는 않는다. 예를 들어, 프로세서들(104, 105) 및 메모리(106)는 하나 또는 그 이상의 버스들(110)을 통해 I/O 인터페이스들(108)에 연결되고, 프로세서(104, 105)는 하나 또는 그 이상의 버스들(111)을 통해 서로 연결된다.
[0023] 버스(111)는, 예를 들어, 메모리 또는 캐시 일관성 버스(coherence bus) 이고, 버스(110)는 버스 구조들의 여러 유형들 중 하나 혹은 그 이상을 나타내며, 이들은 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스, 가속 그래픽 포트, 및 다양한 버스 아키텍처들 중 어느 하나를 사용하는 프로세서 또는 로컬 버스를 포함한다. 예를 들어, 그러한 아키텍처들은 ISA(Industry Standard Architecture), MCA(Micro Channel Architecture), EISA(Enhanced ISA), VESA(Video Electronics Standards Association) 로컬 버스 및 PCI(Peripheral Component Interconnect)를 포함하지만, 이들로 제한되지는 않는다.
[0024] 예로서, 하나 또는 그 이상의 특수-목적 프로세서들(예를 들어, 신경망 프로세서들)은 하나 또는 그 이상의 범용 프로세서들과 별개이지만 이들에 결합될 수 있고 및/또는 하나 또는 그 이상의 범용 프로세서들 내에 임베드될 수 있다. 다양한 변형들이 가능하다.
[0025] 메모리(106)는, 예를 들어, 프로세서들(104)의 로컬 캐시들(114)에 및/또는, 예를 들어, 하나 또는 그 이상의 버스들(111)을 통해 신경망 프로세서(105)에 결합될 수 있는, 공유 캐시와 같은, 캐시(112)를 포함할 수 있다. 또한, 메모리(106)는 하나 혹은 그 이상의 프로그램들 또는 애플리케이션들(116) 및 운영 체제(118)을 포함할 수 있다. 예시적인 운영 체제는 뉴욕 아몽크 소재의 인터내셔널 비즈니스 머신즈 코포레이션에 의해서 제공되는 z/OS® 운영 체제를 포함한다. z/OS는 적어도 하나의 관할권에서 인터내셔널 비즈니스 머신즈 코포레이션의 상표 또는 등록 상표이다. 인터내셔널 비즈니스 머신즈 코포레이션 및/또는 다른 주체들에 의해서 제공되는 다른 운영 체제들도 또한 사용될 수 있다. 메모리(106)는 또한, 본 발명의 실시예들의 기능들을 수행하도록 구성될 수 있는, 하나 또는 그 이상의 컴퓨터 판독 가능 프로그램 명령들(120)을 포함할 수 있다.
[0026] 더욱이, 하나 또는 그 이상의 실시예들에서, 메모리(106)는 프로세서 펌웨어(122)를 포함한다. 프로세서 펌웨어는, 예를 들어, 프로세서의 마이크로코드 또는 밀리코드를 포함한다. 예를 들어, 여기에는 더 높은 수준의 머신 코드 구현에 사용되는 하드웨어 수준 명령 및/또는 데이터 구조가 포함된다. 일 실시예에서, 이는, 예를 들어, 기본 하드웨어에 특정한 신뢰할 수 있는 소프트웨어, 마이크로코드 또는 밀리코드를 포함하고 시스템 하드웨어에 대한 운영 체제 액세스를 컨트롤하는 마이크로코드 또는 밀리코드로 일반적으로 전달되는 독점 코드를 포함한다.
[0027] 컴퓨터 시스템(102)은, 예를 들어, I/O 인터페이스들(108)을 통해, 사용자 단말기, 테이프 드라이브, 포인팅 디바이스, 디스플레이와 같은, 하나 혹은 그 이상의 외부 디바이스들(130) 및 하나 혹은 그 이상의 데이터 스토리지 디바이스들(134), 등과 통신할 수 있다. 데이터 스토리지 디바이스(134)는 하나 또는 그 이상의 프로그램들(136), 하나 또는 그 이상의 컴퓨터 판독 가능 프로그램 명령들(138) 및/또는 데이터, 등을 저장할 수 있다. 컴퓨터 판독 가능 프로그램 명령들은 본 발명의 실시예들의 기능들을 수행하도록 구성될 수 있다.
[0028] 컴퓨터 시스템(102)은 또한, 예를 들어, I/O 인터페이스들(108)을 통해, 네트워크 인터페이스(132)와 통신할 수 있고, 네트워크 인터페이스(132)는 컴퓨터 시스템(102)이 하나 혹은 그 이상의 네트워크들과 통신할 수 있게 하며, 이들은, 예를 들어, LAN(근거리 통신망), 일반 WAN(광역 통신망), 및/또는 공공 네트워크(예를 들어, 인터넷)를 포함하고, 다른 컴퓨팅 디바이스들 또는 시스템들과의 통신을 제공한다.
[0029] 컴퓨터 시스템(102)은 착탈식/비-착탈식, 휘발성/비-휘발성 컴퓨터 시스템 스토리지 매체를 포함할 수 있고 및/또는 이 들에 결합될 수 있다. 컴퓨터 시스템(102)은, 예를 들어, 비-착탈식, 비-휘발성 자기 매체(일반적으로 "하드 드라이브"라고 함), 착탈식, 비-휘발성 자기 디스크(예를 들어, "플로피 디스크")로부터 읽고 이에 쓰기 위한 자기 디스크 드라이브, 및/또는, CD-ROM, DVD-ROM 또는 기타 광 매체와 같은, 착탈식, 비-휘발성 광 디스크로부터 읽거나 또는 이에 쓰기 위한 광 디스크 드라이브를 포함할 수 있고 및/또는 이들에 결합될 수 있다. 다른 하드웨어 및/또는 소프트웨어 컴포넌트들이 컴퓨터 시스템(102)과 함께 사용될 수 있음을 이해해야 한다. 예들에는, 다음이 포함되지만, 이에 제한되지는 않는다: 마이크로코드, 디바이스 드라이버들, 중복 처리 유닛들, 외부 디스크 드라이브 어레이들, RAID 시스템들, 테이프 드라이브들 및 데이터 보관 스토리지 시스템 등.
[0030] 컴퓨터 시스템(102)은 다수의 다른 범용 또는 특수 목적 컴퓨팅 시스템 환경들 또는 구성들과 함께 동작할 수 있다. 컴퓨터 시스템(102)과 함께 사용하기에 적합할 수 있는 잘 알려진 컴퓨팅 시스템들, 환경들, 및/또는 구성들의 예들은, 개인용 컴퓨터(PC) 시스템들, 서버 컴퓨터 시스템들, 씬 클라이언트들, 씩 클라이언트들, 핸드헬드 또는 랩톱 디바이스들, 멀티프로세서 시스템들, 마이크로프로세서-기반 시스템들, 셋톱 박스들, 프로그래밍 가능한 소비자 전자 제품들, 네트워크 PC들, 미니 컴퓨터 시스템들, 메인프레임 컴퓨터 시스템들, 및, 위의 시스템들 또는 디바이스들 중 어느 하나, 등을 포함하는 분산 클라우드 컴퓨팅 환경들을 포함하지만 이들로 제한되지는 않는다.
[0031] 일 예에서, 프로세서(예를 들어, 프로세서(104) 및/또는 프로세서(105))는 명령들을 실행하는 데 사용되는 복수의 기능적 컴포넌트들을 포함한다. 도 1b에 도시된 바와 같이, 이들 기능적 컴포넌트들은, 예를 들어, 실행될 명령을 페치하기 위한 명령 페치 컴포넌트(150); 페치된 명령을 디코드하고 디코드된 명령의 오퍼랜드를 획득하는 명령 디코드 유닛(152); 디코드된 명령을 실행하기 위한 하나 또는 그 이상의 명령 실행 컴포넌트들(154); 필요한 경우, 명령 실행을 위해 메모리에 액세스하는 메모리 액세스 컴포넌트(156); 및 실행된 명령의 결과들을 제공하기 위한 라이트 백 컴포넌트(a write back component) (158)를 포함한다. 상기 컴포넌트들 중 하나 또는 그 이상은 명령 처리에서 하나 또는 그 이상의 레지스터들(160)을 액세스 및/또는 사용할 수 있다. 또한, 상기 컴포넌트들 중 하나 또는 그 이상은, 본 발명의 하나 또는 그 이상의 실시예들에 따라, 본 명세서에 기술된 바와 같이, 예를 들어, 신경망 처리 지원 명령(a Neural Network Processing Assist instruction)의 텐서 처리(서브-텐서들의 생성 및/또는 사용을 포함하되 이에 국한되지 않음) 및/또는 신경망 처리 지원 처리(또는 본 발명의 하나 또는 그 이상의 실시예들을 사용할 수 있는 다른 처리)에 사용되는 하나 또는 그 이상의 다른 컴포넌트들의 적어도 일부를 포함하거나, 또는 이에 액세스 할 수 있다. 예를 들어, 상기 하나 또는 그 이상의 다른 컴포넌트들은, 예를 들어, 텐서 컴포넌트(170) 및/또는 신경망 처리 지원 컴포넌트(172)(및/또는 하나 또는 그 이상의 다른 컴포넌트들)를 포함할 수 있다.
[0032] 본 발명의 하나 또는 그 이상의 실시예들에 따르면, 컴퓨팅 환경 내에서의 처리는 특수-목적 프로세서(예를 들어, 신경망 프로세서(105))와 같은 프로세서에 의해 사용되는 개선된 데이터 포맷을 제공함으로써 용이하게 된다. 예를 들어, 상기 프로세서에 대해 아키텍처된 데이터 포맷(an architected data format)이 제공된다. 예를 들어, 수축기 및 SIMD(단일 명령 다중 데이터) 유닛(a systolic and single instruction multiple data (SIMD) unit)(2D/3D 계산 어레이)은 유사한 차원들에서의 입력 오퍼랜드들의 서브-텐서들을 제공함으로써 수용된다. 일 예로, 텐서를 나타내는 서브-텐서들이 메모리 유닛의 경계(예: 메모리 페이지 경계)에서 시작하고 텐서의 정보가 원래 텐서의 서브-텐서들, 예를 들어, 하나 또는 그 이상의 2D-서브-텐서들(또한 2D-타일들 또는 2D-텐서들이라고도 함)에서 재조정되도록(rearranged) 텐서(예: 4D-텐서)를 재포맷된다(reformatted). 2D-타일의 차원들에서의 텐서의 차원들은 그 차원에서의 다음 전체 타일로 반올림된다(예를 들어, 고정된 크기의 2D-텐서들을 생성하기 위해 패딩이 제공됨). 이를 통해 메모리 유닛 경계(예: 페이지 경계) 상의 각 타일에 대한 액세스가 허용되고 모든 2D-타일의 주소들의 계산이 용이하게 된다. 메모리 유닛 경계 상에 정렬(alignment)을 제공함으로써 주소 변환 요청들이 감소되고, 데이터 전송 속도가 향상된다. 또한, 일 예에서, 각 2D-타일은 가속기 메모리에서 하나의 메모리 유닛(예: 페이지)을 한 번에 액세스하는 DMA(직접 메모리 액세스)와 유사한 동작을 통해 로드 될 수 있다. 이는 대역폭을 크게 증가시킨다.
[0033] 일 예에서, 4D-텐서를 나타내기 위해, 복수의 2D-텐서들(예를 들어, 하나의 특정 예에서는 9개의 2D-텐서들)이 생성된다. 또한, 한 예에서는, 3개의 2D-텐서들이, 일 예로서, 3D-텐서들을 생성하고, 3개의 3D-텐서들이, 일 예로서, 4D-텐서를 생성한다. 따라서, 4D-텐서는, 한 예에서, 복수의 2D-텐서들로 재포맷되며, 2D-텐서들 각각은 메모리 유닛의 경계, 예를 들어 메모리 페이지 경계에서 시작한다. 다양한 차원들의 텐서들이 여기에 설명되어 있지만, 다른 차원들의 텐서들이 생성되거나, 재포맷될 수 있고, 및/또는 다른 텐서들로 표현될 수 있다.
[0034] 2D-텐서의 한 예가 도 2a에 도시되어 있다. 도시된 바와 같이, 2D-텐서(2D-서브-텐서, 서브-텐서 또는 2D-타일이라고도 함)(200)는 메모리 경계에서 시작하여, 복수의 4K 페이지들(예: 2D-텐서에서 번호가 매겨진 페이지0-11)과 같은, 복수의 메모리 유닛들을 사용한다. 각 페이지는 미리 선택된 수의 행들(예를 들어, 32)(202)을 포함하고, 각 행은 미리 선택된 수의 엘리멘트들, 예를 들어 64개의 엘리멘트들을 포함한다. 만일 하나의 행이 미리 선택된 수의 엘리멘트들보다 적은 데이터를 가지고 있다면, 그 행은, 예를 들어 0들이나 공백들 등과 같은, 미리-명시된 값(a pre-specified value)으로 패딩된다(padded)(204). 또한, 만일 선택된 수의 행들을 제공하기 위해 데이터가 충분하지 않다면, 도 2a에 도시된 바와 같이, 추가 패딩(206)(예를 들어, 예측할 수 없는 데이터, 기존 값, 임의의 값, 등)이 추가 패딩된 행들(additional padded rows)을 추가하기 위해 제공된다.
[0035] 2D-텐서의 아키텍처된 데이터 포맷(architected data format)은 쉽게 계산 가능한 주소와 메모리-측면의 인접 텐서 유닛들(memory-wise adjacent tensor units)을 제공하여 다중적이고 복잡한 주소 계산의 오버헤드를 감소시킬 수 있다. 이는 하드웨어 지원 블록-로드/저장 동작들(hardware supported block-load/store operations) 및 프리패치 엔진들(prefetching engines)을 지원하여 가속기(예: 신경망 프로세서(105))에 대한 유효 데이터 대역폭(the effective data bandwidth)(예: 2x-5x)을 크게 증가시킨다.
[0036] 표시된 바와 같이, 다수의(예를 들어, 하나의 특정 예에서는, 9개) 2D-텐서들이 4D-텐서를 나타내기 위해 사용되며, 각각의 2D-텐서는 하나 또는 그 이상의 메모리 유닛들(예를 들어, 메모리 페이지)을 사용할 수 있다.
[0037] 본 발명의 일 실시예에 따라, 2D-텐서를 생성하는 것과 관련된 추가 세부사항은 도 2b 및 도 2c를 참조하여 기술된다. 일 예에서, 이 처리는, 범용 프로세서(104)와 같은, 프로세서에 의해 수행된다. 이 처리는, 예를 들어, 2D, 3D 또는 4D-텐서들을 생성할 수 있지만, 그러한 예들로 제한되지는 않는다. 일 예에서, 상기 처리는, 여기에 기술된, 4D-특징 데이터 레이아웃(a 4D-feature data layout)에 기초하여 텐서들을 생성한다.
[0038] 도 2b를 참조하면, 한 예에서 e2_limit는 ceil(E2/32)*32와 동일하게 설정되어(252) 생성되는 2D-텐서가, 예를 들어, 32개 행들을 갖는다는 것을 나타내고 E2는 차원-2-인덱스 크기를 나타낸다. 또한, e1_limit는 ceil(E1/64)*64와 동일하게 설정되어(254) 생성되는 2D-텐서가, 예를 들어, 행당 64개의 엘리멘트들을 갖는다는 것을 나타내고 E1은 차원-1-인덱스 크기를 나타낸다. 인덱스 e4x는 0으로 초기화된다(256).
[0039] 상기 초기화들 다음에, e4x가 E4보다 작은지에 대한 결정이 이루어지며(258), E4는 차원-4-인덱스-크기를 나타낸다. 만일 e4x가 E4보다 작지 않으면, 처리는 종료된다(260). 만일 e4x가 E4보다 작으면, 처리는 계속되고 인덱스 e3x를 0으로 초기화한다(262). e3x가 E3보다 작은지 여부가 결정되며(264), E3은 차원-3 인덱스 크기를 나타낸다. 만일 e3x가 E3보다 작지 않으면, e4x는, 예를 들어, 1만큼 증가하는 처리가 반복되고(266), 처리는 단계(258)로 진행된다. 그러나, 만일 e3x가 E3보다 작으면, 인덱스 e2x는 0으로 초기화된다(268). 그 다음, e2x가 e2_limit보다 작은지 여부가 결정된다(270). 만일 e2x가 e2_limit보다 작지 않으면, e3x는, 예를 들어, 1,272만큼 증가하는 처리가 반복되고(272) 처리는 단계(264)로 진행된다. 만일 e2x가 e2_limit보다 작으면, 인덱스 e1x는 0으로 초기화된다(274).
[0040] 도 2c를 참조하면, e1x가 e1_limit보다 작은지 여부에 대한 결정이 이루어진다(276). 만일 e1x가 e1_limit보다 작지 않으면, e2x는, 예를 들어, 1만큼 증가되는 처리가 반복되고(278), 처리는 단계(270)(도 2b)로 진행속된다. 만일e1x가 e1_limit보다 작으면, arr_pos(예: 행에서의 위치)는 (E3 * e2_limit * e1_limit * e4x) + (e2_limit * e3x * 64) + (e2x * 64) + + (e1x mod 64) 와 동일하게 설정되고(282), 여기서 는 실 함수(ceil function)이다.
[0041] 그 다음, e2x가 E2보다 크거나 같은지에 대한 결정이 이루어진다(284). 만일 e2x가 E2보다 작다면, e1x가 E1보다 크거나 같은지에 대한 추가 결정이 내려진다(286). 만일 e1x가 E1보다 작으면, 값(VALUE)은 input_array [e4x] [e3x] [e2x] [e1x]과 동일하게 설정된다(288). 만일 e1x가 E1보다 크거나 같으면, VALUE = E1pad(행이 패딩됨)이 된다(290). 또한, 만일 e2x가 E2(284)보다 크거나 같으면, VALUE = E2pad (패딩된 추가 행들이 2D-텐서에 추가됨)이 된다(292). 값(VALUE)을 설정한 후, OutputTensor[arr_pos] = VALUE가 된다(294). 또한, 인덱스 e1x는, 예를 들어, 1만큼 증가되고(296), 처리는 단계(276)로 진행된다.
[0042] 추가 예로서, 텐서들은, 본 명세서에 기술된, 4D-커널 레이아웃(a 4D-kernel layout)에 기초하여 생성될 수 있다. 2D, 3D, 4D 및/또는 기타 텐서들을 생성하기 위해서도, 도 2b-2c의 처리가 사용되는데, 다만, 단계(282)는 kern_pos = + (e4x * E3 * e2_limit * 64) + (e3x * e2_limit * 64) + (e2x * 64) + (e1x mod 64)로 대체되고, 단계(294)는 OutputTensor [kern_pos] = VALUE로 대체된다.
[0043] 일 예로, 예를 들어, 4D-텐서를 재포맷하기 위해, 예를 들어, 다수의 2D-텐서들이 생성되며 그 수는 각 2D-텐서에 포함되는 행들의 수와 행당 엘리멘트들의 수에 따라 달라진다. 예들로서, 복수의 2D-텐서들은, 예를 들어, 3D-텐서를 생성하고, 복수의 3D-텐서들은, 예를 들어, 4D-텐서를 생성한다.
[0044] 위의 처리를 사용하여, 재포맷된 텐서를 대표하는 적어도 하나의 서브-텐서가 정의된다. 예를 들어, 만일 원래 4D-텐서에 하나의 행에 65개의 엘리멘트들을 갖는다면, 두 개의 2D_서브-텐서들이 생성되고, 이들 2D_서브-텐서들에서 제1의 2D_서브-텐서는 64개의 엘리멘트들을 갖는 행들을 포함하고 제2의 2D_서브-텐서는 65번째 엘리멘트와 패딩을 갖는 행들을 포함한다. 다른 변형들도 가능하다.
[0045] 생성된 텐서(들)(예를 들어, 원래 텐서(예를 들어, 4D-텐서)를 재포맷하여 생성된 서브-텐서들)는 하나 또는 그 이상의 명령들에 의해 사용될 수 있다. 예를 들어, 주소 정보(예: 예들로서, 4D-텐서들 또는 2D-텐서들의 시작), 텐서의 차원, 등이 범용 프로세서에서 특수-목적 프로세서(예: 신경망 프로세서(105))로 전달되는데(forwarded), 이는 데이터를 올바른 포맷(예: 메모리 페이지의 올바른 위치)으로 로드/저장하고 데이터를 사용(예: 텐서 계산)하는 데 사용하기 위함이다. 다른 실시예에서, 범용 프로세서는 생성된 서브-텐서(들)를 사용한다. 다른 변형들도 가능하다.
[0046] 본 명세서에 기술된 바와 같이, 일 예에서, 생성된 텐서들(본 명세서에서는 서브-텐서들이라고도 함)를 사용하기 위한 명령은 신경망 처리 지원 명령(a Neural Network Processing Assist instruction)이다. 일 예에서, 상기 명령은 범용 프로세서(예를 들어, 프로세서(104))에서 시작되고, 상기 명령에 의해 명시된 기능은 그 기능에 따라서 범용 프로세서 실행되거나 및/또는 특수-목적 프로세서(예를 들어, 신경망 프로세서(105))에서 실행된다. 예를 들어, 범용 프로세서에서는 쿼리 함수(a query function)이 수행되고, 특수 목적 프로세서에서는 비-쿼리 함수들(non-query functions)이 수행될 수 있다. 그러나, 다른 변형들도 가능하다. 만일 상기 기능이 특수 목적 프로세서에서 수행되어야 한다면(예를 들어, 상기 기능이 비-쿼리 함수거나, 다른 예에서 하나 또는 그 이상의 선택된 기능들이라면), 예를 들어, 신경망 계산들에 사용되는 텐서 데이터와 관련된 메모리 주소 정보와 같은, 정보가 범용 프로세서에 의해 상기 기능을 실행하는 데 사용되는 특수-목적 프로세서에 제공된다. 특수-목적 프로세서는 상기 정보를 획득하고 상기 기능을 수행한다. 그런 다음, 상기 명령은 범용 프로세서에서 완료된다. 다른 예에서, 상기 명령은 하나 또는 그 이상의 범용 프로세서들에서 또는 하나 또는 그 이상의 특수-목적 프로세서들에서 시작되고, 실행되고 완료된다. 다른 변형들도 가능하다.
[0047] 일 예에서, 도 3a를 참조하면, 신경망 처리 지원 명령(a Neural Network Processing Assist instruction)(300)는 확장 연산 코드(an extended operation code)(opcode)를 사용하는 레지스터 및 레지스터 연산을 나타내는 RRE 포맷을 갖는다. 도 3a에 도시된 바와 같이, 일 예에서, 신경망 처리 지원 명령(300)은 신경망 처리 지원 연산을 나타내는 연산 코드(opcode) 필드(302)(예를 들어, 비트 0-15)를 포함한다. 일 예에서, 상기 명령의 비트 16-31은 유보되어 있으며 0들을 포함한다. 상기 명령 및/또는 상기 명령의 기능들에 대한 본 명세서의 설명에서, 특정 위치들, 특정 필드들 및/또는 상기 필드들의 특정 크기들이 표시된다(예를 들어, 특정 바이트 및/또는 비트). 그러나, 다른 위치들, 필드들 및/또는 크기들이 제공될 수 있다. 또한, 비트를 특정 값, 예를 들어 1 또는 0으로 설정하는 것이 명시될 수 있지만, 이는 단지 예시일 뿐이다. 상기 비트는, 설정된 경우, 다른 예들에서, 다른 값, 예를 들어, 반대 값 또는 또 다른 값으로 설정될 수 있다. 다양한 변형들이 가능하다.
[0048] 일 예에서, 상기 명령은 상기 명령에 의해 묵시적으로(implicitly) 명시된 복수의 일반 레지스터들을 사용한다. 예를 들어, 신경망 처리 지원 명령(300)는 묵시적 레지스터들, 일반 레지스터 0 및 일반 레지스터 1을 사용하며, 이들의 예들은 도 3b 및 도 3d를 참조하여, 각각, 기술된다.
[0049] 도 3b를 참조하면, 일 예에서 일반 레지스터 0은 함수 코드 필드(a function code field)와 상기 명령의 완료 시 업데이트될 수 있는 상태 필드들(status fields)을 포함한다. 예를 들어, 일반 레지스터 0은 응답 코드 필드(310)(예: 비트 0-15), 예외 플래그 필드(312)(예: 비트 24-31) 및 함수 코드 필드(314)(예: 비트 56-63)를 포함한다. 또한, 일 예에서, 일반 레지스터 0의 비트 16-23 및 32-55는 유보되어 있으며 0들을 포함한다. 하나 또는 그 이상의 필드들은 상기 명령에 의해 수행되는 특정 기능에 의해 사용된다. 한 예에서, 모든 필드들이 상기 기능들 모두에 의해 사용되는 것은 아니다. 상기 필드들 각각은 아래에 설명되어 있다.
[0050] 응답 코드(RC) (310): 이 필드(예를 들어, 비트 위치 0-15)는 응답 코드를 포함한다. 신경망 처리 지원 명령의 실행이, 예를 들어, 1의 조건 코드로 완료되었을 때, 응답 코드가 저장된다. 유효하지 않은 입력 조건(an invalid input condition)을 만났을 때(encountered), 응답 코드 필드에는 0이 아닌 값(a non-zero value)이 저장되는데, 이는 실행 중 인식된 유효하지 않은 입력 조건의 원인을 나타내며 선택된 조건 코드, 예를 들어, 1이 설정된다. 일 예에서, 응답 코드 필드에 저장되는 코드는 다음과 같이 정의된다:
[0051] 응답 코드 의미
[0052] 0001 파라미터 블록 버전 번호에 의해 명시된, 파라미터 블록의 포맷은 모델에 의해 지원되지 않는다.
[0053] 0002 명시된 기능이 머신에 정의되어 있지 않거나 설치되지 않다.
[0054] 0010 명시된 텐서 데이터 레이아웃 포맷은 지원되지 않는다.
[0055] 0011 명시된 텐서 데이터 유형은 지원되지 않는다.
[0056] 0012 명시된 단일 텐서 차원이 최대 차원 인덱스 크기보다 크다.
[0057] 0013 명시된 텐서의 크기가 최대 텐서 크기보다 크다.
[0058] 0014 명시된 텐서 주소가 4K 바이트 경계에 정렬되어 있지 않다.
[0059] 0015 함수-특정-저장 영역 주소(function-specific-save-area-address)가 4K 바이트 경계에 정렬되어 있지 않다.
[0060] F000-FFFF 함수 특정 응답 코드들. 이들 응답 코드들은 특정 기능들에 대해 정의된다.
[0061] 예외 플래그(EF)(312): 이 필드(예를 들어, 비트 위치 24-31)는 예외 플래그들을 포함한다. 만일 상기 명령 실행 중에 예외 조건이 감지되면, 대응 예외 플래그 컨트롤(예: 비트)이, 예를 들어, 1로 설정된다. 그렇지 않으면, 상기 컨트롤은 변경되지 않고 유지된다. 예외 플래그 필드는 상기 명령을 처음 호출하기 전에 0으로 초기화된다. 유보된 플래그들은 상기 명령의 실행 중에는 변경되지 않는다. 예외 플래그 필드에 저장된 플래그들은, 일 예에서, 다음과 같이 정의된다.
[0062] EF(비트) 의미
[0063] 0 범위 위반. 이 플래그는 숫자가 아닌 값이 입력 텐서에서 감지되거나 출력 텐서에 저장된 경우 설정된다. 이 플래그는, 예를 들어 상기 명령이 조건 코드, 예를 들어, 0으로 완료될 때만 유효하다.
[0064] 1-7 유보됨.
[0065] 함수 코드(FC) (314): 이 필드(예를 들어, 비트 위치 56-63)는 함수 코드를 포함한다. 신경망 처리 지원 명령에 할당된 함수 코드들의 예가 도 3c에 도시되어 있다. 모든 다른 함수 코드들은 할당되지 않는다. 만일 미할당 또는 설치 안된 함수 코드가 명시될 때, 예를 들어,0002 hex의 응답코드와, 예를 들어, 1의 선택 조건 코드가 설정된다. 이 필드는 실행 중에 수정되지 않는다.
[0066] 표시된 바와 같이, 일반 레지스터 0에 더하여, 신경망 처리 지원 명령은 또한 일반 레지스터 1을 사용하며, 그 예가 도 3d에 도시되어 있다. 예를 들어, 24비트 어드레싱 모드에서 비트 40~63, 31비트 어드레싱 모드에서 비트 33~63, 64비트 어드레싱 모드에서 비트 0~63은 파라미터 블록의 주소(320)를 포함한다. 예를 들어, 일반 레지스터 1의 내용들은 스토리지에서 파라미터 블록의 가장 왼쪽 바이트의 논리 주소를 명시한다. 파라미터 블록은 더블워드 경계 상에 지정된다. 그렇지 않으면 사양 예외(a specification exception)가 인지된다. 모든 기능들에 대해, 일반 레지스터 1의 내용들은 수정되지 않는다.
[0067] 액세스 레지스터 모드에서, 액세스 레지스터 1은, 예를 들어, 파라미터 블록, 입력 텐서들, 출력 텐서들 및 함수 특정 저장 영역(the function specific save area)을 포함하는 주소 공간을 명시한다.
[0068] 일 예에서, 상기 파라미터 블록은 수행될 상기 명령에 의해 명시된 기능에 따라 다른 포맷들을 가질 수 있다. 예를 들어, 쿼리 함수는 한 포맷의 파라미터 블록을 갖고 상기 명령의 다른 기능들은 다른 포맷의 파라미터 블록을 가질 수 있다. 또 다른 예에서, 모든 기능들은 동일 파라미터 블록 포맷을 사용할 수 있다. 다른 변형들도 가능하다.
[0069] NNPA-QAF(Query Available Functions) 연산과 같은, 쿼리 함수에 의해 사용되는 파라미터 블록의 일 예를 도 3e를 참조하여 설명한다. 도시된 바와 같이, 일 예에서, NNPA-쿼리 사용 가능한 기능 파라미터 블록(a NNPA-Query Available Functions parameter block)(330)은, 예를 들어, 다음을 포함한다:
[0070] 설치된 기능 벡터(Installed Functions Vector)(332): 파라미터 블록의 이 필드(예를 들어, 바이트 0-31)는 설치된 기능 벡터를 포함한다. 일 예에서, 설치된 기능 벡터의 비트 0-255는, 각각, 신경망 처리 지원 명령의 함수 코드들 0-255에 대응한다. 상기 비트가, 예를 들어, 1일 때, 대응 기능이 설치된다. 그렇지 않으면 대응 기능은 설치되지 않는다.
[0071] 설치된 파라미터 블록 포맷 벡터(Installed Parameter Block Formats Vector)(334): 파라미터 블록의 이 필드(예를 들어, 바이트 32-47)는 설치된 파라미터 블록 포맷 벡터를 포함한다. 일 예에서, 설치된 파라미터 블록 포맷 벡터의 비트 0-127은 신경망 처리 지원 명령의 비-쿼리 함수에 대한 파라미터 블록 포맷 0-127에 대응한다. 상기 비트가 1일 때, 대응 파라미터 블록 포맷이 설치된다. 그렇지 않으면 대응 파라미터 블록 포맷이 설치되지 않는다.
[0072] 설치된 데이터 유형(Installed Data Types)(336): 파라미터 블록의 이 필드(예를 들어, 바이트 48-49)는 설치된 데이터 유형 벡터를 포함한다. 일 예에서, 설치된 데이터 유형 벡터의 비트 0-15는 설치되는 데이터 유형에 대응한다. 상기 비트가, 예를 들어, 1일 때, 대응 데이터 유형이 설치된다. 그렇지 않으면, 대응 데이터 유형이 설치되지 않는다. 데이터 유형의 예들은 다음과 같다(추가, 더 적은 수 및/또는 다른 데이터 유형들이 가능함).
[0073] 비트 데이터 유형
[0074] 0 NNP-데이터-유형-1
[0075] 1-15 유보됨
[0076] 설치된 데이터 레이아웃 포맷(Installed Data Layout Formats)(338): 파라미터 블록의 이 필드(예를 들어, 바이트 52-55)는 설치된 데이터 레이아웃 포맷 벡터를 포함한다. 일 예에서, 설치된 데이터 레이아웃 포맷 벡터의 비트 0-31은 설치되어 있는 데이터 레이아웃 포맷에 대응한다. 상기 비트가, 예를 들어, 1일 때, 대응 데이터 레이아웃 포맷이 설치된다. 그렇지 않으면, 대응 데이터 레이아웃 포맷이 설치되지 않는다. 데이터 레이아웃 포맷의 예는 다음과 같다(추가, 더 적은 수 및/또는 다른 데이터 유형들이 가능함).
[0077] 비트 데이터 레이아웃 포맷
[0078] 0 4D-특징 텐서
[0079] 1 4D-커널 텐서
[0080] 2-31 유보됨
[0081] 최대 차원 인덱스 크기(Maximum Dimension Index Size)(340): 파라미터 블록의 이 필드(예를 들어, 바이트 60-63)는, 예를 들어, 임의의 명시된 텐서에 대한 명시된 차원 인덱스 크기에서 최대 수의 엘리멘트들을 명시하는 32비트 부호 없는 이진 정수를 포함한다. 또 다른 예에서, 상기 최대 차원 인덱스 크기는 임의의 명시된 텐서에 대한 명시된 차원 인덱스 크기에서 최대 수의 바이트를 명시한다. 다른 예들도 가능하다.
[0082] 최대 텐서 크기(Maximum Tensor Size)(342): 파라미터 블록의 이 필드(예: 바이트 64-71)는, 예를 들어, 텐서 포맷에 의해 요구되는 임의의 패드 바이트를 포함하는 임의의 명시된 텐서에서 최대 수의 바이트를 명시하는 32-비트 부호 없는 이진 정수를 포함한다. 또 다른 예에서, 최대 텐서 크기는 텐서 포맷에 의해 요구되는 임의의 패딩을 포함하는 임의의 명시된 텐서에서 최대 수의 총 엘리멘트들을 명시한다. 다른 예들도 가능하다.
[0083] 설치된-NNP-데이터-유형-1-변환 벡터(Installed-NNP-Data-Type-1-Conversions Vector)(344): 파라미터 블록의 이 필드(예를 들어, 바이트 72-73)는 설치된-NNP-데이터-유형-1-변환 벡터를 포함한다. 일 예에서, 설치된-NNP-데이터-유형-1-변환벡터의 비트 0-15는 NNP-데이터-유형-1 포맷과 주고/받는(from/to) 설치된 데이터 포맷 변환에 대응한다. 상기 비트가 1일 때, 대응 변환이 설치된다. 그렇지 않으면, 대응 변환이 설치되지 않는다. 추가, 더 적은 수 및/또는 다른 변환이 명시될 수 있다.
[0084] 비트 데이터 유형
[0085] 0 유보됨
[0086] 1 BFP 타이니 포맷(BFP tiny format)
[0087] 2 BFP 쇼트 포맷(BFP short format)
[0088] 3-15 유보됨
[0089] 쿼리 함수에 대한 파라미터 블록의 일 예가 도 3e를 참조하여 설명되어 있지만, NNPA-쿼리 사용가능 기능 연산(the NNPA-Query Available Functions operation)을 포함하는, 쿼리 함수에 대한 파라미터 블록의 다른 포맷이 사용될 수 있다. 한 예에서, 상기 포맷은, 수행될 쿼리 함수의 유형에 따라, 달라질 수 있다. 또한, 상기 파라미터 블록 및/또는 상기 파라미터 블록의 각 필드는 추가 정보, 더 적은 정보 및/또는 다른 정보를 포함할 수 있다.
[0090] 쿼리 함수에 대한 상기 파라미터 블록 외에, 일 예로, 신경망 처리 지원 명령의 비-쿼리 함수들과 같은, 비-쿼리 함수에 대한 파라미터 블록 포맷도 있을 수 있다. 신경망 처리 지원 명령의 비-쿼리 함수와 같은, 비-쿼리 함수에 의해 사용되는 파라미터 블록의 일 예를 도 3f를 참조하여 설명한다.
[0091] 도시된 바와 같이, 일 예에서, 예를 들어, 신경망 처리 지원 명령의 비-쿼리 함수에 의해 채용되는 파라미터 블록(350)은 다음을 포함한다:
[0092] 파라미터 블록 버전 번호(Parameter Block Version Number)(352): 파라미터 블록의 이 필드(예를 들어, 바이트 0-1)는 파라미터 블록의 버전과 크기를 명시한다. 일 예에서, 파라미터 블록 버전 번호의 비트 0-8은 유보되어 있으며 0들을 포함하고, 파라미터 블록 버전 번호의 비트 9-15는 파라미터 블록의 포맷을 명시하는 부호 없는 이진 정수를 포함한다. 상기 쿼리 함수는 사용 가능한 파라미터 블록 포맷을 나타내는 메커니즘을 제공한다. 명시된 상기 파라미터 블록의 크기나 포맷이 모델에 의해서 지원되지 않을 때, 예를 들어, 0001 hex의 응답 코드가 일반 레지스터 0에 저장되고 상기 명령은, 예를 들어, 1의 조건 코드를 설정함으로써 완료된다. 파라미터 블록 버전 번호는 프로그램에 의해 명시되며 상기 명령의 실행 중에는 수정되지 않는다.
[0093] 모델 버전 번호(Model Version Numbe)(354): 파라미터 블록의 이 필드(예를 들어, 바이트 2)는 상기 명령(예를 들어, 특정 비-쿼리 함수)을 실행한 모델을 식별하는 부호 없는 이진 정수이다. 계속 플래그(a continuation flag)(후술)가 1일 때, 모델 버전 번호는 연산을 재개하기 위한 파라미터 블록의 계속 상태 버퍼 필드(a continuation state buffer field)(후술)의 내용들을 해석하기 위한 목적을 위해 상기 연산에 대한 입력이 될 수 있다.
[0094] 계속 플래그(Continuation Flag)(356): 파라미터 블록의 이 필드(예를 들어, 비트 63)는, 예를 들어, 1일 때, 연산이 부분적으로 완료되었음을 나타내고 계속 상태 버퍼의 내용들은 연산을 재개하는 데 사용될 수 있다. 프로그램은 계속 플래그를 0으로 초기화하며 상기 명령이 연산을 재개할 목적으로 다시 실행되는 경우에도 계속 플래그를 수정하지는 않는다. 그렇지 않으면, 결과들은 예측할 수 없다.
[0095] 만일 계속 플래그가 연산 시작 시에 설정되고 파라미터 블록의 내용들이 초기 호출 이후 변경되었다면, 결과들은 예측할 수 없다.
[0096] 함수-특정 저장-영역 주소(Function-specific-save-area-address)(358): 파라미터 블록의 이 필드(예를 들어, 바이트 56-63)는 함수-특정 저장-영역의 논리 주소를 포함한다. 한 예에서, 함수-특정 저장-영역 주소는 4KB 경계 상에 정렬된다. 그렇지 않으면, 예를 들어, 0015 hex의 응답 코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 조건 코드 1)의 조건 코드로 완료된다. 주소는 현재 주소 지정 모드에 종속된다. 함수 특정 저장 영역의 크기는 함수 코드에 따라 달라진다.
[0097] 전체 함수 특정 저장 영역이 프로그램 이벤트 레코딩(PER) 스토리지 영역 지정(the program event recording (PER) storage area designation)과 중첩될 때, 함수 특정 저장 영역에 대해, 적용 가능한 경우, PER 스토리지 변경 이벤트를 인지한다. 함수 특정 저장 영역의 일부만 PER 스토리지 영역 지정과 중첩될 때, 다음 중 어떤 일이 발생할 지는 모델에 따라 달라진다(model-dependent):
[0098] * PER 스토리지 변경 이벤트(PER storage alteration event)가, 해당되는 경우, 전체 함수 특정 저장 영역에 대해 인지된다.
[0099] * PER 스토리지 변경 이벤트가, 해당되는 경우, 저장된 함수 특정 저장 영역의 일부에 대해 인지된다.
[00100] 전체 파라미터 블록이 PER 스토리지 영역 지정과 중첩될 때, 적용 가능한 경우, 파라미터 블록에 대해 PER 스토리지 변경 이벤트가 인지된다. 파라미터 블록의 일부만 PER 스토리지 영역 지정과 중첩될 때, 다음 중 어떤 일이 발생할 지는 모델에 따라 달라진다:
[00101] * PER 스토리지 변경 이벤트가, 적용 가능한 경우, 전체 파라미터 블록에 대해 인지된다.
[00102] * PER 스토리지 변경 이벤트가, 적용 가능한 경우, 저장된 파라미터 블록의 부분에 대해 인지된다.
[00103] PER 제로-주소 감지 이벤트(PER zero-address detection event) 가, 적용 가능한 경우, 파라미터 블록에 대해 인지된다. 일예에서, 제로 주소 감지는 텐서 주소 또는 함수-특정-저장-영역 주소에는 적용되지 않는다.
[00104] 출력 텐서 설명자(Output Tensor Descriptors)(예: 1-2)(360)/입력 텐서 설명자(Input Tensor Descriptors)(예: 1-3)(365): 텐서 설명자의 한 예가 도 3g을 참조하여 기술된다. 일 예에서, 텐서 설명자(360, 365)는 다음을 포함한다:
[00105] 데이터 레이아웃 포맷(Data Layout Format)(382): 텐서 설명자의 이 필드(예: 바이트 0)는 데이터 레이아웃 포맷을 명시한다. 예를 들어, 유효한 데이터 레이아웃 포맷들은 다음을 포함한다(추가, 더 적은 수 및/또는 기타 데이터 레이아웃 포맷들도 가능함).
[00106] 포맷 설명 정렬(바이트)
[00107] 0 4D-특징 텐서 4096
[00108] 1 4D-커널 텐서 4096
[00109] 2-255 유보됨 --
[00110] 만일 지원되지 않거나 유보된 데이터 레이아웃 포맷이 명시되었다면, 예를 들어, 0010 hex의 응답 코드가 일반 레지스터 0에 저장되고 상기 명령은, 예를 들어 1의 조건 코드를 설정함으로써 완료된다.
[00111] 데이터 유형(Data Type)(384): 이 필드(예: 바이트 1)는 텐서의 데이터 유형을 명시한다. 지원되는 데이터 유형의 예들은 아래에 설명되어 있다(추가, 더 적은 데이터 유형 및/또는 다른 데이터 유형들도 가능함).
[00112] 값(Value) 데이터 유형 데이터 크기(비트)
[00113] 0 NNP 데이터 유형-1 16
[00114] 1-255 유보됨 -
[00115] 만일 지원되지 않거나 유보된 데이터 유형이 명시될 때, 예를 들어, 0011 hex의 응답 코드가 일반 레지스터 0에 저장되고 상기 명령은, 예를 들어, 1의 조건 코드를 설정함으로써 완료된다.
[00116] 차원 1-4 인덱스 크기(Dimension 1-4 Index Size)(386): 집합적으로, 차원 인덱스 크기 1부터 4까지(예를 들어, E4, E3, E2, E1)는 4D-텐서의 형태(the shape of a 4D-tensor)를 명시한다. 각 차원 인덱스 크기는 0보다 크고 최대 차원 인덱스 크기(340, 도 3e)보다 작거나 같다. 그렇지 않으면, 예를 들어, 0012 hex의 응답 코드가 일반 레지스터 0에 저장되고 상기 명령은 조건 코드1의 조건 코드를 설정함으로써 완료된다. 전체 텐서 크기는 최대 텐서 크기(342, 도 3e)보다 작거나 같다. 그렇지 않으면, 예를 들어, 0013 hex의 응답 코드가 일반 레지스터 0에 저장되고 상기 명령은, 예를 들어, 1의 조건 코드를 설정함으로써 완료된다.
[00117] 일 예로, NNPA-데이터-유형-1의 엘리멘트들을 갖는 4D-특징 텐서의 바이트 수(즉, 총 텐서 크기)를 결정하기 위해 다음이 사용된다: 차원-인덱스-4 * 차원-인덱스-3 * ceil(차원-인덱스-2/32) * 32 * ceil(차원-인덱스-1/64) * 64 * 2.
[0018] 텐서 주소(388): 텐서 설명자의 이 필드(예: 바이트 24-31)는 텐서의 가장 왼쪽 바이트의 논리 주소를 포함한다. 상기 주소는 현재 주소 지정 모드에 종속된다(subject to).
[00119] 만일 주소가 연관된 데이터 레이아웃 포맷의 경계 상에 정렬되지 않는다면, 예를 들어, 0014 hex의 응답 코드가 일반 레지스터 0에 저장되고 상기 명령은, 예를 들어, 1의 조건 코드를 설정함으로써 완료된다.
[00120] 액세스 레지스터 모드에서, 액세스 레지스터 1은 스토리지에 있는 모든 활성 입력 및 출력 텐서들을 포함하는 주소 공간을 명시한다.
[00121] 도 3f로 돌아가서, 파라미터 블록(350)은, 일 예에서, 본 명세서에 기술된 바와 같이, 특정 기능들에 의해 사용될 수 있는 함수-특정 파라미터들 1-5(370)를 더 포함한다.
[00122] 또한, 파라미터 블록(350)은, 일 예에서, 이 명령의 연산이 재개되는 경우 사용될 데이터(또는 데이터의 위치)를 포함하는, 계속 상태 버퍼 필드(a continuation state buffer field)(375)를 포함한다.
[00123] 연산에 대한 입력으로서, 파라미터 블록의 유보된 필드는 0들을 포함한다. 연산이 종료될 때, 유보된 필드들은 0들로 저장되거나 변경되지 않은 상태로 유지될 수 있다.
[00124] 비-쿼리 함수에 대한 파라미터 블록의 한 예가 도 3f를 참조하여 설명되어 있지만, 신경망 처리 지원 명령의 비-쿼리 함수를 포함하는, 비-쿼리 함수를 위한 파라미터 블록의 다른 포맷들이 사용될 수 있다. 포맷은 수행할 기능의 유형에 따라 달라질 수 있다. 또한, 텐서 설명자의 일 예를 도 3g를 참조하여 설명하였지만, 다른 포맷들도 사용될 수 있다. 또한 입력 및 출력 텐서들에 대해 서로 다른 포맷들이 사용될 수 있다. 다른 변형들도 가능하다.
[00125] 신경망 처리 지원 명령의 일 실시예에 의해 지원되는 다양한 기능들에 관한 추가 세부사항은 아래에 설명되어 있다.
[00126] 함수 코드 0: NNPA-QAF(쿼리 사용 가능한 기능)
[00127] 신경망 처리 지원(NNPA) 쿼리 함수(Neural Network Processing Assist (NNPA) query function)은 설치된 기능들, 설치된 파라미터 블록 포맷들, 설치된 데이터 유형들, 설치된 데이터 레이아웃 포맷들, 최대 차원 인덱스 크기 및 최대 텐서 크기의 가용성과 같은, 선택된 정보를 표시하는 메커니즘을 제공한다. 상기 정보는 획득되어, 파라미터 블록(예를 들어, 파라미터 블록(330))과 같은, 선택된 위치에 배치된다. 연산이 종료될 때, 파라미터 블록의 유보된 필드는 0들로 저장되거나 변경되지 않은 상태로 유지될 수 있다.
[00128] 쿼리 함수의 일 실시예의 실행에서, 범용 프로세서(104)와 같은, 프로세서는, 신경망 프로세서(105)의 특정 모델과 같은, 선택된 프로세서의 특정 모델과 관련된 정보를 획득한다. 프로세서 또는 머신의 특정 모델은 특정 능력들(certain capabilities)을 갖는다. 프로세서 또는 머신의 다른 모델은 추가적인, 더 적은 및/또는 다른 능력들을 가질 수 있으며/또는 추가적인, 더 적은 및/또는 다른 능력들을 갖는 다른 세대(예: 현재 또는 미래 세대)일 수 있다. 획득된 정보는 추가 처리에서 이 정보를 사용할 수 있는 하나 또는 그 이상의 애플리케이션들에 액세스할 수 있고 및/또는 함께 사용할 수 있는 파라미터 블록(예: 파라미터 블록(330)) 또는 기타 구조에 배치된다. 일 예에서, 파라미터 블록 및/또는 파라미터 블록의 정보는 메모리에 유지된다. 다른 실시예에서, 파라미터 블록 및/또는 정보는 하나 또는 그 이상의 하드웨어 레지스터들에 유지될 수 있다. 다른 예로서, 쿼리 함수는 운영 체제에 의해 실행되는 특권 작업일 수 있으며, 이는 이 정보를 애플리케이션 또는 비-특권 프로그램에 사용할 수 있도록 애플리케이션 프로그래밍 인터페이스를 제공한다. 또 다른 예에서, 쿼리 함수는, 신경망 프로세서(105)와 같은, 특수-목적 프로세서에 의해 수행될 수 있다. 다른 변형들도 가능하다.
[00129] 정보는, 예를 들어, 쿼리 함수를 실행하는 프로세서의 펌웨어에 의해 획득된다. 펌웨어는 특정 프로세서(예: 신경망 프로세서)의 특정 모델 속성들에 대한 지식을 가지고 있다. 이 정보는, 예를 들어, 컨트롤 블록, 레지스터 및/또는 메모리에 저장될 수 있고 및/또는 쿼리 함수를 실행하는 프로세서에 액세스 가능할 수 있다.
[00130] 획득된 정보는, 예를 들어, 하나 또는 그 이상의 설치된 또는 지원되는 데이터 유형들, 하나 또는 그 이상의 설치된 또는 지원되는 데이터 레이아웃 포맷들 및/또는 특정 프로세서의 선택된 모델에 대한 하나 또는 그 이상의 설치된 또는 지원되는 데이터 크기들 포함하는, 특정 프로세서의 적어도 하나 또는 그 이상의 데이터 속성들에 관한 모델 종속 상세 정보(model-dependent detailed information)를 포함한다. 쿼리 함수(예: NNPA-QAF 기능)의 실행이 완료되면, 일 예로서, 조건 코드 0이 설정된다. 조건 코드 1, 2, 3은 쿼리 함수에 적용되지 않는다. 획득된 정보와 관련된 추가 정보는 아래에 설명되어 있다.
[00131] 표시된 바와 같이, 일 예에서, 획득된 정보는, 예를 들어, 신경망 프로세서의 특정 모델의 하나 또는 그 이상의 데이터 속성드ㄹ에 관한 모델 의존 정보를 포함한다. 데이터 속성의 한 가지 예는 신경망 프로세서의 설치된 데이터 유형이다. 예를 들어, 신경망 프로세서(또는 다른 프로세서)의 특정 모델은, 예들로서, NNP-데이터-유형-1 데이터 유형(신경망 처리-데이터-유형-1이라고도 함)과 같은, 하나 또는 그 이상의 데이터 유형들 및/또는 기타 데이터 유형들을 지원할 수 있다. NNP-데이터-유형-1 데이터 유형은 딥 러닝 훈련 및 추론 계산들에서 다수의 이점들을 제공하는 16-비트 부동 소수점 포맷이고, 다수의 이점들은, 예를 들어 다음을 포함한다: 딥 러닝 네트워크들의 정확성을 유지한다; 비정규 포맷(the subnormal format)을 제거하여 반올림 모드들과 코너 케이스들의 처리; 산술 연산들을 위해 가장 가까운 값으로 자동 반올림을 단순화 한다; 그리고 무한대 및 숫자가 아닌 것(NaN)(infinity and not-a-number (NaN))의 특수 엔터티들을, 산술 연산에 의해 허용되고 처리되는, 하나의 값(NINF)으로 결합된다. NINF는 지수 오버플로 및 유효하지 않은 연산들(0으로 나누기와 같은)에 대해 더 나은 기본값들(defaults)을 제공했다. 이를 통해 많은 프로그램들이 그러한 오류들을 숨기지 않고 특수 예외 처리기들을 사용하지 않고도 실행을 계속할 수 있게 해준다. 다른 모델-종속 데이터 유형들도 가능하다.
[00132] NNP-데이터-유형-1 데이터 유형의 포맷의 한 예가 도 4에 도시되어 있다. 도시된 바와 같이, 일 예에서, NNP-데이터-유형-1 데이터는, 예를 들어, 포맷(400)으로 표현될 수 있으며, 이는, 예를 들어, 부호(402)(예를 들어, 비트 0), 지수 + 31(404)(예를 들어, 비트 1-6) 및 소수(fraction)(406)(예: 비트 7-15)를 포함한다.
[00133] NNP-데이터-유형-1 형식의 예시 속성들(properties)이 아래에 묘사되어 있다:
[00134] 속성(Property) NNP-데이터-유형-1
[00135] 포맷 길이(비트) 16비트
[00136] 바이어스된-지수 길이(비트) 6비트
[00137] 소수 길이(비트) 9비트
[00138] 정밀도(p) 10비트
[00139] 최대 좌측-유닛-뷰 지수(Emax) 32
[00140] 최소 왼쪽-유닛-뷰 지수(Emin) -31
[00141] LUV(왼쪽-유닛-뷰) 바이어스 31
[00142] Nmax (1-2-9) x 233
Figure pct00004
8.6 x 109
[00143] Nmin (1+2-9) x 2-31
Figure pct00005
4.6 x 10-10
[00144] Dmin ---
[00145]
Figure pct00006
는 값이 대략적이라는 것을 나타내고, Nmax는 표현 가능한 가장 큰(크기에서) 유한 수이고, Nmin은 표현 가능한 가장 작은(크기에서) 수이다.
[00146] NNP-데이터-유형-1 데이터 유형에 관한 추가 세부사항들은 아래에 설명되어 있다.
[00147] 바이어스된 지수(Biased Exponent): 지수들이 부호 없는 수들로 표현되도록 허용하는 데 사용되는 바이어스는 위에서 표시되었다. 바이어스된 지수들은, 모두 0들과 모두 1들의 바이어스된 지수들에 특별한 의미가 부여되지 않는다는 점을 제외하고(이에 관해서는 NNP-데이터-유형-1 데이터 유형의 클래스들과 관련하여 후술한다), 이진 부동 소수점 포맷의 특성과 유사한다.
[00148] 유효수(Significand): NNP-데이터-유형-1 수의 이진 소수점(binary point)은 가장 왼쪽 소수 비트(the leftmost fraction bit)의 왼쪽에 있는 것으로 간주된다. 이진 소수점의 왼쪽에는 묵시적인 유닛 비트(the implied unit bit)가 있는데, 이는 일반 수들의 경우 1이고 0들의 경우 0으로 간주된다. 왼쪽에 묵시적 유닛 비트가 추가된 소수는 상기 수의 유효수(the significand of the number)이다.
[00149] 정규 NNP-데이터 유형-1의 값은 유효수에 바이어스되지 않은 지수의 거듭제곱인 기수 2를 곱한 값이다.
[00150] 0이 아닌-수의 값(Values of Non-Zero Numbers): 0이 아닌 수들의 값들은 다음과 같다:
[00151] 수 클래스(Number Class) 값(Value)
[00152] 정규 수들(Normal numbers) ± 2e-31 x (1.f)
[00153] 여기서 e는 십진수로 표시된 바이어스된 지수이고, f는 이진수로 표시된 소수(fraction)이다.
[00154] 일 실시예에는, 수(numeric) 및 관련된 비-수의 엔터티들(related non-numeric entities)을 포함하는, 세 가지 클래스의 NNP-데이터 유형-1 데이터가 있다. 각 데이터 항목은 부호, 지수 및 유효수(a sign, an exponent and a significand)를 포함한다. 모든 바이어스된 지수들이 음수가 아닌 부호 없는 수들(non-negative unsigned numbers)이고 최소 바이어스된 지수가 0이 되도록 지수가 바이어스된다. 유효수는 이진 소수점 왼쪽에 명시적 소수와 묵시적 유닛 비트를 포함한다. 부호 비트는 플러스의 경우 0이고 마이너스의 경우 1이다.
[00155] 허용된 모든 0이 아닌 유한 수들(non-zero finite numbers)은 고유한 NNP-데이터-유형-1 표현을 갖는다. 동일한 값들에 대해 여러 표현들을 허용하는 비정규 수들(subnormal numbers)은 없으며 비정규 산술 연산들도 없다. 예를 들어 세 가지 클래스들은 다음을 포함한다:
[00156] 데이터 클래스 부호 바이어스된 지수 유닛 비트* 소수
[00157] 제로 ± 0 0 0
[00158] 정규 수들 ± 0 1 0 아님
[00159] 정규 수들 ± 0아님,모두1들아님 1 임의
[00160] 정규 수들 ± 모두1들 - 모두1들아님
[00161] NINF ± 모두1들 - 모두1들
[00162] 여기서: -는 적용되지 않음을 나타냄, *는 유닛 비트가 묵시적임을 나타냄, NINF는 수 또는 무한대가 아님을 나타냄.
[00163] 클래스들 각각에 관한 추가 세부사항들은 아래에 설명되어 있다:
[00164] 제로들(Zeros): 제로들은 0의 바이어스된 지수와 0 소수(a zero fraction)를 갖는다. 묵시적인 유닛 비트는 0이다.
[00165] 정규 수(Normal Numbers): 정규 수들은 임의의 값(any value)의 바이어스된 지수를 가질 수 있다. 바이어스된 지수가 0일 때, 소수(the fraction)는 0이 아니다. 바이어스된 지수가 모두 1들일 때, 소수는 모두 1들이 되지 않는다. 다른 바이어스된 지수 값들은 임의의 소수 값을 가질 수 있다. 묵시적 유닛 비트는 모든 정규 수들에 대해 1이다.
[00166] NINF: NINF는 모든 1들의 바이어스된 지수와 모든 1들의 소수(fraction)로 표현된다. NINF는 NNP-데이터-유형-1(즉, 6개의 지수 비트와 9개의 소수 비트를 갖는 딥 러닝용으로 설계된 16비트 부동 소수점)에서 표현 가능한 값들의 범위에 없는 값을 나타낸다. 일반적으로, NINF들은 계산들 중에 전파되므로 마지막에도 계속 표시된다(remain visible).
[00167] 일 예에서는 NNP-데이터-유형-1 데이터 유형이 지원되지만, 다른 모델 종속적, 전문적 또는 비-표준 데이터 유형들뿐만 아니라, 예를 들어, IEEE 754 단정밀도, 이진 부동 소수점 16-비트, IEEE 반정밀도 부동 소수점, 8비트 부동 소수점, 4비트 정수 포맷 및/또는 8비트 정수 포맷, 등을 포함하지만, 이들에 국한되지 않는, 하나 또는 그 이상의 표준 데이터 유형들도 지원될 수 있다. 이들 데이터 포맷들은 신경망 처리에 있어 다양한 품질들을 갖는다. 예를 들어, 더 작은 데이터 유형들(예: 더 적은 비트)은 더 빠르게 처리되고 더 적은 캐시/메모리를 사용할 수 있으며, 더 큰 데이터 유형들은 신경망에서 더 높은 결과 정확도를 제공한다. 지원될 데이터 유형은 쿼리 파라미터 블록(예를 들어, 파라미터 블록(330)의 설치된 데이터 유형 필드(336))에 하나 또는 그 이상의 할당된 비트를 가질 수 있다. 예를 들어, 특정 프로세서에 의해서 지원되는 모델 종속적, 전문적 또는 비-표준 데이터 유형들은 설치된 데이터 유형 필드에 표시되지만 표준 데이터 유형들은 표시되지 않는다. 다른 실시예들에서는, 하나 또는 그 이상의 표준 데이터 유형들도 표시된다. 다른 변형들도 가능하다.
[00168] 하나의 특정 예에서, 설치된 데이터 유형 필드(336)의 비트 0은 NNP-데이터-유형-1 데이터 유형을 위해 유보되어 있으며, 예를 들어 그것이 1로 설정되었을 때, 그 것은 프로세서가 NNP-데이터를 지원한다는 것을 나타낸다. 예를 들어, 설치된 데이터 유형들의 비트 벡터는 최대 16개의 데이터 유형들을 표현하도록 구성되며, 각 데이터 유형에는 하나의 비트가 할당된다. 그러나, 다른 실시예들에서 비트 벡터는 더 많거나 더 적은 데이터 유형을 지원할 수 있다. 또한, 데이터 유형에 하나 또는 그 이상의 비트가 할당된 벡터가 구성될 수도 있다. 많은 예들이 가능하거나 추가될 수 있으며, 더 적은 데이터 유형 및/또는 다른 데이터 유형들이 벡터에 지원 및/또는 표시될 수 있다.
[00169] 일 예에서, 쿼리 함수는 모델 종속 프로세서에 설치된 데이터 유형들의 표시(an indication)를 획득하고, 예를 들어, 파라미터 블록(330)의 설치된 데이터 유형 필드(336)에 하나 또는 그 이상의 비트를 설정함으로써, 상기 파라미터 블록에 상기 표시를 배치한다. 또한, 일 예에서, 쿼리 함수는 설치된 데이터 레이아웃 포맷들(다른 데이터 속성)의 표시를 획득하고, 예를 들어, 설치된 데이터 레이아웃 포맷 필드(338)에 하나 또는 그 이상의 비트를 설정함으로써, 상기 파라미터 블록에 상기 정보를 배치한다. 예시적 데이터 레이아웃 포맷들은, 예를 들어, 4D-특징 텐서 레이아웃과 4D-커널 텐서 레이아웃을 포함한다. 4D-특징 텐서 레이아웃은, 한 예에서, 여기에 표시된 기능들에 의해 사용되며, 한 예에서, 컨볼루션 기능(the convolution function)이 4D-커널 텐서 레이아웃을 사용한다. 이들 데이터 레이아웃 포맷들은 신경망 처리 지원 명령의 기능들의 실행 시 처리 효율성을 높이는 방식으로 텐서 스토리지에서의 데이터를 정렬한다. 예를 들어, 효율적으로 작동하기 위해, 신경망 처리 지원 명령은 특정 데이터 레이아웃 포맷들로 제공되는 입력 텐서들을 사용한다. 예시적인 레이아웃들이 제공되었지만, 여기에 기술된 기능들 및/또는 다른 기능들을 위해 추가적인, 더 적은 수의 및/또는 다른 레이아웃들이 제공될 수 있다.
[00170] 특정 프로세서 모델에 대한 레이아웃들의 사용 또는 가용성은 설치된 데이터 레이아웃 포맷들의 벡터(예를 들어, 파라미터 블록(330)의 필드(338))에 의해 제공된다. 예를 들어, 상기 벡터는 설치된 데이터 레이아웃 포맷들의 비트 벡터이고, 이는 CPU가 지원되는 레이아웃들을 애플리케이션에 전달할 수 있도록 한다. 예를 들어, 비트 0은 4D-특징 텐서 레이아웃용으로 유보되어 있으며, 예를 들어, 그 것이 1로 설정되면, 그 것은 프로세서가 4D-특징 텐서 레이아웃을 지원함을 표시하고, 비트 1은 4D-커널 텐서 레이아웃용으로 유보되어 있으며, 예를 들어, 그 것이 1로 설정되면, 그 것은 프로세서가 4D-커널 텐서 레이아웃을 지원함을 표시한다. 일 예로, 설치된 데이터 레이아웃 포맷들의 비트 벡터는 최대 16개의 데이터 레이아웃들을 나타내도록 구성되며, 여기서 비트는 각 데이터 레이아웃에 할당된다. 그러나, 다른 실시예들에서 비트 벡터는 더 많거나 더 적은 데이터 레이아웃들을 지원할 수 있다. 또한, 데이터 레이아웃들에 하나 또는 그 이상의 비트가 할당된 벡터가 구성될 수도 있다. 많은 예들이 가능하다. 4D-특징 텐서 레이아웃과 4D-커널 텐서 레이아웃에 대한 자세한 내용은 아래에 설명되어 있다. 다시 말하지만, 성능을 최적화하기 위해 현재 또는 미래에 다른 레이아웃들이 사용될 수 있다.
[00171] 일 예에서, 신경망 처리 지원 명령은 4D-텐서들, 즉 4차원들을 갖는 텐서들로 작동한다. 이들 4D-텐서들은 여기에 기술된 일반 입력 텐서들로부터, 예를 들어, 행-우선으로(in row-major) 획득되는데, 즉, 메모리 주소가 증가하는 순서로 텐서 엘리멘트들을 열거할 때, E2 차원의 인덱스가 증가되고 E1 차원을 통한 스테핑이 반복되기 전에, E1이라고 불리는 내부 차원(the inner dimension called E1)이 0부터 시작하여 E1-인덱스-크기-1까지의 E1-인덱스-크기 값들을 통해 먼저 단계적으로 올라간다(stepped up). E4 차원이라고 불리는 외부 차원의 인덱스는 마지막에 증가한다.
[00172] 차원들의 수가 더 적은 텐서들(예: 3D-텐서들 또는 1D-텐서들)은 원래 텐서 차원들을 초과하는 4D-텐서의 하나 또는 그 이상의 차원들이 1로 설정될 때 4D-텐서들로 표현된다.
[00173] 차원들 E4, E3, E2, E1을 갖는 행-우선 일반 4D-텐서를 4D-특징 텐서 레이아웃(여기서는 NNPA 데이터 레이아웃 포맷 0 4D-특징 텐서라고도 함)으로 변환하는 방법이 여기에 설명되어 있다.
[00174] 최종 텐서는, 예를 들어, 64개 엘리멘트들 벡터들의 4D-텐서 또는 다음과 같은 차원들을 갖는 5D-텐서로 표현될 수 있다:
[00175] , 여기서는 실 함수(a ceil function)를 나타낸다. (다른 방식으로 표현하면: E4 * E3 * ceil (E2/32) * 32 * ceil (E1/64) * 64개 엘리멘트들이다.)
[00176] 일반 텐서의 엘리멘트 [e4][e3][e2][e1]은 최종 5D-텐서의 다음 엘리멘트로 매핑될 수 있다.
[00177] , 여기서는 플로 함수(a floor function)이고 mod는 모듈로(modulo)이다. (다른 방식으로 말하면: 엘리멘트(E3 * e2_limit * e1_limit * e4x) + (e2_limit * e3x * 64) + (e2x * 64) + + (e1x mod 64), 여기서 e2_limit = 이고 e1_limit =이다.)
[00178] 최종 텐서는 일반 텐서보다 더 클 수 있다. 일반 텐서에 대응 엘리멘트들을 갖지 않는 최종 텐서의 엘리멘트를 패드 엘리멘트들(pad elements)이라고 한다.
[00179] 64-엘리멘트 벡터의 NNPA 데이터 레이아웃 포맷 0 4D-특징 텐서의 엘리멘트[fe4][fe1][fe3][fe2][fe0] 또는 그 것의 등가 표현을 5D-텐서의 엘리멘트들을 고려해본다. 이 엘리멘트는 패드 엘리멘트이거나 또는 차원 E4, E3, E2, E1을 갖는 일반 4D-텐서에서 그 것의 대응 엘리멘트이며, 다음 공식을 사용하여 결정될 수 있다:
[00180]
Figure pct00014
if fe2 ≥ E2 then this is an E2 (or page)-pad element
[00181] else if fe1*64+fe0 ≥ E1 then this is an E1 (or row)-pad element
[00182] else corresponding element in generic 4D tensor is:
[00183] [fe4][fe3][fe2][fe1*64+fe0]
[00184] 컨벌루션 신경망 기반 인공 지능 모델들의 경우, 특징 텐서의 4차원들의 의미는 일반적으로 다음과 같이 매핑될 수 있다:
[00185] E4: N - 미니 배치의 크기
[00186] E3: H - 3D-텐서/이미지의 높이
[00187] E2: W - 3D-텐서/이미지의 폭
[00188] E1: C - 3D-텐서의 채널들 또는 클래스들
[00189] 머신 러닝 또는 순환 신경망 기반 인공 지능 모델들의 경우, 4D-특징 텐서의 4차원들의 의미는 일반적으로 다음과 같이 매핑될 수 있다:
[00190] E4: T - 시간-단계들 또는 모델들의 수
[00191] E3: 유보됨, 일반적으로 1로 설정됨
[00192] E2: Nmb - 미니배치 크기
[00193] E1: L - 특징들
[00194] NNPA 데이터 레이아웃 포맷 0은, 예를 들어, 2차원 데이터 지역성(two dimensional data locality)에 생성된 텐서의 외부 차원들에 대한 4k-바이트 블록 데이터 정렬뿐만 아니라 4k-바이트 블록들의 데이터(페이지들)를 제공한다.
[00195] 패드 엘리멘트 바이트는 입력 텐서들에 대해서는 무시되고 출력 텐서들에 대해서는 예측할 수 없다. 패드 바이트 상의 PER 스토리지-변경은 예측할 수 없다.
[00196] 차원들 E1, E2, E3 및 E4를 갖는, 4D-특징 텐서 레이아웃에 대한 입력 데이터 레이아웃의 한 예가 도 5a-5c에 도시되어 있고, 4D-특징 텐서 레이아웃에 대한 예시적인 출력이 도 6a-6c에 도시되어 있다. 도 5a를 참조하면, 차원들 E1, E2 및 E3을 갖는, 3D-텐서(500)가 도시되어 있다. 일 예에서, 각 3D-텐서는 복수의 2D-텐서들(502)을 포함한다. 각 2D-텐서(502)에서 수들은 그 것의 엘리멘트들 각각이 메모리에 있을 위치의 메모리 오프셋들을 나타낸다. 입력들은, 도 5a-5c에 대응하는, 도 6a-6c에 도시된 바와 같이, 원래 텐서(예를 들어, 도 5a-5c의 원래 4D-텐서)의 데이터를 메모리에 레이-아웃하는 데 사용된다.
[00197] 도 6a에서, 일 예로서, 메모리의 유닛(600)(예를 들어, 메모리 페이지)는 미리-선택된 수(예를 들어, 32)의 행들(602)을 포함하며, 각 행은, 예를 들어, e2_page_idx에 의해 식별되고, 각 행은, 예를 들어, e1_page_idx에 의해 각각 식별되는 미리 선택된 수(예를 들어 64)의 엘리멘트들(604)을 갖는다. 만일 행이 미리 선택된 수의 엘리멘트들을 포함하지 않으면, 그 것은 패딩되고(606), 이를 행 또는 E1 패딩이라고 하며, 만일 메모리 디바이스가 미리 선택된 수의 행들을 갖지 않으면, 그 것은 패딩되고(608), 이를 페이지 패딩 또는 E2 패딩이라고 한다. 예들로서, 행 패딩은, 예를 들어 0들 또는 기타 값들이고, 페이지 패딩은, 예를 들어 기존 값들, 0들 또는 기타 값들이다.
[00198] 일 예에서, 행의 출력 엘리멘트는 그 것의 대응하는 입력의 E1 방향에서의 엘리멘트 위치에 기초하여 메모리(예를 들어, 페이지)에 제공된다. 예를 들어, 도 5a를 참조하면, 도시된 3개의 행렬들 중 엘리멘트 위치들 0, 1 및 2(예를 들어, 각 행렬의 동일 위치(a same location)에 있는 엘리멘트 위치들(element positions))는 도 6a, 등의 페이지 0의 행 0에 표시된다. 이 예에서, 4D-텐서는 작아서(small) 4D-텐서를 나타내는 각 2D-텐서의 모든 엘리멘트들은 한 페이지에 맞추어진다(fit). 그러나, 이는 하나의 예일뿐이다. 2D-텐서는 하나 또는 그 이상의 페이지들을 포함할 수 있다. 도 2a에 도시된 바와 같이, 상기 예의 2D-텐서는 12페이지들을 포함한다. 그러나, 이는 하나의 예일뿐이다. 다시 말하지만, 2D-텐서는 하나 또는 그 이상의 페이지들을 포함할 수 있다. 만일 4D-텐서의 재포맷팅에 기초하여 2D-텐서가 생성되었다면, 2D-텐서의 페이지들의 수는 4D-텐서의 크기에 기초한다. 한 예에서, 하나 또는 그 이상의 실 함수들(ceil functions)은 2D-텐서의 행들 수와, 사용될 페이지들의 수를 나타내는, 각 행의 엘리멘트들의 수를 결정하는 데 사용된다. 다른 변형들도 가능하다.
[00199] 4D-특징 텐서 레이아웃 외에도, 일 예에서, 신경망 프로세서는 4D-커널 텐서를 지원할 수 있는데, 이는, 컨볼루션과 같은, 특정 인공 지능(예: 신경망 처리 지원) 연산들을 실행할 때 메모리 액세스들 및 데이터 수집 단계들의 수를 감소시키도록 4D-텐서의 엘리멘트들을 재-조정한다(re-arrange). 일 예로서, 차원들 E4, E3, E2, E1을 갖는 행-우선 일반 4D-텐서(a row-major generic 4D-tensor)는 여기에 기술된 바와 같이, NNPA 데이터 레이아웃 포맷 1 4D-커널 텐서(4D-커널 텐서)로 변환된다:
[00200] 최종 텐서는, 예를 들어, 64-엘리멘트 벡터들의 4D-텐서로서 또는 다음 차원들을 갖는 5D-텐서로서 표현될 수 있다.
[00201] , 여기서는 실 함수(a ceil function)를 나타낸다. (다른 방식으로 표현하면: E4 * E3 * ceil (E2/32) * 32 * ceil (E1/64) * 64엘리멘트들이다.)
[00202] 일반 텐서의 엘리멘트[e4][e3][e2[e1]은 최종 5D-텐서의 다음 엘리멘트에 매핑될 수 있다:
[00203] , 여기서는 플로 함수(a floor function)를 나타내고 mod는 모듈로(modulo)이다. 다른 방식으로 말하면: 엘리멘트 + (e4x * E3 * e2_limit * 64) + (e3x * e2_limit * 64) + (e2x * 64) + (e1x mod 64)이고, 여기서 e2_limit = 및 e1_limit = 이다.
[00204] 최종 텐서는 일반 텐서보다 클 수 있다. 일반 텐서에 대응 엘리멘트들을 갖지 않는 최종 텐서의 엘리멘트들을 패드 엘리멘트들이라고 한다.
[00205] 64-엘리멘트 벡터들의 NNPA 데이터 레이아웃 포맷 1 4D-특징 텐서 또는 엘리멘트들의 5D-텐서로서 그것의 등가 표현의 엘리멘트 [fe1][fe4][fe3][fe2][fe0]을 고려해 본다. 이 엘리멘트는 패드 엘리멘트이거나 차원들 E4, E3, E2, E1을 갖는 일반 4D-텐서에서 그것의 대응 엘리멘트이고, 다음 공식을 사용하여 결정될 수 있다:
[00206] if fe2 ≥ E2 then this is an E2 (or page)-pad element
[00207] else if fe1*64+fe0 ≥ E1 then this is an E1 (or row)-pad element
[00208] else corresponding element in generic 4D tensor is
[00209] [fe4][fe3][fe2][fe1*64+fe0]
[00210] 컨벌루션 신경망 기반 인공 지능 모델들의 경우, 커널 텐서의 4차원들의 의미는 일반적으로 다음과 같이 매핑될 수 있다:
[00211] E4: H - 3D-텐서/이미지의 높이
[00212] E3: W - 3D-텐서/이미지의 폭
[00213] E2: C - 3D-텐서의 채널들의 수
[00214] E1: K - 커널들의 수
[00215] NNPA 데이터 레이아웃 포맷 1은, 예를 들어, 효율적인 처리를 위해 생성 텐서의 외부 차원들(the outer dimensions of the generate tensor)에 대한 4k-바이트 블록 데이터 정렬뿐만 아니라 4k-바이트 데이터 블록들(페이지들) 내의 2차원 커널 병렬성(two dimensional kernel parallelism)을 제공한다.
[00216] 패드 바이트는 입력 텐서에 대해서는 무시된다. 패드 바이트 상의 PER 스토리지 변경은 예측할 수 없다.
[00217] 다시 말하면, 예시적인 데이터 레이아웃 포맷들이 4D-특징 텐서 레이아웃과 4D-커널 텐서 레이아웃을 포함하지만, 다른 데이터 레이아웃 포맷들도 프로세서(예: 신경망 프로세서(105))에 의해 지원될 수 있다. 지원되는 데이터 레이아웃들의 표시는, 예를 들어 필드(338)에 하나 또는 그 이상의 비트를 설정함으로써 쿼리 파라미터 블록에 획득되고 배치된다.
[00218] 쿼리 파라미터 블록은 또한, 본 발명의 하나 또는 그 이상의 실시예들에 따라, 예를 들어, 데이터에 대해 지원되는 크기 정보를 포함하는, 다른 데이터 속성 정보를 포함한다. 신경망 프로세서와 같은, 프로세서는 일반적으로, 텐서 차원들의 최대 크기 및/또는 텐서의 전체 크기를 제한할 수 있는 내부 버퍼 크기들, 처리 유닛들, 데이터 버스 구조들, 펌웨어 제한들, 등에 기초한 제한들을 갖는다. 따라서, 쿼리 함수는 이들 제한들을 애플리케이션들에 전달하는 필드들을 제공한다. 예를 들어, 상기 프로세서는, 쿼리 함수를 실행하는 것에 기초하여, 최대 차원 인덱스 크기(예: 65,536 엘리멘트들) 및 최대 텐서 크기(예: 8GB)와 같은, 다양한 데이터 크기들을 획득하고 이 정보를, 각각, 파라미터 블록(예를 들어, 파라미터 블록(330))의 필드들(340 및 342)에 포함한다. 추가적인, 더 적은 및/또는 다른 크기 정보도 또한 상기 프로세서(예를 들어, 신경망 프로세서(105))에 의해 지원될 수 있으며, 이에 따라, 파라미터 블록, 예를 들어 필드들(340, 342) 및/또는 다른 필드들에 획득되어 배치될 수 있다. 다른 실시예들에서, 상기 제한들은 더 작거나 클 수 있으며, 및/또는 상기 크기들은, 엘리멘트들 대신 바이트, 바이트 대신 엘리멘트들, 등과 같은, 다른 유닛들로 될 수 있다. 또한, 다른 실시예들은, 모든 차원들에 대해 동일 최대값이 아닌, 각 차원의 다양한 최대 크기들을 허용할 수 있다. 다양한 변형들이 가능하다.
[00219] 본 발명의 하나 또는 그 이상의 실시예들에 따르면, 선택된 프로세서(예를 들어, 신경망 프로세서(105))의 특정 모델에 관한 세부 정보를 전달하는 쿼리 함수가 제공된다. 상기 세부 정보는, 예를 들어, 특정 프로세서와 관련된 모델-종속 정보를 포함한다. (프로세서는 또한, 표준 데이터 유형들, 표준 데이터 레이아웃들, 등과 같은, 표준 데이터 속성들을 지원할 수도 있으며, 이들은, 쿼리 함수에 의해 암시되지만 반드시 표시되는 것은 아니다; 그러나, 다른 실시예들에서, 쿼리 함수는 데이터 속성들, 등의 모든 또는 다양한 선택된 서브세트들을 나타낼 수 있다.) 예시적인 정보가 제공되었지만, 다른 실시예들에서는 다른 정보가 제공될 수도 있다. 프로세서의 다양한 모델들 및/또는 다양한 프로세서들의 다양한 모델들에 따라 다를 수 있는, 획득된 정보는 인공 지능 및/또는 기타 처리를 수행하는 데 사용된다. 인공 지능 및/또는 기타 처리는, 예를 들어, 신경망 처리 지원 명령의 하나 또는 그 이상의 비-쿼리 함수들을 채용할 수 있다. 상기 처리에 채용되는 특정 비-쿼리 함수는 신경망 처리 지원 명령을 1회 또는 그 이상 실행하고 비-쿼리 특정 기능을 명시함으로써 수행된다.
[00220] 신경망 처리 지원 명령에 의해 지원되는 예시적인 비-쿼리 함수의 추가 세부사항은 아래에 설명되어 있다(다른 실시예들에서는 추가, 더 적은 수 및/또는 다른 기능들이 지원될 수 있음).
[00221] 함수 코드 16: NNPA-ADD(덧셈)
[00222] NNPA-ADD 함수가 명시될 때, 텐서 설명자 1에 의해 기술되는 입력 텐서 1의 각 엘리멘트는 텐서 설명자 2에 의해 기술되는 입력 텐서 2의 대응 엘리멘트에 더해지고 최종 합계는 출력 텐서 설명자에 의해 기술되는 출력 텐서의 대응 엘리멘트에 배치된다.
[00223] 일예에서, 만일 명시된 텐서 설명자들 중 하나에서의 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예를 들어, 데이터 레이아웃 = 0이라면) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예를 들어, 데이터 유형 = 0이라면), 예를 들어, 각각, 0010 hex 또는 0011 hex의 응답 코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00224] 한 예에서, 입력 텐서 1, 입력 텐서 2 및 출력 텐서의 모양(shape), 데이터 레이아웃 및 데이터 유형이 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00225] 일 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 3, 함수-특정- 파라미터들 1-5 및 함수-특정-저장-영역 주소 필드들은 무시된다.
[00226] 함수 코드 17: NNPA-SUB(뺄셈)
[00227] NNPA-SUB 함수가 명시될 때, 텐서 설명자 2에 의해 기술된 입력 텐서 2의 각 엘리멘트는 텐서 설명자 1에 의해 기술된 입력 텐서 1의 대응 엘리멘트로부터 차감되고(subtracted) 최종 차(the resulting difference)는 출력 텐서의 대응 엘리멘트에 배치된다.
[00228] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서의 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예를 들어, 데이터 레이아웃 = 0이라면) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예를 들어, 데이터 유형 = 0이라면), 예를 들어, 각각, 0010 hex 또는 0011 hex의 응답 코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어 1의 조건 코드로 완료된다.
[00229] 한 예에서, 입력 텐서 1, 입력 텐서 2 및 출력 텐서의 모양, 데이터 레이아웃 및 데이터 유형은 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00230] 일 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 3, 함수-특정 파라미터 1-5 및 함수-특정-저장-영역 주소 필드들은 무시된다.
[00231] 함수 코드 18: NNPA-MUL(곱셈)
[00232] NNPA-MUL 함수가 명시될 때, 텐서 설명자 1에 의해 기술되는 입력 텐서 1(승수)의 각 엘리멘트와 텐서 설명자 2에 의해 기술되는 입력 텐서 2(피승수)의 대응 엘리멘트의 곱(product)은 출력 텐서의 대응 엘리멘트에 배치된다.
[00233] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터 유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00234] 한 예에서, 입력 텐서 1, 입력 텐서 2 및 출력 텐서의 모양, 데이터 레이아웃 및 데이터 유형이 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00235] 일 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 3, 함수-특정-파라미터 1-5 및 함수-특정-저장-영역-주소 필드들은 무시된다.
[00236] 함수 코드 19: NNPA-DIV(나눗셈)
[00237] NNPA-DIV 함수가 명시될 때, 텐서 설명자 1(피제수)에 의해 기술된 입력 텐서 1의 각 엘리멘트는 텐서 설명자 2에 의해 기술된 입력 텐서 2(제수)의 대응 엘리멘트로 나누어지고, 몫은 출력 텐서의 대응 엘리멘트에 배치된다.
[00238] 일 예로, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터 유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00239] 한 예에서, 입력 텐서 1, 입력 텐서 2 및 출력 텐서의 모양, 데이터 레이아웃 및 데이터 유형이 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00240] 일 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 3, 함수-특정-파라미터 1-5 및 함수-특정-저장-영역-주소 필드들은 무시된다.
[00241] 함수 코드 20: NNPA-MIN(최소)
[00242] NNPA-MIN 함수가 명시될 때 텐서 설명자 1에 의해 기술되는 입력 텐서 1의 각 엘리멘트는 텐서 설명자 2에 의해 기술되는 입력 텐서 2의 대응 엘리멘트와 비교된다. 두 값들 중 더 작은 값이 출력 텐서 설명자의 대응 엘리멘트에 배치된다. 만일 두 값들이 동일하면, 그 값은 출력 텐서의 대응 엘리멘트에 배치된다.
[00243] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터 유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00244] 한 예에서, 입력 텐서 1, 입력 텐서 2 및 출력 텐서의 모양, 데이터 레이아웃 및 데이터 유형이 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00245] 일 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 3, 함수-특정-파라미터 1-5 및 함수-특정-저장-영역-주소 필드들은 무시된다.
[00246] 함수 코드 21: NNPA-MAX(최대)
[00247] NNPA-MAX 함수가 명시될 때 텐서 설명자 1에 의해 기술되는 입력 텐서 1의 각 엘리멘트는 텐서 설명자 2에 의해 기술되는 입력 텐서 2의 대응 엘리멘트와 비교된다. 두 값들 중 더 큰 값이 출력 텐서 설명자의 대응 엘리멘트에 배치된다. 만일 두 값들이 동일하면, 그 값은 출력 텐서의 대응 엘리멘트에 배치된다.
[00248] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터 유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00249] 한 예에서, 입력 텐서 1, 입력 텐서 2 및 출력 텐서의 모양, 데이터 레이아웃 및 데이터 유형이 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00250] 일 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 3, 함수-특정-파라미터들 1-5 및 함수 특정 저장 영역 주소 필드들은 무시된다.
[00251] 함수 코드 32: NNPA-LOG(자연 로그)
[00252] NNPA-LOG 함수가 명시될 때, 텐서 설명자 1에 의해 기술되는 입력 텐서의 각 엘리멘트에 대해, 만일 그 엘리멘트가 0보다 크다면, 출력 텐서 설명자에 의해 기술되는 출력 텐서에서의 대응 엘리멘트는 그 엘리멘트의 자연 로그이다. 그렇지 않으면, 출력 텐서에서의 대응 엘리멘트는 수치적으로 표현될 수 없으며 타겟 데이터 유형의 음의 무한대와 관련된 값(the value associated with negative infinity in the target data type) 이 저장된다.
[00253] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터 유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00254] 한 예에서, 입력 텐서 1과 출력 텐서의 모양, 데이터 레이아웃 및 데이터 유형이 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00255] 일 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 2, 입력 텐서 설명자 3, 함수-특정-파라미터들 1-5 및 함수 특정 저장 영역 주소 필드들은 무시된다.
[00256] 함수 코드 33: NNPA-EXP(지수)
[00257] NNPA-EXP 함수가 명시될 때, 텐서 설명자 1에 의해 기술되는 입력 텐서의 각 엘리멘트에 대해, 출력 텐서 설명자에 의해 기술되는 출력 텐서에서의 대응 엘리멘트는 그 엘리멘트의 지수(the exponential)이다.
[00258] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터 유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00259] 한 예에서, 입력 텐서 1과 출력 텐서의 모양, 데이터 레이아웃 및 데이터 유형이 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00260] 일 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 2, 입력 텐서 설명자 3, 함수-특정-파라미터 1-5 및 함수-특정-저장-영역-주소 필드들은 무시된다.
[00261] 함수 코드 49: NNPA-RELU(개량된 선형 유닛(Rectified Linear Unit))
[00262] NNPA-RELU 함수가 명시될 때, 텐서 설명자 1에 의해 기술되는 입력 텐서의 각 엘리멘트에 대해, 만일 그 엘리멘트가 0보다 작거나 같으면, 출력 텐서 설명자에 의해 기술되는 출력 텐서에서의 대응 엘리멘트는 영(zero)이다. 그렇지 않으면, 출력 텐서에서의 대응 엘리멘트는 입력 텐서에서의 엘리멘트의 최소값과 함수-특정-파라미터 1에 명시된 클리핑 값(the clipping value)이다.
[00263] 일 예로서, 함수-특정-파라미터 1은 RELU 연산에 대한 클리핑 값을 정의한다. 예를 들어, 클리핑 값은 함수-특정-파라미터 1의 비트 16-31에 있다. 클리핑 값은, 예를 들어, NNP-데이터-유형-1 포맷으로 명시된다. 클리핑 값이 0이면 최대 양수 값을 사용함을 나타낸다. 즉, 클리핑이 수행되지 않는다. 만일 음수 값이 명시되면, 일반 오퍼랜드 데이터 예외가 인지된다.
[00264] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터 유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00265] 한 예에서, 입력 텐서 1과 출력 텐서의 모양, 데이터 레이아웃 및 데이터 유형이 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00266] 일 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 2, 입력 텐서 설명자 3 및 함수-특정-저장-영역-주소 필드들은 무시된다. 일 예에서, 함수-특정-파라미터들 2-5는 0들을 포함한다.
[00267] 함수 코드 50: NNPA-TANH(탄젠트)
[00268] NNPA-TANH 함수가 명시될 때, 텐서 설명자 1에 의해 기술되는 입력 텐서의 각 엘리멘트에 대해, 출력 텐서 설명자에 의해 기술되는 출력 텐서에서의 대응 엘리멘트 값은 그 엘리멘트의 쌍곡선 탄젠트이다(the hyperbolic tangent of that element).
[00269] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터 유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00270] 한 예에서, 입력 텐서 1과 출력 텐서의 모양, 데이터 레이아웃 및 데이터 유형이 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00271] 일 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 2, 입력 텐서 설명자 3, 함수-특정-파라미터 1-5 및 함수-특정-저장-영역-주소 필드들은 무시된다.
[00272] 함수 코드 51: NNPA-SIGMOID
[00273] NNPA-SIGMOID 함수가 명시될 때, 텐서 설명자 1에 의해 기술되는 입력 텐서의 각 엘리멘트에 대해, 출력 텐서 설명자에 의해 기술되는 출력 텐서의 대응 엘리멘트는 그 엘리멘트의 시그모이드(the sigmoidal of that element)이다.
[00274] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터 유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00275] 한 예에서, 입력 텐서 1과 출력 텐서의 모양, 데이터 레이아웃 및 데이터 유형이 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00276] 일 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 2, 입력 텐서 설명자 3, 함수-특정-파라미터 1-5 및 함수-특정-저장-영역-주소 필드들은 무시된다.
[00277] 함수 코드 52: NNPA-SOFTMAX
[00278] NNPA-SOFTMAX 함수가 명시될 때, 입력 텐서 1의 차원 1에 있는 각 벡터에 대해, 출력 텐서에서의 대응 벡터가 아래에 기술된 대로 계산된다.
[00279] * 벡터의 최대값이 계산된다.
[00280] * 벡터의 차원 1에 있는 각 엘리멘트와 위에서 계산된 최대값 사이의 차이의 지수들의 합(summation of the exponentials of the difference)이 계산된다. 만일 입력 벡터의 차원 1에 있는 엘리멘트와 위에서 계산된 최대값이 모두 수치 값들이고 그 차이가 수치가 아니라면, 그 엘리멘트에 대한 지수의 결과(the result of the exponential)는 강제로 0이 된다.
[00281] * 벡터의 각 엘리멘트에 대해, 중간 몫은 상기 엘리멘트와 위에서 계산된 최대값 사이의 차이를 위에서 계산된 합계로 나눈 지수로 구성된다. 선택적 활성화 함수(optional activation function)이 이 중간 몫에 적용되어 출력 벡터에서 대응 엘리멘트를 형성한다.
[00282] 이 프로세스는, 예를 들어, 차원 1에서 모든 차원-4-인덱스-크기 x 차원-3-인덱스-크기 x 차원-2-인덱스-크기 벡터들에 대해 반복된다.
[00283] 일 예에서, NNPA-SOFTMAX 함수-특정-파라미터들 1은 활성화 함수(the activation function)을 컨트롤한다. 예를 들어, 함수-특정-파라미터들 1의 ACT 필드(예: 비트 28-31)는 활성화 함수를 명시한다. 활성화 함수들의 예는 다음과 같다.
[00284] ACT 활성화 함수
[00285] 0 활성화 함수가 수행되지 않음
[00286] 1 로그
[00287] 2-15 유보됨
[00288] 만일 유보된 값이 ACT 필드에 대해 명시된다면, 예를 들어, F001 hex의 응답 코드가 보고되고 연산은, 예를 들어, 1의 조건 코드로 완료된다.
[00289] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터 유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00290] 일 예에서, 만일 입력 텐서의 차원-3-인덱스-크기가 1과 동일하지 않다면, 예를 들어, F000 hex의 응답 코드가 저장되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00291] 한 예에서, 입력 텐서 1과 출력 텐서의 모양, 데이터 레이아웃 및 데이터 유형이 같아야 한다; 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00292] 한 예에서, 출력 텐서 설명자 2, 입력 텐서 설명자 2 및 입력 텐서 설명자 3은 무시된다. 한 예에서, 함수-특정-파라미터들 2-5는 0들을 포함한다.
[00293] 8K 바이트 함수 특정 저장 영역이 이 기능에 의해 사용될 수 있다.
[00294] 일 실시예에서, 차원 1에서 벡터를 획득할 때, 엘리멘트들은 명시된 데이터 레이아웃 포맷에 따라 메모리에서 연속되지 않을 수 있다. 만일 입력 텐서 1의 차원-1 벡터의 모든 엘리멘트들이 명시된 데이터 유형에서 표현할 수 있는 가장 큰 크기의 음수를 포함한다면, 결과들은 덜 정확할 수 있다.
[00295] 함수 코드 64: NNPA-BATCHNORM(배치 정규화(Batch Normalization))
[00296] NNPA-BATCHNORM 함수가 명시될 때, 입력 1 텐서의 차원 1에 있는 각 벡터에 대해, 출력 텐서의 차원-1에 있는 대응 벡터는 벡터의 각 엘리멘트에 입력 2 텐서를 구성하는 차원-1 벡터의 대응 엘리멘트를 곱함으로써 계산된다. 그런 다음, 전체 정밀도 곱(full precision product)이 입력 3 텐서를 구성하는 차원-1 벡터의 대응 엘리멘트에 더해지고 그 다음 출력 텐서의 명시된 데이터 유형의 정밀도로 반올림된다. 이 프로세스는, 예를 들어, 차원 1에서 모든 차원-4-색인-크기 x 차원-3-색인-크기 x 차원-2-색인-크기 벡터에 대해 반복된다.
[00297] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터 유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00298] 일 예에서, 다음 조건들은 참이어야 하며, 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00299] * 입력 텐서 1과 출력 텐서의 모양 및 데이터 레이아웃은 같아야 한다.
[00300] * 입력 텐서들과 출력 텐서의 데이터 유형은 같아야 한다.
[00301] * 입력 텐서들 1, 2, 3의 차원-1-인덱스-크기와 출력 텐서는 같아야 한다.
[00302] * 입력 텐서들 2와 3의 차원 2, 3, 4 인덱스 크기들은 1이어야 한다.
[00303] 일 예에서, 출력 텐서 설명자 2 및 함수-특정-저장-영역-주소 필드들은 무시된다. 한 예에서 함수-특정-파라미터들 2-5는 0들을 포함한다.
[00304] 함수 코드 80: NNPA-MAXPOOL2D
함수 코드 81: NNPA-AVGPOOL2D
[00305] NNPA-MAXPOOL2D 또는 NNPA-AVGPOOL2D 함수가 명시될 때, 입력 텐서 1 설명자에 의해 기술되는, 입력 텐서 1은 입력의 윈도우들을 요약하기 위해 명시된 연산에 의해 축소된다(reduced). 입력의 윈도우들은 차원 인덱스들 2와 3에 대해 2D 슬라이딩 윈도우를 이동함으로써 선택된다. 윈도우의 요약은 출력 텐서의 엘리멘트이다. 슬라이딩 윈도우차원들은, 예를 들어, 함수-특정-파라미터 4 및 함수-특정-파라미터 5에 의해 기술된다. 인접한 출력 텐서 엘리멘트들을 계산할 때 슬라이딩 윈도우가 입력 1 텐서에 대해 이동하는 양을 스트라이드(the stride)라고 한다. 슬라이딩 윈도우 스트라이드는, 예를 들어, 함수-특정-파라미터 2 및 함수-특정-파라미터 3에 의해 명시된다. NNPA-MAXPOOL2D 연산이 명시될 때, 아래에 정의된 Max 연산이 상기 윈도우에서 수행된다. NNPA-AVGPOOL2D 연산이 명시될 때, 아래에 정의된 AVG 연산이 상기 윈도우에서 수행된다. 만일 명시된 패딩 유형이 유효하면(Valid), 상기 윈도우에서의 모든 엘리멘트들이 최종 출력 엘리멘트를 계산하는 데 사용되는 컬렉션에 더해진다. 만일 명시된 패딩 유형이 동일이면(Same), 상기 윈도우의 위치에 따라, 상기 윈도우로부터 엘리멘트들의 서브세트만 최종 출력 엘리멘트를 계산하는 데 사용되는 컬렉션에 더해질 수 있다.
[00306] 일 예에서, CollectElements 연산은 엘리멘트들의 컬렉션에 하나의 엘리멘트들 더하고 컬렉션의 엘리멘트들의 수를 증가시킨다. 윈도우 시작 위치가 이동할 때마다 컬렉션은 비워진다. 연산을 수행하는 데 필요하지 않은 엘리멘트들이 액세스되는지는 예측할 수 없다.
[00307] 최대 연산: 일 예에서, 윈도우 내 엘리멘트들 컬렉션의 최대값은 컬렉션 내 모든 엘리멘트들을 서로 비교하여 가장 큰 값을 반환함으로써 계산된다.
[00308] AVG(평균) 연산: 일 예에서, 윈도우 내 엘리멘트들 컬렉션의 평균 값은 컬렉션 내 모든 엘리멘트들의 합계를 컬렉션 내 엘리멘트들의 수로 나눈 값으로 계산된다.
[00309] 일 예에서, 필드들은 다음과 같이 할당된다:
[00310] * 풀링 함수-특정-파라미터 1은 패딩 유형을 컨트롤한다. 예를 들어, 함수-특정-파라미터 1의 비트 29-31는 패딩 유형을 명시하는 PAD 필드를 포함한다. 예를 들어, 예시적 유형들은 다음과 같다:
[00311] PAD 패딩 유형
[00312] 0 유효함
[00313] 1 동일함
[00314] 2-7 유보됨
[00315] 만일 유보된 값이 PAD 필드에 대해 명시된다면, 예를 들어, F000 hex의 응답 코드가 보고되고 연산은, 예를 들어, 1의 조건 코드로 완료된다.
[00316] 일 예에서, 함수-특정-파라미터들 1의 비트 위치들 0-28은 유보되며 0들을 포함한다.
[00317] * 함수-특정-파라미터 2는, 예를 들어, 32비트 부호 없는 이진 정수를 포함하고, 이는 슬라이딩 윈도우가 차원 2에서 이동하는 엘리멘트들의 수를 명시하는 차원-2-스트라이드(D2S)를 명시한다.
[00318] * 함수-특정-파라미터 3은, 예를 들어, 32비트 부호 없는 이진 정수를 포함하고, 이는 슬라이딩 윈도우가 차원 3에서 이동하는 엘리멘트들의 수를 명시하는 차원-3-스트라이드(D3S)를 명시한다.
[00319] * 함수-특정-파라미터 4는, 예를 들어, 32비트 부호 없는 이진 정수를 포함하고, 슬라이딩 윈도우가 포함하는 차원 2의 엘리멘트들의 수를 명시하는 차원-2-윈도우 크기(D2WS)를 명시한다.
[00320] * 함수-특정-파라미터 5는, 예를 들어, 32비트 부호 없는 이진 정수를 포함하고, 슬라이딩 윈도우가 포함하는 차원 3의 엘리멘트들의 수를 명시하는 차원-3-윈도우 크기(D3WS)를 명시한다.
[00321] 일 예에서, 함수-특정-파라미터들 2-5의 명시된 값들은 최대 차원 인덱스 크기보다 작거나 같고, 함수-특정-파라미터들 4-5의 명시된 값들은 0보다 더 커야 한다; 그렇지 않으면, 예를 들어, 0012 hex의 응답 코드가 보고되고 연산은, 예를 들어, 1의 조건 코드로 완료된다.
[00322] 만일 차원-2-스트라이드와 차원-3-스트라이드가 둘 다 0이고 차원-2-윈도우 크기 또는 차원-3-윈도우 크기가, 예를 들어, 1024보다 크다면, 예를 들어, F001 hex의 응답 코드가 저장된다. 만일 차원-2-스트라이드와 차원-3-스트라이드가 모두, 예를 들어, 0보다 크고 차원-2-윈도우 크기 또는 차원-3-윈도우 크기가, 예를 들어, 64보다 크다면, 예를 들어, 예: F002 hex의 응답 코드가 저장된다. 만일 차원-2-스트라이드와 차원-3-스트라이드가 모두, 예를 들어, 0보다 크고 차원-2 스트라이드 또는 차원-3 스트라이드가, 예를 들어, 30보다 크다면, 에를 들어, F003 hex의 응답 코드가 저장된다. 만일 차원-2-스트라이드와 차원-3-스트라이드가 모두, 예를 들어, 0보다 크고 입력 텐서 차원-2-인덱스-크기 또는 입력 텐서 차원-3-인덱스-크기가, 예를 들어, 1024보다 크다면, 예를 들어, F004 hex의 응답 코드가 저장된다. 위의 모든 조건들에 대해, 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00323] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터-레이아웃 = 0) 또는 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면 (예: 데이터-유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00324] 일 예에서, 다음 조건들은 참(true)이어야 하며, 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다:
[00325] * 입력 텐서와 출력 텐서의 차원-4-인덱스-크기들과 차원-1-인덱스 크기들은 같아야 한다.
[00326] * 입력 텐서와 출력 텐서의 데이터 레이아웃과 데이터 유형은 같아야 한다.
[00327] * 만일 차원 2-스트라이드와 차원-3-스트라이드가 모두 0이면, 한 예에서, 다음의 추가 조건들이 참이 된다.
[00328] * 입력 텐서 차원-2-인덱스-크기는 차원-2-윈도우 크기와 같아야 한다.
[00329] * 입력 텐서의 입력 텐서 차원-3-인덱스-크기는 차원-3-윈도우 크기와 같아야 한다.
[00330] * 출력 텐서의 차원-2-인덱스-크기와 차원-3-인덱스-크기는 1이어야 한다.
[00331] * 명시된 패딩은 유효해야 한다.
[00332] * 만일 차원 2-스트라이드 또는 차원-3-스트라이드 중 하나가 0이 아니면, 한 예에서 두 스트라이드들은 모두 0이 아니다.
[00333] * 만일 차원 2-스트라이드와 차원-3-스트라이드가 모두 0보다 크다면, 한 예에서 다음의 추가 조건들은 참이 된다.
[00334] * 명시된 패딩이 유효할 때, 차원-2-윈도우-크기는 입력 텐서의 차원 2-인덱스-크기보다 작거나 같다.
[00335] * 명시된 패딩이 유효할 때, 차원-3-윈도우 크기는 입력 텐서의 차원-3-인덱스 크기보다 작거나 같다.
[00336] * 명시된 패딩이 동일일 때, 입력 텐서와 출력 텐서의 차원-2-인덱스-크기와 차원-3-인덱스 크기 사이에는 다음 관계들이 충족된다(Pooling Same Padding):
[00337]
[00338]
[00339] 여기서:
[00340] IxDyIS 텐서 설명자 x에 정의된 입력 텐서 x의 차원-y-인덱스-크기.
[00341] OxDyIS 텐서 설명자 x에 정의된 출력 텐서 x의 차원-y-인덱스-크기.
[00342] D2S 차원-2-스트라이드.
[00343] D3S 차원-3-스트라이드.
[00344] * 명시된 패딩이 유효할 때, 입력 및 출력 텐서들의 차원-2-인덱스-크기와 차원-3-인덱스-크기 사이에 다음의 관계들이 충족된다(Pooling Valid Padding).
[00345]
[00346]
[00347] 여기서 D2WS는 차원-2-윈도우 크기이고 D3WS는 차원-3-윈도우 크기이다.
[00348] 출력 텐서 설명자 2, 입력 텐서 설명자들 2 및 3, 함수-특정-저장-영역-주소 필드는 무시된다.
[00349] 함수 코드 96: NNPA-LSTMACT(장단기 메모리 활성화)
[00350] NNPA-LSTMACT 함수가 명시될 때, 입력 텐서 1 설명자에 의해 기술되는, 입력 텐서 1은 각 차원 4 인덱스 값에 대해 4개의 서브-텐서들로 분할되고, 입력 텐서 2 설명자에 의해 기술되는 입력 텐서 2도 각 차원 4 인덱스 값에 대해 4개의 서브-텐서들로 분할되며, 입력 텐서 3 설명자에 의해 기술되는 입력 텐서 3은 LSTMACT 연산에 대한 입력이 된다. LSTMACT 연산이 종료되면, 결과들은 출력 텐서 1 설명자에 의해 기술되는 출력 텐서 1과 출력 텐서 2 설명자에 의해 기술되는 출력 텐서 2에 기록된다.
[00351] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터-레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터-유형 = 0), 예를 들어, 0010 hex 또는 0011 hex의 응답 코드는 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00352] 일 실시예에서, 다음 조건들은 참이어야 하며, 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다:
[00353] * 입력 텐서 3과 출력 텐서들 1 및 2에 대한 차원-4-인덱스 크기는, 예를 들어, 1과 같아야 한다.
[00354] * 입력 텐서 1과 입력 텐서 2에 대한 차원-4-인덱스-크기는, 예를 들어 4와 같아야 한다.
[00355] * 예를 들어, 모든 입력 텐서들과 두 개의 출력 텐서들에 대한 차원-3-인덱스 크기는, 예를 들어, 1과 같아야 한다.
[00356] * 예를 들어, 모든 입력 텐서들과 두 개의 출력 텐서들의 데이터 레이아웃 및 데이터 유형은 동일해야 한다.
[00357] * 예를 들어, 모든 입력 텐서들과 두 개의 출력 텐서들의 차원-1-인덱스 크기는 동일해야 한다.
[00358] * 예를 들어, 모든 입력 텐서들과 두 개의 출력 텐서들의 차원-2-인덱스 크기는 동일해야 한다.
[00359] 일 예에서, 함수-특정-저장-영역 주소 필드들은 무시된다. 한 가지 예에서 함수-특정-파라미터들 1-5는 0들을 포함한다.
[00360] 함수 코드 97: NNPA-GRUACT(게이트된 순환 유닛 활성화)
[00361] NNPA-GRUACT 함수가 명시될 때, 입력 텐서 1 설명자에 의해 기술되는, 입력 텐서 1은 각 차원 4 인덱스 값에 대해 3개의 서브-텐서들로 분할되고, 입력 텐서 2 설명자에 의해 기술되는 입력 텐서 2도 각 차원 4 인덱스 값에 대해 3개의 서브-텐서들로 분할되며, 입력 텐서 3 설명자에 의해 기술되는 입력 텐서 3은 GRUACT 연산에 대한 입력이 된다. GRUACT 연산이 종료되면 출력 텐서 설명자에 의해기술되는 출력 텐서가 저장된다.
[00362] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터-레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면 (예: 데이터-유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00363] 일 실시예에서, 다음 조건들은 참이어야 하며, 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다:
[00364] * 출력 텐서 및 입력 텐서 3의 차원-4-인덱스-크기는, 예를 들어, 1과 같아야 한다.
[00365] * 입력 텐서 1과 입력 텐서 2에 대한 차원-4-인덱스-크기는, 예를 들어, 3과 같아야 한다.
[00366] * 예를 들어, 모든 입력 텐서들 및 출력 텐서에 대한 차원-3-인덱스 크기는, 예를 들어, 1과 같아야 한다.
[00367] * 예를 들어, 모든 입력 텐서들과 출력 텐서의 차원-1-인덱스-크기는 동일해야 한다.
[00368] * 예를 들어, 모든 입력 텐서들과 출력 텐서의 차원-2-인덱스 크기는 동일해야 한다.
[00369] * 예를 들어, 모든 입력 텐서들과 출력 텐서의 데이터 레이아웃 및 데이터 유형은 동일해야 한다.
[00370] 일 예에서, 출력 텐서 설명자 2 및 함수-특정-저장-영역-주소 필드들은 무시된다. 한 예에서, 함수-특정-파라미터들 2-5는 0들을 포함한다.
[00371] 함수 코드 112: NNPA-CONVOLUTION
[00372] NNPA-CONVOLUTION 함수가 명시될 때, 출력 텐서 1 설명자에 의해 기술된 출력 텐서에서의 각 출력 엘리멘트에 대해, 차원 인덱스들 3, 2 및 1로 구성되는 3-차원 입력-1 윈도우가, 입력 텐서 1 설명자에 의해 기술되는, 입력 텐서 1로부터 선택된다. 차원 인덱스들 4, 3, 2로 구성되는 동일한 크기의 3-차원 입력-2 윈도우는, 입력 텐서 2 설명자에 의해 기술되는, 텐서 2로부터 선택된다. 입력-1 윈도우 내의 엘리멘트들은 입력-2 윈도우 내의 대응 엘리멘트들과 곱해지고 모든 곱들은 함께 더해져서 초기 합계를 생성한다. 이 초기 합계는 입력 텐서 3의 대응 엘리멘트에 더해져서 중간 합산 값을 계산한다. 출력 텐서의 엘리멘트는 중간 합계에서 수행된 명시된 활성화 함수의 결과이다. 만일 활성화 함수가 명시되지 않으면, 출력 엘리멘트는 중간 합계와 같다.
[00373] 만일 명시된 패딩 유형이 유효하다면, 윈도우 내의 모든 엘리멘트들은 최종 초기 합계를 계산하는 데 사용된다. 만일 명시된 패딩 유형이 동일이면, 윈도우의 위치에 따라, 최종 초기 합계를 계산할 때, 입력-1 윈도우의 일부 엘리멘트들은 0으로 암시될 수 있다.
[00374] 연산을 수행하는 데 필요하지 않은 엘리멘트들이 액세스되는지는 예측할 수 없다.
[00375] 일 예에서, 컨볼루션 기능에 의해 사용되는 함수-특정-파라미터의 필드들은, 다음과 같이 할당된다:
[00376] * NNPA-CONVOLUTION 함수-특정-파라미터 1은 패딩 유형과 활성화 함수를 컨트롤한다. 일 예에서, 함수-특정-파라미터들 1의 비트 29-31은 패딩 유형을 명시하는 PAD 필드를 포함한다. 예시적 유형들은 다음과 같다.
[00377] PAD 패딩 유형
[00378] 0 유효함
[00379] 1 동일함
[00380] 2-7 유보됨
[00381] 만일 유보된 값이 PAD 필드에 대해 명시된다면, 예를 들어, F000 hex의 응답 코드가 보고되고 연산은, 예를 들어, 1의 조건 코드로 완료된다.
[00382] 또한, 일 예에서, NNPA-CONVOLUTION 함수-특정-파라미터 1의 비트 24-27은 활성화 함수들을 명시하는 활성화 필드를 포함한다. 예시적 기능들은 다음과 같다:
[00383] ACT 활성화 함수
[00384] 0 활성화 함수가 수행되지 않음
[00385] 1 RELU
[00386] 2-15 유보됨
[00387] RELU의 활성화 함수가 명시될 때, 최종 출력 엘리멘트 값은 다음과 같이 결정된다: 만일 중간 합계 값이 0보다 작거나 같으면, 출력 텐서 내의 대응 엘리멘트는 0이고; 그렇지 않으면, 출력 텐서 내의 대응 엘리멘트는 함수-특정-파라미터 4에 명시된 중간 합계 값과 클리핑 값의 최소값이다.
[00388] 만일 유보된 값이 ACT 필드에 대해 명시된다면, 예를 들어, F001 hex의 응답 코드가 보고되고 연산은 예를 들어, 1의 조건 코드로 완료된다.
[00389] * 함수-특정-파라미터 2는, 예를 들어, 32비트 부호 없는 이진 정수를 포함하고, 이는 슬라이딩 윈도우가 차원 2에서 이동하는 엘리멘트들의 수를 명시하는 차원 2(D2S) 스트라이드를 명시한다.
[00390] * 함수-특정-파라미터 3은, 예를 들어, 32비트 부호 없는 이진 정수를 포함하고, 이는 슬라이딩 윈도우가 차원 3에서 이동하는 엘리멘트들의 수를 명시하는 차원-3(D3S) 스트라이드를 명시한다.
[00391] 함수-특정-파라미터들 2-3에서 명시된 값들은 최대 차원 인덱스 크기보다 작아야 한다. 그렇지 않으면, 예를 들어, 0012 hex의 응답 코드가 보고되고 연산은, 예를 들어, 1의 조건 코드로 완료된다.
[00392] * 함수-특정-파라미터 4는 선택적 RELU 연산에 대한 클리핑 값을 정의한다. 한 예에서, 클리핑 값은 함수-특정-파라미터 4의 비트 16-31에 있다.
[00393] 일 예에서, 만일 ACT 필드가 0이면, 이 필드는 무시된다. 만일 ACT 필드가 RELU를 명시하면, 클리핑 값은 NNP-데이터-유형-1 포맷으로 명시된다. 클리핑 값이 0이면 최대 양수 값을 사용함을 나타낸다. 즉, 클리핑이 수행되지 않는다. 만일 0이 아닌 값이 명시되면, 일반 오퍼랜드 데이터 예외가 인지된다.
[00394] 일 예에서, 만일 입력 텐서 2를 제외하고 명시된 텐서 설명자들 중 하나에 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터-레이아웃 = 0) 또는 만일 입력 텐서 2에서 명시된 데이터 레이아웃이 4D-커널 텐서를 명시하지 않는다면(예: 데이터-레이아웃 = 1), 예를 들어, 0010 hex의 응답 코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다. 일 예에서, 만일 임의의 명시된 텐서 설명자에서 데이터-유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터-유형 = 0), 예를 들어, 0011 hex의 응답 코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00395] 만일 차원 2-스트라이드와 차원-3-스트라이드가 모두 0이고 입력 텐서 2의 차원-3-인덱스 크기 또는 차원-4-인덱스 크기가, 예를 들어, 448보다 크면, 예를 들어, F002 hex의 응답 코드가 저장된다. 만일 차원-2-스트라이드와 차원-3-스트라이드가 모두 0보다 크고 입력 텐서 2의 차원-3-인덱스 크기 또는 차원-4-인덱스-크기가, 예를 들어, 64보다 크다면, 예를 들어, F003 hex의 응답 코드가 저장되고 연산은, 예를 들어, 1의 조건 코드로 완료된다. 만일 차원 2 스트라이드 또는 차원 3 스트라이드가, 예를 들어, 13보다 크다면, 예를 들어, F004 hex의 응답 코드가 저장되고 연산은, 예를 들어, 1의 조건 코드로 완료된다.
[00396] 일 예에서, 다음 조건들은 참이어야 하며, 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다:
[00397] * 입력 텐서 1, 입력 텐서 3, 출력 텐서의 데이터 레이아웃은 동일해야 한다.
[00398] * 모든 입력 텐서들과 출력 텐서의 데이터 유형은 동일해야 한다.
[00399] * 입력 3 텐서의 차원-2, 차원-3 및 차원-4 인덱스 크기들은 1이어야 한다.
[00400] * 출력 텐서의 차원-4 인덱스 크기는 입력 1 텐서의 차원-4 인덱스 크기와 같아야 한다.
[00401] * 출력 텐서의 차원-1 인덱스 크기는 입력 2 텐서의 차원-1 인덱스 크기 및 입력 3 텐서의 차원-1 인덱스 크기와 같아야 한다.
[00402] * 입력 1 텐서의 차원-1 인덱스 크기는 입력 2 텐서의 차원-2 인덱스 크기와 같아야 한다.
[00403] * 만일 차원-2-스트라이드와 차원-3-스트라이드가 모두 0이면, 한 예에서, 다음의 추가 조건들이 참이 된다:
[00404] * 입력 1 텐서 차원-2-인덱스-크기는 입력 2 텐서의 차원-3-인덱스 크기와 같아야 한다.
[00405] * 입력 텐서의 입력 1 텐서 차원-3-인덱스-크기는 입력 2 텐서의 차원-4-인덱스-크기와 같아야 한다.
[00406] * 출력 텐서의 차원-2-인덱스-크기와 차원-3-인덱스-크기는 1이어야 한다.
[00407] * 명시된 패딩은 유효해야 한다.
[00408] * 만일 차원-2-스트라이드 또는 차원-3-스트라이드 중 하나가 0이 아니면, 두 스트라이드들은 모두 0이 아니다.
[00409] * 만일 차원 2-스트라이드와 차원-3-스트라이드가 모두 0보다 크다면, 일 예에서, 다음의 추가 조건들이 참이어야 한다.
[00410] * 명시된 패딩이 유효할 때, 입력 1 텐서의 차원-2-인덱스-크기는 입력 텐서 2의 차원-3-인덱스-크기보다 크거나 같다.
[00411] * 명시된 패딩이 유효할 때, 입력 1 텐서의 차원-3-인덱스 크기는 입력 2 텐서의 차원-4-인덱스-크기보다 크거나 같다.
[00412] * 명시된 패딩이 동일일 때, 일 예에서, 입력 1 텐서와 출력 텐서의 차원-2-인덱스-크기와 차원-3-인덱스-크기 사이의 다음 관계들이 충족되어야 한다(컨볼루션 동일 패딩):
[00413]
[00414]
[00415] 여기서:
[00416] O1D2IS 출력 텐서의 차원-2-인덱스-크기.
[00417] O1D3IS 출력 텐서의 차원-3-인덱스-크기.
[00418] I1D2IS 입력 1 텐서의 차원-2-인덱스-크기.
[00419] I1D3IS 입력 1 텐서의 차원-3-인덱스-크기.
[00420] D2S 차원-2-스트라이드.
[00421] D3S 차원-3-스트라이드.
[00422] * 명시된 패딩이 유효일 때, 입력 1 텐서의 차원-2-인덱스-크기와 차원-3-인덱스-크기, 입력 2 텐서 및 출력 텐서의 차원-3-인덱스-크기와 차원-4-인덱스-크기 간의 다음 관계들이, 일 예에서, 충족된다(컨볼루션 유효 패딩):
[00423]
[00424]
[00425] 여기서:
[00426] O1D2IS 출력 텐서의 차원-2-인덱스-크기.
[00427] O1D3IS 출력 텐서의 차원-3-인덱스-크기.
[00428] I1D2IS 입력 1 텐서의 차원-2-인덱스-크기.
[00429] I1D3IS 입력 1 텐서의 차원-3-인덱스-크기.
[00430] I2D3IS 입력 2 텐서의 차원-3-인덱스-크기.
[00431] I2D4IS 입력 2 텐서의 차원-4-인덱스-크기.
[00432] D2S 차원-2-스트라이드.
[00433] D3S 차원-3-스트라이드.
[00434] 한 예에서, 출력 텐서 설명자 2와 함수-특정-저장-영역-주소 필드들이 무시된다. 한 예에서, 함수-특정-파라미터들 5는 0들을 포함한다.
[00435] 함수 코드 113: NNPA-MATMUL-OP(행렬 곱셈 연산)
[00436] NNPA-MATMUL-OP 함수가 명시될 때, 출력 텐서 설명자에 의해 기술되는 출력 텐서에서의 각 엘리멘트는, 한 예에서, 아래 기술된 바와 같이, 계산된다.
[00437] * 차원-1-벡터는, 아래 기술된 get-차원-1-벡터 연산을 사용하여, 입력 텐서 1 설명자에 의해 기술된, 입력 텐서 1로부터 선택된다.
[00438] * 차원-2-벡터는, 아래 기술된 get-차원-2-벡터 연산을 사용하여, 입력 텐서 2 설명자에 의해 기술된, 입력 텐서 2로부터 선택된다.
[00439] * 차원-1-벡터와 차원-2-벡터의 중간 도트 곱(intermediate dot product)은 아래 기술된 도트 곱 연산을 사용하여 계산된다.
[00440] * 출력 텐서 엘리멘트와 동일한 차원 인덱스 4 및 차원 인덱스 1 값들을 사용하여, 입력 텐서 3 설명자에 의해 기술되는, 중간 도트 곱 및 입력 텐서 3의 엘리멘트에 관해 연산이 수행된다. 최종 엘리멘트는 출력 텐서에 저장된다. 융합 연산은 함수-특정-파라미터 1에 의해 결정되며 아래에서 설명된다.
[00441] Get-차원-1-벡터 연산: 명시된 출력 엘리멘트에 대해, 차원-1 벡터가 입력-1 텐서로부터 선택되며, 여기서 입력 차원-4-인덱스는 출력 차원-4-인덱스이고, 입력 차원-3-인덱스는 출력 차원-3-인덱스이며, 입력 차원-2-인덱스는 출력 차원-2-인덱스이다.
[00442] Get-차원-2-벡터 연산: 명시된 출력 엘리멘트에 대해, 차원-2 벡터가 입력-2 텐서로부터 선택되며, 여기서 입력 차원-4-인덱스는 출력 차원-4-인덱스이고, 입력 차원-3-인덱스는 출력 차원-3-인덱스이며, 입력 차원-1-인덱스는 출력 차원-1-인덱스이다.
[00443] 도트 곱 연산: 동일한 크기 및 데이터 유형의 두 벡터들의 중간 도트 곱은 입력 벡터 1의 각 엘리멘트와 입력 벡터 2의 대응 엘리멘트의 곱의 합으로 계산된다.
[00444] 융합된 연산: 함수-특정-파라미터 1은 중간 도트 곱과 입력 텐서 3으로부터의 대응 엘리멘트에 대해 수행되는 연산을 컨트롤한다. 한 예에서, NNPA-MATMUL-OP 함수-특정-파라미터 1은, 예를 들어, 비트 24-31에 연산 필드를 포함한다. 상기 연산 필드는 수행되는 연산을 명시한다. 예시적 연산들은 다음과 같다:
[00445] 연산(OPERATION) 연산 유형
[00446] 0 덧셈
[00447] 1 도트 곱이 높은 지 비교
[00448] 2 도트 곱이 낮지 않은 지 비교
[00449] 3 도트 곱과 엘리멘트가 같은 지 비교
[00450] 4 도트 곱과 엘리멘트가 같지 않은 지 비교
[00451] 5 도트 곱이 높지 않은 지 비교
[00452] 6 도트 곱이 낮은 지 비교
[00453] 일 예에서, 덧셈의 연산 유형의 경우, 입력 텐서 3 엘리멘트가 중간 도트 곱에 더해진다. 비교의 연산 유형들의 경우, 중간 도트 곱은 입력 텐서 3 엘리멘트와 비교되고, 만일 비교가 참이면, 결과는, 예를 들어, +1의 값으로 설정된다; 그렇지 않으면, 출력 텐서에 대해 명시된 데이터 유형에서, 예를 들어, +0의 값으로 설정된다.
[00454] 일 예에서, 연산(OPERATION) 필드의 모든 다른 값들은 유보된다. 만일 유보된 값이 연산 필드에 대해 명시된다면, 예를 들어, F000 hex의 응답 코드가 보고되고 연산은, 예를 들어, 1의 조건 코드로 완료된다.
[00455] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일 임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터-유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00456] 일 실시예에서, 다음의 조건들은 참이어야 하며, 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00457] * 모든 입력 텐서들의 차원-4-인덱스-크기와 출력 텐서는 동일해야 한다.
[00458] * 모든 입력 텐서들의 차원-3-인덱스-크기와 출력 텐서는 1과 같아야 한다.
[00459] * 입력 텐서 3의 차원-2-인덱스-크기는 1과 같아야 한다.
[00460] * 입력 텐서 1의 차원-2-인덱스 크기와 출력 텐서는 동일해야 한다.
[00461] * 입력 텐서 1의 차원-1 인덱스 크기와 입력 텐서 2의 차원-2 인덱스 크기는 동일해야 한다.
[00462] * 입력 텐서 2, 입력 텐서 3의 차원-1-인덱스-크기와 출력 텐서는 동일해야 한다.
[00463] * 모든 입력 텐서들의 데이터 레이아웃 및 데이터 유형과 출력 텐서는 동일해야 한다.
[00464] 일 실시예에서, 출력 텐서 설명자 2 및 함수-특정-저장-영역-주소 필드들은 무시된다. 일 예에서, 함수-특정-파라미터들 2-5는 0들을 포함한다.
[00465] 함수 코드 114: NNPA-MATMUL-OP-BCAST23(행렬 곱셈 연산 - 브로드캐스트 23)
[00466] NNPA-MATMUL-OP-BCAST23 함수가 명시될 때, 출력 텐서 설명자에 의해 기술되는 출력 텐서의 각 엘리멘트는, 한 예에서, 아래에서 기술된 바와 같이 계산된다:
[00467] * 차원-1-벡터는, 아래에 기술된 get-차원-1-벡터 연산을 사용하여, 입력 텐서 1 설명자에 의해 기술된, 입력 텐서 1로부터 선택된다.
[00468] * 차원 2 벡터는, 아래에 기술된 get-차원-2-벡터 연산을 사용하여, 입력 텐서 2 설명자에 의해 기술된, 입력 텐서 2로부터 선택된다.
[00469] * 차원-1-벡터와 차원-2-벡터의 도트 곱은 아래에 기술된 도트 곱 연산을 사용하여 계산된다.
[00470] * 입력 텐서 3 설명자에 의해 기술되는, 입력 텐서 3의 엘리멘트는, 출력 텐서 엘리멘트와 동일 차원 인덱스 1 값을 가지고, 이전에 계산된 도트 곱에 더해져서 출력 텐서에 저장된다.
[00471] Get-차원-1-벡터 연산: 명시된 출력 엘리멘트에 대해, 차원-1 벡터는 입력-1 텐서로부터 선택되고, 여기서 입력 차원-4-인덱스는 출력 차원-4-인덱스이며, 입력 차원-3-인덱스는 출력 차원-3-인덱스이고, 입력 차원-2-인덱스는 출력 차원-2-인덱스이다.
[00472] Get-차원-2-벡터 연산: 명시된 출력 엘리멘트에 대해, 차원-2 벡터는 입력-2 텐서로부터 선택되고, 여기서 입력 차원-4-인덱스는 1이고, 입력 차원-3-인덱스는 출력 차원-3-인덱스이며, 입력 차원-1-인덱스는 출력 차원-1-인덱스이다.
[00473] 도트 곱 연산: 동일 크기 및 데이터 유형의 두 벡터들의 중간 곱은 입력 벡터 1의 각 엘리멘트와 입력 벡터 2의 대응 엘리멘트의 곱의 합으로 계산된다.
[00474] 일 예에서, 만일 명시된 텐서 설명자들 중 하나에서 명시된 데이터 레이아웃이 4D-특징 텐서를 명시하지 않는다면(예: 데이터 레이아웃 = 0) 또는 만일임의의 명시된 텐서 설명자에서 데이터 유형이 NNP-데이터-유형-1을 명시하지 않는다면(예: 데이터-유형 = 0), 예를 들어, 각각 0010 hex 또는 0011 hex의 응답코드가 일반 레지스터 0에 설정되고 상기 명령은, 예를 들어, 1의 조건 코드로 완료된다.
[00475] 일 실시예에서, 다음의 조건들은 참이어야 하며, 그렇지 않으면 일반 오퍼랜드 데이터 예외가 인지된다.
[00476] * 입력 텐서 1의 차원-4-인덱스 크기와 출력 텐서는 동일해야 한다.
[00477] * 입력 텐서 2와 입력 텐서 3의 차원-4-인덱스-크기는 1과 같아야 한다.
[00478] * 모든 입력 텐서들의 차원-3-인덱스-크기와 출력 텐서는 1과 같아야 한다.
[00479] * 입력 텐서 3의 차원-2-인덱스-크기는 1과 같아야 한다.
[00480] * 입력 텐서 1의 차원-2-인덱스-크기와 출력 텐서는 동일해야 한다.
[00481] * 입력 텐서 1의 차원-1-인덱스 크기와 입력 텐서 2의 차원-2-인덱스 크기는 동일해야 한다.
[00482] * 입력 텐서 2, 입력 텐서 3의 차원-1-인덱스-크기와 출력 텐서는 동일해야 한다.
[00483] * 모든 입력 텐서들의 데이터 레이아웃 및 데이터 유형과 출력 텐서는 동일해야 한다.
[00484] 일 실시예에서, 출력 텐서 설명자 2 및 함수-특정-저장-영역-주소 필드들은 무시된다. 한 예에서, 함수-특정-파라미터들 1-5는 0들을 포함한다.
[00485] 신경망 처리 지원 명령의 경우, 일 실시예에서, 만일 출력 텐서가 임의의 입력 텐서 또는 파라미터 블록과 중첩되면, 결과들은 예측할 수 없다.
[00486] 예로서, 신경망 처리 지원 명령의 실행이 시도되고 파라미터 블록이, 예를 들어, 더블워드 경계에 지정되지 않을 때 사양 예외가 인지된다.
[00487] 신경망 처리 지원 명령의 실행이 시도되고, 예를 들어, 텐서 설명자 불일치들이 있을 때 일반 오퍼랜드 데이터 예외가 인지된다.
[00488] 신경망 처리 지원 명령에 대한 최종 조건 코드들은, 예를 들어, 다음을 포함한다: 0 - 정상 완료; 1 - 응답 코드가 설정되었다; 2 --; 3 - CPU가 결정한 양의 데이터가 처리되었다.
[00489] 일 실시예에서, 신경망 처리 지원 명령에 대한 실행의 우선순위는, 예를 들어, 다음을 포함한다:
[00490] 1.-7. 일반적인 경우의 프로그램 중단 조건들의 우선순위와 동일한 우선순위를 갖는 예외들.
[00491] 8.A 명시된 할당되지 않거나 설치되지 않은 함수 코드가 명시된 것으로 인한 조건 코드 1.
[00492] 8.B 더블워드 경계에 지정되지 않은 파라미터 블록으로 인한 사양 예외.
[00493] 9. 파라미터 블록에 대한 액세스에 대한 액세스 예외.
[00494] 10. 모델에 의해 지원되지 않는 파라미터 블록의 명시된 포맷으로 인한 조건 코드 1.
[00495] 11.A 지원되지 않는 명시된 텐서 데이터 레이아웃으로 인한 조건 코드 1.
[00496] 11.B 텐서 설명자들 간의 데이터 레이아웃 차이로 인한 일반 오퍼랜드 데이터 예외.
[00497] 12.A 위 항목들 8.A, 10, 11.A 및 아래 항목 12.B.1에 포함된 조건들 이외의 조건들으로 인한 조건 코드 1.
[00498] 12.B.1 NNPA-RELU 및 NNPA-CONVOLUTION에 대한 유효하지 않은 출력 텐서 데이터 유형으로 인한 조건 코드 1.
[00499] 12.B.2 NNPA-RELU 함수-특정-파라미터 1 및 NNPA-CONVOLUTION 함수-특정-파라미터 4에 대한 유효하지 않은 값에 대한 일반 오퍼랜드 데이터 예외.
[00500] 13.A 출력 텐서에 액세스에 대한 액세스 예외.
[00501] 13.B 입력 텐서에 액세스에 대한 액세스 예외.
[00502] 13.C 함수-특정-저장-영역에 액세스에 대한 액세스 예외.
[00503] 14. 조건 코드 0.
[00504] 본 명세서에 기술된 바와 같이, 단일 명령(예를 들어, 신경망 처리 지원 명령)은, 쿼리 함수 및 복수의 비-쿼리 함수들을 포함하는, 복수의 기능들을 수행하도록 구성된다. 비-쿼리 함수 각각은, 4D-텐서들과 같은, 텐서들에서 작동할 수 있다. 본 발명의 하나 또는 그 이상의 실시예들에 따라, 텐서들을 사용하는 처리를 용이하게 하기 위해, 텐서들(예: 4D-텐서들)은 처리를 개선하기 위해 특정 특성들 갖는, 예를 들어, 복수의 2D-텐서들(서브-텐서들이라고도 함)로 재포맷된다. 표시된 바와 같이, 서브-텐서는 쉽게 계산 가능한 주소들을 가지며 한 번의 연산으로 로드/저장될 수 있으므로, 대역폭을 증가시키고 시스템 성능을 개선한다. 예를 들어, 이는 메모리 경계에서 서브-텐서를 시작하고 고정된 크기를 갖는 결과이다(패딩을 사용하여 가능하게 함).
[00505] 일 예에서, 텐서들을 재포맷하는 단계는 프로세서(예를 들어, 일반 프로세서(104))가 데이터에 대한 요청을 획득하고 및/또는 비-쿼리 함수를 명시하는 신경망 처리 지원 명령을 획득하는 것에 기초하여 수행된다. 명시된 4D-텐서(들)는, 예를 들어, 파라미터 블록에 제공된 텐서 설명자 정보(예: 도 3g의 텐서 설명자(360, 365))를 사용하여 재포맷된다. 재포맷된 텐서(들)와 관련된 주소 정보는 상기 명령에 의해 명시된 기능을 수행하는 데 사용하기 위해 특수-목적 프로세서(예: 신경망 프로세서(105))에 제공된다.
[00506] 본 발명의 하나 또는 그 이상의 실시예들은 컴퓨터 기술과 불가분하게 연결되어 있으며 컴퓨터 내 처리를 용이하게 하여 성능을 향상시킨다. 서브-텐서들 및/또는 명령은, 컴퓨터 처리, 인공 지능, 순환 신경망, 의료 처리, 엔지니어링, 자동차 기술, 제조 등과 같은, 많은 기술 분야들에서 사용될 수 있다. 여기에 기술된 바와 같이, 재포맷된 원래 텐서의 서브-텐서들을 사용함으로써, 다양한 기술 분야들에서 사용되는 복잡한 계산들을 수행하는데 있어서 최적화를 포함하는 특정 최적화들이 제공되어, 이들 분야들을 향상시키는데, 대역폭을 증가시키고, 효율성 제공하며 및/또는 실행 시간을 감소시킴으로써 한다.
[00507] 본 발명의 하나 또는 그 이상의 실시예들과 관련하여 컴퓨팅 환경 내에서 처리를 용이하게 하는 일 실시예의 추가 세부사항이 도 7a 및 도 7b를 참조하여 기술된다.
[00508] 도 7a를 참조하면, 일 실시예에서 제1 선택 차원의 텐서가 획득된다(700). 상기 텐서는 제2 선택 차원의 하나 또는 그 이상의 서브-텐서들을 제공하기 위해 재포맷된다(702). 상기 재포맷하는 단계는, 예를 들어, 상기 텐서를 표현하는 데 사용되기 위해 다수의 서브-텐서들을 결정하는 단계(704), 상기 다수의 서브-텐서들을 생성하는 단계(creating) - 서브-텐서는 메모리 유닛의 경계 상에서 시작함(706)-, 상기 다수의 서브-텐서들 내에 맞도록(fit) 상기 텐서의 데이터를 재조정하는 단계(rearranging)(708)를 포함한다.
[00509] 메모리 유닛의 경계에서 시작하는 서브-텐서들을 생성함으로써, 주소 변환 요청들의 수를 감소시키고 데이터 전송 속도를 증가시켜 처리가 촉진된다. 또한 상기 서브-텐서들에 대한 메모리 주소는 쉽게 계산할 수 있으므로 복잡한 주소 계산들에 대한 오버헤드를 감소시킨다.
[00510] 예로서, 상기 다수의 서브-텐서들을 결정하는 단계는, 적어도, 상기 텐서에 포함된 다수의 엘리멘트 값들과 상기 메모리 유닛의 크기에 기초하여 하나 또는 그 이상의 실 함수들(ceil functions)을 사용하는 단계를 포함한다(710).
[00511] 일 예에서, 상기 다수의 서브-텐서들 중 적어도 하나의 서브-텐서에 대한 데이터를 재조정하는 단계는 상기 적어도 하나의 서브-텐서를 완성하기 위해(complete) 적어도 하나의 차원에서 상기 다수의 서브-텐서들 중 적어도 하나의 서브-텐서를 패딩하는 단계(padding)를 포함한다(712). 상기 패딩은 주소 계산들 및 데이터 전송에 효율성을 제공하는 고정 차원의 서브-텐서들을 제공한다.
[00512] 일 예에서, 상기 다수의 서브-텐서들 중 선택된 서브-텐서에 대한 데이터를 재조정하는 단계는 상기 텐서를 나타내는 복수의 행렬들에서 동일한 위치의 데이터를 선택하는 단계(716), 상기 선택된 서브-텐서의 한 행에서 선택된 데이터를 배치하는 단계(placing)(718), 및 상기 복수의 행렬들의 복수의 위치들에 대해 상기 선택하는 단계 및 배치하는 단계를 반복하는 단계(720)를 포함한다.
[00513] 또한, 도 7b를 참조하면, 일 예에서, 상기 데이터 재조정하는 단계는 상기 선택된 서브-텐서의 하나 또는 그 이상의 행들이 상기 선택된 서브-텐서의 크기에 의해 수용되는 것보다 더 적은 데이터를 갖는 것에 기초하여, 상기 선택된 서브-텐서의 하나 또는 그 이상의 행들을 패딩하는 단계(730), 및 상기 선택된 서브-텐서가 상기 선택된 서브-텐서의 크기에 의해 수용되는 것보다 더 적은 행들을 갖는 것에 기초하여, 상기 선택된 서브-텐서를 하나 또는 그 이상의 추가 패딩된 행들(additional padded rows)로 패딩하는 단계(732)를 더 포함한다. 다시 말하면, 상기 패딩하는 단계는 주소 계산들 및 데이터 전송에서 효율성을 제공하는 고정 차원의 서브-텐서들을 제공한다.
[00514] 일 예로서, 상기 메모리 유닛은 메모리 페이지이고, 상기 메모리 유닛의 경계는 페이지 경계이다(734). 페이지 경계에서 시작하는 서브-텐서들을 생성함으로써, 주소 변환 요청들의 수를 감소시키고 데이터 전송 속도를 증가시켜 처리가 용이하게 된다.
[00515] 일 예에서, 상기 하나 또는 그 이상의 서브-텐서들이 텐서 계산들에 사용하기 위해 프로세서에 제공된다(740). 상기 하나 또는 그 이상의 서브-텐서들을 제공하는 단계는, 예를 들어, 하나의 연산으로(in one operation) 상기 하나 또는 그 이상의 서브-텐서들의 데이터를 저장하는 데(store) 사용되기 위해 상기 프로세서에 주소 정보 및 상기 제2 선택 차원에 관한 정보를 제공하는 단계를 포함한다(742). 이것은 한 번의 연산에서 데이터의 블록 저장을 가능하게 하여 시스템 성능을 향상시킨다.
[00516] 일 예에서, 상기 하나 또는 그 이상의 서브-텐서들을 제공하는 단계는 하나의 연산으로(in one operation) 상기 하나 또는 그 이상의 서브-텐서들의 데이터를 로드하는 데(load) 사용되기 위해 상기 프로세서에 주소 정보 및 상기 제2 선택 차원에 관한 정보를 제공하는 단계를 포함한다(744). 이것은 한 번의 연산으로 데이터의 블록 로딩을 가능하게 하여 시스템 성능을 향상시킨다.
[00517] 일 예로, 상기 제1 선택 차원은 4-차원들이고, 상기 제2 선택 차원은 2-차원들이며, 하나 또는 그 이상의 2-차원 서브-텐서들은 하나의 4-차원 텐서를 나타낸다(750).
[00518] 다른 변형들 및 실시예들이 가능하다.
[00519] 본 발명의 실시예들은 많은 유형의 컴퓨팅 환경들에 의해 사용될 수 있다. 본 발명의 하나 또는 그 이상의 실시예들을 통합하고 사용하기 위한 컴퓨팅 환경의 다른 예가 도 8a를 참조하여 기술된다. 예를 들어, 도 8a의 컴퓨팅 환경은 미국 뉴욕 주 아몽크에 있는 인터내셔널 비즈니스 머신즈 코포레이션이 공급하는 z/Architecture® 하드웨어 아키텍처를 기반으로 한다. 그러나 z/Architecture 하드웨어 아키텍처는 하나의 예시 아키텍처일 뿐이다. 다시, 상기 컴퓨팅 환경은 Intel® x86 아키텍처, 인터내셔널 비즈니스 머신즈 코포레이션의 다른 아키텍처 및/또는 다른 회사들의 아키텍처들을 포함하되 이에 제한되지 않는 다른 아키텍처들을 기반으로 할 수 있다. Intel은 미국 및 기타 국가에서 Intel Corporation 또는 그 자회사의 상표 또는 등록 상표이다.
[00520] 일 예에서, 컴퓨팅 환경(10)은 중앙 전자 콤플렉스(CEC)(11)를 포함한다. 중앙 전자 콤플렉스(11)는, 예를 들어, 하나 또는 그 이상의 프로세서들(일명 중앙 처리 유닛(CPU))(13)과 하나 또는 그 이상의 특수-목적 프로세서들(예를 들어, 신경망 프로세서(31)) 및 입력/출력(I/O) 서브시스템(14)에 결합된, 예를 들어, 메모리(12)(일명, 시스템 메모리, 메인 메모리, 메인 스토리지, 중앙 스토리지, 스토리지)와 같은, 복수의 컴포넌트들을 포함한다.
[00521] 예로서, 하나 또는 그 이상의 특수-목적 프로세서들은 하나 또는 그 이상의 범용 프로세서들과 별개일 수 있으며 및/또는 적어도 하나의 특수 목적 프로세서는 적어도 하나의 범용 프로세서 내에 임베드될 수 있다. 다른 변형들도 가능하다.
[00522] I/O 서브시스템(14)은 중앙 전자 콤플렉스 복합체의 일부이거나 그로부터 분리될 수 있다. 이것은 메인 스토리지(12)와 입/출력 컨트롤 유닛(15) 및 중앙 전자 콤플렉스 복합물에 결합된 입/출력(I/O) 디바이스(16) 사이의 정보 흐름을 지시한다.
[00523] 많은 유형의 I/O 디바이스들이 사용될 수 있다. 하나의 특정 유형은 데이터 스토리지 디바이스(17)이다. 데이터 스토리지 디바이스(17)는 하나 또는 그 이상의 프로그램들(18), 하나 또는 그 이상의 컴퓨터 판독 가능 프로그램 명령들(19) 및/또는 데이터 등을 저장할 수 있다. 상기 컴퓨터 판독 가능 프로그램 명령은 본 발명의 실시예들의 기능들을 수행하도록 구성될 수 있다.
[00524] 중앙 전자 콤플렉스(11)는 착탈식/비-착탈식, 휘발성/비-휘발성 컴퓨터 시스템 스토리지 매체를 포함할 수 있고 및/또는 이 들에 결합될 수 있다. 중앙 전자 콤플렉스(11)는, 예를 들어, 비-착탈식, 비-휘발성 자기 매체(일반적으로 "하드 드라이브"라고 함), 착탈식, 비-휘발성 자기 디스크(예를 들어, "플로피 디스크")로부터 읽고 이에 쓰기 위한 자기 디스크 드라이브, 및/또는, CD-ROM, DVD-ROM 또는 기타 광 매체와 같은, 착탈식, 비-휘발성 광 디스크로부터 읽거나 또는 이에 쓰기 위한 광 디스크 드라이브를 포함할 수 있고 및/또는 이들에 결합될 수 있다. 다른 하드웨어 및/또는 소프트웨어 컴포넌트들이 중앙 전자 콤플렉스(11)와 함께 사용될 수 있음을 이해해야 한다. 예들에는, 다음이 포함되지만, 이에 제한되지는 않는다: 마이크로코드, 장치 드라이버들, 중복 처리 유닛들, 외부 디스크 드라이브 어레이들, RAID 시스템들, 테이프 드라이브들 및 데이터 보관 스토리지 시스템 등.
[00525] 또한, 중앙 전자 콤플렉스(11)는 다수의 다른 범용 또는 특수 목적 컴퓨팅 시스템 환경들 또는 구성들과 함께 동작할 수 있다. 중앙 전자 콤플렉스(11)와 함께 사용하기에 적합할 수 있는 잘 알려진 컴퓨팅 시스템들, 환경들, 및/또는 구성들의 예들은, 개인용 컴퓨터(PC) 시스템들, 서버 컴퓨터 시스템들, 씬 클라이언트들, 씩 클라이언트들, 핸드헬드 또는 랩톱 디바이스들, 멀티프로세서 시스템들, 마이크로프로세서-기반 시스템들, 셋톱 박스들, 프로그래밍 가능한 소비자 전자 제품들, 네트워크 PC들, 미니 컴퓨터 시스템들, 메인프레임 컴퓨터 시스템들, 및, 위의 시스템들 또는 디바이스들 중 어느 하나, 등을 포함하는 분산 클라우드 컴퓨팅 환경들을 포함하지만 이들로 제한되지는 않는다.
[00526] 중앙 전자 콤플렉스(11)는 하나 또는 그 이상의 실시예들에서 논리적 분할 및/또는 가상화 지원을 제공한다. 일 실시예에서, 도 8b에 도시된 바와 같이, 메모리(12)는, 예를 들어, 하나 또는 그 이상의 논리적 파티션(20), 논리적 파티션을 관리하는 하이퍼바이저(21) 및 프로세서 펌웨어(22)를 포함한다. 하이퍼바이저(21)의 한 예는 미국 뉴욕 아몽크 소재의 인터내셔널 비즈니스 머신즈 코포레이션에 의해서 제공되는 PR/SMTM(Processor Resource/System Manager)이다. PR/SM은 적어도 하나의 관할권에서 인터내셔널 비즈니스 머신즈 코포레이션의 상표 또는 등록 상표이다.
[00527] 각 논리 파티션(20)은 별도의 시스템으로 기능할 수 있다. 즉, 각각의 논리적 파티션은 독립적으로 재설정될 수 있고, 인터내셔널 비즈니스 머신즈 코포레이션(아몽크, 뉴욕)에 의해서 제공되는 z/OS® 운영 체제와 같은 게스트 운영 체제(23) 또는, CFCC(Coupling Facility Control Code)와 같은, 기타 컨트롤 코드(24)를 실행하고, 다른 프로그램(25)과 함께 작동할 수 있다. 상기 논리 파티션에서 실행되는 운영 체제 또는 애플리케이션은 완전하고 완전한 시스템에 액세스할 수 있는 것처럼 보이지만 실제로는 그 중 일부만 사용할 수 있다. z/OS 운영 체제가 예로서 제공되지만, 인터내셔널 비즈니스 머신즈 코포레이션 및/또는 다른 회사들에서 제공하는 다른 운영 체제들이 본 발명의 하나 또는 그 이상의 실시예들에 따라 사용될 수 있다.
[00528] 메모리(12)는 논리적 파티션에 할당될 수 있는 물리적 프로세서 자원인 CPU(13)(도 8a)에 결합된다. 예를 들어, 논리적 파티션(20)은 하나 또는 그 이상의 논리적 프로세서들을 포함하며, 각각은 논리적 파티션에 동적으로 할당될 수 있는 물리적 프로세서 자원(13)의 전체 또는 공유를 나타낸다.
[00529] 또 다른 실시예에서, 중앙 전자 콤플렉스 콤플렉스는 가상 머신 지원(논리 분할 지원이 있거나 없는)을 제공한다. 도 8c에 도시된 바와 같이, 중앙 전자 콤플렉스 콤플렉스(11)의 메모리(12)는, 예를 들어, 하나 또는 그 이상의 가상 머신(26), 가상 머신을 관리하는 하이퍼바이저(27)와 같은 가상 머신 관리자, 및 프로세서 펌웨어(28)를 포함한다. 하이퍼바이저(27)의 한 예는 뉴욕 아몽크 소재의 인터내셔널 비즈니스 머신즈 코포레이션에 의해서 제공되는 z/VM® 하이퍼바이저이다. 하이퍼바이저는 호스트라고도 한다. z/VM은 적어도 하나의 관할권에서 인터내셔널 비즈니스 머신즈 코포레이션의 상표 또는 등록 상표이다.
[00530] 중앙 전자 컴플렉스의 가상 머신 지원은 각각 다른 프로그램(29)으로 작동하고, Linux® 운영 체제와 같은, 게스트 운영 체제(30)를 실행할 수 있는 많은 수의 가상 머신(26)을 작동하는 기능을 제공한다. 각각의 가상 머신(26)은 별도의 시스템으로서 기능할 수 있다. 즉, 각 가상 머신은 독립적으로 재설정되고 게스트 운영 체제를 실행하며 다른 프로그램과 함께 작동할 수 있다. 가상 머신에서 실행되는 운영 체제 또는 애플리케이션은 완전하고 완전한 시스템에 액세스할 수 있는 것처럼 보이지만 실제로는 일부만 사용될 수 있다. z/VM 및 Linux가 예로서 제공되지만, 다른 가상 머신 관리자 및/또는 운영 체제가 본 발명의 하나 또는 그 이상의 실시예들에 따라 사용될 수 있다. 등록 상표 Linux®는 전 세계적으로 해당 상표를 소유하고 있는 Linus Torvalds의 독점 사용권자인 Linux Foundation의 2차 라이선스에 따라 사용된다.
[00531] 본 발명의 하나 또는 그 이상의 실시예들을 포함하고 사용하기 위한 컴퓨팅 환경의 다른 실시예가 도 9a를 참조하여 기술된다. 이 예에서, 컴퓨팅 환경(36)은, 예컨대, 네이티브 중앙 처리 유닛(CPU)(37), 메모리(38), 및, 예를 들어, 하나 또는 그 이상의 버스들(40) 및/또는 다른 접속들을 통해, 서로 연결된 하나 또는 그 이상의 입출력 디바이스들 및/또는 인터페이스들(39)을 포함한다. 예들로서, 컴퓨팅 환경(36)은 미국 뉴욕 주 아몽크에 있는 인터내셔널 비즈니스 머신즈 코포레이션에 의해 공급되는 PowerPC® 프로세서; 미국 캘리포니아 주 팔로 알토에 있는 휼렛 패커드 사에 의해 공급되는 Intel® Itanium® II 프로세서들을 갖는 HP 수퍼돔 및/또는 인터내셔널 비즈니스 머신즈 코포레이션, 휼렛 패커드, Intel Corporation, 오라클, 및/또는 기타 회사들에 의해 공급되는 아키텍처들에 기반하는 기타 머신들을 포함할 수 있다. PowerPC는 적어도 한 국가(관할 구역)에서 인터내셔널 비즈니스 머신즈 코포레이션의 상표 또는 등록 상표이다. Itanium은 미국 및 기타 국가들에서 인텔 코포레이션 또는 그 자회사들의 상표 또는 등록 상표이다.
[00532] 네이티브 중앙 처리 유닛 (37)는 환경 내에서 처리 중에 사용되는 하나 또는 그 이상의 범용 레지스터들 및/또는 하나 또는 그 이상의 특수 목적 레지스터들과 같은 하나 또는 그 이상의 네이티브 레지스터들(41)을 포함한다. 이들 레지스터들은 특정 시점에서 환경 상태를 표시하는 정보를 포함한다.
[00533] 또한, 네이티브 중앙 처리 유닛(the native central processing unit) (37)는 메모리(38)에 저장된 명령들과 코드를 실행한다. 한 특정 예에서, 중앙 처리 유닛(the central processing unit)는 메모리(38)에 저장된 에뮬레이터 코드(42)를 실행한다. 이 코드는 한 아키텍처에서 구성된 컴퓨팅 환경이 다른 아키텍처를 에뮬레이트를 할 수 있게 한다. 예를 들어, 에뮬레이터 코드(42)를 사용하면 PowerPC 프로세서들, HP 수퍼돔 서버들 또는 다른 서버들과 같은 z/Architecture 하드웨어 아키텍처 이외의 아키텍처들을 기반으로 하는 머신들에서 z/Architecture 하드웨어 아키텍처를 에뮬레이트하고 z/Architecture 하드웨어 아키텍처를 기반으로 개발된 소프트웨어 및 명령들을 실행할 수 있다.
[00534] 에뮬레이터 코드(42)에 관한 더 상세한 설명은 도 9b를 참조하여 기술된다. 메모리(38)에 저장된 게스트 명령들(43)은 네이티브 CPU(37)의 아키텍처가 아닌 아키텍처에서 실행되도록 개발된 소프트웨어 명령들(예를 들어, 머신 명령들에 관련되는)을 포함한다. 예를 들어, 게스트 명령들(43)은 z/Architecture 하드웨어 아키텍처에 기반한 프로세서 상에서 실행하도록 설계되었지만, 대신에, 예를 들어, Intel Itanium II 프로세서일 수 있는, 네이티브 CPU (37)상에서 에뮬레이트 될 수 있다. 한 예에서, 에뮬레이터 코드(42)는 메모리(38)로부터 하나 또는 그 이상의 게스트 명령들(43)을 획득하고 획득된 명령들에 대한 로컬 버퍼링을 선택적으로 제공하기 위한 명령 페치 루틴(44)을 포함한다. 또한, 획득된 게스트 명령의 유형을 결정하고 상기 게스트 명령을 하나 또는 그 이상의 대응하는 네이티브 명령들(46)로 변환하기 위한 명령 변환 루틴(45)을 포함한다. 이 변환은, 예를 들어, 상기 게스트 명령에 의해 수행될 함수를 식별하는 것과 그 함수를 수행하기 위한 네이티브 명령(들)을 선택하는 것을 포함한다.
[00535] 또한, 에뮬레이터 코드(42)는 네이티브 명령들이 실행되도록 하는 에뮬레이션 컨트롤 루틴(47)을 포함한다. 에뮬레이션 컨트롤 루틴(47)은 네이티브 CPU (37)로 하여금 하나 또는 그 이상의 이전에 획득 된 게스트 명령들을 에뮬레이트하는 네이티브 명령들의 루틴을 실행하게 하고, 그러한 실행의 종료 시에, 다음 게스트 명령 또는 일 군의 게스트 명령들을 획득하는 것을 에뮬레이트 하기 위해 상기 명령 페치 루틴에 컨트롤을 반환(return)하게 할 수 있다. 네이티브 명령들(46)의 실행은 메모리(38)로부터 레지스터로 데이터를 로드하는 단계; 레지스터로부터 데이터를 메모리에 다시 저장하는 단계; 또는 변환 루틴에 의해 결정되는, 어떤 유형의 산술 또는 논리 연산을 수행하는 단계를 포함할 수 있다.
[00536] 각 루틴은, 예를 들어, 소프트웨어로 구현되고, 상기 소프트웨어는 메모리에 저장되며, 네이티브 중앙 처리 유닛(37)에 의해 실행된다. 다른 예들에서, 하나 또는 그 이상의 루틴들 또는 연산들은 펌웨어, 하드웨어, 소프트웨어 또는 이들의 조합으로 구현된다. 에뮬레이트된 프로세서의 레지스터들은 상기 네이티브 CPU의 레지스터들(41)을 사용하여 또는 메모리(38) 내의 위치들을 사용하여 에뮬레이트 될 수 있다. 실시 예들에서, 게스트 명령들(43), 네이티브 명령들 (46) 및 에뮬레이터 코드(42)는 동일한 메모리 내에 상주하거나 또는 다른 메모리 디바이스들 사이에서 분산될 수 있다.
[00537] 에뮬레이트될 수 있는 예시적 명령은, 본 발명의 일 실시예에 따라, 본 명세서에 기술된, 신경망 보조 처리 명령(the Neural Network Assist Processing instruction)을 포함한다. 또한, 본 발명의 하나 또는 그 이상의 실시예들에 따라 다른 명령들 및/또는 텐서 처리의 하나 또는 그 이상의 실시예들이 에뮬레이트될 수 있다.
[00538] 전술한 컴퓨팅 환경들은 사용될 수 있는 컴퓨팅 환경들의 예들일 뿐이다. 파티션되지 않은 환경들, 파티션된 환경들, 클라우드 환경들 및/또는 에뮬레이트된 환경들을 포함하되 이에 국한되지 않는 다른 환경들이 사용될 수 있다; 실시예들는 어느 하나의 환경으로 제한되지 않는다. 여기에서 컴퓨팅 환경들의 다양한 예들이 설명되지만, 본 발명의 하나 또는 그 이상의 실시예들은 많은 유형의 환경들과 함께 사용될 수 있다. 여기에 제공된 컴퓨팅 환경들은 단지 예들일 뿐이다.
[00539] 각각의 컴퓨팅 환경은 본 발명의 하나 또는 그 이상의 실시예들을 포함하도록 구성될 수 있다.
[00540] 본 발명의 하나 또는 그 이상의 실시 예들은 클라우드 컴퓨팅과 관련될 수 있다.
[00541] 본 명세서는 클라우드 컴퓨팅에 관해서 상세한 설명들을 포함하지만, 여기서 기술된 그러한 가르침들의 구현은 클라우드 컴퓨팅 환경에만 한정되는 것은 아님을 이해하여야 한다. 오히려, 본 발명의 실시 예들은 지금 알려져 있거나 또는 나중에 개발될 모든 다른 유형의 컴퓨팅 환경과 함께 구현될 수 있다.
[00542] 클라우드 컴퓨팅은, 최소한의 관리 노력 또는 서비스 제공자와의 상호작용으로 빠르게 제공되고 해제될 수 있는, 구성 가능한(configurable) 컴퓨팅 자원들(예를 들어, 네트워크, 네트워크 대역폭, 서버, 처리, 메모리, 스토리지, 애플리케이션, 가상 머신, 및 서비스)의 공유 풀에 대한 편리한 주문형(on-demand) 네트워크 액세스를 가능하게 하는 서비스 전달 모델이다. 이 클라우드 모델은 적어도 5가지의 특성(characteristics), 적어도 3가지 서비스 모델(service models), 및 적어도 4가지 배치 모델(deployment models)을 포함할 수 있다.
[00543] 특성들은 다음과 같다:
[00544] 주문형 셀프-서비스(On-demand self-service): 클라우드 소비자는, 서비스 제공자와의 인적 상호작용을 필요로 하지 않고 필요한 만큼 자동적으로, 서버 시간(server time) 및 네트워크 스토리지 같은 컴퓨팅 기능들을 일방적으로 제공(provision)할 수 있다.
[00545] 광역 네트워크 액세스(Broad network access): 혼성의 씬 또는 씩 클라이언트 플랫폼들(heterogeneous thin or thick client platforms)(예를 들어, 모바일폰들, 랩탑들, 및 PDA들)에 의한 사용을 장려하는 표준 메커니즘들을 통해 액세스되는 기능들을 네트워크를 통해서 이용할 수 있다.
[00546] 자원 풀링(Resource pooling): 제공자의 컴퓨팅 자원들은 멀티-테넌트 모델(a multi-tenant model)을 이용하여, 각기 다른 물리적 및 가상 자원들을 요구(demand)에 따라 동적으로 할당 및 재할당하면서, 다수의 소비자들에게 서비스할 수 있도록 풀에 넣어둔다(pooled). 소비자는 일반적으로 제공된 자원들의 정확한 위치를 컨트롤할 수 없거나 그에 대한 지식이 없지만 더 높은 추상 레벨에서(예를 들어, 국가, 주, 또는 데이터센터) 위치를 명시할 수 있다는 점에서 위치 독립성이 있다.
[00547] 기민한 탄력성(Rapid elasticity): 용량들(capabilities)이 기민하게 탄력적으로 제공되어 (어떤 경우엔 자동으로) 신속히 규모를 확장할 수도 있고(scale out) 그리고 탄력적으로 해제되어 신속히 규모를 축소할 수도 있다(scale in). 소비자에게 제공할 수 있는 가능성이 종종 무제한이고 언제든지 원하는 수량으로 구매할 수 있는 것처럼 보인다.
[00548] 측정 가능한 서비스(Measured service): 클라우드 시스템들은 자원 사용을 자동으로 컨트롤하고 최적화하는데, 서비스의 유형(예를 들어, 스토리지, 처리, 대역폭, 및 활성 사용자 계정)에 적절한 추상화 레벨에서(at some level of abstraction) 계측 기능을 이용하여서 그렇게 한다. 자원 사용량은 모니터되고, 컨트롤되고, 그리고 보고될 수 있으며 이로써 이용하는 서비스의 제공자와 사용자 모두에게 투명성을 제공한다.
[00549] 서비스 모델들(Service Models)은 다음과 같다:
[00550] 소프트웨어 서비스(Software as a Service)(SaaS): 소비자에게 제공되는 서비스는 클라우드 인프라스트럭처 상에서 실행되는 제공자의 애플리케이션들을 사용하게 해주는 것이다. 애플리케이션들은 웹 브라우저(예를 들어, 웹기반 이메일) 같은 씬(thin) 클라이언트 인터페이스를 통해 여러 클라이언트 장치들에서 액세스 가능하다. 소비자는 네트워크, 서버들, 운영 체제들, 스토리지, 또는 개별 애플리케이션 능력들을 포함하는 하부 클라우드 인프라스트럭처를 관리하거나 컨트롤하지 않는다. 단, 제한된 사용자-특화 애플리케이션 구성 세팅들은 예외로서 가능하다.
[00551] 플랫폼 서비스(Platform as a Service)(PaaS): 소비자에게 제공되는 서비스는 제공자에 의해 지원되는 프로그래밍 언어들 및 도구들을 이용하여 생성된 소비자-생성 또는 획득 애플리케이션들을 클라우드 인프라스트럭처에 배치하게 해주는 것이다. 소비자는 네트워크, 서버들, 운영 체제들, 또는 스토리지를 포함하는 하부 클라우드 인프라스트럭처를 관리하거나 컨트롤하지 않는다. 그러나 배치된 애플리케이션들에 대해서 그리고 가능한 경우 애플리케이션 호스팅 환경 구성들에 대해서 컨트롤할 수 있다.
[552] 인프라스트럭처 서비스(Infrastructure as a Service)(IaaS): 소비자에게 제공되는 서비스는 처리, 스토리지, 네트워크, 및 기타 기본 컴퓨팅 자원들을 제공하여 주는 것이며, 여기서 소비자는 임의의 소프트웨어를 배치 및 실행할 수 있고, 이 소프트웨어에는 운영 체제들과 애플리케이션들이 포함될 수 있다. 소비자는 하부 클라우드 인프라스트럭처를 관리하거나 컨트롤하지 않지만, 운영 체제들, 스토리지, 배치된 애플리케이션들, 및 가능한 경우 선택된 네트워킹 컴포넌트들의 제한적인 컨트롤(예를 들어, 호스트 방화벽들)에 대하여 컨트롤할 수 있다.
[00553] 배치 모델들(Deployment Models)은 다음과 같다:
[00554] 사설 클라우드(Private cloud): 클라우드 인프라스트럭처는 오직 한 조직(an organization)을 위해서 운영되고, 그 조직 또는 제3자에 의해 관리될 수 있으며 옥내(on-premises) 또는 옥외(off-premises)에 위치할 수 있다.
[00555] 커뮤니티 클라우드(Community cloud): 클라우드 인프라스트럭처는 여러 조직들에 의해 공유되고 관심사(예를 들어, 선교, 보안 요건, 정책, 및 규정 준수 심사)를 공유하는 특정 커뮤니티를 지원하며, 여러 조직들 또는 제3자에 의해 관리될 수 있으며 옥내(on-premises) 또는 옥외(off-premises)에 위치할 수 있다.
[00556] 공공 클라우드(Public cloud): 클라우드 인프라스트럭처는 일반 대중 또는 대규모 산업 집단에서 이용할 수 있으며 클라우드 서비스를 판매하는 조직이 소유한다.
[00557] 하이브리드 클라우드(Hybrid cloud): 클라우드 인프라스트럭처는 둘 또는 그 이상의 클라우드들(사설, 커뮤니티, 또는 공공)이 혼합된 구성이며, 이들은 고유한 주체들로 있지만 데이터 및 애플리케이션 이식가능성(portability)을 가능하게 해주는 표준화된 또는 소유권 있는 기술(예를 들어, 클라우드들 사이의 부하 균형을 위한 클라우드 버스팅(cloud bursting))에 의해 서로 결합되어 있다.
[00558] 클라우드 컴퓨팅 환경은 상태 비보존(statelessness), 낮은 결합(low coupling), 모듈 방식(modularity), 및 의미적 상호운용성(semantic interoperability)에 집중하는 서비스를 지향한다. 클라우드 컴퓨팅의 중심에는 상호 연결된 노드들의 네트워크를 포함하는 인프라스트럭처가 있다.
[00559] 이제 도 10을 참조하면, 예시적인 클라우드 컴퓨팅 환경(50)이 도시된다. 도시된 바와 같이, 클라우드 컴퓨팅 환경(50)은 예를 들어 개인 휴대 정보 단말기(PDA) 또는 휴대폰(54A), 데스크탑 컴퓨터(54B), 랩탑 컴퓨터(54C), 및/또는 자동차용 컴퓨터 시스템(54N)과 통신할 수 있는 것과 같이, 클라우드 소비자가 사용하는 로컬 컴퓨팅 디바이스가 하나 또는 그 이상의 클라우드 컴퓨팅 노드들(52)을 포함한다. 노드들(52)은 서로 통신할 수 있다. 이들은 여기에 기술된 바와 같은 사설, 커뮤니티, 공공, 또는 하이브리드 클라우드들 또는 이들의 조합 등의 하나 또는 그 이상의 네트워크들에서 물리적으로 또는 가상으로 그룹화될 수 있다(도시되지 않음). 이것은 클라우드 소비자가 로컬 컴퓨팅 장치 상에 자원들을 유지할 필요가 없게 클라우드 컴퓨팅 환경(50)이 인프라스트럭처, 플랫폼들 및/또는 소프트웨어를 서비스로서 제공할 수 있게 해준다. 도 10에 도시된 컴퓨팅 장치들(54A-N)의 유형들은 단지 예시의 목적으로 기술한 것이며 컴퓨팅 노드들(52)과 클라우드 컴퓨팅 환경(50)은 모든 유형의 네트워크 및/또는 네트워크 주소지정가능 연결을 통해서 (예를 들어, 웹 브라우저를 사용하여) 모든 유형의 컴퓨터화된 디바이스와 통신할 수 있다는 것을 이해해야 한다.
[00560] 이제 도 11을 참조하면, 클라우드 컴퓨팅 환경(50) (도 10)에 의해 제공되는 일 세트의 기능별 추상화 계층들이 도시된다. 도 11에 도시된 컴포넌트들, 계층들, 및 기능들은 단지 예시의 목적이며 본 발명의 바람직한 실시 예들은 이것에 한정되지 않는다는 것을 미리 이해해야 한다. 도시된 바와 같이, 다음의 계층들과 그에 대응하는 기능들이 제공된다:
[00561] 하드웨어 및 소프트웨어 계층(60)은 하드웨어 및 소프트웨어 컴포넌트들을 포함한다. 하드웨어 컴포넌트들의 예들에는: 메인프레임들(61); RISC(Reduced Instruction Set Computer) 아키텍처 기반 서버들(62); 서버들(63); 블레이드 서버들(64); 스토리지 디바이스들(65); 그리고 네트워크 및 네트워킹 컴포넌트들(66)이 포함된다. 일부 실시 예들에서, 소프트웨어 컴포넌트들은 네트워크 애플리케이션 서버 소프트웨어(67) 및 데이터베이스 소프트웨어(68)를 포함한다.
[00562] 가상화 계층(70)은 추상화 계층을 제공하며 이로부터 다음의 가상 주체들의 예들이 제공될 수 있다: 가상 서버들(71); 가상 스토리지(72); 가상 사설 네트워크를 포함하는, 가상 네트워크들(73); 가상 애플리케이션들 및 운영 체제들(74); 및 가상 클라이언트들(75).
[00563] 한 예에서, 관리 계층(80)은 아래에 기술하는 기능들을 제공한다. 자원 제공(Resource provisioning)(81)은 클라우드 컴퓨팅 환경 내에서 작업들을 수행하는 데 이용되는 컴퓨팅 자원들 및 기타 자원들의 동적 조달을 제공한다. 계측 및 가격 책정(Metering and Pricing)(82)은 자원들이 클라우드 컴퓨팅 환경 내에서 이용될 때 비용 추적, 및 이 자원들의 소비에 대한 요금 청구 또는 송장을 제공한다. 한 예에서, 이 자원들은 애플리케이션 소프트웨어 라이센스를 포함할 수 있다. 보안(Security)은 데이터 및 기타 자원들에 대한 보호뿐 아니라 클라우드 소비자들과 작업들에 대한 신원 확인을 제공한다. 사용자 포털(User portal)(83)은 소비자들 및 시스템 관리자들에게 클라우드 컴퓨팅 환경에 대한 액세스를 제공한다. 서비스 레벨 관리(Service level management)(84)는 요구되는 서비스 레벨이 충족되도록 클라우드 컴퓨팅 자원 할당 및 관리를 제공한다. 서비스 레벨 협약서(SLA) 기획 및 충족(planning and fulfillment)(85)은 SLA에 부합하는 예상되는 미래 요건에 맞는 클라우드 컴퓨팅 자원들의 사전-배치(pre-arrangement) 및 조달(procurement)을 제공한다.
[00564] 워크로드 계층(90)은 클라우드 컴퓨팅 환경이 이용될 수 있는 기능들의 예들을 제공한다. 이 계층에서 제공될 수 있는 워크로드들과 기능들의 예들은 다음과 같다: 맵핑 및 네비게이션(91); 소프트웨어 개발 및 라이프사이클 관리(92); 가상 교실 교육 전달(93); 데이터 분석 처리(94); 트랜잭션 처리(95); 및 텐서 및/또는 신경망 보조 처리(tensor and/or neural network assist processing)(96).
[00565] 본 발명의 실시 예들은 시스템, 방법, 및/또는 통합의 모든 가능한 기술적 세부 레벨에서 컴퓨터 프로그램 제품이 될 수 있다. 컴퓨터 프로그램 제품은 컴퓨터 판독 가능 스토리지 매체(또는 미디어)를 포함할 수 있으며, 이 매체 상에 프로세서가 본 발명의 실시 예들을 수행하도록 하는 컴퓨터 판독 가능 프로그램 명령들을 갖는다.
[00566] 상기 컴퓨터 판독 가능 스토리지 매체는 명령 실행 장치에 의해 사용될 명령들을 유지 및 저장할 수 있는 유형의(tangible) 디바이스일 수 있다. 상기 컴퓨터 판독 가능 스토리지 매체는, 예를 들면, 전자 스토리지 디바이스, 자기 스토리지 디바이스, 광 스토리지 디바이스, 전자기 스토리지 디바이스, 반도체 스토리지 디바이스, 또는 전술한 것들의 모든 적절한 조합일 수 있으며, 그러나 이에 한정되지는 않는다. 컴퓨터 판독 가능 스토리지 매체의 더 구체적인 예들의 비포괄적인 목록에는 다음이 포함될 수 있다: 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM), 판독-전용 메모리(ROM), 소거 및 프로그램가능 판독-전용 메모리(EPROM 또는 플래시 메모리), 정적 랜덤 액세스 메모리(SRAM), 휴대용 컴팩트 디스크 판독-전용 메모리(CD-ROM), 디지털 다용도 디스크(DVD), 메모리 스틱, 플로피 디스크, 천공-카드들 또는 명령들이 기록된 홈에 있는 융기된 구조들 같이 머신적으로 인코드 된 장치, 및 전술한 것들의 모든 적절한 조합. 본 명세서에서 사용될 때, 컴퓨터 판독 가능 스토리지 매체는 무선 전파들이나 다른 자유롭게 전파되는 전자기파들, 도파관이나 기타 전송 매체(예를 들어, 광섬유 케이블을 통해 전달되는 광 펄스들)를 통해 전파되는 전자기파들, 또는 선(wire)을 통해 전송되는 전기 신호들 같이 그 자체로 일시적인(transitory) 신호들로 해석되지는 않는다.
[00567] 본 명세서에 기술되는 컴퓨터 판독 가능 명령들은, 예를 들어, 인터넷, 근거리 통신망, 광역 통신망 및/또는 무선 네트워크 등의 통신망(네트워크)을 통해 컴퓨터 판독 가능 스토리지 매체로부터 각각 컴퓨팅/처리 디바이스들로 또는 외부 스토리지 디바이스로부터 외부 컴퓨터로 다운로드 될 수 있다. 상기 통신망은 구리 전송 케이블들, 광 전송 섬유들, 무선 전송, 라우터들, 방화벽들, 스위치들, 게이트웨이 컴퓨터들 및/또는 엣지 서버들을 포함할 수 있다. 각 컴퓨팅/처리 유닛 내 네트워크 어댑터 카드 또는 네트워크 인터페이스는 상기 통신망으로부터 컴퓨터 판독 가능 프로그램 명령들을 수신하고 그 컴퓨터 판독 가능 프로그램 명령들을 각각의 컴퓨팅/처리 디바이스 내의 컴퓨터 판독 가능 스토리지 매체에 저장하기 위해 전송한다.
[00568] 본 발명의 연산들을 실행하기 위한 컴퓨터 판독 가능 프로그램 명령들은 Smalltalk, C++ 또는 그와 유사 언어 등의 객체 지향 프로그래밍 언어와 "C" 프로그래밍 언어 또는 그와 유사한 프로그래밍 언어 등의 종래의 절차적 프로그래밍 언어들을 포함하여, 하나 또는 그 이상의 프로그래밍 언어들을 조합하여 작성된(written) 어셈블러 명령들, 명령-세트-아키텍처(ISA) 명령들, 머신 명령들, 머신 종속 명령들, 마이크로코드, 펌웨어 명령들, 상태-셋팅 데이터, 집적회로를 위한 구성 데이터, 또는 소스 코드나 목적 코드일 수 있다. 상기 컴퓨터 판독 가능 프로그램 명령들은 전적으로 사용자의 컴퓨터상에서, 부분적으로 사용자의 컴퓨터상에서, 독립형(stand-alone) 소프트웨어 패키지로서, 부분적으로 사용자의 컴퓨터상에서 그리고 부분적으로 원격 컴퓨터상에서 또는 전적으로 원격 컴퓨터나 서버상에서 실행될 수 있다. 위에서 마지막의 경우에, 원격 컴퓨터는 근거리 통신망(LAN) 또는 광역 통신망(WAN)을 포함한 모든 종류의 네트워크를 통해서 사용자의 컴퓨터에 접속될 수 있고, 또는 이 접속은 (예를 들어, 인터넷 서비스 제공자를 이용한 인터넷을 통해서) 외부 컴퓨터에 이루어질 수도 있다. 일부 실시 예들에서, 예를 들어 프로그램 가능 로직 회로, 필드-프로그램 가능 게이트 어레이들(FPGA), 또는 프로그램 가능 로직 어레이들(PLA)을 포함한 전자 회로는 본 발명의 실시 예들을 수행하기 위해 전자 회로를 맞춤화하도록 상기 컴퓨터 판독 가능 프로그램 명령들의 상태 정보를 활용하여 상기 컴퓨터 판독 가능 프로그램 명령들을 실행할 수 있다.
[00569] 본 발명의 특징들이 본 발명의 실시 예들에 따른 방법들, 장치들(시스템들), 및 컴퓨터 프로그램 제품들의 플로 차트 예시도들 및/또는 블록도들을 참조하여 기술된다. 플로 차트 예시도들 및/또는 블록도들의 각 블록과 플로 차트 예시도들 및/또는 블록도들 내 블록들의 조합들은 컴퓨터 판독 가능 프로그램 명령들에 의해 구현될 수 있다는 것을 이해할 수 있을 것이다.
[00570] 이들 컴퓨터 판독 가능 프로그램 명령들은 범용 컴퓨터, 특수목적용 컴퓨터, 또는 기타 프로그램가능 데이터 처리 유닛의 프로세서에 제공되어 머신(machine)을 생성하고, 그렇게 하여 그 명령들이 상기 컴퓨터 또는 기타 프로그램가능 데이터 처리 유닛의 프로세서를 통해서 실행되어, 상기 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현하기 위한 수단을 생성할 수 있다. 이들 컴퓨터 판독 가능 프로그램 명령들은 또한 컴퓨터 판독 가능 스토리지 매체에 저장될 수 있으며, 컴퓨터, 프로그램가능 데이터 처리 유닛 및/또는 기타 디바이스들에 지시하여 명령들이 저장된 상기 컴퓨터 판독 가능 스토리지 매체가 상기 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능/동작의 특징들을 구현하는 명령들을 포함하는 제조품(an article of manufacture)을 포함하도록 특정한 방식으로 기능하게 할 수 있다.
[00571] 상기 컴퓨터 판독 가능 프로그램 명령들은 또한 컴퓨터, 기타 프로그램가능 데이터 처리 유닛, 또는 다른 디바이스에 로드 되어, 상기 컴퓨터, 기타 프로그램가능 장치 또는 다른 디바이스에서 일련의 동작 단계들이 수행되게 하여 컴퓨터 구현 프로세스를 생성하며, 그렇게 하여 상기 컴퓨터, 기타 프로그램가능 장치, 또는 다른 디바이스 상에서 실행되는 명령들이 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현할 수 있다.
[00572] 도면들 내 플로 차트 및 블록도들은 본 발명의 여러 실시 예들에 따른 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍처, 기능(functionality), 및 연산(operation)을 예시한다. 이와 관련하여, 상기 플로 차트 또는 블록도들 내 각 블록은 상기 명시된 논리적 기능(들)을 구현하기 위한 하나 또는 그 이상의 실행 가능한 명령들을 포함한 모듈, 세그먼트 또는 명령들의 일부분을 나타낼 수 있다. 일부 다른 실시 예들에서, 상기 블록에 언급되는 기능들은 도면들에 언급된 순서와 다르게 일어날 수도 있다. 예를 들면, 연속으로 도시된 두 개의 블록들은 실제로는 사실상 동시에 실행될 수도 있고, 또는 이 두 블록들은 때때로 관련된 기능에 따라서는 역순으로 실행될 수도 있다. 블록도들 및/또는 플로 차트 예시도의 각 블록, 및 블록도들 및/또는 플로 차트 예시도 내 블록들의 조합들은 특수목적용 하드웨어 및 컴퓨터 명령들의 명시된 기능들 또는 동작들, 또는 이들의 조합들을 수행하는 특수목적용 하드웨어-기반 시스템들에 의해 구현될 수 있다는 것에 또한 주목해야 한다.
[00573] 전술한 것에 추가하여, 본 발명의 하나 또는 그 이상의 실시 예들은 고객 환경들의 관리를 공급하는 서비스 제공자에 의해 제공, 공급, 배치, 관리, 서비스 등이 될 수 있다. 예를 들면, 서비스 제공자는 하나 또는 그 이상의 고객들을 위해 본 발명의 하나 또는 그 이상의 실시 예들을 수행하는 컴퓨터 코드 및/또는 컴퓨터 인프라스트럭처의 제작, 유지, 지원 등을 할 수 있다. 그 대가로, 서비스 제공자는, 예를 들어, 가입제(subscription) 및/또는 수수료 약정에 따라 고객으로부터 대금을 수령할 수 있다. 추가적으로 또는 선택적으로, 서비스 제공자는 하나 또는 그 이상의 제3자들에게 광고 컨텐츠를 판매하고 대금을 수령할 수 있다.
[00574] 한 예에서, 본 발명의 하나 또는 그 이상의 실시 예들을 수행하기 위해 하나의 애플리케이션이 배치될 수 있다. 한 예로서, 하나의 애플리케이션의 배치는 본 발명의 하나 또는 그 이상의 실시 예들을 수행하기 위해 동작 가능한 컴퓨터 인프라스트럭처를 제공하는 것을 포함할 수 있다.
[00575] 추가의 실시 예로서, 컴퓨터 판독 가능 코드를 컴퓨팅 시스템으로 통합하는 것을 포함하는 컴퓨팅 인프라스트럭처가 배치될 수 있으며, 상기 컴퓨팅 인프라스트럭처에서 상기 코드는 상기 컴퓨팅 시스템과 결합하여 본 발명의 하나 또는 그 이상의 실시 예들을 수행할 수 있다.
[00576] 추가의 실시 예로서, 컴퓨터 판독 가능 코드를 컴퓨터 시스템으로 통합시키는 것을 포함하는 컴퓨팅 인프라스트럭처를 통합하기 위한 프로세스가 제공될 수 있다. 상기 컴퓨터 시스템은 컴퓨터 판독 가능 매체를 포함하고, 상기 컴퓨터 시스템에서 컴퓨터 매체는 본 발명의 하나 또는 그 이상의 실시 예들을 포함한다. 상기 코드는 상기 컴퓨터 시스템과 결합하여 본 발명의 하나 또는 그 이상의 실시 예들을 수행할 수 있다.
[00577] 위에서 다양한 실시 예들이 기술되었지만, 이들은 단지 예시들일 뿐이다. 예를 들면, 다른 아키텍처들의 컴퓨팅 환경들이 본 발명의 하나 또는 그 이상의 실시 예들을 포함하고 사용하는 데 사용될 수 있다. 또한, 다른 명령들이나 동작들이 사용될 수 있다. 또한, 다른 유형의 레지스터들 및/또는 다른 레지스터가 사용될 수 있다. 많은 변형들이 가능하다.
[00578] 다양한 실시예들이 본 명세서에 기술되어 있다. 또한, 본 발명의 실시예들의 정신으로부터 벗어나지 않는 범위 내에서 다양한 변형들이 가능하다. 달리 불일치하지 않는 한, 여기에 기술된 각 실시예 또는 특징 및 그 변형들은 모든 다른 실시예 또는 특징과 결합 가능할 수 있음에 유의해야 한다.
[00579] 또한, 다른 유형의 컴퓨팅 환경들도 유익을 얻을 수 있고 사용될 수 있다. 예로서, 프로그램 코드를 저장 및/또는 실행하기에 적합한 데이터 처리 시스템이 사용될 수 있으며, 이 시스템은 시스템 버스를 통해서 메모리 엘리멘트들에 직접적으로 또는 간접적으로 결합된 적어도 두 개의 프로세서를 포함한다. 상기 메모리 엘리멘트들은, 예를 들어 프로그램 코드의 실제 실행 동안 사용되는 로컬 메모리, 대용량 스토리지(bulk storage), 및 코드가 실행 동안에 대용량 스토리지로부터 검색되어야 하는 횟수를 줄이기 위해 적어도 일부 프로그램 코드의 임시 스토리지(temporary storage)를 제공하는 캐시 메모리를 포함한다.
[00580] 입력/출력 또는 I/O 디바이스들(키보드들, 디스플레이들, 포인팅 디바이스들, DASD, 테이프, CD들, DVD들, 썸 드라이브들 및 기타 메모리 매체 등을 포함하나 이에 한정되지는 않음)은 직접 또는 중개(intervening) I/O 컨트롤기들을 통해서 시스템에 결합될 수 있다. 네트워크 어댑터 또한 상기 시스템에 결합되어 데이터 처리 시스템이 중개하는 사설 또는 공공 네트워크를 통해서 기타 데이터 처리 시스템 또는 원격 포인터 또는 스토리지 디바이스에 결합되는 것을 가능하게 한다. 모뎀들, 케이블 모뎀들, 및 이더넷 카드들은 이용 가능한 유형의 네트워크 어댑터들의 단지 일부이다.
[00581] 본 명세서에서 사용된 용어들은 단지 본 발명의 특정 실시 예들을 기술할 목적으로 사용된 것이지 한정하려는 의도로 사용된 것은 아니다. 본 명세서에서 사용할 때, 단수 형태 “하나", "한", "그"는 그 컨텍스트에서 그렇지 않은 것으로 명확히 명시되어 있지 않으면, 복수 형태도 또한 포함할 의도로 기술된 것이다. 또한, "포함한다" 및/또는 "포함하는" 이라는 말들은 본 명세서에서 사용될 때, 언급되는 특징들, 정수들, 단계들, 연산들, 엘리멘트들, 및/또는 컴포넌트들의 존재를 명시하지만, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 연산들, 엘리멘트들, 컴포넌트들 및/또는 이들의 그룹들의 존재 또는 추가를 배제하는 것은 아니라는 것을 이해할 수 있을 것이다.
[00582] 이하의 청구항들에서, 대응하는 구조들(structures), 재료들(materials), 동작들(acts), 및 모든 수단의 등가물들 또는 단계 플러스 기능 엘리멘트들은, 만일 있다면, 구체적으로 청구되는 다른 청구된 엘리멘트들과 조합하여 그 기능을 수행하기 위한 구조, 재료, 또는 동작을 포함할 의도가 있다. 본 발명의 하나 또는 그 이상의 실시 예들에 대한 설명은 예시와 설명의 목적으로 제공되는 것이며, 개시되는 형태로 빠짐없이 만들어지거나 한정하려는 의도가 있는 것은 아니다. 이 기술 필드에서 통상의 지식을 가진 자라면 많은 수정들 및 변형들이 있을 수 있다는 것을 알 수 있다. 본 발명의 실시 예는 여러 특징들 및 실제 응용을 가장 잘 설명하기 위해 그리고 고려되는 특정 용도에 적합하게 여러 수정들을 갖는 다양한 실시 예들을 이 기술 필드에서 통상의 지식을 가진 자들이 이해할 수 있도록 하기 위해, 선택되고 기술되었다.

Claims (20)

  1. 컴퓨팅 환경 내에서 처리를 용이하게 하기 위한 컴퓨터 프로그램 제품에 있어서, 상기 컴퓨터 프로그램 제품은:
    하나 또는 그 이상의 컴퓨터 판독 가능 저장 매체 및 방법을 수행하기 위해 상기 하나 또는 그 이상의 컴퓨터 판독 가능 저장 매체에 집합적으로 저장된 프로그램 명령을 포함하고, 상기 방법은:
    제1 선택 차원의 텐서(a tensor of a first select dimension)를 획득하는 단계; 및
    제2 선택 차원의 하나 또는 그 이상의 서브-텐서들을 제공하기 위해 상기 텐서를 재포맷하는 단계(reformatting)를 포함하고, 상기 재포맷하는 단계는:
    상기 텐서를 나타내기 위해 사용될 다수의 서브-텐서들을 결정하는 단계;
    상기 다수의 서브-텐서들을 생성하는 단계(creating) - 서브-텐서는 메모리 유닛의 경계 상에서 시작함-; 및
    상기 다수의 서브-텐서들 내에 맞도록(fit) 상기 텐서의 데이터를 재조정하는 단계(rearranging)를 포함하는
    컴퓨터 프로그램 제품.
  2. 제 1항에 있어서, 상기 다수의 서브-텐서들을 결정하는 단계는, 적어도, 상기 텐서에 포함된 다수의 엘리멘트 값들과 상기 메모리 유닛의 크기에 기초하여 하나 또는 그 이상의 실 함수들(ceil functions)을 사용하는 단계를 포함하는
    컴퓨터 프로그램 제품.
  3. 제 1항에 있어서, 상기 다수의 서브-텐서들 중 적어도 하나의 서브-텐서에 대한 데이터를 재조정하는 단계는 상기 적어도 하나의 서브-텐서를 완성하기 위해(complete) 적어도 하나의 차원에서 상기 다수의 서브-텐서들 중 적어도 하나의 서브-텐서를 패딩하는 단계(padding)를 포함하는
    컴퓨터 프로그램 제품.
  4. 제 1항에 있어서, 상기 다수의 서브-텐서들 중 선택된 서브-텐서에 대한 데이터를 재조정하는 단계는:
    상기 텐서를 나타내는 복수의 행렬들에서 동일한 위치의 데이터를 선택하는 단계;
    상기 선택된 서브-텐서의 한 행에서 선택된 데이터를 배치하는 단계(placing); 및
    상기 복수의 행렬들의 복수의 위치들에 대해 상기 선택하는 단계 및 배치하는 단계를 반복하는 단계를 포함하는
    컴퓨터 프로그램 제품.
  5. 제 4항에 있어서, 상기 데이터 재조정하는 단계는:
    상기 선택된 서브-텐서의 하나 또는 그 이상의 행들이 상기 선택된 서브-텐서의 크기에 의해 수용되는 것보다 더 적은 데이터를 갖는 것에 기초하여, 상기 선택된 서브-텐서의 하나 또는 그 이상의 행들을 패딩하는 단계; 및
    상기 선택된 서브-텐서가 상기 선택된 서브-텐서의 크기에 의해 수용되는 것보다 더 적은 행들을 갖는 것에 기초하여, 상기 선택된 서브-텐서를 하나 또는 그 이상의 추가 패딩된 행들(additional padded rows)로 패딩하는 단계를 더 포함하는
    컴퓨터 프로그램 제품.
  6. 제 1항 내지 제 5항의 항들 중 어느 한 항에 있어서, 상기 메모리 유닛은 메모리 페이지이고, 상기 메모리 유닛의 경계는 페이지 경계인
    컴퓨터 프로그램 제품.
  7. 제 1항 내지 제 6항의 항들 중 어느 한 항에 있어서, 상기 방법은 텐서 계산들에 사용하기 위해 프로세서에 하나 또는 그 이상의 서브-텐서들을 제공하는 단계를 더 포함하는
    컴퓨터 프로그램 제품.
  8. 제 7항에 있어서, 상기 하나 또는 그 이상의 서브-텐서들을 제공하는 단계는 하나의 연산으로(in one operation) 상기 하나 또는 그 이상의 서브-텐서들의 데이터를 저장하는 데(store) 사용되기 위해 상기 프로세서에 주소 정보 및 상기 제2 선택 차원에 관한 정보를 제공하는 단계를 포함하는
    컴퓨터 프로그램 제품.
  9. 제 7항에 있어서, 상기 하나 또는 그 이상의 서브-텐서들을 제공하는 단계는 하나의 연산으로(in one operation) 상기 하나 또는 그 이상의 서브-텐서들의 데이터를 로드하는 데(load) 사용되기 위해 상기 프로세서에 주소 정보 및 상기 제2 선택 차원에 관한 정보를 제공하는 단계를 포함하는
    컴퓨터 프로그램 제품.
  10. 제 1항 내지 제 9항의 항들 중 어느 한 항에 있어서, 상기 제1 선택 차원은 4-차원들이고, 상기 제2 선택 차원은 2-차원들이며, 하나 또는 그 이상의 2-차원 서브-텐서들은 하나의 4-차원 텐서를 나타내는
    컴퓨터 프로그램 제품.
  11. 컴퓨팅 환경 내에서 처리를 용이하게 하기 위한 컴퓨터 시스템에 있어서, 상기 컴퓨터 시스템은:
    메모리(a memory); 및
    상기 메모리와 통신하는 프로세서를 포함하고, 상기 컴퓨터 시스템은 방법을 수행하도록 구성되며, 상기 방법은:
    제1 선택 차원의 텐서(a tensor of a first select dimension)를 획득하는 단계; 및
    제2 선택 차원의 하나 또는 그 이상의 서브-텐서들을 제공하기 위해 상기 텐서를 재포맷하는 단계(reformatting)를 포함하고, 상기 재포맷하는 단계는:
    상기 텐서를 나타내기 위해 사용될 다수의 서브-텐서들을 결정하는 단계;
    상기 다수의 서브-텐서들을 생성하는 단계(creating) - 서브-텐서는 메모리 유닛의 경계 상에서 시작함-; 및
    상기 다수의 서브-텐서들 내에 맞도록(fit) 상기 텐서의 데이터를 재조정하는 단계(rearranging)를 포함하는
    컴퓨터 시스템.
  12. 제 11항에 있어서, 상기 다수의 서브-텐서들 중 선택된 서브-텐서에 대한 데이터를 재조정하는 단계는:
    상기 텐서를 나타내는 복수의 행렬들에서 동일한 위치의 데이터를 선택하는 단계;
    상기 선택된 서브-텐서의 한 행에서 선택된 데이터를 배치하는 단계(placing); 및
    상기 복수의 행렬들의 복수의 위치들에 대해 상기 선택하는 단계 및 배치하는 단계를 반복하는 단계를 포함하는
    컴퓨터 시스템.
  13. 제 12항에 있어서, 상기 데이터 재조정하는 단계는:
    상기 선택된 서브-텐서의 하나 또는 그 이상의 행들이 상기 선택된 서브-텐서의 크기에 의해 수용되는 것보다 더 적은 데이터를 갖는 것에 기초하여, 상기 선택된 서브-텐서의 하나 또는 그 이상의 행들을 패딩하는 단계; 및
    상기 선택된 서브-텐서가 상기 선택된 서브-텐서의 크기에 의해 수용되는 것보다 더 적은 행들을 갖는 것에 기초하여, 상기 선택된 서브-텐서를 하나 또는 그 이상의 추가 패딩된 행들(additional padded rows)로 패딩하는 단계를 더 포함하는
    컴퓨터 시스템.
  14. 제 11항에 있어서, 상기 방법은 텐서 계산들에 사용하기 위해 프로세서에 하나 또는 그 이상의 서브-텐서들을 제공하는 단계를 더 포함하고, 상기 하나 또는 그 이상의 서브-텐서들을 제공하는 단계는 하나의 연산으로(in one operation) 상기 하나 또는 그 이상의 서브-텐서들의 데이터를 저장하는 데(store) 사용되기 위해 상기 프로세서에 주소 정보 및 상기 제2 선택 차원에 관한 정보를 제공하는 단계를 포함하는
    컴퓨터 시스템.
  15. 제 11항에 있어서, 상기 방법은 텐서 계산들에 사용하기 위해 프로세서에 하나 또는 그 이상의 서브-텐서들을 제공하는 단계를 더 포함하고, 상기 하나 또는 그 이상의 서브-텐서들을 제공하는 단계는 하나의 연산으로(in one operation) 상기 하나 또는 그 이상의 서브-텐서들의 데이터를 로드하는 데(load) 사용되기 위해 상기 프로세서에 주소 정보 및 상기 제2 선택 차원에 관한 정보를 제공하는 단계를 포함하는
    컴퓨터 시스템.
  16. 컴퓨팅 환경 내에서 처리를 용이하게 하는 컴퓨터-구현 방법에 있어서, 상기 컴퓨터-구현 방법은:
    제1 선택 차원의 텐서(a tensor of a first select dimension)를 획득하는 단계; 및
    제2 선택 차원의 하나 또는 그 이상의 서브-텐서들을 제공하기 위해 상기 텐서를 재포맷하는 단계(reformatting)를 포함하고, 상기 재포맷하는 단계는:
    상기 텐서를 나타내기 위해 사용될 다수의 서브-텐서들을 결정하는 단계;
    상기 다수의 서브-텐서들을 생성하는 단계(creating) - 서브-텐서는 메모리 유닛의 경계 상에서 시작함-; 및
    상기 다수의 서브-텐서들 내에 맞도록(fit) 상기 텐서의 데이터를 재조정하는 단계(rearranging)를 포함하는
    컴퓨터-구현 방법.
  17. 제 16항에 있어서, 상기 다수의 서브-텐서들 중 선택된 서브-텐서에 대한 데이터를 재조정하는 단계는:
    상기 텐서를 나타내는 복수의 행렬들에서 동일한 위치의 데이터를 선택하는 단계;
    상기 선택된 서브-텐서의 한 행에서 선택된 데이터를 배치하는 단계(placing); 및
    상기 복수의 행렬들의 복수의 위치들에 대해 상기 선택하는 단계 및 배치하는 단계를 반복하는 단계를 포함하는
    컴퓨터-구현 방법.
  18. 제17항에 있어서, 상기 데이터 재조정하는 단계는:
    상기 선택된 서브-텐서의 하나 또는 그 이상의 행들이 상기 선택된 서브-텐서의 크기에 의해 수용되는 것보다 더 적은 데이터를 갖는 것에 기초하여, 상기 선택된 서브-텐서의 하나 또는 그 이상의 행들을 패딩하는 단계; 및
    상기 선택된 서브-텐서가 상기 선택된 서브-텐서의 크기에 의해 수용되는 것보다 더 적은 행들을 갖는 것에 기초하여, 상기 선택된 서브-텐서를 하나 또는 그 이상의 추가 패딩된 행들(additional padded rows)로 패딩하는 단계를 더 포함하는
    컴퓨터-구현 방법.
  19. 제 16항에 있어서, 상기 방법은 텐서 계산들에 사용하기 위해 프로세서에 하나 또는 그 이상의 서브-텐서들을 제공하는 단계를 더 포함하고, 상기 하나 또는 그 이상의 서브-텐서들을 제공하는 단계는 하나의 연산으로(in one operation) 상기 하나 또는 그 이상의 서브-텐서들의 데이터를 저장하는 데(store) 사용되기 위해 상기 프로세서에 주소 정보 및 상기 제2 선택 차원에 관한 정보를 제공하는 단계를 포함하는
    컴퓨터-구현 방법.
  20. 제 16항에 있어서, 상기 방법은 텐서 계산들에 사용하기 위해 프로세서에 하나 또는 그 이상의 서브-텐서들을 제공하는 단계를 더 포함하고, 상기 하나 또는 그 이상의 서브-텐서들을 제공하는 단계는 하나의 연산으로(in one operation) 상기 하나 또는 그 이상의 서브-텐서들의 데이터를 로드하는 데(load) 사용되기 위해 상기 프로세서에 주소 정보 및 상기 제2 선택 차원에 관한 정보를 제공하는 단계를 포함하는
    컴퓨터-구현 방법.
KR1020237037675A 2021-06-17 2022-06-09 서브-텐서들의 제공을 위한 텐서들의 재포맷 KR20230160934A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/350,528 US20220405348A1 (en) 2021-06-17 2021-06-17 Reformatting of tensors to provide sub-tensors
US17/350,528 2021-06-17
PCT/EP2022/065666 WO2022263280A1 (en) 2021-06-17 2022-06-09 Reformatting of tensors to provide sub-tensors

Publications (1)

Publication Number Publication Date
KR20230160934A true KR20230160934A (ko) 2023-11-24

Family

ID=82321551

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237037675A KR20230160934A (ko) 2021-06-17 2022-06-09 서브-텐서들의 제공을 위한 텐서들의 재포맷

Country Status (9)

Country Link
US (1) US20220405348A1 (ko)
EP (1) EP4356236A1 (ko)
KR (1) KR20230160934A (ko)
CN (1) CN117396840A (ko)
AU (1) AU2022292046B2 (ko)
BR (1) BR112023023410A2 (ko)
CA (1) CA3217152A1 (ko)
TW (1) TWI813258B (ko)
WO (1) WO2022263280A1 (ko)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9223687B2 (en) * 2012-06-15 2015-12-29 International Business Machines Corporation Determining the logical address of a transaction abort
US11861484B2 (en) * 2018-09-28 2024-01-02 Qualcomm Incorporated Neural processing unit (NPU) direct memory access (NDMA) hardware pre-processing and post-processing
US11537687B2 (en) * 2018-11-19 2022-12-27 Groq, Inc. Spatial locality transform of matrices
US20190392296A1 (en) * 2019-06-28 2019-12-26 John Brady Hardware agnostic deep neural network compiler

Also Published As

Publication number Publication date
CA3217152A1 (en) 2022-12-22
CN117396840A (zh) 2024-01-12
AU2022292046B2 (en) 2024-06-06
AU2022292046A1 (en) 2023-11-09
BR112023023410A2 (pt) 2024-01-23
EP4356236A1 (en) 2024-04-24
TW202303457A (zh) 2023-01-16
TWI813258B (zh) 2023-08-21
WO2022263280A1 (en) 2022-12-22
US20220405348A1 (en) 2022-12-22

Similar Documents

Publication Publication Date Title
KR20230173203A (ko) 암시적 반올림 모드로 선택된 데이터 유형의 데이터 변환
US20220405598A1 (en) Concatenated input/output tensors for use in recurrent neural networks
US12008395B2 (en) Program event recording storage alteration processing for a neural network accelerator instruction
KR20230160935A (ko) 신경망 처리 지원 명령
US20220405556A1 (en) Single function to perform combined matrix multiplication and bias add operations
AU2022292046B2 (en) Reformatting of tensors to provide sub-tensors
US11675592B2 (en) Instruction to query for model-dependent information
US11734013B2 (en) Exception summary for invalid values detected during instruction execution
TWI840790B (zh) 用於促進一運算環境內之處理的電腦程式產品、電腦系統及電腦實施方法
US11797270B2 (en) Single function to perform multiple operations with distinct operation parameter validation
KR20230162709A (ko) 단일 호출로 복수의 연산들을 수행하기 위한 반복 신경망 셀 활성화
US20220405555A1 (en) Single function to perform combined convolution and select operations
JP2024522737A (ja) 行列乗算演算とバイアス加算演算を組み合わせて実行する単一関数
JP2024523093A (ja) サブテンソルを提供するためのテンソルの再フォーマット
JP2024522435A (ja) ニューラル・ネットワーク処理支援命令