KR20180127945A - 다차원 텐서들에서의 데이터 액세스 - Google Patents

다차원 텐서들에서의 데이터 액세스 Download PDF

Info

Publication number
KR20180127945A
KR20180127945A KR1020180143824A KR20180143824A KR20180127945A KR 20180127945 A KR20180127945 A KR 20180127945A KR 1020180143824 A KR1020180143824 A KR 1020180143824A KR 20180143824 A KR20180143824 A KR 20180143824A KR 20180127945 A KR20180127945 A KR 20180127945A
Authority
KR
South Korea
Prior art keywords
tensor
value
inner loop
index
loop
Prior art date
Application number
KR1020180143824A
Other languages
English (en)
Other versions
KR102472424B1 (ko
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 KR20180127945A publication Critical patent/KR20180127945A/ko
Priority to KR1020220159111A priority Critical patent/KR102596365B1/ko
Application granted granted Critical
Publication of KR102472424B1 publication Critical patent/KR102472424B1/ko

Links

Images

Classifications

    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30061Multi-way branch instructions, e.g. CASE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3555Indexed addressing using scaling, e.g. multiplication of index
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/454Vector or matrix data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Computing Systems (AREA)
  • Databases & Information Systems (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

N-차원 텐서에 액세스하기 위한 명령을 프로세싱하기 위한 장치를 포함하는 장치, 시스템 및 방법이 개시된다. 이 장치는, 다수의 텐서 인덱스 엘리먼트들 및 다수의 차원 승수 엘리먼트들을 포함하며, 차원 승수 엘리먼트들 각각은 대응하는 텐서 인덱스 엘리먼트를 갖는다. 이 장치는 N-차원 텐서의 특정 엘리먼트에 액세스하기 위한 명령을 획득하고 ―N-차원 텐서는 N 차원들의 각각에 걸쳐 배열된 다수의 엘리먼트를 가지며, N은 1보다 크거나 같은 정수임―; 다수의 텐서 인덱스 엘리먼트들 중 하나 이상의 텐서 인덱스 엘리먼트들 및 다수의 차원 승수 엘리먼트들 중 하나 이상의 차원 승수 엘리먼트를 이용하여, 특정 엘리먼트의 어드레스를 결정하고; 그리고 N-차원 텐서의 특정 엘리먼트에 액세스하기 위한 결정된 어드레스를 나타내는 데이터를 출력하도록 구성되는 하나 이상의 프로세서를 포함한다.

Description

다차원 텐서들에서의 데이터 액세스{ACCESSING DATA IN MULTI-DIMENSIONAL TENSORS}
[0001] 본 명세서는 일반적으로 메모리 어드레스 값들을 컴퓨팅하기 위해 레지스터들을 사용하는 것에 관한 것이다. 레지스터들은 분기 조건들을 핸들링하기 위해 사용될 수 있다.
[0002] 본 명세서에 개시된 발명의 대상의 신규한 일 양상에 따르면, 레지스터들은 중첩 루프 구조들을 반복하고, 대응하는 메모리 어드레스들을 컴퓨팅하고, 프로그래머들이 루프 바운드 조건들을 핸들링할 수 있게 하도록 사용될 수 있다. 일반적으로, 레지스터들은 루프 바운드 값들, 각각의 루프의 현재 루프 인덱스 변수, 메모리 어드레스 값을 컴퓨팅하기 위한 차원 승수들, 및 분기 루프 바운드들을 핸들링하기 위한 프로그램 카운터 값들을 포함하는, 아키텍쳐 상태의 몇몇 세트들을 유지하기 위해 배열될 수 있다. 배열은 하나 이상의 다차원 데이터 구조들을 프로세싱하는데 유용할 수 있다. 이러한 아키텍쳐 상태 세트들로 인해, 프로세서는 인덱스 변수들을 새로운 포지션들로 이동시키고, 메모리 어드레스 값들을 리트리브하고, 새로운 분기 타겟으로 점프하기 위해 명령들을 실행할 수 있다.
[0003] 일반적으로, 본 명세서에 개시된 발명의 대상의 신규한 일 양상은, N-차원 텐서에 액세스하기 위한 명령을 프로세싱하기 위한 장치에서 실시될 수 있다. 장치는, 다수의 텐서 인덱스 엘리먼트들, 및 다수의 차원 승수 엘리먼트들을 포함하며, 여기서, 차원 승수 엘리먼트들 각각은 대응하는 텐서 인덱스 엘리먼트를 갖는다. 장치는 하나 이상의 프로세서들을 포함하며, 이 하나 이상의 프로세는, N-차원 텐서의 특정 엘리먼트에 액세스하기 위한 명령을 획득하고 ―여기서, N-차원 텐서는 N 차원들 각각에 걸쳐 배열된 다수의 엘리먼트들을 가지며, N은 1보다 크거나 같은 정수임―; 다수의 텐서 인덱스 엘리먼트들 중 하나 이상의 텐서 인덱스 엘리먼트들 및 다수의 차원 승수 엘리먼트들 중 하나 이상의 차원 승수 엘리먼트들을 이용하여, 특정 엘리먼트의 어드레스를 결정하고; 그리고 N-차원 텐서의 특정 엘리먼트에 액세스하기 위해 결정된 어드레스를 나타내는 데이터를 출력하도록 구성된다.
[0004] 이들 및 다른 구현들 각각은 이하의 특징들 중 하나 이상을 선택적으로 포함할 수 있다. 예를 들어, 특정 엘리먼트의 어드레스는 N-차원 텐서의 다른 엘리먼트로부터의 어드레스 오프셋일 수 있다. 특정 엘리먼트의 어드레스를 결정하기 위해, 하나 이상의 텐서 인덱스 엘리먼트들 중 각각의 텐서 인덱스 엘리먼트에 대해, 각각의 텐서 인덱스 엘리먼트에 저장된 값에 하나 이상의 다수의 텐서 인덱스 엘리먼트들 중 대응하는 텐서 인덱스 엘리먼트에 저장된 값이 곱해져서 각각의 곱해진 값을 생성할 수 있다. 곱해진 값들의 합을 결정함으로써 어드레스 오프셋이 결정될 수 있다.
[0005] 다수의 텐서 인덱스 엘리먼트들은 M개의 그룹의 텐서 인덱스 엘리먼트들로 배열될 수 있고, M은 1보다 큰 양의 정수이다. 텐서 인덱스 엘리먼트들의 각 그룹은 별개의 상이한 다차원 텐서에 할당될 수 있다.
[0006] 장치는 다수의 텐서 바운드 엘리먼트들을 포함할 수 있으며, 다수의 텐서 바운드 엘리먼트들 각각은 다수의 텐서 인덱스 엘리먼트들 중 대응하는 텐서 인덱스 엘리먼트를 가질 수 있다. 명령은, 제 1 루프 및 제 1 루프의 외곽 루프인 제 2 루프를 포함하는 중첩 루프를 프로세싱하기 위한 명령을 나타낼 수 있고, 여기서, 제 1 루프는 제 1 인덱스 변수를 사용하여 반복되고, 제 2 루프는 제 2 인덱스 변수를 사용하여 반복된다.
[0007] 하나 이상의 프로세서들은, 다수의 텐서 인덱스 엘리먼트들, 다수의 차원 승수 엘리먼트들 및 다수의 텐서 바운드 엘리먼트들에 저장된 값들을 초기화 값으로 설정하도록 구성될 수 있다. 하나 이상의 프로세서들은, 다수의 텐서 바운드 엘리먼트들 중 제 1 텐서 바운드 엘리먼트에 저장된 값을 제 1 루프를 반복하기 위해 제 1 인덱스 변수의 상한 값으로 설정하고; 제 2 루프를 반복하기 위해 다수의 텐서 바운드 엘리먼트들의 제 2 텐서 바운드 엘리먼트에 저장된 값을 제 2 인덱스 변수의 상한 값으로 설정하고; 다수의 차원 승수 엘리먼트들 중 제 1 차원 승수 엘리먼트에 저장된 값을 미리 결정된 값으로 설정하고; 그리고 다수의 차원 승수 엘리먼트들 중 제 2 차원 승수 엘리먼트에 저장된 값을 제 1 인덱스 변수의 상한 값으로 설정하도록 구성될 수 있다.
[0008] N-차원 텐서의 엘리먼트의 어드레스를 결정하기 위해, 하나 이상의 프로세서들이, 다수의 텐서 인덱스 엘리먼트들 중 제 1 텐서 인덱스 엘리먼트에 저장된 값을 제 1 인덱스 변수의 현재 값으로 설정하고; 다수의 텐서 인덱스 엘리먼트들 중 제 2 텐서 인덱스 엘리먼트에 저장된 값을 제 2 인덱스 변수의 현재 값으로 설정하고; 제 1 차원 승수 엘리먼트에 저장된 값에 제 1 텐서 인덱스 엘리먼트에 저장된 값을 곱하여 제 1 곱해진 값을 얻고; 제 2 차원 승수 엘리먼트에 저장된 값에 제 2 텐서 인덱스 엘리먼트에 저장된 값을 곱하여 제 2 곱해진 값을 얻고; 적어도 제 1 곱해진 값 및 제 2 곱해진 값을 합산함으로써 어드레스를 결정하도록 구성될 수 있다.
[0009] 하나 이상의 프로세서들은: 제 1 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하기 위한 명령을 수신하고; 제 1 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하기 위한 명령을 수신한 후, 제 1 텐서 인덱스 엘리먼트에 저장된 값과 제 1 텐서 바운드 엘리먼트에 저장된 값 사이의 차이가 임계 값을 만족한다고 결정하고; 제 1 텐서 인덱스 엘리먼트에 저장된 값과 제 1 텐서 바운드 엘리먼트에 저장된 값 사이의 차이가 임계 값을 만족한다는 결정에 응답하여, 제 1 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하도록 구성될 수 있다. 제 1 인덱스 변수는 제 1 루프가 완료될 때마다 제 1 증분 값만큼 증가될 수 있다. 제 1 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하기 위해, 제 1 텐서 인덱스 엘리먼트에 저장된 값이 제 1 증분 값 만큼 증가될 수 있다.
[0010] 하나 이상의 프로세서들은, 제 1 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하기 위한 명령을 수신하고; 제 1 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하기 위한 명령을 수신한 후, 제 1 텐서 인덱스 엘리먼트에 저장된 값과 제 1 텐서 바운드 엘리먼트에 저장된 값 사이의 차이가 임계 값을 만족하지 않는다고 결정하도록 구성될 수 있다. 제 1 텐서 인덱스 엘리먼트에 저장된 값과 제 1 텐서 바운드 엘리먼트에 저장된 값 사이의 차이가 임계 값을 만족하지 않는다는 결정에 응답하여, 하나 이상의 프로세서들이 제 1 텐서 인덱스 엘리먼트에 저장된 값을 리셋하고, 제 2 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하도록 구성될 수 있다. 제 2 인덱스 변수는 제 2 루프가 완료될 때마다 제 2 증분 값만큼 증가될 수 있다. 제 2 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하기 위해, 제 2 텐서 인덱스 엘리먼트에 저장된 값이 제 2 증분 값만큼 증가될 수 있다.
[0011] 하나 이상의 프로세서들은 하나 이상의 연산 로직 유닛들을 포함할 수 있다. 텐서 인덱스 엘리먼트들 및 차원 승수 엘리먼트들 각각은 레지스터일 수 있다. 장치는, 다수의 분기 타겟 엘리먼트들을 포함할 수 있고, 여기서, 다수의 분기 타겟 엘리먼트들 각각은 다수의 텐서 인덱스 엘리먼트들 중 대응하는 텐서 인덱스 엘리먼트를 가지며, 다수의 분기 타겟 엘리먼트들 각각은 각각의 분기 타겟 엘리먼트에 대응하는 루프의 반복 완료 시에 실행될 명령에 대한 어드레스를 저장하도록 구성된다.
[0012] 본 명세서에 개시된 발명의 대상은, 이하의 장점들 중 하나 이상을 구현하도록 특정 실시예들에서 실시될 수 있다. 메모리 어드레스 값들을 추적하기 위해 레지스터들을 사용하는 것은, 프로그램이 하나의 명령으로 심하게 중첩된(deeply-nested) 루프들을 반복하게 할 수 있다. 메모리 어드레스 값들은 레지스터들에 저장된 값들에 기초하여 간단한 연산 계산들을 적용함으로써 신속하게 결정될 수 있다. 연산 로직 유닛들을 사용하여 메모리 어드레스 값들을 결정하는 것은, 프로세서에서의 계산 사이클들의 수가 감소되게 할 수 있고, 다른 계산 태스크들을 위한 프로세서 대역폭을 증가시킨다. 텐서들은 명령들의 감소된 수로 순회될 수 있다. 2차원 레지스터 아키텍쳐는, 각각 동시에 트래킹될 상이한 차원들을 갖는 다차원 텐서들을 허용한다. 분기 타겟 테이블들을 가짐으로써, 분기 명령 관련 오버헤드가 감소될 수 있다.
[0013] 이러한 그리고 다른 양상들의 다른 구현들은, 컴퓨터 저장 디바이스들 상에 인코딩된, 방법들의 동작들을 수행하도록 구성된, 대응하는 시스템, 장치 및 컴퓨터 프로그램들을 포함한다. 하나 이상의 컴퓨터들의 시스템은, 소프트웨어, 펌웨어, 하드웨어, 또는 동작 시, 시스템으로 하여금 동작들을 수행하게 하는 시스템에 인스톨된 이들의 조합에 의해 그렇게 구성될 수 있다. 하나 이상의 컴퓨터 프로그램들은, 데이터 프로세싱 장치에 의해 실행될 때, 장치로 하여금 동작들을 수행하게 하는 명령들을 가짐으로써 그렇게 구성될 수 있다.
[0014] 본 명세서에 설명된 발명의 대상의 하나 이상의 구현들의 세부사항들이 첨부 도면들 및 이하의 설명에서 제시된다. 발명의 대상의 다른 잠재적인 특징들, 양상들 및 이점들은, 설명, 도면들 및 청구항들로부터 자명해질 것이다.
[0015] 도 1은 예시적인 컴퓨팅 시스템의 블록도이다
[0016] 도 2a 내지 도 2h는 예시적인 텐서 순회(tensor traversal) 유닛을 도시한다.
[0017] 도 3은 예시적인 텐서 순회 유닛을 도시한다.
[0018] 도 4는 다차원 텐서 변수의 어드레스를 결정하기 위한 프로세스의 일례를 도시하는 흐름도이다.
[0019] 다양한 도면들에서 동일한 참조번호들 및 지정들은 동일한 엘리먼트들을 표시한다.
[0020] 일반적으로, 소프트웨어 알고리즘이 N-차원 텐서를 프로세싱할 때, 중첩 루프가 사용될 수 있으며, 여기서 각각의 루프는 N-차원 텐서의 각각의 차원을 순회하는 것을 담당한다. 다차원 텐서는 매트릭스이거나, 다차원 매트릭스들일 수 있다. N-차원 텐서의 각각의 차원은 하나 이상의 엘리먼트들을 포함할 수 있고, 여기서 각각의 엘리먼트는 각각의 데이터 값을 저장할 수 있다. 예를 들어, 텐서는 프로그램에서의 변수일 수 있고, 여기서 변수는 3차원일 수 있다. 제 1 차원은 3백 개의 엘리먼트들의 길이를 가질 수 있고, 제 2 차원은 1000개의 엘리먼트들의 길이를 가질 수 있고, 제 3 차원은 20개의 엘리먼트들의 길이를 가질 수 있다. 중첩 루프에서 텐서를 순회하는 것은 엘리먼트의 대응하는 데이터 값을 로딩 또는 저장하기 위해 엘리먼트의 메모리 어드레스 값의 계산을 필요로 한다. 예를 들어, for-루프는 중첩 루프이며, 여기서, 3개의 루프 인덱스 변수들에 의해 추적된 3개의 루프들이 3차원 텐서를 통해 순회하도록 중첩될 수 있다. 일부 경우에, 프로세서는 외부 루프 인덱스 변수로 내부 루프의 루프 바운드를 세팅하는 것과 같이 루프 경계 조건을 실행할 필요가 있을 수 있다. 예를 들어, 중첩 루프의 최내곽 루프를 빠져나갈 지를 결정하는데 있어서, 프로그램은 최내곽 루프의 루프 인덱스 변수의 현재 값을 중첩 루프의 최외곽 루프의 루프 인덱스 변수의 현재 값과 비교할 수 있다.
[0021] 이러한 태스크들은 분기 명령들 및 정수 연산 명령들(integer arithmetic instructions)과 같은 상당한 수의 명령들을 필요로 할 수 있다. 각각의 루프 바운드가 작고 루프들의 수가 큰 경우, 계산은 전체 실행 시간의 상당한 부분을 차지할 수 있고, 전체 성능을 심각하게 저하시킨다. 예를 들어, 프로세서는 N-차원 텐서 입력을 프로세싱하도록 설계될 수 있다. 프로세서는 2차원 구조로 구현될 수 있으며, 이는 소프트웨어에 의해 프로세싱될 (N-2) 차원을 남겨 둔다. N이 클 경우, 계산은 매우 높은 스칼라 계산 대역폭을 필요로 하기 때문에, N-2 차원들의 핸들링은 프로세서에 계산적으로 부담일 수 있다. 프로세서용 하드웨어 텐서 순회 유닛은, 텐서를 순회할 때 프로세싱하기 위해 프로세서가 필요로 하는 차원의 수를 감소시킴으로써 프로세서의 계산 대역폭을 증가시킬 수 있다.
[0022] 도 1은 텐서를 순회하기 위한 예시적인 컴퓨팅 시스템(100)의 블록도를 도시한다. 일반적으로, 컴퓨팅 시스템(100)은 입력(104)을 프로세싱하여 출력(116)을 생성한다. 컴퓨팅 시스템(100)은 선형 대수 계산을 수행하도록 구성될 수 있다. 입력(104)은 컴퓨팅 시스템(100)에 의해 프로세싱될 수 있는 임의의 적절한 데이터일 수 있다. 컴퓨팅 시스템(100)은, 프로세싱 유닛(102), 저장 매체(104), 및 텐서 순회 유닛(106)을 포함한다.
[0023] 일반적으로, 프로세싱 유닛(102)이 텐서의 특정 엘리먼트를 액세싱하기 위한 명령을 실행할 경우, 텐서 순회 유닛(106)은 텐서의 특정 엘리먼트의 어드레스를 결정하여, 프로세싱 유닛(102)은 특정 엘리먼트의 값을 나타내는 데이터(114)를 판독하기 위해 저장 매체(104)에 액세스할 수 있다. 예를 들어, 프로그램은 중첩 루프를 포함할 수 있고, 프로세싱 유닛(102)은 중첩 루프와 관련된 현재 인덱스 변수 값들에 따라 중첩 루프 내의 2차원 어레이 변수의 엘리먼트를 액세스하기 위한 명령을 실행할 수 있다. 중첩 루프와 관련된 현재 인덱스 변수 값들에 기초하여, 텐서 순회 유닛(106)은 2차원 어레이 변수의 제 1 엘리먼트로부터의 오프셋을 나타내는 오프셋 값을 결정할 수 있다. 그 다음, 프로세싱 유닛(102)은, 오프셋 값을 사용하여 그리고 저장 매체로부터, 2차원 어레이 변수의 특정 엘리먼트를 액세스할 수 있다.
[0024] 프로세싱 유닛(102)은, 저장 매체(104)에 저장된 명령들(112) 또는 다른 저장 디바이스에 저장된 다른 명령들을 포함하는, 컴퓨팅 시스템(100) 내에서 실행을 위한 명령들을 프로세싱하도록 구성된다. 프로세싱 유닛(102)은 하나 이상의 프로세서들을 포함할 수 있다. 저장 매체(104)는 컴퓨팅 시스템(100) 내에 정보를 저장한다. 일부 구현들에서, 저장 매체(104)는 휘발성 메모리 유닛 또는 유닛들이다. 일부 구현들에서, 저장 매체(104)는 비휘발성 메모리 유닛 또는 유닛들이다. 저장 매체(104)는 또한 컴퓨터 판독 가능 매체의 다른 형태, 예컨대, 플로피 디스크 디바이스, 하드디스크 디바이스, 광 디스크 디바이스, 테이프 디바이스, 플래시 메모리 또는 다른 유사한 솔리드 스테이트 메모리 디바이스 또는 저장 영역 네트워크 또는 다른 구성들에서의 디바이스들을 포함하는 디바이스들의 어레이일 수 있다. 프로세싱 유닛(102)에 의해 실행될 때, 명령들은 프로세싱 유닛(102)으로 하여금 하나 이상의 태스크들을 수행하게 한다.
[0025] 텐서 순회 유닛(106)은 하나 이상의 텐서들과 관련된 상태를 결정하도록 구성된다. 상태는 루프 바운드 값들, 현재 루프 인덱스 변수 값들, 메모리 어드레스 값을 계산하기 위한 차원 승수들, 및/또는 분기 루프 바운드를 핸들링하기 위한 프로그램 카운터 값들을 포함할 수 있다. 텐서 순회 유닛(106)은 텐서 상태 엘리먼트들(122) 및 연산 로직 유닛(124)을 포함한다. 각각의 텐서 상태 엘리먼트들(122)은, 저장 엘리먼트, 예를 들어, 레지스터 또는 임의의 다른 적절한 저장 회로일 수 있다. 일부 구현들에서, 텐서 상태 엘리먼트들(122)은, 도 2a-2h 및 도 3a-3b를 참조하여 이하에서 더욱 상세하게 설명되듯이, 상이한 그룹들로 물리적으로 또는 논리적으로 배열될 수 있다. 일부 구현들에서, 텐서 상태 엘리먼트들(122)의 그룹은 다차원 어레이로 물리적으로 또는 논리적으로 배열될 수 있다. 예를 들어, 텐서 상태 엘리먼트들(122)의 각각의 그룹은 2차원 어레이로 물리적으로 또는 논리적으로 배열될 수 있다. 연산 로직 유닛(124)은, 연산 및 논리 동작들을 수행하도록 구성된 하나 이상의 ALU(arithmetic logic unit)들을 포함한다. 예를 들어, 연산 로직 유닛(124)은 덧셈, 뺄셈, 곱셈, 나눗셈, 로직 AND, 로직 OR, 또는 임의의 다른 적절한 연산 및 로직 동작들을 수행하도록 구성된 디지털 회로를 포함할 수 있다.
[0026] 도 2a는 텐서 순회 유닛의 텐서 상태 엘리먼트(200)의 예시적인 세트를 도시한다. 텐서 상태 엘리먼트들(200)은 텐서 순회 유닛(106)의 텐서 상태 엘리먼트들(122)에 대응할 수 있다. 텐서 순회 유닛(200)은 일 그룹의 텐서 인덱스 엘리먼트들(202), 일 그룹의 텐서 바운드 엘리먼트들(204), 및 일 그룹의 차원 승수 엘리먼트들(206)을 포함한다. 텐서 인덱스 엘리먼트들(202)은, M 행들 및 N 열들을 갖는 2-D 어레이로서 물리적으로 또는 논리적으로 배열될 수 있으며, 여기서 M 및 N은 1보다 크거나 같은 정수들이다. 일부 구현들에서, 텐서 인덱스 엘리먼트들(202)의 각각의 행은 텐서에 대한 텐서 인덱스 정보를 나타낼 수 있다. 예를 들어, 프로그램이 두 개의 어레이 변수들(V1 및 V2)을 정의하면, 텐서 순회 유닛은 각각 어레이 변수들(V1 및 V2)에 대한 텐서 인덱스 정보를 추적하기 위해 행들(202a 및 202b)을 할당할 수 있다. 일부 구현들에서, 텐서 인덱스 엘리먼트들(202)의 각각의 열은 텐서와 관련된 중첩 루프 인덱스 변수 값들에 대한 텐서 인덱스 정보를 나타낼 수 있다. 예를 들어, 프로그램이 변수(V1)를 액세스하기 위한 3개의 루프들을 갖는 중첩 루프를 정의하면 ―여기서, 중첩 루프의 각각의 루프는 중첩 루프 인덱스 변수들(i, j 및 k)에 의해 인덱스됨―, 텐서 순회 유닛은 중첩 루프 인덱스 변수(i, j 및 k) 각각을 추적하기 위해 텐서 인덱스 엘리먼트(X1,1, X1,2, 및 X1, 3)를 할당할 수 있다. 텐서 인덱스 정보는 이하의 도 2d-2h를 참조하여 이하에서 더욱 상세하게 설명된다.
[0027] 텐서 바운드 엘리먼트들(204)은 텐서 인덱스 엘리먼트들(202)과 동일한 차원을 갖는 2-D 어레이로서 물리적으로 또는 논리적으로 배열될 수 있으며, 여기서 텐서 바운드 엘리먼트들(204)의 각각의 엘리먼트는 텐서 인덱스 엘리먼트들(202) 중 대응하는 엘리먼트를 갖는다. 일부 구현들에서, 텐서 바운드 엘리먼트들(204)의 각각의 행은 텐서에 대한 텐서 바운드 정보를 나타낼 수 있다. 예를 들어, 프로그램이 두 개의 어레이 변수들(V1 및 V2)을 정의하면, 텐서 순회 유닛은 각각 어레이 변수들(V1 및 V2)에 대한 텐서 바운드 정보를 추적하기 위해 행들(204a 및 204b)을 할당할 수 있다. 일부 구현들에서, 텐서 바운드 엘리먼트들(204)의 각각의 열은 텐서와 관련된 중첩 루프 인덱스 변수 값들에 대한 텐서 바운드 정보를 나타낼 수 있다. 예를 들어, 프로그램이 변수(V1)를 액세스하기 위한 3개의 루프들을 갖는 중첩 루프를 정의하면 ―여기서, 중첩 루프의 각각의 루프는 중첩 루프 인덱스 변수들(i, j 및 k)에 의해 인덱스됨―, 텐서 순회 유닛은 중첩 루프 인덱스 변수들(i, j 및 k) 각각과 관련된 텐서 바운드 정보를 추적하기 위해 텐서 바운드 엘리먼트(Y1,1, Y1,2, 및 Y1,3)를 할당할 수 있다. 텐서 바운드 정보는 이하의 도 2c를 참조하여 이하에서 더욱 상세하게 설명된다.
[0028] 차원 승수 엘리먼트들(206)은 텐서 인덱스 엘리먼트들(202)과 동일한 차원을 갖는 2-D 어레이로서 물리적으로 또는 논리적으로 배열될 수 있으며, 여기서 차원 승수 엘리먼트들(206)의 각각의 엘리먼트는 텐서 인덱스 엘리먼트들(202) 중 대응하는 엘리먼트를 갖는다. 일부 구현들에서, 차원 승수 엘리먼트들(206)의 각각의 행은 텐서에 대한 차원 승수 정보를 나타낼 수 있다. 예를 들어, 프로그램이 두 개의 어레이 변수들(V1 및 V2)을 정의하면, 텐서 순회 유닛은 각각 어레이 변수들(V1 및 V2)에 대한 차원 승수 정보를 추적하기 위해 행들(206a 및 206b)을 할당할 수 있다. 일부 구현들에서, 차원 승수 엘리먼트들(206)의 각각의 열은 텐서와 관련된 중첩 루프 인덱스 변수 값들에 대한 차원 승수 정보를 나타낼 수 있다. 예를 들어, 프로그램이 변수(V1)를 액세스하기 위한 3개의 루프들을 갖는 중첩 루프를 정의하면 ―여기서, 중첩 루프의 각각의 루프는 중첩 루프 인덱스 변수들(i, j 및 k)에 의해 인덱스됨―, 텐서 순회 유닛은 중첩 루프 인덱스 변수들(i, j 및 k) 각각과 관련된 차원 승수 정보를 추적하기 위해 차원 승수 엘리먼트들(Z1,1, Z1,2, 및 Z1, 3)을 할당할 수 있다. 차원 승수 정보는 이하의 도 2d를 참조하여 이하에서 더욱 상세하게 설명된다.
[0029] 도 2b-2h는, 텐서 상태 엘리먼트들(200)이 텐서를 프로세싱하기 위해 텐서 순회 유닛에 의해 어떻게 사용되는 지의 예를 도시한다. 도 2b를 참조하면, 프로그램(212)은 프로세싱 유닛(102)에 의해 실행될 수 있는 저장 매체(104) 또는 다른 저장 매체에 저장될 수 있다. 프로그램(212)은 4의 제 1 차원 및 2의 제 2 차원을 갖는 캐릭터 어레이 변수(V)를 지정한다. 프로그램(212)은 변수(V)를 순회하기 위해 중첩 for-루프를 지정하며, 여기서 for-루프는 중첩 루프 인덱스 변수(i)에 의해 추적된 외곽 루프에서 V의 제 1 차원을 순회하고, 중첩 루프 인덱스 변수(j)에 의해 추적된 내곽 루프에서 V의 제 2 차원을 순회한다. 일부 구현들에서, 텐서 상태 엘리먼트들(200)은 프로그램의 시작 시 초기화될 수 있다. 예를 들어, 프로세서는 텐서 상태 엘리먼트들(200)을 초기화하는 명령("InitializeElements")을 실행할 수 있다. 명령은 프로세서에 의해 실행가능한 명령 세트의 하드웨어 명령일 수 있다. 일부 구현들에서, 초기화 이후, 텐서 상태 엘리먼트들(200)의 각각의 엘리먼트가 미리 결정된 값으로 설정된다. 여기서, 초기화 이후, 텐서 상태 엘리먼트들(200)의 각각의 엘리먼트가 0으로 설정될 수 있다.
[0030] 도 2c는 프로그램(212)에 따라 텐서 바운드 엘리먼트들(204)에서 텐서 바운드 정보를 설정하는 것을 도시한다. 예를 들어, 프로세서는 텐서 바운드 엘리먼트들(204)에서 텐서 바운드 정보를 설정하는 명령("SetTensorBound")을 실행할 수 있다. 일부 구현들에서, 텐서 바운드 정보는 대응하는 중첩 루프 인덱스 값의 상한을 나타낸다. 여기서, 내곽 중첩 루프 인덱스 변수(i)는 4의 상한을 가지며, 외곽 중첩 루프 인덱스 변수(j)는 2의 상한을 갖는다. 텐서 바운드 엘리먼트들(204)에서 텐서 바운드 정보를 설정한 후, 엘리먼트(214)(즉, Y1,2)가 4로 설정되고, 엘리먼트(216)(즉, Y1,1)가 2로 설정된다.
[0031] 도 2d는 프로그램 (212)에 따라 차원 승수 엘리먼트들(206)에서 차원 승수 정보를 설정하는 것을 도시한다. 예를 들어, 프로세서는 차원 승수 엘리먼트들(206)에서 차원 승수 정보를 설정하는 명령("SetDimensionMultiplier")을 실행할 수 있다. 일부 구현들에서, 차원 승수 정보는 텐서 인덱스 엘리먼트들(202) 중 대응하는 엘리먼트에 곱해질 수 있는 승수를 나타낸다. 여기서, 캐릭터 변수(V)는 4의 제 1 차원 및 2의 제 2 차원을 갖는다. 엘리먼트(V[0][0])가 베이스 메모리 어드레스(P)에 저장되고 엘리먼트(V[0][1])가 메모리 어드레스(P+1)에 저장되면, 엘리먼트(V[1][0])는 메모리 어드레스(P+2)에 저장된다. 따라서, 엘리먼트(V[i][j])에 대한 대응하는 메모리 어드레스는 P+(i×2)+(j×1)이다. 따라서, 외곽 루프에 대한 차원 승수 정보는 2이고, 내곽 루프에 대한 차원 승수 정보는 1이다. 차원 승수 엘리먼트들(206)에서 차원 승수 정보를 설정한 후, 엘리먼트(222)(즉, Z1,2)가 2로 설정되고, 엘리먼트(224)(즉, Z1,1)가 1로 설정된다.
[0032] 도 2e는 프로그램 (212)에 따라 엘리먼트(V[0][0])를 액세스하는 것을 도시한다. 예를 들어, 프로세서는 액세스되는 엘리먼트에 대응하는 메모리 어드레스를 로케이팅하는 명령("LocateTensor")을 실행할 수 있다. 일부 구현들에서, 명령은 베이스 메모리 어드레스를 포함할 수 있다. 예를 들어, 명령("LocateTensor")은 변수(V)의 첫 번째 엘리먼트인 엘리먼트(V[0][0])의 메모리 어드레스를 포함할 수 있다. 일부 구현들에서, 명령은 액세스 될 텐서에 대응하는 행 번호를 포함할 수 있다. 예를 들어, 명령("LocateTensor")은 변수(V)에 대응하는 행 번호를 포함할 수 있다. 여기서, 행 번호는 1이다.
[0033] 일부 구현들에서, 명령 수신에 응답하여, 연산 로직 유닛 (예를 들어, 연산 로직 유닛 (106))은, 텐서 인덱스 엘리먼트들(202) 각각에 저장된 값들과 대응하는 차원 승수 엘리먼트들(206)에 저장된 값들 사이의 곱(multiplicative product)의 합을 계산함으로써 메모리 어드레스 오프셋을 결정한다. 여기서, 연산 로직 유닛이 엘리먼트(X1,N)에 저장된 값에 엘리먼트(Z1,N)에 저장된 값을 곱하고, 엘리먼트(X1,N-1)에 저장된 값에 엘리먼트(Z1,N-1)에 저장된 값을 곱하고, ..., 엘리먼트(X1,2)에 저장된 값에 엘리먼트(Z1,2)에 저장된 값을 곱하고, 그리고 엘리먼트(X1,1)에 저장된 값에 엘리먼트(Z1,1)에 저장된 값을 곱한다. 그 다음, 연산 로직 유닛은 모든 곱셈 결과를 함께 합산하여 액세스되는 엘리먼트에 대응하는 메모리 어드레스를 결정한다. 텐서 인덱스 엘리먼트들(202) 내의 모든 값들이 0이기 때문에, 메모리 어드레스 오프셋은, 박스(230)에 의해 표시된 바와 같이 0이다. 그 다음, 프로세서는 메모리 어드레스를 결정하기 위해 메모리 어드레스 오프셋(즉, 0)에 베이스 메모리 어드레스(즉, P)를 추가하고, 결정된 메모리 어드레스에 기초하여 저장 매체 내의 저장된 데이터를 액세스함으로써 엘리먼트(V[0][0])를 액세스할 수 있다.
[0034] 도 2f는 프로그램 (212)에 따라 엘리먼트(V[0][1])를 액세스하는 것을 도시한다. 예를 들어, 프로그램이 제 1 내곽 루프를 통해 반복된 후, 중첩 루프 인덱스 변수들이 업데이트되고(즉, i = 0 및 j = 0), 프로그램이 제 2 내곽 루프에 진입함에 따라(즉, i = 0 및 j = 1), 프로세서는 텐서 인덱스 엘리먼트들(202)을 업데이트하는 명령("IterateTensor")을 실행할 수 있다. 일부 구현들에서, 텐서 순회 유닛은 가장 낮은 인덱스를 갖는 텐서 인덱스 엘리먼트를 미리 결정된 값만큼 증가시킴으로써 텐서 인덱스 엘리먼트들(202)을 업데이트한다. 예를 들어, 도 2f를 참조하면, 텐서 순회 유닛은 텐서 인덱스 엘리먼트(228)(즉, X1,1)를 1 만큼 증가시킬 수 있다. 일부 다른 구현들에서, 텐서 순회 유닛은 가장 낮은 인덱스를 갖는 텐서 인덱스 엘리먼트를 미리 결정된 값만큼 감소시킴으로써 텐서 인덱스 엘리먼트들(202)을 업데이트할 수 있다.
[0035] 일부 다른 구현들에서, 텐서 순회 유닛 유닛은 텐서 인덱스 엘리먼트들(202)의 업데이트된 값을 텐서 바운드 엘리먼트들(204)의 값들과 비교하고 임계치가 충족되었는 지를 결정한다. 예를 들어, 텐서 순회 유닛은 텐서 인덱스 엘리먼트(228)의 업데이트된 값(즉, 1)을 텐서 바운드 엘리먼트(216)의 값(즉, 2)과 비교할 수 있고, 텐서 인덱스 엘리먼트(228)의 업데이트된 값이 텐서 바운드 엘리먼트(216)의 값보다 작은 지를 결정한다. 여기서, 텐서 인덱스 엘리먼트(228)의 업데이트된 값은 텐서 바운드 엘리먼트(216)의 값보다 작고, 텐서 인덱스 엘리먼트(228)의 업데이트된 값은 1로 남는다.
[0036] 그 다음, 프로세서는, V[0][1]에 대응하는 메모리 어드레스를 로케이팅하기 위해 명령("LocateTensor")을 실행함으로써 엘리먼트(V[0][1])에 액세스할 수 있다. 도 2f를 참조하면, 텐서 인덱스 엘리먼트(228)를 제외하고 텐서 인덱스 엘리먼트들(202) 내의 모든 값들은 0이다. 텐서 인덱스 엘리먼트(228)는 1의 값을 가지며, 연산 로직 유닛은 박스 (232)에 의해 표시된 바와 같이, 메모리 어드레스 오프셋이 1이라고 결정할 수 있다. 그 다음, 프로세서는 메모리 어드레스를 결정하기 위해 메모리 어드레스 오프셋(즉, 1)에 베이스 메모리 어드레스(즉, P)를 추가하고, 결정된 메모리 어드레스에 기초하여 저장 매체 내의 저장된 데이터를 액세스함으로써 엘리먼트(V[0][1])를 액세스할 수 있다.
[0037] 도 2g는 프로그램 (212)에 따라 엘리먼트(V[1][0])를 액세스하는 것을 도시한다. 예를 들어, 프로그램이 제 2 시간 동안 내곽 루프를 통해 반복된 후, 중첩 루프 인덱스 변수들이 업데이트되고(즉, i = 1 및 j = 0), 프로세서는 텐서 인덱스 엘리먼트들(202)을 업데이트하는 명령("IterateTensor")을 실행할 수 있다. 예를 들어, 텐서 순회 유닛은 텐서 인덱스 엘리먼트(228)(즉, X1,1)를 1 만큼 증가시킬 수 있다. 텐서 순회 유닛은 텐서 인덱스 엘리먼트(228)의 업데이트된 값(즉, 2)을 텐서 바운드 엘리먼트(216)의 값(즉, 2)과 비교할 수 있고, 텐서 인덱스 엘리먼트(228)의 업데이트된 값이 텐서 바운드 엘리먼트(216)의 값보다 작지 않다고 결정한다. 일부 구현들에서, 임계 값이 충족되지 않았다는 결정에 응답하여, 텐서 순회 유닛은 업데이트된 값을 다음 텐서 인덱스 엘리먼트로 전달하여 현재 텐서 인덱스 엘리먼트를 리셋할 수 있다. 예를 들어, 텐서 인덱스 엘리먼트(228)의 업데이트된 값이 텐서 바운드 엘리먼트(216)의 값보다 작지 않기 때문에, 텐서 순회 유닛은 텐서 인덱스 엘리먼트(226)를 1 만큼 증가시키고, 텐서 인덱스 엘리먼트(228)를 다시 0으로 리셋할 수 있다.
[0038] 그 다음, 프로세서는, V[1][0]에 대응하는 메모리 어드레스를 로케이팅하기 위해 명령("LocateTensor")을 실행함으로써 엘리먼트(V[1][0])에 액세스할 수 있다. 도 2g를 참조하면, 텐서 인덱스 엘리먼트(226)를 제외하고 텐서 인덱스 엘리먼트들(202) 내의 모든 값들은 0이다. 텐서 인덱스 엘리먼트(226)는 1의 값을 가지며, 연산 로직 유닛은 박스 (234)에 의해 표시된 바와 같이, 메모리 어드레스 오프셋이 2라고 결정할 수 있다. 그 다음, 프로세서는 메모리 어드레스를 결정하기 위해 메모리 어드레스 오프셋(즉, 2)에 베이스 메모리 어드레스(즉, P)를 추가하고, 결정된 메모리 어드레스에 기초하여 저장 매체에 저장된 데이터를 액세스함으로써 엘리먼트(V[1][0])에 액세스할 수 있다.
[0039] 도 2h는 프로그램 (212)에 따라 엘리먼트(V[3][1])를 액세스하는 것을 도시한다. 예를 들어, 중첩 루프 인덱스 변수들이 그 상한에 있을 때까지(즉, i = 3 및 j = 1), 프로그램은 내곽 루프 및 외부 루프를 통해 계속 반복할 수 있다. 프로세서는, V[3][1]에 대응하는 메모리 어드레스를 로케이팅하기 위해 명령("LocateTensor")을 실행함으로써 엘리먼트(V[3][1])에 액세스할 수 있다. 도 2h를 참조하면, 텐서 인덱스 엘리먼트들(226 및 228)를 제외하고 텐서 인덱스 엘리먼트들(202) 내의 모든 값들은 0이다. 텐서 인덱스 엘리먼트(226)는 3의 값을 갖고, 텐서 인덱스 엘리먼트(228)는 1의 값을 갖는다. 연산 로직 유닛은 박스 (236)에 의해 표시된 바와 같이, 메모리 어드레스 오프셋이 7이라고 결정할 수 있다. 그 다음, 프로세서는 메모리 어드레스를 결정하기 위해 메모리 어드레스 오프셋(즉, 7)에 베이스 메모리 어드레스(즉, P)를 추가하고, 결정된 메모리 어드레스에 기초하여 저장 매체에 저장된 데이터에 액세스함으로써 엘리먼트(V[3][1])에 액세스할 수 있다.
[0040] 그 다음, 프로세서는 텐서 인덱스 엘리먼트들(202)을 업데이트하는 명령("IterateTensor")을 실행할 수 있다. 예를 들어, 텐서 순회 유닛은 텐서 인덱스 엘리먼트(228)(즉, X1,1)를 1 만큼 증가시킬 수 있다. 텐서 순회 유닛은 텐서 인덱스 엘리먼트(228)의 업데이트된 값(즉, 2)을 텐서 바운드 엘리먼트(216)의 값(즉, 2)과 비교할 수 있고, 텐서 인덱스 엘리먼트(228)의 업데이트된 값이 텐서 바운드 엘리먼트(216)의 값보다 작지 않다고 결정한다. 텐서 인덱스 엘리먼트(228)의 업데이트된 값이 텐서 바운드 엘리먼트(216)의 값보다 작지 않기 때문에, 텐서 순회 유닛은 텐서 인덱스 엘리먼트(226)를 1 만큼 증가시키고, 텐서 인덱스 엘리먼트(228)를 다시 0으로 리셋할 수 있다. 텐서 순회 유닛은 텐서 인덱스 엘리먼트(226)의 업데이트된 값(즉, 3+1=4)을 텐서 바운드 엘리먼트(214)의 값(즉, 4)과 비교할 수 있고, 텐서 인덱스 엘리먼트(226)의 업데이트된 값이 텐서 바운드 엘리먼트(214)의 값보다 작지 않다고 결정한다. 텐서 인덱스 엘리먼트(228)의 업데이트된 값이 텐서 바운드 엘리먼트(214)의 값보다 작지 않기 때문에, 텐서 순회 유닛은 다음 텐서 인덱스 엘리먼트(즉, X1,3)를 1 만큼 증가시키고, 텐서 인덱스 엘리먼트(226)를 다시 0으로 리셋할 수 있다. 그러나 대응하는 텐서 바운드 엘리먼트(즉, Y1,3)가 0이므로, 임계 값은 만족되지 않는다. 텐서 순회 유닛은, 제 1 행의 모든 텐서 인덱스 엘리먼트들이 0으로 리셋될 때까지 텐서 인덱스 엘리먼트들(202)의 제 1 행을 계속해서 리셋할 것이다.
[0041] 도 2b-2h를 참조하여 앞서 설명한 예에서, 엘리먼트(V)에 대한 텐서 순회의 순서는 V[0][0], V[0][1], V[1][0], V[1][1], V[2][0], V[2][1], V[3][0] 및 V[3][1]이다. 일부 구현들에서, 프로그램은, 엘리먼트(214)(즉, Y1,2)의 텐서 바운드 정보를 2로 설정하고, 엘리먼트(216) (즉, Y1, 1)의 경우 4로 설정하고, 엘리먼트(222)(즉, Z1, 2)의 차원 승수 정보를 1로 설정하고, 엘리먼트(224)(즉, Z1,1)의 경우 2로 설정함으로써, V[0][0], V[1][0], V[2][0], V[3][0], V[0][1], V[1][1], V[2][1] 및 V[3][1]의 순서로 엘리먼트(V)를 순회할 수 있다.
[0042] 도 3은 텐서 순회 유닛의 텐서 상태 엘리먼트(300)의 예시적인 세트를 도시한다. 텐서 상태 엘리먼트들(300)은 텐서 순회 유닛(106)의 텐서 상태 엘리먼트들(122) 또는 텐서 상태 엘리먼트들(200)에 대응할 수 있다. 텐서 순회 유닛(300)은 일 그룹의 텐서 인덱스 엘리먼트들(302), 일 그룹의 텐서 바운드 엘리먼트들(304), 일 그룹의 차원 승수 엘리먼트들(306) 및 일 그룹의 분기 타겟 엘리먼트들(308)을 포함한다. 분기 타겟 엘리먼트들(308)은 2-D 어레이로서 물리적으로 또는 논리적으로 배열될 수 있으며, 여기서 분기 타겟 엘리먼트들(308)의 각각의 엘리먼트는 텐서 인덱스 엘리먼트들(302) 중 대응하는 엘리먼트를 갖는다. 일부 구현들에서, 분기 타겟 엘리먼트들(308)의 각각의 행은 텐서에 대한 분기 타겟 정보를 나타낼 수 있다. 일부 구현들에서, 분기 타겟 엘리먼트들(308)의 각각의 열은 텐서와 관련된 중첩 루프 인덱스 변수 값들에 대한 분기 타겟 정보를 나타낼 수 있다. 일부 구현들에서, 텐서 인덱스 엘리먼트들(302), 텐서 바운드 엘리먼트들(304) 및 차원 승수 엘리먼트들(306)에 대해 N개의 열이 있는 N-차원 텐서의 경우, 바운드 임계치를 충족시키기 위한 N + 1개의 케이스들이 존재하기 때문에, 대응하는 분기 타겟들(308)의 N + 1개의 열들이 존재할 수 있다.
[0043] 일부 구현들에서, 분기 타겟 정보는 중첩 루프에서 루프 반복의 완료 시, 프로세서에 의해 실행될 명령의 메모리 어드레스를 포함할 수 있다. 예를 들어, 텐서 인덱스 엘리먼트 내의 값이 업데이트될 때, 프로세서는 대응하는 분기 타겟 엘리먼트에 저장된 메모리 어드레스에 따라 명령을 실행할 수 있다. 도 3을 참조하면, 프로그램(312)은 프로세싱 유닛(102)에 의해 실행될 수 있는 저장 매체(104) 또는 다른 저장 매체에 저장될 수 있다. 프로그램(312)은 4의 제 1 차원 및 2의 제 2 차원을 갖는 캐릭터 어레이 변수(V)를 지정한다. 프로그램(312)은 변수(V)를 순회하기 위해 중첩 for-루프를 지정하며, 여기서 for-루프는 중첩 루프 인덱스 변수(i)에 의해 추적된 외곽 루프에서 V의 제 1 차원을 순회하고, 중첩 루프 인덱스 변수(j)에 의해 추적된 내곽 루프에서 V의 제 2 차원을 순회한다. 프로그램(312)은 또한, 프로세서가 중첩 루프 인덱스 변수 i의 현재 값과 번호 2를 비교하기 위해 최소 기능 명령을 실행하도록 요구하는, 내곽 루프를 빠져나가기 위한 조건을 지정한다. 일부 구현들에서, 최소 기능 명령의 메모리 어드레스는 분기 타겟 엘리먼트(324)에 저장될 수 있어서, 텐서 인덱스 엘리먼트(326)로부터 텐서 인덱스 엘리먼트(328)로의 전달(carry-over)이 있는 경우, 내곽 루프에 대한 분기 조건을 결정하고 내곽 루프에 대한 텐서 바운드 정보를 설정하기 위해 최소 기능 명령이 프로세서에 의해 실행될 것이다. 유사하게, 다른 명령의 메모리 어드레스가 분기 타겟 엘리먼트(322)에 저장될 수 있어서, 텐서 인덱스 엘리먼트(328)로의 전달 없이 텐서 인덱스 엘리먼트(326)에 증가가 있는 경우, 상이한 명령이 프로세서에 의해 실행될 것이다.
[0044] 도 4는 다차원 텐서 변수의 어드레스를 결정하기 위한 프로세스(400)의 일례를 도시하는 흐름도이다. 프로세스(400)는 하나 이상의 컴퓨터들의 시스템, 예컨대 컴퓨팅 시스템(100)에 의해 수행될 수 있다. 시스템은 다수의 텐서 인덱스 엘리먼트들 및 다수의 차원 승수 엘리먼트들을 갖는 텐서 순회 유닛을 포함하며, 여기서 차원 승수 엘리먼트들 각각은 대응하는 텐서 인덱스 엘리먼트를 갖는다. 일부 구현들에서, 시스템은 다수의 텐서 바운드 엘리먼트들을 포함할 수 있으며, 여기서 다수의 텐서 바운드 엘리먼트들 각각은 다수의 텐서 인덱스 엘리먼트들 중 대응하는 텐서 인덱스 엘리먼트를 가질 수 있다. 일부 구현들에서, 시스템은 하나 이상의 연산 논리 유닛들을 포함한다.
[0045] 시스템은 N-차원 텐서의 특정 엘리먼트에 액세스하기 위한 명령을 획득(402)하는데, 여기서 N-차원 텐서는 N 차원들 각각에 걸쳐 배열된 다수의 엘리먼트들을 가지며, N은 1보다 크거나 같은 정수이다. 예를 들어, 프로세싱 유닛 (102)은 텐서의 특정 엘리먼트에 액세스하기 위한 명령을 실행할 수 있다.
[0046] 일부 구현들에서, 명령은 제 1 루프 및 제 1 루프의 외곽 루프인 제 2 루프를 포함하는 중첩 루프를 프로세싱하기 위한 명령을 나타낼 수 있으며, 여기서 제 1 루프는 제 1 인덱스 변수를 사용하여 반복되고, 제 2 루프는 제 2 인덱스 변수를 사용하여 반복된다. 예를 들어, 프로그램(212)은 프로세싱 유닛(102)에 의해 실행될 수 있는 저장 매체(104) 또는 다른 저장 매체에 저장될 수 있다. 프로그램(212)은 4의 제 1 차원 및 2의 제 2 차원을 갖는 캐릭터 어레이 변수(V)를 지정할 수 있다. 프로그램(212)은 변수(V)를 순회하기 위해 중첩 for-루프를 지정할 수 있고, 여기서 for-루프는 중첩 루프 인덱스 변수(i)에 의해 추적된 외곽 루프에서 V의 제 1 차원을 순회하고, 중첩 루프 인덱스 변수(j)에 의해 추적된 내곽 루프에서 V의 제 2 차원을 순회한다.
[0047] 시스템은, 다수의 텐서 인덱스 엘리먼트들 중 하나 이상의 텐서 인덱스 엘리먼트들 및 다수의 차원 승수 엘리먼트들 중 하나 이상의 차원 승수 엘리먼트들을 이용하여, 특정 엘리먼트의 어드레스를 결정(404)한다. 일부 구현들에서, 특정 엘리먼트의 어드레스는 N-차원 텐서의 다른 엘리먼트로부터의 어드레스 오프셋일 수 있다. 하나 이상의 텐서 인덱스 엘리먼트들 중 각각의 텐서 인덱스 엘리먼트에 대해, 시스템은 각각의 텐서 인덱스 엘리먼트에 저장된 값에 하나 이상의 다수의 텐서 인덱스 엘리먼트들 중 대응하는 텐서 인덱스 엘리먼트에 저장된 값을 곱하여 각각의 곱해진 값을 생성할 수 있다. 시스템은 곱해진 값들의 합을 결정함으로써 어드레스 오프셋을 결정할 수 있다. 예를 들어, 연산 로직 유닛 (예를 들어, 연산 로직 유닛 (106))은, 텐서 인덱스 엘리먼트들(202) 각각에 저장된 값들과 대응하는 차원 승수 엘리먼트들(206)에 저장된 값들 사이의 곱의 합을 계산함으로써 메모리 어드레스 오프셋을 결정할 수 있다.
[0048] 일부 구현들에서, 시스템은 다수의 텐서 인덱스 엘리먼트들, 다수의 차원 승수 엘리먼트들 및 다수의 텐서 바운드 엘리먼트들에 저장된 값들을 초기화 값으로 설정할 수 있다. 예를 들어, 프로세서는 텐서 상태 엘리먼트들(200)을 초기화하는 명령("InitializeElements")을 실행할 수 있다. 초기화 이후, 텐서 상태 엘리먼트들(200)의 각각의 엘리먼트가 0으로 설정될 수 있다.
[0049] 일부 구현들에서, 시스템은 제 1 루프를 반복하기 위해 다수의 텐서 바운드 엘리먼트들 중 제 1 텐서 바운드 엘리먼트에 저장된 값을 제 1 인덱스 변수의 상한 값으로 설정할 수 있다. 시스템은 제 2 루프를 반복하기 위해 다수의 텐서 바운드 엘리먼트들의 제 2 텐서 바운드 엘리먼트에 저장된 값을 제 2 인덱스 변수의 상한 값으로 설정할 수 있다. 예를 들어, 프로세서는 텐서 상태 엘리먼트들(200)을 초기화하는 명령("InitializeElements")을 실행할 수 있다. 초기화 이후, 텐서 상태 엘리먼트들(200)의 각각의 엘리먼트가 0으로 설정될 수 있다. 시스템은 다수의 차원 승수 엘리먼트들 중 제 1 차원 승수 엘리먼트에 저장된 값을 미리 결정된 값으로 설정할 수 있다. 시스템은 다수의 차원 승수 엘리먼트들의 제 2 차원 승수 엘리먼트에 저장된 값을 제 1 인덱스 변수의 상한 값으로 설정할 수 있다. 예를 들어, 프로세서는 텐서 바운드 엘리먼트들(204)에서 텐서 바운드 정보를 설정하는 명령("SetTensorBound")을 실행할 수 있다. 텐서 바운드 엘리먼트들(204)에서 텐서 바운드 정보를 설정한 후, 엘리먼트(214)(즉, Y1,2)가 4로 설정되고, 엘리먼트(216)(즉, Y1,1)가 2로 설정된다.
[0050] 일부 구현들에서, 시스템은 다수의 텐서 인덱스 엘리먼트들 중 제 1 텐서 인덱스 엘리먼트에 저장된 값을 제 1 인덱스 변수의 현재 값으로 설정할 수 있다. 시스템은 다수의 텐서 인덱스 엘리먼트들 중 제 2 텐서 인덱스 엘리먼트에 저장된 값을 제 2 인덱스 변수의 현재 값으로 설정할 수 있다. 시스템은 제 1 차원 승수 엘리먼트에 저장된 값에 제 1 텐서 인덱스 엘리먼트에 저장된 값을 곱하여 제 1 곱해진 값을 얻을 수 있다. 시스템은 제 2 차원 승수 엘리먼트에 저장된 값에 제 2 텐서 인덱스 엘리먼트에 저장된 값을 곱하여 제 2 곱해진 값을 얻을 수 있다. 시스템은 적어도 제 1 곱해진 값 및 제 2 곱해진 값을 합산함으로써 어드레스를 결정할 수 있다. 예를 들어, 연산 로직 유닛이 엘리먼트(X1,N)에 저장된 값에 엘리먼트(Z1,N)에 저장된 값을 곱하고, 엘리먼트(X1,N-1)에 저장된 값에 엘리먼트(Z1,N-1)에 저장된 값을 곱하고, ..., 엘리먼트(X1,2)에 저장된 값에 엘리먼트(Z1,2)에 저장된 값을 곱하고, 그리고 엘리먼트(X1,1)에 저장된 값에 엘리먼트(Z1,1)에 저장된 값을 곱한다. 그 다음, 연산 로직 유닛은 모든 곱셈 결과를 함께 합산하여 액세스되고 있는 엘리먼트에 대응하는 메모리 어드레스를 결정한다.
[0051] 일부 구현들에서, 시스템은 제 1 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하기 위한 명령을 수신할 수 있다. 예를 들어, 프로세서는 텐서 인덱스 엘리먼트들(202)을 업데이트하는 명령("IterateTensor")을 실행할 수 있다. 제 1 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하기 위한 명령을 수신한 후, 시스템은 제 1 텐서 인덱스 엘리먼트에 저장된 값과 제 1 텐서 바운드 엘리먼트에 저장된 값 사이의 차이가 임계 값을 만족한다고 결정할 수 있다. 제 1 텐서 인덱스 엘리먼트에 저장된 값과 제 1 텐서 바운드 엘리먼트에 저장된 값 사이의 차이가 임계 값을 만족한다는 결정에 응답하여, 시스템은 제 1 텐서 인덱스 엘리먼트에 저장된 값을 업데이트할 수 있다. 예를 들어, 도 2f를 참조하면, 텐서 순회 유닛은 텐서 인덱스 엘리먼트(228)(즉, X1,1)를 1 만큼 증가시킬 수 있다. 텐서 인덱스 엘리먼트(228)의 업데이트된 값은 텐서 바운드 엘리먼트(216)의 값보다 작고, 텐서 인덱스 엘리먼트(228)의 업데이트된 값은 1로 남는다.
[0052] 일부 구현들에서, 제 1 인덱스 변수는 제 1 루프가 완료될 때마다 제 1 증분 값만큼 증가될 수 있다. 시스템은 제 1 텐서 인덱스 엘리먼트에 저장된 값을 제 1 증분 값만큼 증가시킬 수 있다. 예를 들어, 프로그램이 제 2 내곽 루프에 진입한 후(즉, i=0 및 j=1), 텐서 순회 유닛은 텐서 인덱스 엘리먼트(228)(즉, X1,1)를 1 만큼 증가시킬 수 있다.
[0053] 일부 구현들에서, 시스템은 제 1 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하기 위한 명령을 수신할 수 있다. 예를 들어, 프로세서는 텐서 인덱스 엘리먼트들(202)을 업데이트하는 명령("IterateTensor")을 실행할 수 있다. 제 1 텐서 인덱스 엘리먼트에 저장된 값을 업데이트하기 위한 명령을 수신한 후, 시스템은 제 1 텐서 인덱스 엘리먼트에 저장된 값과 제 1 텐서 바운드 엘리먼트에 저장된 값 사이의 차이가 임계 값을 만족하지 않는다고 결정할 수 있다. 제 1 텐서 인덱스 엘리먼트에 저장된 값과 제 1 텐서 바운드 엘리먼트에 저장된 값 사이의 차이가 임계 값을 만족하지 않는다는 결정에 응답하여, 시스템은 제 1 텐서 인덱스 엘리먼트에 저장된 값을 리셋하고, 제 2 텐서 인덱스 엘리먼트에 저장된 값을 업데이트할 수 있다. 예를 들어, 텐서 순회 유닛은 텐서 인덱스 엘리먼트(228)(즉, X1,1)를 1 만큼 증가시킬 수 있다. 텐서 순회 유닛은 텐서 인덱스 엘리먼트(228)의 업데이트된 값(즉, 2)을 텐서 바운드 엘리먼트(216)의 값(즉, 2)과 비교할 수 있고, 텐서 인덱스 엘리먼트(228)의 업데이트된 값이 텐서 바운드 엘리먼트(216)의 값보다 작지 않다고 결정한다. 텐서 인덱스 엘리먼트(228)의 업데이트된 값이 텐서 바운드 엘리먼트(216)의 값보다 작지 않기 때문에, 텐서 순회 유닛은 텐서 인덱스 엘리먼트(226)를 1 만큼 증가시키고, 텐서 인덱스 엘리먼트(228)를 다시 0으로 리셋할 수 있다.
[0054] 일부 구현들에서, 제 2 인덱스 변수는 제 2 루프가 완료 될 때마다 제 2 증분 값만큼 증가될 수 있다. 시스템은 제 2 텐서 인덱스 엘리먼트에 저장된 값을 제 2 증분 값만큼 증가시킬 수 있다. 예를 들어, 프로그램이 외곽 루프의 다음 루프에 진입한 후(즉, i=1 및 j=0), 텐서 순회 유닛은 텐서 인덱스 엘리먼트(226)(즉, X1,2)를 1 만큼 증가시킬 수 있다.
[0055] 시스템은 N-차원 텐서의 특정 엘리먼트에 액세스하기 위해 결정된 어드레스를 나타내는 데이터를 출력(406)한다. 예를 들어, 프로세싱 유닛(102)은, 메모리 어드레스 오프셋 값을 사용하여, 저장 매체 내의 N-차원 어레이 변수의 특정 엘리먼트에 액세스 할 수 있다.
[0056] 일부 구현들에서, 시스템은 다수의 분기 타겟 엘리먼트들을 포함하며, 여기서 다수의 분기 타겟 엘리먼트들 각각은 다수의 텐서 인덱스 엘리먼트들 중 대응하는 텐서 인덱스 엘리먼트를 가지며, 다수의 분기 타겟 엘리먼트들 각각은 각 분기 타겟 엘리먼트에 대응하는 루프의 반복 완료 시에 실행될 명령에 대한 어드레스를 저장하도록 구성된다. 예를 들어, 텐서 순회 유닛(300)은 브랜치 타겟 정보를 저장하는 일 그룹의 브랜치 타겟 엘리먼트들(308)을 포함한다. 분기 타겟 정보는 중첩 루프에서 루프 반복의 완료 시, 프로세서에 의해 실행될 명령의 메모리 어드레스를 포함할 수 있다.
[0057] 본 명세서에서 설명된 기능 동작들 및 발명의 대상의 실시예들은, 디지털 전자 회로, 유형으로 구현된 컴퓨터 소프트웨어 또는 펌웨어, 본 명세서에 개시된 구조들 및 그 구조적의 등가물들을 포함하는 컴퓨터 하드웨어, 또는 이들 중 하나 이상의 조합으로 구현될 수 있다. 본 명세서에 기술된 발명의 대상의 실시예들은, 하나 이상의 컴퓨터 프로그램들, 즉 데이터 프로세싱 장치들에 의한 실행 또는 그 동작의 제어를 위해 유형의 비 일시적 프로그램 캐리어 상에 인코딩된 컴퓨터 프로그램 명령들의 하나 이상의 모듈들로서로서 구현될 수 있다. 대안으로 또는 부가적으로, 프로그램 명령들은 인위적으로 생성된 전파된 신호, 예를 들어, 데이터 프로세싱 장치에 의한 실행을 위해 적절한 수신기 장치들로의 전송을 위해 정보를 인코딩하도록 생성된 기계 생성 전기, 광학 또는 전자기 신호 상에 인코딩될 수 있다. 컴퓨터 저장 매체는 기계 판독 가능 저장 디바이스, 기계 판독 가능 저장 기판, 랜덤 또는 시리얼 액세스 메모리 디바이스, 또는 이들 중 하나 이상의 조합일 수 있다.
[0058] "데이터 프로세싱 장치"라는 용어는, 예를 들어, 프로그래밍 가능한 프로세서, 컴퓨터 또는 다수의 프로세서 또는 컴퓨터를 포함하는, 데이터를 프로세싱하기 위한 모든 종류의 장치, 디바이스 및 기계를 포함한다. 장치는 특수 목적 논리 회로, 예를 들어, FPGA (field programmable gate array) 또는 ASIC(application specific integrated circuit)를 포함할 수 있다. 하드웨어 외에도, 장치는, 해당 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드, 예를 들어, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제 또는 이들 중 하나 이상의 조합을 구성하는 코드를 포함할 수 있다.
[0059] 컴퓨터 프로그램(또한 프로그램, 소프트웨어, 소프트웨어 애플리케이션, 모듈, 소프트웨어 모듈, 스크립트 또는 코드로 설명되거나 이렇게 지칭될 수 있음)은, 컴파일링된 또는 인터프리팅된 언어들, 또는 선언형 또는 절차형 언어들을 포함한 임의의 형태의 프로그래밍 언어로 기록될 수 있고, 독립형 프로그램 또는 모듈, 컴포넌트, 서브루틴 또는 컴퓨팅 환경에 사용하기에 적합한 다른 유닛을 포함하는 임의의 형태로 전개될 수 있다. 컴퓨터 프로그램은 파일 시스템의 파일에 대응할 수 있지만 그럴 필요는 없다. 프로그램은, 다른 프로그램들 또는 데이터, 예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트들을 홀딩하는 파일의 부분에, 해당 프로그램에 전용인 단일 파일에, 또는 다수의 코디네이팅된 파일들, 예를 들어, 하나 이상의 모듈들, 서브 프로그램들 또는 코드의 부분들을 저장하는 파일들에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서 또는 일 사이트에 로케이팅되거나 다수의 사이트에 걸쳐 분포되고 통신 네트워크에 의해 서로 연결되는 다수의 컴퓨터들 상에서 실행되도록 전개될 수 있다.
[0060] 본 명세서에서 설명된 프로세스 및 로직 흐름들은, 입력 데이터에 대해 연산하고 출력을 생성함으로써 기능들을 수행하도록, 하나 이상의 프로그램 가능 컴퓨터가 하나 이상의 컴퓨터 프로그램들을 실행함으로써 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한, 특수 목적 로직 회로, 예를 들어, FPGA(field programmable gate array), ASIC (application specific integrated circuit) 또는 GPGPU (General purpose graphics processing unit)에 의해 수행되고, 장치는 이들로서 구현될 수 있다.
[0061] 컴퓨터 프로그램의 실행에 적합한 컴퓨터는, 예를 들어, 범용 또는 특수 목적 마이크로프로세서 또는 이 둘 모두, 또는 임의의 다른 종류의 중앙 프로세싱 유닛을 포함한다. 일반적으로, 중앙 프로세싱 유닛은, 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 이 둘 모두로부터 명령들 및 데이터를 수신할 것이다. 컴퓨터의 필수 엘리먼트들은 명령들을 수행 또는 실행하기 위한 중앙 프로세싱 유닛, 및 명령들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스들이다. 일반적으로, 컴퓨터는 또한, 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스들, 예를 들어, 자기, 광 자기 디스크 또는 광학 디스크로부터 데이터를 수신하거나 이들로 데이터를 전달하거나, 이 둘 모두를 위해 동작가능하게 이들에 커플링되거나 이들을 포함할 것이다. 그러나 컴퓨터는 그러한 장치를 가질 필요는 없다. 더욱이, 컴퓨터는 다른 디바이스, 예를 들어, 몇 가지를 언급하면, 모바일 전화, PDA(personal digital assistant), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS(Global Positioning System) 수신기 또는 휴대용 저장 디바이스, 예를 들어, USB(universal serial bus) 플래시 드라이브에 내장될 수 있다.
[0062] 컴퓨터 프로그램 명령들 및 데이터를 저장하기에 적합한 컴퓨터 판독 가능 매체는, 예로서, 반도체 메모리 디바이스들, 예를 들어, EPROM, EEPROM 및 플래시 메모리 장치; 자기 디스크들, 예를 들어, 내부 하드 디스크 또는 이동식 디스크; 광 자기 디스크; 및 CD ROM 및 DVD-ROM 디스크를 포함하는, 모든 형태의 비 휘발성 메모리, 매체 및 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 논리 회로에 의해 보조되거나 또는 그 안에 포함될 수 있다.
[0063] 사용자와의 인터렉션을 제공하기 위해, 본 명세서에 설명된 발명의 대상의 실시예들은, 정보를 사용자에게 디스플레이하기 위한 디스플레이 디바이스, 예를 들어, CRT(cathode ray tube) 또는 LCD (liquid crystal display) 모니터 및 사용자가 컴퓨터에 입력을 제공하는데 이용되는 키보드 및 포인팅 디바이스, 예컨대, 마우스 또는 트랙볼을 구비한 컴퓨터 상에서 구현될 수 있다. 다른 종류의 디바이스들이 또한 사용자와의 인터렉션을 제공하기 위해 사용될 수 있다; 예를 들어, 사용자에게 제공되는 피드백은 감각 피드백, 예를 들면, 시각 피드백, 청각 피드백, 또는 촉각 피드백의 임의의 형태일 수 있으며; 사용자로부터의 입력은 음향, 소리, 또는 촉각 입력을 포함하는 임의의 형태로 수신될 수 있다. 또한, 컴퓨터는 예를 들어, 웹 브라우저로부터 수신된 요청에 따라 사용자의 클라이언트 디바이스 상의 웹 브라우저에 웹 페이지를 전송함으로써; 사용자가 사용하는 디바이스에 문서를 전송하고 이로부터 문서를 수신하여 사용자와 인터렉션할 수 있다.
[0064] 본 명세서에 개시된 발명의 대상의 실시예들은, 예를 들어, 데이터 서버로서 백엔드 컴포넌트를 포함하거나, 미들웨어 컴포넌트, 예를 들어, 애플리케이션 서버를 포함하거나, 프론트엔드 컴포넌트, 예를 들어, 본 명세서에 설명된 발명의 대상의 구현 또는 하나 이상의 이러한 백엔드, 미들웨어 또는 프론트엔드 컴포넌트들의 임의의 결합과 사용자가 인터렉트하게 하는 그래픽 사용자 인터페이스 또는 웹 브라우저를 갖는 클라이언트 컴퓨터를 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 컴포넌트들은 디지털 데이터 통신의 임의의 형태 또는 매체, 예를 들어 통신 네트워크에 의해 인터커넥팅될 수 있다. 통신 네트워크들의 예들은 근거리 네트워크("LAN") 및 광역 네트워크("WAN"), 예를 들어, 인터넷을 포함한다.
[0065] 컴퓨팅 시스템은 클라이언트들 및 서버들을 포함할 수 있다. 클라이언트 및 서버는 일반적으로 서로로부터 원격이며, 전형적으로 통신 네트워크를 통해 인터렉트한다. 클라이언트와 서버의 관계는 각각의 컴퓨터들 상에서 구동하고 서로에 대해 클라이언트-서버 관계를 갖는 컴퓨터 프로그램들에 의해 발생한다.
[0066] 본 명세서가 많은 특징적인 구현 상세예들을 포함하지만, 이들은 임의의 발명 또는 청구되는 것의 범위에 대한 제한으로 해석되지 않아야 하며, 오히려 특정 발명의 특정한 실시예들에 특정할 수 있는 특징들의 설명으로서 해석되어야 한다. 별개의 실시예들의 맥락에서 본 명세서에서 설명되는 특정 기능들은 또한 단일 실시예에서의 조합으로 구현될 수 있다. 반대로, 단일 실시예의 맥락에서 설명된 다양한 특징들은 또한 개별적으로 다수의 실시예들로 또는 임의의 적합한 서브 조합으로 구현될 수 있다. 또한, 특징들이 특정 조합들로 작용하고 심지어 그처럼 초기에 청구된 대로 위에서 설명될 수 있지만, 청구된 조합으로부터의 하나 이상의 특징은 어떤 경우에는 조합으로부터 삭제될 수 있고, 청구된 조합은 서브 콤비네이션 또는 서브 콤비네이션의 변화로 지향될 수 있다.
[0067] 유사하게, 동작들이 특정 순서로 도면에 도시되어 있지만, 이것은 바람직한 결과를 달성하기 위해 이러한 동작들이 도시된 특정 순서로 또는 순차적인 순서로 수행되는 것 또는 모든 도시된 동작들이 수행되는 것을 필요로 하는 것으로 이해되어서는 안된다. 특정 상황에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다. 또한, 전술한 실시예들에서 다양한 시스템 모듈들 및 컴포넌트들의 분리는, 모든 실시예들에서 이러한 분리를 필요로 하는 것으로 이해되어서는 안 되며, 설명된 프로그램 컴포넌트들 및 시스템들이 일반적으로 단일 소프트웨어 제품으로 함께 통합되거나 복수의 소프트웨어 제품들로 패키징될 수 있다는 것이 이해되어야 한다.
[0068] 발명의 대상의 특정 실시예들이 기술되었다. 다른 실시예들이 이하의 청구항들의 범위 내에 있다. 예를 들어, 청구항에 인용된 동작들은 상이한 순서로 수행될 수 있고 여전히 원하는 결과들을 달성할 수 있다. 일례로서, 첨부된 도면들에 도시된 프로세스들은, 원하는 결과를 달성하기 위해, 도시된 특정 순서 또는 순차적인 순서를 반드시 필요로 하는 것은 아니다. 특정 구현들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다.

Claims (20)

  1. 다차원 텐서 입력을 프로세싱하기 위한 장치로서,
    다수의 텐서 인덱스 엘리먼트들 ― 상기 다수의 텐서 인덱스 엘리먼트들은 N-차원 텐서를 순회(traverse)하도록 사용되는 다수의 중첩 루프(nested loop)들 각각에 대한 텐서 인덱스 엘리먼트를 포함하고, 각각의 텐서 인덱스 엘리먼트는 상기 N-차원 텐서의 각각의 차원을 순회하도록 사용되는 각각의 중첩 루프에 대한 인덱스 값을 저장하도록 구성되는 각각의 제1 하드웨어 레지스터이고, 상기 N-차원 텐서는 N-차원들 각각에 걸쳐 배열된 데이터 엘리먼트들을 포함하고, N은 1보다 크거나 같은 정수이며, 각각의 인덱스 값은 상기 인덱스 값에 대한 상기 각각의 중첩 루프의 반복이 수행될 때마다 업데이트되는 값임 ―;
    다수의 차원 승수 엘리먼트들 ― 각각의 차원 승수 엘리먼트는 상기 N-차원 텐서의 각각의 차원에 대한 승수 값을 저장하도록 구성되는 각각의 제2 하드웨어 레지스터이고, 각각의 승수 값은 상기 승수 값에 대한 상기 N-차원 텐서의 상기 각각의 차원에 대한 상수 값이고, 그리고 상기 각각의 차원을 순회하도록 사용되는 상기 각각의 중첩 루프의 각각의 반복에 대해 일정하게 유지됨―; 및
    하나 이상의 하드웨어 프로세서들에 의해 실행가능한 명령 세트의 하나 이상의 명령들을 실행하도록 구성되는 상기 하나 이상의 하드웨어 프로세서들을 포함하고,
    상기 하나 이상의 명령들의 실행은 상기 하나 이상의 하드웨어 프로세서들이 동작들을 수행하도록 야기하고, 상기 동작들은:
    상기 N-차원 텐서의 데이터 엘리먼트들의 시퀀스에 대한 데이터 값들을 저장하기 위한 메모리 내의 위치들에 대한 메모리 어드레스들을 결정하는 동작 ― 상기 결정하는 동작은:
    상기 중첩 루프들의 내부 루프의 각각의 반복에 대해,
    상기 N-차원 텐서의 각각의 차원에 대해, (i) 상기 차원을 순회하도록 사용되는 상기 중첩 루프에 대한 상기 텐서 인덱스 엘리먼트에 저장된 상기 인덱스 값과 (ii) 상기 차원에 대한 상기 승수 값의 곱(product)을 결정하는 동작; 및
    상기 N-차원 텐서의 각각의 차원에 대한 상기 곱의 합에 기초하여, 상기 내부 루프의 상기 반복에 대응하는 데이터 엘리먼트에 대한 메모리 어드레스를 결정하는 동작에 의해 결정됨 ―; 및
    상기 N-차원 텐서의 데이터 엘리먼트들의 상기 시퀀스에서 각각의 데이터 엘리먼트에 대한 상기 결정된 메모리 어드레스를 나타내는 데이터를 출력하는 동작을 포함하는, 다차원 텐서 입력을 프로세싱하기 위한 장치.
  2. 제 1 항에 있어서,
    상기 N-차원 텐서의 각각의 차원에 대한 상기 곱의 합에 기초하여, 상기 내부 루프의 상기 반복에 대응하는 데이터 엘리먼트에 대한 상기 메모리 어드레스를 결정하는 동작은, (i) 상기 N-차원 텐서의 각각의 차원에 대한 상기 곱의 합과 (ii) 베이스 메모리 어드레스의 합을 결정하는 동작을 포함하는, 다차원 텐서 입력을 프로세싱하기 위한 장치.
  3. 제 1 항에 있어서,
    상기 각각의 데이터 엘리먼트에 대한 상기 결정된 메모리 어드레스를 나타내는 데이터를 출력하는 동작은, 상기 메모리 어드레스들이 결정되는 순서대로 각각의 데이터 엘리먼트에 대한 상기 결정된 메모리 어드레스를 나타내는 데이터를 순차적으로(sequentially) 출력하는 동작을 포함하는, 다차원 텐서 입력을 프로세싱하기 위한 장치.
  4. 제 1 항에 있어서,
    상기 하나 이상의 프로세서들은:
    상기 내부 루프가 완료될 때마다 제1 증분 값만큼 상기 내부 루프의 상기 인덱스 값을 증가시키고; 그리고
    제2 루프가 완료될 때마다 제2 증분 값만큼 상기 내부 루프가 중첩된 상기 제2 루프에 대한 인덱스 값을 증가시키도록 추가로 구성되는, 다차원 텐서 입력을 프로세싱하기 위한 장치.
  5. 제 1 항에 있어서,
    상기 하나 이상의 프로세서들은:
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신하고;
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신한 후에, 상기 내부 루프에 대한 상기 인덱스 값과 상기 내부 루프에 대한 텐서 바운드 엘리먼트에 저장된 텐서 바운드 값 사이의 차이가 임계 값을 만족한다고 결정하는 것과 그리고 상기 결정하는 것에 응답하여:
    제1 증분 값만큼 상기 내부 루프에 대한 상기 인덱스 값을 증가시키도록 추가로 구성되는, 다차원 텐서 입력을 프로세싱하기 위한 장치.
  6. 제 1 항에 있어서,
    상기 하나 이상의 프로세서들은:
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신하고;
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신한 후에, 상기 내부 루프에 대한 상기 인덱스 값과 상기 내부 루프에 대한 텐서 바운드 엘리먼트에 저장된 텐서 바운드 값 사이의 차이가 임계 값을 만족하지 않는다고 결정하는 것과 그리고 상기 결정하는 것에 응답하여:
    상기 내부 루프에 대한 상기 인덱스 값을 상기 내부 루프에 대한 초기값으로 리셋하고; 그리고
    제2 증분 값만큼 상기 내부 루프가 중첩된 제2 루프에 대한 인덱스 값을 증가시키도록 추가로 구성되는, 다차원 텐서 입력을 프로세싱하기 위한 장치.
  7. 제 1 항에 있어서,
    상기 하나 이상의 프로세서들은 하나 이상의 연산 로직 유닛들을 포함하는, 다차원 텐서 입력을 프로세싱하기 위한 장치.
  8. 시스템으로서,
    N-차원 텐서에 대한 선형 연산들을 수행하도록 구성되는 하나 이상의 하드웨어 프로세서들 ― 상기 N-차원 텐서는 상기 N 차원들 각각에 걸쳐 배열된 데이터 엘리먼트들을 가지며, N은 1보다 크거나 같은 정수임 ―;
    다수의 텐서 인덱스 엘리먼트들 ― 상기 다수의 텐서 인덱스 엘리먼트들은 상기 N-차원 텐서를 순회(traverse)하도록 사용되는 다수의 중첩 루프(nested loop)들 각각에 대한 텐서 인덱스 엘리먼트를 포함하고, 각각의 텐서 인덱스 엘리먼트는 상기 N-차원 텐서의 각각의 차원을 순회하도록 사용되는 각각의 중첩 루프에 대한 인덱스 값을 저장하도록 구성되는 각각의 제1 하드웨어 레지스터이고, 각각의 인덱스 값은 상기 인덱스 값에 대한 상기 각각의 중첩 루프의 반복이 수행될 때마다 업데이트되는 값임 ―;
    다수의 차원 승수 엘리먼트들 ― 각각의 차원 승수 엘리먼트는 상기 N-차원 텐서의 각각의 차원에 대한 승수 값을 저장하도록 구성되는 각각의 제2 하드웨어 레지스터이고, 각각의 승수 값은 상기 승수 값에 대한 상기 N-차원 텐서의 상기 각각의 차원에 대한 상수 값이고, 그리고 상기 각각의 차원을 순회하도록 사용되는 상기 각각의 중첩 루프의 각각의 반복에 대해 일정하게 유지됨 ―; 및
    하드웨어 회로를 포함하며, 상기 하드웨어 회로는:
    상기 N-차원 텐서의 데이터 엘리먼트들의 시퀀스에 대한 메모리 어드레스들을 결정하고 ― 상기 결정하는 것은:
    상기 중첩 루프들의 내부 루프의 각각의 반복에 대해,
    상기 N-차원 텐서의 각각의 차원에 대해, (i) 상기 차원을 순회하도록 사용되는 상기 중첩 루프에 대한 상기 텐서 인덱스 엘리먼트에 저장된 상기 인덱스 값과 (ii) 상기 차원에 대한 상기 승수 값의 곱(product)을 결정하는 것; 및
    상기 N-차원 텐서의 각각의 차원에 대한 상기 곱의 합에 기초하여, 상기 내부 루프의 상기 반복에 대응하는 데이터 엘리먼트에 대한 메모리 어드레스를 결정하는 것에 의해 결정됨 ―; 그리고
    상기 N-차원 텐서의 데이터 엘리먼트들의 상기 시퀀스에서 각각의 데이터 엘리먼트에 대한 상기 결정된 메모리 어드레스를 나타내는 데이터를 출력하도록 구성되는, 시스템.
  9. 제 8 항에 있어서,
    상기 N-차원 텐서의 각각의 차원에 대한 상기 곱의 합에 기초하여, 상기 내부 루프의 상기 반복에 대응하는 데이터 엘리먼트에 대한 상기 메모리 어드레스를 결정하는 것은, (i) 상기 N-차원 텐서의 각각의 차원에 대한 상기 곱의 합과 (ii) 베이스 메모리 어드레스의 합을 결정하는 것을 포함하는, 시스템.
  10. 제 8 항에 있어서,
    상기 각각의 데이터 엘리먼트에 대한 상기 결정된 메모리 어드레스를 나타내는 데이터를 출력하는 것은, 상기 메모리 어드레스들이 결정되는 순서대로 각각의 데이터 엘리먼트에 대한 상기 결정된 메모리 어드레스를 나타내는 데이터를 순차적으로 출력하는 것을 포함하는, 시스템.
  11. 제 8 항에 있어서,
    상기 회로는:
    상기 내부 루프가 완료될 때마다 제1 증분 값만큼 상기 내부 루프에 대한 상기 인덱스 값을 증가시키고; 그리고
    제2 루프가 완료될 때마다 제2 증분 값만큼 상기 내부 루프가 중첩된 상기 제2 루프에 대한 인덱스 값을 증가시키도록 추가로 구성되는, 시스템.
  12. 제 8 항에 있어서,
    상기 회로는:
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신하고;
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신한 후에, 상기 내부 루프에 대한 상기 인덱스 값과 상기 내부 루프에 대한 텐서 바운드 엘리먼트에 저장된 텐서 바운드 값 사이의 차이가 임계 값을 만족한다고 결정하는 것과 그리고 상기 결정하는 것에 응답하여:
    제1 증분 값만큼 상기 내부 루프에 대한 상기 인덱스 값을 증가시키도록 추가로 구성되는, 시스템.
  13. 제 8 항에 있어서,
    상기 회로는:
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신하고;
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신한 후에, 상기 내부 루프에 대한 상기 인덱스 값과 상기 내부 루프에 대한 텐서 바운드 엘리먼트에 저장된 텐서 바운드 값 사이의 차이가 임계 값을 만족하지 않는다고 결정하는 것과 그리고 상기 결정하는 것에 응답하여:
    상기 내부 루프에 대한 상기 인덱스 값을 상기 내부 루프에 대한 초기값으로 리셋하고; 그리고
    제2 증분 값만큼 상기 내부 루프가 중첩된 제2 루프에 대한 인덱스 값을 증가시키도록 추가로 구성되는, 시스템.
  14. 제 8 항에 있어서,
    상기 하나 이상의 프로세서들은 하나 이상의 연산 로직 유닛들을 포함하는, 시스템.
  15. 하나 이상의 하드웨어 프로세서들에 의해 실행가능한 명령 세트의 하나 이상의 명령들을 실행하는 상기 하나 이상의 하드웨어 프로세서들을 포함하는 데이터 프로세싱 장치에 의해 수행되는 방법으로서, 상기 방법은:
    상기 하나 이상의 하드웨어 프로세서들에 의해, N-차원 텐서의 데이터 엘리먼트들의 시퀀스에 대한 메모리 어드레스들을 결정하는 단계 ― 상기 N-차원 텐서는 N-차원들 각각에 걸쳐 배열된 데이터 엘리먼트들을 포함하고, N은 1보다 크거나 같은 정수이며, 상기 결정하는 단계는:
    상기 N-차원 텐서를 순회하도록 사용되는 다수의 중첩 루프들의 내부 루프의 각각의 반복에 대해,
    상기 하나 이상의 하드웨어 프로세서들에 의해, 상기 N-차원 텐서의 각각의 차원에 대해, (i) 상기 차원을 순회하도록 사용되는 상기 중첩 루프에 대한 텐서 인덱스 엘리먼트에 저장된 인덱스 값과 (ii) 상기 차원에 대한 차원 승수 엘리먼트에 저장된 상기 차원에 대한 승수 값의 곱을 결정하는 단계; 및
    상기 하나 이상의 하드웨어 프로세서들에 의해, 상기 N-차원 텐서의 각각의 차원에 대한 상기 곱의 합에 기초하여, 상기 내부 루프의 상기 반복에 대응하는 데이터 엘리먼트에 대한 메모리 어드레스를 결정하는 단계를 포함함 ―; 및
    상기 하나 이상의 하드웨어 프로세서들에 의해, 상기 N-차원 텐서의 데이터 엘리먼트들의 상기 시퀀스에서 각각의 데이터 엘리먼트에 대한 상기 결정된 메모리 어드레스를 나타내는 데이터를 출력하는 단계를 포함하고,
    각각의 중첩 루프는 대응하는 텐서 인덱스 엘리먼트에 저장된 대응하는 인덱스 값을 가지며, 각각의 텐서 인덱스 엘리먼트는 각각의 제1 하드웨어 레지스터이고, 각각의 인덱스 값은 상기 인덱스 값에 대응하는 중첩 루프의 반복이 수행될 때마다 업데이트되는 값이고,
    각각의 중첩 루프는 대응하는 차원 승수 엘리먼트에 저장된 대응하는 승수 값을 가지며, 각각의 차원 승수 엘리먼트는 각각의 제2 하드웨어 레지스터이고, 각각의 승수 값은 상기 승수 값에 대응하는 중첩 루프의 각각의 반복에 대해 일정하게 유지되는 승수 값에 대한 차원에 대한 상수 값인, 방법.
  16. 제 15 항에 있어서,
    상기 N-차원 텐서의 각각의 차원에 대한 상기 곱의 합에 기초하여, 상기 내부 루프의 상기 반복에 대응하는 데이터 엘리먼트에 대한 상기 메모리 어드레스를 결정하는 단계는, (i) 상기 N-차원 텐서의 각각의 차원에 대한 상기 곱의 합과 (ii) 베이스 메모리 어드레스의 합을 결정하는 단계를 포함하는, 방법.
  17. 제 15 항에 있어서,
    상기 각각의 데이터 엘리먼트에 대한 상기 결정된 메모리 어드레스를 나타내는 데이터를 출력하는 단계는, 상기 메모리 어드레스들이 결정되는 순서대로 각각의 데이터 엘리먼트에 대한 상기 결정된 메모리 어드레스를 나타내는 데이터를 순차적으로 출력하는 단계를 포함하는, 방법.
  18. 제 15 항에 있어서,
    상기 내부 루프가 완료될 때마다 제1 증분 값만큼 상기 내부 루프에 대한 상기 인덱스 값을 증가시키는 단계; 및
    제2 루프가 완료될 때마다 제2 증분 값만큼 상기 내부 루프가 중첩된 상기 제2 루프에 대한 인덱스 값을 증가시키는 단계를 더 포함하는, 방법.
  19. 제 15 항에 있어서,
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신하는 단계;
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신한 후에, 상기 내부 루프에 대한 상기 인덱스 값과 상기 내부 루프에 대한 텐서 바운드 엘리먼트에 저장된 텐서 바운드 값 사이의 차이가 임계 값을 만족한다고 결정하는 것과 그리고 상기 결정하는 것에 응답하여:
    제1 증분 값만큼 상기 내부 루프에 대한 상기 인덱스 값을 증가시키는 단계를 더 포함하는, 방법.
  20. 제 15 항에 있어서,
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신하는 단계;
    상기 내부 루프에 대한 상기 인덱스 값을 업데이트하도록 하는 명령을 수신한 후에, 상기 내부 루프에 대한 상기 인덱스 값과 상기 내부 루프에 대한 텐서 바운드 엘리먼트에 저장된 텐서 바운드 값 사이의 차이가 임계 값을 만족하지 않는다고 결정하는 것과 그리고 상기 결정하는 것에 응답하여:
    상기 내부 루프에 대한 상기 인덱스 값을 상기 내부 루프에 대한 초기값으로 리셋하는 단계; 및
    제2 증분 값만큼 상기 내부 루프가 중첩된 제2 루프에 대한 인덱스 값을 증가시키는 단계를 더 포함하는, 방법.
KR1020180143824A 2016-02-03 2018-11-20 다차원 텐서들에서의 데이터 액세스 KR102472424B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020220159111A KR102596365B1 (ko) 2016-02-03 2022-11-24 다차원 텐서들에서의 데이터 액세스

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/014,265 2016-02-03
US15/014,265 US9875104B2 (en) 2016-02-03 2016-02-03 Accessing data in multi-dimensional tensors
KR1020160182981A KR101924500B1 (ko) 2016-02-03 2016-12-29 다차원 텐서들에서의 데이터 액세스

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020160182981A Division KR101924500B1 (ko) 2016-02-03 2016-12-29 다차원 텐서들에서의 데이터 액세스

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020220159111A Division KR102596365B1 (ko) 2016-02-03 2022-11-24 다차원 텐서들에서의 데이터 액세스

Publications (2)

Publication Number Publication Date
KR20180127945A true KR20180127945A (ko) 2018-11-30
KR102472424B1 KR102472424B1 (ko) 2022-11-29

Family

ID=57860636

Family Applications (4)

Application Number Title Priority Date Filing Date
KR1020160182981A KR101924500B1 (ko) 2016-02-03 2016-12-29 다차원 텐서들에서의 데이터 액세스
KR1020180143824A KR102472424B1 (ko) 2016-02-03 2018-11-20 다차원 텐서들에서의 데이터 액세스
KR1020220159111A KR102596365B1 (ko) 2016-02-03 2022-11-24 다차원 텐서들에서의 데이터 액세스
KR1020230144479A KR20230153972A (ko) 2016-02-03 2023-10-26 다차원 텐서들에서의 데이터 액세스

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020160182981A KR101924500B1 (ko) 2016-02-03 2016-12-29 다차원 텐서들에서의 데이터 액세스

Family Applications After (2)

Application Number Title Priority Date Filing Date
KR1020220159111A KR102596365B1 (ko) 2016-02-03 2022-11-24 다차원 텐서들에서의 데이터 액세스
KR1020230144479A KR20230153972A (ko) 2016-02-03 2023-10-26 다차원 텐서들에서의 데이터 액세스

Country Status (7)

Country Link
US (4) US9875104B2 (ko)
EP (1) EP3226121A3 (ko)
JP (3) JP6896415B2 (ko)
KR (4) KR101924500B1 (ko)
CN (2) CN107038018B (ko)
SG (2) SG10202104454YA (ko)
TW (4) TWI635390B (ko)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9256480B2 (en) * 2012-07-25 2016-02-09 Mobileye Vision Technologies Ltd. Computer architecture with a hardware accumulator reset
US9875104B2 (en) 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
US10175980B2 (en) 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US10360163B2 (en) 2016-10-27 2019-07-23 Google Llc Exploiting input data sparsity in neural network compute units
US9959498B1 (en) * 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10896367B2 (en) * 2017-03-07 2021-01-19 Google Llc Depth concatenation using a matrix computation unit
US11567765B2 (en) 2017-03-20 2023-01-31 Intel Corporation Systems, methods, and apparatuses for tile load
US10684955B2 (en) 2017-04-21 2020-06-16 Micron Technology, Inc. Memory devices and methods which may facilitate tensor memory access with memory maps based on memory operations
US10248908B2 (en) * 2017-06-19 2019-04-02 Google Llc Alternative loop limits for accessing data in multi-dimensional tensors
US11275588B2 (en) 2017-07-01 2022-03-15 Intel Corporation Context save with variable save state size
US10175912B1 (en) 2017-07-05 2019-01-08 Google Llc Hardware double buffering using a special purpose computational unit
US10108538B1 (en) 2017-07-31 2018-10-23 Google Llc Accessing prologue and epilogue data
GB2567038B (en) * 2017-07-31 2019-09-25 Google Llc Accessing prologue and epilogue data
GB2568776B (en) 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip
US11620490B2 (en) * 2017-10-17 2023-04-04 Xilinx, Inc. Multi-layer neural network processing by a neural network accelerator using host communicated merged weights and a package of per-layer instructions
KR102027034B1 (ko) * 2017-11-24 2019-09-30 서울대학교산학협력단 병렬 처리를 통한 다차원 데이터 분석을 지원하는 장치 및 그 방법
WO2019113021A1 (en) * 2017-12-05 2019-06-13 Wave Computing, Inc. Tensor manipulation within a reconfigurable fabric using pointers
US10956315B2 (en) 2018-07-24 2021-03-23 Micron Technology, Inc. Memory devices and methods which may facilitate tensor memory access
CN109255438B (zh) * 2018-09-17 2020-07-17 地平线(上海)人工智能技术有限公司 调整张量数据的方法和装置
CN117785441A (zh) * 2018-12-06 2024-03-29 华为技术有限公司 处理数据的方法和数据处理装置
CN111324294B (zh) * 2018-12-17 2023-11-07 地平线(上海)人工智能技术有限公司 存取张量数据的方法和装置
CN109857744B (zh) * 2019-02-13 2020-03-20 上海燧原智能科技有限公司 稀疏张量计算方法、装置、设备及存储介质
CN111723917B (zh) * 2019-03-21 2022-11-01 中科寒武纪科技股份有限公司 运算方法、装置及相关产品
CN110209503B (zh) * 2019-08-01 2019-10-25 上海燧原智能科技有限公司 多维张量的规约计算方法、装置、设备及介质
US11687336B2 (en) * 2020-05-08 2023-06-27 Black Sesame Technologies Inc. Extensible multi-precision data pipeline for computing non-linear and arithmetic functions in artificial neural networks
CN111767508B (zh) * 2020-07-09 2024-02-23 地平线(上海)人工智能技术有限公司 计算机实现张量数据计算的方法、装置、介质和设备
CN111737007B (zh) * 2020-07-24 2021-06-18 北京一流科技有限公司 数据对象的分频处理系统及其方法
US11954580B2 (en) * 2020-09-16 2024-04-09 Meta Platforms, Inc. Spatial tiling of compute arrays with shared control
CN113836049B (zh) * 2021-09-17 2023-08-08 海飞科(南京)信息技术有限公司 存储器访问方法和电子装置
CN114489798B (zh) * 2022-01-25 2024-04-05 海飞科(南京)信息技术有限公司 用于确定张量元素的越界状态的方法和电子装置
US11868329B2 (en) 2022-05-20 2024-01-09 International Business Machines Corporation Multidimensional cube multivariate regression

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040034754A1 (en) * 2002-08-19 2004-02-19 Schreiber Robert S. Method and system for memory management optimization
US20040093550A1 (en) * 2002-11-12 2004-05-13 Andrew Kadatch Matrix multiplication in a Galois field for forward error correction
US20080195851A1 (en) * 2005-01-25 2008-08-14 Nxp B.V. Multi-Threaded Processor
US20110107068A1 (en) * 2009-10-30 2011-05-05 International Business Machines Corporation Eliminating redundant operations for common properties using shared real registers
US20140188961A1 (en) * 2012-12-27 2014-07-03 Mikhail Plotnikov Vectorization Of Collapsed Multi-Nested Loops
US8806183B1 (en) * 2006-02-01 2014-08-12 Ixys Ch Gmbh Blank bit and processor instructions employing the blank bit

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58114245A (ja) * 1981-12-28 1983-07-07 Fujitsu Ltd インデツクス・インクリメントのベクトル化方式
JP3102027B2 (ja) 1990-11-20 2000-10-23 日本電気株式会社 ループ制御のネスティング管理機構
US5958048A (en) * 1996-08-07 1999-09-28 Elbrus International Ltd. Architectural support for software pipelining of nested loops
GB2359641B (en) 2000-02-25 2002-02-13 Siroyan Ltd Mapping circuitry and method
EP1261914B1 (en) * 2000-03-08 2005-12-07 Sun Microsystems, Inc. Processing architecture having an array bounds check capability
WO2001090888A1 (en) * 2000-05-23 2001-11-29 Theis Jean Paul A data processing system having an address generation unit with hardwired multidimensional memory indexing support
US6647484B1 (en) * 2000-09-19 2003-11-11 3 Dsp Corporation Transpose address mode in general purpose DSP processor
JP2003244190A (ja) * 2002-02-19 2003-08-29 Matsushita Electric Ind Co Ltd データフロー制御スイッチ用プロセッサ及びデータフロー制御スイッチ
US7107199B2 (en) * 2002-10-31 2006-09-12 Hewlett-Packard Development Company, L.P. Method and system for the design of pipelines of processors
US7225439B2 (en) * 2003-03-21 2007-05-29 Sun Microsystems, Inc. Combining write-barriers within an inner loop with fixed step
CN1259617C (zh) * 2003-09-09 2006-06-14 大唐微电子技术有限公司 一种加快rsa加/解密过程的方法及其模乘、模幂运算电路
US8904155B2 (en) 2006-03-17 2014-12-02 Qualcomm Incorporated Representing loop branches in a branch history register with multiple bits
US8438365B2 (en) * 2006-10-06 2013-05-07 Calos Fund Limited Liability Company Efficient data loading in a data-parallel processor
DE602007005790D1 (de) * 2007-06-26 2010-05-20 Ericsson Telefon Ab L M Datenverarbeitungseinheit für Anweisungen in geschachtelten Schleifen
US20100122066A1 (en) 2008-11-12 2010-05-13 Freescale Semiconductor, Inc. Instruction method for facilitating efficient coding and instruction fetch of loop construct
US20100274972A1 (en) 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
US20130185540A1 (en) * 2011-07-14 2013-07-18 Texas Instruments Incorporated Processor with multi-level looping vector coprocessor
CN104081341B (zh) * 2011-12-23 2017-10-27 英特尔公司 用于多维数组中的元素偏移量计算的指令
US20140181171A1 (en) 2012-12-24 2014-06-26 Pavel Dourbal Method and system for fast tensor-vector multiplication
CN103440513B (zh) * 2013-09-17 2017-01-18 西安电子科技大学 基于稀疏非负张量分解的大脑特定视觉认知状态判定方法
US8842117B1 (en) 2014-02-13 2014-09-23 Raycast Systems, Inc. Computer hardware architecture and data structures for lookahead flags to support incoherent ray traversal
CN105260322B (zh) * 2014-06-30 2020-09-01 中兴通讯股份有限公司 一种对循环缓冲区消除循环移位的方法和装置
US11170294B2 (en) 2016-01-07 2021-11-09 Intel Corporation Hardware accelerated machine learning
US9875104B2 (en) * 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
CA2990709C (en) 2016-05-26 2018-09-04 The Governing Council Of The University Of Toronto Accelerator for deep neural networks
US10175980B2 (en) 2016-10-27 2019-01-08 Google Llc Neural network compute tile

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040034754A1 (en) * 2002-08-19 2004-02-19 Schreiber Robert S. Method and system for memory management optimization
US20040093550A1 (en) * 2002-11-12 2004-05-13 Andrew Kadatch Matrix multiplication in a Galois field for forward error correction
US20080195851A1 (en) * 2005-01-25 2008-08-14 Nxp B.V. Multi-Threaded Processor
US8806183B1 (en) * 2006-02-01 2014-08-12 Ixys Ch Gmbh Blank bit and processor instructions employing the blank bit
US20110107068A1 (en) * 2009-10-30 2011-05-05 International Business Machines Corporation Eliminating redundant operations for common properties using shared real registers
US20140188961A1 (en) * 2012-12-27 2014-07-03 Mikhail Plotnikov Vectorization Of Collapsed Multi-Nested Loops

Also Published As

Publication number Publication date
CN107038018B (zh) 2019-07-19
TWI772842B (zh) 2022-08-01
EP3226121A3 (en) 2018-10-31
JP2021128801A (ja) 2021-09-02
US20170220345A1 (en) 2017-08-03
JP2023059898A (ja) 2023-04-27
US20180107483A1 (en) 2018-04-19
US20190205141A1 (en) 2019-07-04
KR102596365B1 (ko) 2023-10-31
US10228947B2 (en) 2019-03-12
TW202014897A (zh) 2020-04-16
US10838724B2 (en) 2020-11-17
TWI635390B (zh) 2018-09-11
CN110457069A (zh) 2019-11-15
SG10201610917TA (en) 2017-09-28
SG10202104454YA (en) 2021-06-29
JP7225314B2 (ja) 2023-02-20
TW201907305A (zh) 2019-02-16
KR101924500B1 (ko) 2018-12-03
EP3226121A2 (en) 2017-10-04
US9875104B2 (en) 2018-01-23
CN110457069B (zh) 2020-08-18
TWI681291B (zh) 2020-01-01
TW201729104A (zh) 2017-08-16
BR102016030825A2 (pt) 2018-10-09
CN107038018A (zh) 2017-08-11
TWI700587B (zh) 2020-08-01
KR20230004348A (ko) 2023-01-06
KR20170092445A (ko) 2017-08-11
US20170220352A1 (en) 2017-08-03
TW202040359A (zh) 2020-11-01
KR20230153972A (ko) 2023-11-07
JP6896415B2 (ja) 2021-06-30
KR102472424B1 (ko) 2022-11-29
US9875100B2 (en) 2018-01-23
JP2017138964A (ja) 2017-08-10

Similar Documents

Publication Publication Date Title
KR101924500B1 (ko) 다차원 텐서들에서의 데이터 액세스
US10534607B2 (en) Accessing data in multi-dimensional tensors using adders
US9946539B1 (en) Accessing data in multi-dimensional tensors using adders
US10108538B1 (en) Accessing prologue and epilogue data
GB2567038B (en) Accessing prologue and epilogue data
BR102016030825B1 (pt) Equipamento e método implementado em computador para processar uma instrução para acessar um tensor n-dimensional
BR122023003223B1 (pt) Equipamento para processar uma instrução para processar um laço encaixado e método implementado em computador

Legal Events

Date Code Title Description
A107 Divisional application of patent
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant