KR102261768B1 - 대안적인 루프 제한 - Google Patents

대안적인 루프 제한 Download PDF

Info

Publication number
KR102261768B1
KR102261768B1 KR1020197030429A KR20197030429A KR102261768B1 KR 102261768 B1 KR102261768 B1 KR 102261768B1 KR 1020197030429 A KR1020197030429 A KR 1020197030429A KR 20197030429 A KR20197030429 A KR 20197030429A KR 102261768 B1 KR102261768 B1 KR 102261768B1
Authority
KR
South Korea
Prior art keywords
loop
nested
iterations
bound
tensor
Prior art date
Application number
KR1020197030429A
Other languages
English (en)
Other versions
KR20190126887A (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 구글 엘엘씨
Priority to KR1020217016591A priority Critical patent/KR102278661B1/ko
Publication of KR20190126887A publication Critical patent/KR20190126887A/ko
Application granted granted Critical
Publication of KR102261768B1 publication Critical patent/KR102261768B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • 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
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Mathematical Physics (AREA)
  • Artificial Intelligence (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computational Linguistics (AREA)
  • Neurology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Complex Calculations (AREA)

Abstract

N-차원 텐서에 액세스하기 위한 방법, 시스템 및 장치가 설명된다. 일부 구현들에서, 방법은, 제1 네스트 루프의 하나 이상의 제1 반복 각각에 대해, 상기 제2 네스트 루프에 대한 제1 루프 바운드에 도달할 때까지 상기 제1 네스트 루프 내에 네스트된 제2 네스트 루프의 반복들을 수행하는 단계를 포함한다. 상기 제1 네스트 루프의 상기 하나 이상의 제1 반복에 대한 상기 제2 네스트 루프의 다수의 반복들은 컴퓨팅 시스템의 다수의 컴퓨팅 유닛들의 수의 값을 초과하는 총 반복 횟수를 갖는 상기 제2 네스트 루프에 응답하여 상기 제1 루프 바운드에 의해 제한된다. 상기 제1 네스트 루프의 끝에서 두 번째(penultimate) 반복이 완료된 후, 대안 루프 바운드에 도달할 때까지 상기 제1 네스트 루프의 최종 반복을 위해 상기 제2 네스트 루프의 하나 이상의 반복들이 수행된다.

Description

대안적인 루프 제한
본 명세서는 일반적으로 다수의 컴퓨팅 유닛을 포함하는 특수 목적 연산 유닛을 사용하여 기계 학습 연산을 수행하는 것에 관한 것이다.
신경망은 수신된 입력에 대한 출력, 예를 들어 분류를 생성하기 위해 하나 이상의 모델 계층을 사용하는 기계 학습 모델이다. 일부 신경망은 외부 계층 외에 하나 이상의 은닉층을 포함한다. 각각의 은닉층의 출력은 네트워크의 다음 계층, 즉 네트워크의 다음 은닉층 또는 출력층에 대한 입력으로 사용된다. 네트워크의 각 계층은 각 파라미터 세트의 현재 값에 따라 수신된 입력으로부터 출력을 생성한다.
일부 신경망은 하나 이상의 컨벌루션 신경망 계층을 포함한다. 각 컨벌루션 신경망 계층에는 관련 커널 세트가 있다. 커널은 가중치 입력의 매트릭스 구조로 표현될 수 있다. 각 컨벌루션 계층은 커널을 사용하여 계층에 대한 입력을 프로세싱한다. 계층에 대한 입력 세트는 또한 매트릭스 구조로 표현될 수 있다.
본 명세서에 기술된 요지의 하나의 혁신적인 양태에 따르면, N 차원 텐서에 액세스하기 위한 방법은, 제1 중첩(네스트) 루프(nested loop)의 하나 이상의 제1 반복 각각에 대해, 제2 중첩(네스트) 루프에 대한 제1 루프 바운드에 도달할 때까지 제1 중첩 루프 내에 중첩된 제2 중첩된 루프의 반복을 수행하는 단계를 포함한다. 제1 중첩 루프의 하나 이상의 제1 반복에 대한 제2 중첩 루프의 다수의 반복은 컴퓨팅 시스템의 하드웨어 특성의 값을 초과하는 총 반복 횟수를 갖는 제2 중첩 루프에 응답하여 제1 루프 바운드에 의해 제한될 수 있다. 제1 중첩 루프의 끝에서 두 번째(penultimate) 반복이 완료된 후 대체 루프 바운드에 도달할 때까지 제1 중첩(네스트) 루프의 최종 반복에 대해 제2 중첩 루프의 하나 이상의 반복이 수행될 수 있으며, 상기 대체 루프 바운드는 제1 루프 바운드보다 작다.
이들 및 다른 구현들은 각각 다음 특징들 중 하나 이상을 선택적으로 포함할 수 있다. 일부 양태들은 제1 중첩 루프의 2차 반복이 완료되었다는 결정에 응답하여 제1 중첩 루프의 최종 반복을 위해 제1 루프 바운드에 대한 대안(alternative) 바운드를 대체(substituting)하는 것을 포함할 수 있다.
일부 양태들에서, 하드웨어 특성의 값은 컴퓨팅 시스템의 다수의 개별 컴퓨팅 유닛을 포함한다. 각각의 개별 컴퓨팅 유닛은 컴퓨팅 타일, 프로세서 또는 매스(math) 유닛을 포함할 수 있다.
제2 중첩 루프에 대한 제1 루프 바운드에 도달할 때까지 제1 중첩 루프 내에 종첩된 제2 중첩 루프의 반복을 수행하는 것은 컴퓨팅 유닛을 사용하여 병렬로 제2 종첩 루프의 각 반복을 수행하는 것을 포함할 수 있다. 각각의 컴퓨팅 유닛은 제2 중첩 루프의 각각의 반복을 수행할 수 있다.
일부 양태들에서, 대안적인 루프 바운드는 제2 중첩 루프의 총 반복 횟수를 컴퓨팅 유닛의 수로 나눈 나머지 값에 기초한다. 제1 중첩 루프 및 제2 중첩 루프를 포함하는 중첩 루프 세트는 제1 중첩 루프와 제2 중첩 루프 사이에 중첩된(nested) 하나 이상의 루프를 포함할 수 있고, 제2 중첩 루프는 다른 루프 내에 중첩될 수 있다. 제2 중첩 루프는 제1 중첩 루프와 제2 중첩 루프 사이에 중첩된 다른 루프없이 제1 중첩 루프 내에 직접 중첩될 수 있다.
본 명세서에서 설명된 요지는 다음의 장점들 중 하나 이상을 실현하기 위해 특정 실시 예들에서 구현될 수 있다. 다수의(복수의) 컴퓨팅 유닛, 예를 들어 다수의 컴퓨팅 타일, 다수의 프로세서, 또는 다수의 매스 유닛을 사용하여 기계 학습 연산을 병렬로 수행함으로써, 연산 속도 및 효율성이 증가되어 보다 복잡한 기계 학습 연산이 더 짧은 시간 내에 수행될 수 있다. 중첩 루프에 대해 조정 가능한 루프 바운드는 반복 횟수가 개별 컴퓨팅 장치 또는 기타 하드웨어 특성(속성)의 배수가 아닌 경우에도 중첩 루프의 병렬 반복 처리를 허용한다. 내부 루프(inner loop)에 대한 루프 바운드는 내부 루프의 반복 횟수가 내부 루프가 중첩된 외부 루프의 최종 반복을 제외한 모든 개별 컴퓨팅 유닛의 수와 동일하도록 설정될 수 있다. 이는 내부 루프의 각 반복이 예를 들어 동시에 외부 루프의 각 반복에 대해 병렬로 수행될 수 있게 한다. 또한, 외부 루프의 마지막 반복을 제외한 모든 반복에 대해, 각각의 개별 컴퓨팅 유닛은 외부 루프의 각 반복에 이용되어보다 빠르고 효율적인 연산을 수행한다. 외부 루프의 최종 반복을 위해 내부 루프에 대해 대안적인 루프 바운드를 대체함으로써 내부 루프의 반복을 수행하는 데 필요한 명령어(명령) 수를 줄일 수 있어 더 적은 메모리 장치 및/또는 더 많은 메모리를 사용할 수 있다.
이 양태 및 다른 양태의 다른 구현 예는 컴퓨터 저장 장치에 인코딩된 방법의 동작을 수행하도록 구성된 대응하는 시스템, 장치 및 컴퓨터 프로그램을 포함한다. 하나 이상의 컴퓨터로 구성된 시스템은 소프트웨어, 펌웨어, 하드웨어 또는 시스템에 설치된 이들의 조합으로 작동하여 시스템이 동작들을 수행하도록 구성될 수 있다. 하나 이상의 컴퓨터 프로그램은 데이터 처리 장치에 의해 실행될 때 그 장치로 하여금 동작을 수행하게 하는 명령어를 가짐으로써 구성될 수 있다.
본 명세서에서 설명된 요지의 하나 이상의 구현의 세부 사항은 첨부 도면 및 이하의 설명에서 설명된다. 본 요지의 다른 잠재적 특징, 양태 및 장점은 상세한 설명, 도면 및 청구 범위로부터 명백해질 것이다.
도 1은 예시적인 컴퓨팅 시스템이 텐서 연산을 가속화하는 환경의 블록도이다.
도 2는 다수의 컴퓨팅 유닛을 사용하여 텐서를 트래버스(traversing)하기 위한 예시적인 중첩 루프를 도시한다.
도 3은 텐서 연산을 수행하기 위한 예시적인 프로세스를 나타내는 흐름도이다.
다양한 도면에서 유사한 참조 번호 및 명칭은 유사한 요소를 나타낸다.
본 명세서에 기술된 요지는 예를 들어 다수의 컴퓨팅 유닛을 포함하는 하드웨어 컴퓨팅 시스템을 사용하여 병렬로 중첩 루프의 반복을 프로세싱(처리)하기 위한 대안적인 루프 제한을 사용하는 것에 관한 것이다. 각각의 컴퓨팅 유닛은 컴퓨팅 타일, 프로세서 또는 매스 유닛으로서 구현될 수 있다. 다수의 컴퓨팅 유닛은 신경망의 추론 워크로드를 가속 및/또는 텐서(Tensor) 요소에 대한 메모리 어드레스를 결정하기 위한 연산을 가속화하도록 구성될 수 있다. 하드웨어 컴퓨팅 시스템의 각각의 컴퓨팅 유닛(computing unit)은 자체 포함되며 다중 계층 신경망의 소정의 계층에 필요한 연산을 독립적으로 실행할 수 있다.
다중 계층을 갖는 신경망은 추론을 연산하는데 사용될 수 있다. 예를 들어, 입력이 주어지면 신경망은 입력에 대한 추론을 연산(계산)할 수 있다. 신경망은 신경망의 각 계층을 통한 입력을 처리함으로써 이러한 추론을 계산한다. 특히, 신경망의 계층들은 각각 각각의 가중치 세트를 갖는다. 각 계층은 입력을 수신하고 계층에 대한 가중치 세트에 따라 입력을 처리하여 출력을 생성한다.
따라서, 수신된 입력으로부터의 추론을 계산하기 위해, 신경망은 입력을 수신하고 추론을 생성하기 위해 각각의 신경망 계층을 통해 처리하고, 하나의 신경망 계층으로부터의 출력은 다음 신경망 계층에 대한 입력으로서 제공된다. 신경망 계층으로의 데이터 입력, 예를 들어 신경망으로의 입력 또는 시퀀스에서 계층 아래의 계층의 출력은 계층으로의 활성화 입력으로 지칭될 수 있다.
본 명세서에 기술된 기술은 다수의 컴퓨팅 유닛, 예를 들어 다수의 컴퓨팅 타일, 다수의 프로세서 또는 다수의 매스 유닛에 걸쳐 텐서 계산(연산)을 분산시킴으로써 텐서 요소에 대한 메모리 어드레스의 계산(연산)을 수행할 수 있다. 메모리 어드레스의 계산은 텐서 상태 요소에 기초하여 메모리 어드레스 오프셋을 결정하고 텐서 요소에 대한 베이스 어드레스에 상기 오프셋을 추가하는 것을 포함할 수 있다.
텐서는 다차원 기하학적 오브젝트이고, 예를 들어 다차원 기하학적 오브젝트는 매트릭스 및 데이터 어레이를 포함한다. 일반적으로, 소프트웨어 알고리즘은 N 차원 텐서를 트래버스하기 위해 중첩 루프를 처리함으로써 텐서 계산을 수행하기 위해 하나 이상의 컴퓨팅 타일에 의해 실행된다. 하나의 예시적인 계산 프로세스에서, 각각의 루프는 N 차원 텐서의 특정 차원을 트래버스하는 것을 담당할 수 있다. 소정의 텐서 구성에 대해, 컴퓨팅 타일은 텐서와 연관된 하나 이상의 내적 계산을 실행하기 위해 특정 텐서의 요소에 대한 액세스를 요구할 수 있다. 신경망 계층 내에서 수행되는 계산 프로세스는 가중치를 포함하는 파라미터 텐서와 입력 활성화를 포함하는 입력 텐서의 곱(곱셈)(multiplication)을 포함할 수 있다. 계산(연산)은 입력 활성화에 하나 이상의 사이클에 대한 가중치를 곱하고 여러 사이클에 걸쳐 곱의 누적을 수행하는 것을 포함한다. 계산은 메모리 구조에 의해 제공되는 입력 활성화가 다른 메모리 구조에 의해 제공되는 파라미터 또는 가중치로 곱해진 경우에 발생한다. 텐서는 메모리에 저장되기 때문에, 텐서 인덱스(indices) 세트는 상기 메모리로부터 텐서의 정확한 요소를 검색하기 위해 메모리 어드레스 세트로 변환을 요구할 수 있다. 일반적으로, 컴퓨팅 타일의 텐서 트래버스 유닛은 텐서와 연관된 각각의 차원의 인덱스 및 인덱스 요소가 트래버스되어 계산을 수행하는 순서를 제공하는 제어 동작을 실행한다. 곱셈 결과가 출력 버스에 기록되고 메모리에 저장되면 텐서 계산이 종료된다.
컴퓨팅 타일(또는 다중 컴퓨팅 타일) 내의 다수의 매스 유닛은 N 차원 텐서에 대한 메모리 어드레스 계산을 병렬로 수행할 수 있다. 예를 들어, 중첩 루프의 가장 안쪽 루프의 각 반복에 대해 계산이 수행될 수 있다. 텐서 계산이 수행되는 각 루프를 "텐서 계산 루프"라고 하며 항상 가장 안쪽 루프가 아닐 수도 있다. 이러한 반복에 대한 계산은 매스 유닛을 사용하여 병렬로 수행될 수 있다.
중첩 루프에서 텐서를 트래버스하는 것은 요소의 해당 데이터 값을 로드하거나 저장하기 위해 요소의 메모리 어드레스 값의 계산을 요구할 수 있다. 예를 들어, 3차원 텐서의 요소는 신경망에 의해 분류되는 이미지의 특징을 나타낼 수 있다. 제1 차원(Z)은 이미지의 폭을 나타내고, 제2 차원(Y)은 이미지의 높이를 나타내고, 제3 차원(X)은 이미지의 픽셀에 대한 RGB 값을 나타낼 수 있다. 이미지를 분류하기 위해, 각각의 RBG 값은 활성화 맵을 생성하도록 컨벌루션 계층의 필터 값에 곱해질 수 있다.
중첩 루프는 텐서의 각 RBG 값에 액세스하기 위한 메모리 어드레스를 결정하도록 사용될 수 있다. 중첩 루프는 텐서의 각 차원에 대한 루프를 포함할 수 있다. 예를 들어, 외부 루프(z)는 Z 차원(이미지의 폭)을 트래버스하는 데 사용될 수 있고, 중간 루프(y)는 Y 차원(이미지의 높이)을 트래버스하는 데 사용될 수 있으며, 내부 루프(x)는 X 차원(각 픽셀에 대한 3개의 RGB 값)을 트래버스하는 데 사용될 수 있다. 내부 루프의 각 반복에서, 메모리 어드레스는 외부 루프 z 및 중간 루프 y의 값으로 표현되는 이미지의 특정 픽셀에 대한 3개의 RGB 값 중 하나에 대해 결정된다. 예를 들어, Z = 0 및 Y = 0으로 표현되는 이미지의 픽셀의 R 값에 대한 메모리 어드레스는 z = 0 및 y = 0일 때(예를 들어, z = 0; y = 0; x = 0) 내부 루프 x의 제1 반복 동안 결정될 수 있다. 유사하게, Z = 5 및 Y = 2로 표현되는 이미지의 픽셀의 G 값에 대한 메모리 어드레스는 Z = 5 및 Y = 2(예를 들어, z = 5; y = 2; x = 2)일 때 내부 루프 x의 제3(세 번째) 반복 동안 결정될 수 있다.
메모리 어드레스 계산은 다수의 컴퓨팅 유닛을 사용하여 병렬로 수행될 수 있다. 예를 들어, 3개의 컴퓨팅 유닛이 있는 경우, 특정 픽셀의 각각의 RGB 값에 대한 메모리 어드레스 값이 병렬로 결정될 수 있다. 제1 컴퓨팅 유닛은 픽셀의 R 값에 대한 메모리 어드레스를 결정할 수 있고, 제2 컴퓨팅 유닛은 픽셀에 대한 G 값의 메모리 어드레스를 결정할 수 있고, 제3 컴퓨팅 유닛은 픽셀에 대한 B 값에 대한 메모리 어드레스를 결정할 수 있다. RGB 값에 대해 메모리 어드레스가 결정된 후, 프로세싱 유닛은 메모리 어드레스를 사용하여 상기 값에 액세스하고 그 값에 필터 값을 곱할 수 있다.
일부 경우에, 텐서 계산 루프의 반복 횟수는 컴퓨팅 유닛의 수를 초과할 수 있다. 이러한 경우에, 텐서 계산 루프의 반복은 텐서 계산 루프가 중첩되는(네스트되는)(nested) 외부 루프의 다수의 병렬 반복으로 분할될 수 있다. 예를 들어, 텐서 계산 루프에 대응하는 N 차원 텐서의 차원은 128개의 요소(element)를 포함할 수 있고 컴퓨팅 시스템은 64개의 컴퓨팅 유닛을 포함할 수 있다. 이 예에서, 텐서 계산 루프는 64개의 2개의 외부 루프 반복으로 분할될 수 있는 128개의 반복을 포함함으로 64개의 계산이 외부 루프의 2개의 반복 각각에 대해 병렬로 수행된다. 이 예에서, 처음(제1, 첫번째) 64 반복이 컴퓨팅 유닛들 사이에 분배될 수 있다. 처음 64 반복이 완료된 후, 다음 64 반복이 컴퓨팅 유닛들 사이에 분배될 수 있다.
일부 경우에, 텐서 계산 루프의 반복 횟수는 다수의 컴퓨팅 유닛의 정확한 배수가 아닐 수 있다. 예를 들어, 텐서 계산 루프에 대응하는 차원은 160개의 요소를 포함할 수 있고 컴퓨팅 시스템은 64개의 컴퓨팅 유닛을 가질 수 있다. 이 예에서, 텐서 계산 루프는 160의 반복을 포함하는데, 이는 64의 2개의 외부 루프 반복 및 32의 제3 외부 루프 반복으로 분할될 수 있다. 제3 외부 루프 반복에 대한 텐서 계산 루프의 반복 횟수를 조정하기 위해, 텐서 계산 루프에 대한 루프 바운드는 외부 루프의 제2 반복 이후, 예를 들어 외부 루프의 최종 반복 이전에 64에서 32로 변경될 수 있다.
도 1은 예시적인 컴퓨팅 시스템(102)이 텐서 계산을 가속시키는 환경(100)의 블록도이다. 예를 들어, 컴퓨팅 시스템(102)은 심층 신경망(DNN)과 관련된 계산을 가속화할 수 있다. 컴퓨팅 시스템(102)은 제어기(105) 및 다수의 개별 컴퓨팅 타일(112A-112-Z)을 포함한다. 제어기(105)는 컴퓨팅 시스템(102) 내에서 텐서 계산과 관련된 하나 이상의 명령어을 실행하도록 구성된다. 도시되지 않았지만, 제어기(105)는 컴퓨팅 시스템(102) 내에서 발생하는 계산과 관련된 다양한 데이터를 저장 및 액세스하기 위한 데이터 메모리 및 제어기(105)의 하나 이상의 프로세서에 의해 실행 가능한 하나 이상의 기계 판독 가능 명령어를 저장하기 위한 명령어 메모리를 포함할 수 있다.
제어기(105)는 호스트(130)로부터 입력(132), 예를 들어 명령, 컴파일된 프로그램 등을 수신할 수 있다. 컴퓨팅 시스템(102)이 텐서 계산을 수행한 후, 제어기(105)는 출력(134)을 호스트에 제공할 수 있다. 예를 들어, 출력(134)은 텐서 요소에 대한 메모리 어드레스일 수 있다. 제어기(105)는 호스트 인터페이스(미도시)를 통해 입력(132)을 수신하고 출력(134)을 호스트(130)에 제공할 수 있다.
제어기(105)는 하나 이상의 데이터 통신 경로, 예를 들어 하나 이상의 버스를 통해 컴퓨팅 타일(112-A-112-Z)과 통신할 수 있다. 유사하게, 컴퓨팅 타일(112-A-112-Z)은 하나 이상의 버스를 통해 서로 통신할 수 있다. 다수의 컴퓨팅 타일을 갖는 예시적인 컴퓨팅 시스템은 2016년 10 월 27 일에 출원된 "신경망 컴퓨팅 타일(Neural Network Compute Tile)"이라는 제목의 미국 특허 출원 제15/335,769호에 기술되어 있으며, 이는 그 전문이 본원에 참조로 포함된다.
각각의 컴퓨팅 타일(112-A-112-Z)은 프로세싱 유닛(114), 데이터 저장 매체(저장 매체)(116) 및 텐서 트래버스 유닛(120)을 포함한다. 저장 매체(116)는 컴퓨팅 시스템(102) 내에 정보를 저장한다. 일부 구현들에서, 저장 매체(116)는 휘발성 메모리 유닛(들)이다. 일부 다른 구현에서, 저장 매체(116)는 비휘발성 메모리 유닛(들)이다. 저장 매체(116)는 또한 플로피 디스크 장치, 하드 디스크 장치, 광 디스크 장치 또는 테이프 장치, 플래시 메모리 또는 다른 유사한 솔리드 스테이트 메모리 장치와 같은 다른 형태의 컴퓨터 판독 가능 매체이거나, SAN(Storage Area Network)의 장치 또는 기타 구성을 포함하는 장치의 어레이일 수 있다. 처리 장치(114)에 의해 실행될 때, 명령어는 처리 장치(114)로 하여금 하나 이상의 태스크들을 수행하게 한다.
처리 장치(114)는 하나 이상의 프로세서 및/또는 하나 이상의 FSM(finite-state machine)을 포함할 수 있다. 처리 장치(114)는 제어기(105)로부터 수신된 명령어를 실행할 수 있다. 예를 들어, 처리 장치(114)는 텐서 트래버스 유닛(120)을 사용하여 텐서 요소에 대한 메모리 어드레스(또는 메모리 어드레스 오프셋)를 계산하기 위한 명령어를 실행할 수 있다. FSM을 포함하는 처리 장치들에 대해, FSM은 텐서 트래버스 유닛(120)으로부터 텐서 요소들에 대한 메모리 어드레스를 질의(query)할 수 있다.
일반적으로, 텐서 트래버스 유닛(120)은 하나 이상의 텐서와 관련된 상태를 결정한다. 일부 구현들에서, 상기 상태는 루프 바운드 값들, 현재 루프 인덱스 변수 값들, 메모리 어드레스 값을 결정하기 위한 부분(partial) 어드레스 오프셋 값들 및/또는 분기(branch) 루프 바운드들을 처리하기 위한 프로그램 카운터 값들을 포함할 수 있다. 텐서 트래버스 유닛(120)은 ASIC(application-specific integrated circuit)로서 구현될 수 있다.
텐서 트래버스 유닛(120)은 텐서 인덱스를 메모리 어드레스로 변환한다. 예를 들어, 텐서 트래버스 유닛(120)은 N- 차원 텐서 인덱스 세트를 1-차원 어드레스 공간으로 변환할 수 있다. 텐서 트래버스 유닛(120)은 텐서 요소의 메모리 어드레스를 요소의 차원 인덱스의 조합(예를 들어, 선형 조합)으로 함으로써 그러한 변환을 수행할 수 있다.
텐서 트래버스 유닛(120)은 하나 이상의 텐서 상태 요소(122) 및 하나 이상의 매스 유닛(124)을 포함할 수 있다. 예를 들어, 컴퓨팅 타일(112-A)의 텐서 트래버스 유닛(120)은 4개의 매스 유닛(124-A 내지 124-D)을 포함한다. 다른 컴퓨팅 타일의 다른 텐서 트래버스 유닛은 다른 수의 매스 유닛을 포함할 수 있다. 텐서 상태 요소(122) 각각은 저장 요소, 예를 들어 레지스터 또는 임의의 적절한 저장 회로일 수 있다. 각각의 매스 유닛(124)은 하나 이상의 산술 논리 유닛(ALU) 및/또는 하나 이상의 하드웨어 가산기를 포함할 수 있다. 매스 유닛(124)은 예를 들어 텐서 상태 요소에 저장된 값에 기초하여 텐서 요소에 대한 메모리 어드레스 또는 메모리 어드레스 오프셋 값을 계산하는데 사용될 수 있다. 텐서 트래버스 유닛을 사용하여 메모리 어드레스를 결정하는 예시적인 기술은 2016 년 10 월 27 일에 출원된 "신경망 컴퓨팅 타일"이라는 제목의 미국 특허 출원 번호 15/335,769 및 2016 년 2월 3일에 출원된 "다차원 텐서”라는 제목의 미국 특허 출원 번호 15/014,265에 기술되어있다. 제어기(105)는 컴퓨팅 타일(112-A-112-Z)을 사용하여 텐서 계산을 조정(coordinate)할 수 있다. 예를 들어, 제어기(105)는 텐서 요소에 대한 메모리 어드레스를 결정하는 명령어를 수신할 수 있다. 제어기(105)는 중첩(네스트 또는 내포된) 루프를 사용하여 텐서 계산을 수행할 수 있다.
각 루프는 N 차원 텐서의 각 차원을 트래버스하는 역할을 한다. 다차원 텐서는 매트릭스(행렬) 또는 다차원 매트릭스일 수 있다. 예를 들어, 2차원 텐서는 매트릭스이고, 3 차원 텐서는 여러 개의 2차원 매트릭스로 구성된 3차원 매트릭스이다. N 차원 텐서의 각 차원은 하나 이상의 요소를 포함할 수 있으며, 각 요소는 각각의 데이터 값을 저장할 수 있다. 예를 들어, 텐서는 프로그램에서 변수일 수 있으며, 그 변수는 3차원 일 수 있다. 제1 차원은 300개의 요소의 길이를 가질 수 있고, 제2 차원은 1,000 개의 요소의 길이를 가질 수 있고, 제3 차원은 20개의 요소의 길이를 가질 수 있다. 물론, 각 차원에서 다른 수의 요소가 가능하다.
중첩 루프에서 텐서를 트래버스하는 것은 요소의 해당 데이터 값을 로드 또는 저장하기 위해 요소의 메모리 어드레스 값의 계산을 포함할 수 있다. 되풀이 루프(for-loop)는 중첩 루프(내포된 루프)(nested loop)의 예이며, 3개의 루프 인덱스 변수(예: i, j 및 k)로 추적되는 3개의 루프는 3차원 텐서를 통해 트래버스하기 위해 중첩(nested)될 수 있다. 신경망에서, 요소의 값은 텐서와 관련된 하나 이상의 내적 계산에 사용될 수 있다. 예를 들어, 요소의 값은 해당 파라미터 또는 가중치와 곱해질 수 있다. 텐서의 요소는 중첩된 되풀이 루프를 사용하여 순서대로 트래버스하여 요소에 액세스하고 그 요소의 값을 사용하여 하나 이상의 계산을 수행할 수 있다. 3차원 텐서 예를 계속하면, 외부 되풀이 루프(outer for-loop)는 변수 i에 의해 추적된 루프를 트래버스하는 데 사용될 수 있고, 중간 되풀이 루프(middle for-loop)는 변수 j에 의해 추적된 루프를 트래버스하는 데 사용될 수 있고, 내부 되풀이 루프(inner for-loop)는 변수 k에 의해 추적된 루프를 트래버스하는 데 사용될 수 있다. 이 예에서, 액세스된 제1 요소는 (i = 0, j = 0, k = 0)일 수 있고, 제2 요소는 (i = 0, j = 0, k = 1)일 수 있다. 컴퓨팅 타일들(112-A-112-Z)의 텐서 트래버스 유닛들(120)은 처리 장치(프로세싱 유닛)가 엘리먼트의 값에 액세스하고 요소의 값을 사용하여 하나 이상의 계산을 수행할 수 있도록 중첩 루프를 사용하여 순서대로 요소에 대한 메모리 어드레스를 결정하는데 사용될 수 있다. 가중치 또는 파라미터 값은 중첩된 되풀이 루프를 사용하여 유사하게 액세스될 수도 있다. 텐서 트래버스 유닛(120)은 또한 계산에 사용된 가중치 또는 파라미터 및/또는 계산의 출력에 대한 어드레스를 결정하는데 사용될 수 있으며, 이는 신경망의 은닉층에 대한 입력으로서 사용될 수 있다.
예를 들어, 미국 특허 출원 제15/014,265 호에 기술된 바와 같이, 텐서 상태 요소(122)는 텐서 인덱스 요소들의 그룹, 텐서 바인딩 요소들의 그룹, 및 차원 승수 요소들의 그룹을 포함할 수 있다. 각 요소 그룹은 M 개의 행과 N 개의 열을 갖는 2차원 어레이로 배열될 수 있다. 그룹의 각 행은 텐서에 대한 텐서 인덱스 정보를 나타낼 수 있다. 그룹의 각 열은 텐서와 연결된 중첩 루프 인덱스 변수 값에 대한 정보(예: 텐서 인덱스 값, 텐서 바운드 값 또는 차원 승수 값)를 나타낼 수 있다. 예를 들어, 텐서 인덱스 요소에 대한 2차원 어레이의 하나의 열은 변수 i에 대한 텐서 인덱스 정보를 나타내고, 하나의 열은 변수 j에 대한 텐서 인덱스 정보를 나타내고, 하나의 열은 변수 k에 대한 텐서 인덱스 정보를 나타낼 수 있다.
각 텐서 인덱스 요소는 중첩 루프의 루프에 대한 중첩 루프 변수를 추적(track)할 수 있다. 예를 들어, 중첩 루프 인덱스 변수 i를 추적하기 위해 하나의 텐서 인덱스 요소가 할당될 수 있고, 중첩 루프 인덱스 변수 j를 추적하기 위해 하나의 텐서 인덱스 요소가 할당될 수 있고, 중첩 루프 인덱스 변수 k를 추적하기 위해 하나의 텐서 인덱스 요소가 할당될 수 있다. 각 텐서 바운드 요소는 텐서 인덱스 요소들 내의 해당 요소를 가지고 있다. 각 텐서 바운드 요소는 텐서와 연관된 중첩 루프 인덱스 변수 값에 대한 텐서 바운드 정보를 나타낼 수 있다. 예를 들어, 하나의 텐서 바운드 요소는 중첩 루프 인덱스 변수 i에 대한 텐서 바운드 정보를 나타낼 수 있고, 하나의 텐서 바운드 요소는 중첩 루프 인덱스 변수 j에 대한 텐서 바운드 정보를 나타낼 수 있으며, 하나의 텐서 바운드 요소는 중첩 루프 인덱스 변수 k에 대한 텐서 바운드 정보를 나타낼 수 있다.
각 차원 승수 요소는 텐서 인덱스 요소의 해당 요소가 승산되는 승수를 나타낼 수 있다. 요소에 대한 메모리 어드레스를 결정하기 위해, 텐서 트래버스 유닛(120)은 중첩 루프 인덱스 변수에 대한 텐서 인덱스 요소에 저장된 값에 중첩 루프 인덱스 변수에 대한 승수(multiplier)를 곱함으로써 각각의 중첩 루프 인덱스 변수에 대한 메모리 어드레스 오프셋을 결정할 수 있다. 텐서 트래버스 유닛(120)은 액세스된 요소에 대응하는 메모리 어드레스를 결정하기 위해 모든 곱해진 곱들을 합산할 수 있다.
텐서 트래버스 유닛(120)은 중첩 루프의 내부 루프의 각 반복 후에 텐서 인덱스 요소를 업데이트할 수 있다. 내부 루프의 각 반복에 대해, 텐서 트래버스 유닛(120)은 예를 들어 내부 루프에 대한 텐서 인덱스 요소를 증가시킴으로써 루프에 대한 텐서 인덱스 요소를 업데이트할 수 있다. 내부 루프의 업데이트된 텐서 인덱스 요소가 내부 루프의 텐서 바운드 요소에 저장된 값과 동일하면, 텐서 인덱스 요소를 재설정되고, 중첩된 내부 루프의 다음 외부 루프에 대한 텐서 인덱스 요소는 업데이트될 수 있다. 텐서 트래버스 유닛(120)은 전술한 바와 같이 텐서 인덱스 요소에 해당 승수를 곱하고 그 곱을 합산함으로써 내부 루프의 반복에 대응하는 다음 요소에 대한 메모리 어드레스를 결정할 수 있다.
제어기(105)는 프로그램의 중첩 루프들을 반복하고 그리고 하나 이상의 루프의 반복마다, 예를 들어 중첩 루프들의 가장 안쪽 (또는 다른) 루프의 각각의 반복마다 계산을 수행함으로써 텐서 계산을 조정할 수 있다. 텐서 계산을 가속화하기 위해, 제어기(105)는 복수의 컴퓨팅 유닛을 사용하여 텐서 계산 중 적어도 일부를 병렬로 수행할 수 있다. 컴퓨팅 유닛은 개별 컴퓨팅 타일 또는 개별 매스 유닛일 수 있다. 예를 들어, 제어기(105)는 컴퓨팅 타일(112-A)이 제1 텐서 계산을 수행하도록 요청하는 동시에, 컴퓨팅 타일(112-B)이 제2 텐서 계산을 수행하도록 요청할 수 있다. 다른 예에서, 제어기(105)는 컴퓨팅 타일(112-A)이 특정 텐서에 대한 텐서 계산을 수행하도록 요청할 수 있다. 텐서 트래버스 유닛(120)은 매스 유닛(124-A 내지 124-D)을 사용하여 텐서 계산을 병렬로 수행할 수 있다.
루프는 일반적으로 루프의 인덱스 변수가 루프의 바운드와 동일하거나 초과할 때 완료된다. 예를 들어, 루프는“for (i = 0; i <3; i ++)로 프로그래밍될 수 있으며, 여기서 i는 인덱스 변수이고 바운드는 3이다. 이 예제 루프는 세개 반복 (i = 0, i = 1 및 i = 2)을 포함한다. 인덱스 변수가 3이면 루프는 계산없이 종료된다. 다수의 컴퓨팅 유닛(예를 들어, 다수의 컴퓨팅 타일(112) 또는 다수의 매스 유닛(124))을 사용하여 병렬 계산을 수행할 때, 제어기(105)는 계산이 컴퓨팅 유닛에 할당될 때마다 인덱스 변수를 반복하고 루프의 다른 반복을 다른 컴퓨팅 유닛에 할당하기 전에 인덱스 변수를 바운드와 비교할 수 있다.
일부 구현들에서, 제어기(105)에 의해 실행되는 프로그램의 중첩 루프는 컴퓨팅 시스템(102)의 특성에 기초하여 결정된 루프 바운드를 가질 수 있다. 예를 들어, 하나 이상의 루프에 대한 루프 바운드는 컴퓨팅 시스템(102)의 컴퓨팅 타일(112-A-112-Z)의 수 또는 텐서 트래버스 유닛(120)의 매스 유닛의 수에 기초하여 결정될 수 있다.
일부 구현들에서, 컴파일러(136)는 텐서에 대한 텐서 계산을 수행하기 위한 프로그램을 컴파일한다. 컴파일러(136)는 텐서의 하나 이상의 차원에 포함된 요소의 수 및/또는 컴퓨팅 시스템(102)의 컴퓨팅 유닛의 수에 기초하여 하나 이상의 루프에 대한 루프 바운드를 결정하도록 구성될 수 있다. 루프의 루프 바운드는 루프의 인덱스 값이 루프 바운드와 동일할 때 루프가 완료된 수이다. 다시 말해서, 루프에 대한 루프 바운드는 루프의 반복 횟수와 동일할 수 있다.
컴파일러(136)는 하나 이상의 텐서 계산 루프(텐서 계산이 수행되는 루프)에 대한 외부 루프를 생성하고 그 외부 루프에 대한 하나 이상의 루프 바운드를 결정하도록 구성될 수 있다. 상기 생성된 외부 루프는 텐서 계산 루프의 반복을 외부 루프의 다중 반복으로 분할하는데 사용될 수 있다. 예를 들어, 컴퓨팅 시스템(102)은 64개의 컴퓨팅 유닛(예를 들어, 컴퓨팅 타일 또는 매스 유닛)을 포함할 수 있고 텐서 계산 루프는 128개의 반복을 포함할 수 있다. 이 예에서, 컴퓨팅 시스템(102)은 64개의 텐서 계산을 병렬로 수행할 수 있다. 64개의 텐서 계산을 병렬로 수행하기 위해, 텐서 계산 루프의 128개의 반복은 각각 텐서 계산 루프의 64개의 반복을 포함하는 2개의 외부 루프 반복으로 분할될 수 있다. 예를 들어, 외부 루프의 제1 반복은 텐서 계산 루프의 반복 1-64를 포함할 수 있다. 상기 외부 루프의 제2 반복은 텐서 계산 루프의 반복 65-128을 포함할 수 있다. 이러한 방식으로, 64개의 텐서 계산은 컴퓨팅 시스템의 64개의 컴퓨팅 유닛 각각(예를 들어, 타일당 하나의 계산)을 사용하여 외부 루프의 제1 반복에 대해 병렬로 수행되고 그리고 64개의 텐서 계산은 64개의 컴퓨팅 유닛을 사용하여 외부 루프의 제2 반복에 대해 병렬로 수행된다.
컴파일러(136)는 외부 루프가 생성되어야 하는지 여부를 결정할 수 있고, 외부 루프가 생성되어야 한다면, 컴파일된 프로그램에서 외부 루프를 생성할 수 있다. 일부 구현들에서, 컴파일러(136)는 텐서 계산 루프가 프로그램이 실행될 컴퓨팅 시스템(102)의 컴퓨팅 유닛의 수보다 많은 반복을 가질 때 (컴파일되는 프로그램의 임의의 외부 루프에 추가하여) 외부 루프를 생성한다. 텐서 계산 루프가 컴퓨팅 유닛의 수보다 많은 반복을 갖는 경우, 컴파일러(136)는 텐서 계산 루프의 반복을 다수의 외부 루프 반복으로 분할(분배)하기 위해 외부 루프를 생성할 수 있다.
컴파일러(136)는 또한 텐서 계산이 수행되는 루프의 반복 횟수 및/또는 프로그램이 실행될 컴퓨팅 시스템(102)의 컴퓨팅 유닛의 수에 기초하여 생성된 외부 루프에 대한 루프 바운드를 결정할 수 있다. 텐서 계산 루프의 반복 횟수는, 상기 반복 횟수가 컴퓨팅 유닛 수의 배수인 경우 루프에 대응하는 차원의 요소들의 개수와 동일할 수 있다. 컴파일러(136)는 컴퓨팅 유닛의 수가 컴퓨팅 유닛을 사용하여 병렬로 수행될 수 있는 최대 반복 횟수를 나타내기 때문에 텐서 계산 루프의 반복 횟수를 컴퓨팅 유닛의 수로 나눌 수 있다. 예를 들어, 텐서 계산 루프의 반복 횟수가 128이고 그리고 컴퓨팅 유닛의 수가 64인 경우, 생성된 외부 루프에 대한 루프 바운드는 2일 수 있다(128/64). 따라서, 이 예에서, 외부 루프의 제1(첫 번째) 반복은 텐서 계산 루프의 64개의 병렬 반복을 포함할 것이고 그리고 외부 루프의 제2(두번째) 반복은 텐서 계산 루프의 64개의 병렬 반복을 포함할 것이다. 나눈 결과에서 나머지가 초래하면, 후술하는 바와 같이, 외부 루프에 대한 루프 바운드는 1씩 증가될 수 있다.
컴파일러(136)는 또한 텐서 계산 루프의 반복 횟수 및 프로그램이 실행될 컴퓨팅 시스템(102)의 컴퓨팅 유닛의 수에 기초하여 텐서 계산 루프에 대한 하나 이상의 루프 바운드를 결정할 수 있다. 텐서 계산 루프의 반복 횟수가 컴퓨팅 유닛 수의 정확한 배수인 경우, 텐서 계산 루프에 대한 루프 바운드는 텐서 계산 루프에 대해 생성된 외부 루프의 각 반복에 대한 컴퓨팅 유닛 수와 동일할 수 있다. 예를 들어, 텐서 계산 루프가 120회 반복하고 그리고 컴퓨팅 시스템이 60개의 컴퓨팅 유닛을 포함하는 경우, 텐서 계산 루프에 대한 루프 바운드는 60일 수 있고 외부 루프에 대한 루프 바운드는 2일 수 있다. 이 예에서, 외부 루프의 제1 반복은 텐서 계산 루프의 60회 반복(예를 들어, 병렬 반복)을 포함할 것이고 그리고 외부 루프의 제2 반복은 텐서 계산 루프의 60회 반복을 포함할 수 있다.
텐서 계산 루프의 반복 횟수가 컴퓨팅 유닛 수의 정확한 배수가 아닌 경우, 컴파일러(136)는 텐서 계산 루프에 대한 둘 이상의 루프 바운드를 결정할 수 있다. 예를 들어, 컴파일러(136)는 텐서 계산 루프의 반복 횟수를 컴퓨팅 유닛의 수로 나눌 수 있다. 상기 반복 횟수가 정확한 배수가 아니기 때문에 상기 나눈 결과에 나머지 값이 포함된다. 예를 들어, 반복 횟수는 160일 수 있고 컴퓨팅 유닛의 개수는 50일 수 있다. 이 예에서, 컴파일러(136)는 반복 횟수(160)를 컴퓨팅 유닛(50)의 개수로 나눠서 3의 몫 및 나머지 10을 얻을 수 있다. 컴파일러(136)는 텐서 계산 루프에 대한 제1 루프 바운드를 컴퓨팅 유닛의 수(예를 들어, 50)와 동일하게 설정하고 그리고 텐서 계산 루프에 대해 대안적인 루프 바운드를 상기 나머지(예를 들어 10)와 동일하게 설정할 수 있다. 프로그램의 실행 동안, 대안적인 루프 바운드는 외부 루프의 최종 반복을 위한 텐서 계산 루프에 사용될 수 있고 제1 루프 바운드는 외부 루프의 서로의 반복에 사용될 수 있다. 이전 예제에서, 외부 루프는 나머지가 10이고 160/50 = 3이므로 4의 루프 바운드를 가지며, 외부 루프에 대한 루프 바운드는 상기 나머지를 기준으로 1씩 증가한다. 외부 루프의 처음 3 반복(first three iterations)의 경우 텐서 계산 루프에 대한 루프 바운드는 50이다. 따라서, 외부 루프의 처음 3 반복 각각에 대해, 텐서 계산 루프의 50 반복이 병렬로 수행되어 150 반복이 수행된다. 외부 루프의 마지막 반복의 경우, 텐서 계산 루프에 대한 루프 바운드는 10이 되어 텐서 계산 루프의 160 반복이 외부 루프의 4개 반복에서 수행된다.
컴파일된 프로그램은 외부 루프의 끝에서 두 번째 반복이 완료된 후 및 외부 루프의 최종 반복이 수행되기 전에 제어기(105)의 프로세서로 하여금 텐서 계산 루프에 대한 루프 바운드를 제1 루프 바운드에서 대안적인 루프 바운드로 변경하게 하는 명령어를 포함할 수 있다. 이러한 방식으로, 대안(대안적인) 루프 바운드에 대한 루프 바운드는 텐서 계산 루프의 반복을 다수의 외부 루프 반복으로 나누기 위해 생성된 외부 루프의 최종 반복을 위한 텐서 계산 루프에 대한 루프 바운드로서 사용된다.
일부 구현들에서, 컴파일러(136)는 텐서 계산 루프가 중첩되는 즉, 외부 루프와 텐서 계산 루프 사이에 중첩된 다른 루프가 없는 즉시 외부 루프(immediate outer loop)로서 텐서 계산 루프에 대한 외부 루프를 생성할 수 있다. 일부 구현들에서, 컴파일러(136)는 텐서 계산 루프가 중첩되는(네스트되는)(nested), 즉 외부 루프가 다른 루프 내에 중첩되지 않는 중첩 루프들 중 가장 외부 루프(most-outer loop)로서 외부 루프를 생성할 수 있다. 중첩 루프들 중 가장 외부 루프에서 외부 루프를 생성함으로써, 중첩(네스트) 루프 및 텐서 트래버스 유닛(120)을 사용하여 결정된 메모리 어드레스는 텐서 요소를 더욱 연속적으로 정렬시킨다. 예를 들어, 최종 반복에 대해 루프 바운드를 조정하지 않고, 메모리 어드레스는 메모리 공간을 낭비하여 데이터가 저장되지 않을 루프의 반복에 대해 결정될 수 있다. 루프의 마지막 반복에 대한 대안적인 제한(한계)은 텐서 트래버스 유닛이 추가 명령어를 사용하지 않고 텐서 요소에 대해서만 메모리 어드레스를 결정할 수 있도록 한다.
도 2는 다수의 컴퓨팅 유닛(210)을 사용하여 텐서(205)를 트래버스하기 위한 예시적인 중첩 루프(215 및 220)를 도시한다. 각각의 개별 컴퓨팅 유닛(210)은 컴퓨팅 타일 또는 매스 유닛일 수 있다. 이 예에서, 텐서(205)는 X 차원, Y 차원 및 Z 차원을 갖는 3차원 텐서이다. 텐서(205)가 축척대로 그려지지는 않았지만, X 차원은 160개의 요소의 길이를 갖고, Y 차원은 30개의 요소의 길이를 가지며, Z의 차원은 100개의 요소의 길이를 갖는다. 텐서(105)의 각각의 요소는 신경망 계산에 사용되는 각각의 데이터 값을 저장할 수 있다.
일반적으로, 텐서는 중첩 루프(215)를 사용하여 트래버스될 수 있다. 이 예에서 X 차원은 내부 루프를 사용하여 트래버스되고, Y 차원은 중간 루프를 사용하여 트래버스되고, Z 차원은 외부 루프를 사용하여 트래버스된다. 내부 루프의 각 반복에 대해, 내부 루프의 반복에 대한 x, y 및 z의 값에 대응하는 텐서 요소에 대한 메모리 어드레스가 계산된다. 다수의 컴퓨팅 유닛(210)은 컴퓨팅 시스템의 일부일 수 있으며, 예를 들어, 각각의 컴퓨팅 유닛(210)은 도 1의 컴퓨팅 타일(112-A-112-Z) 또는 도 1의 매스 유닛(124)과 동일하거나 유사할 수 있다. 이 예에서, 컴퓨팅 시스템은 다른 수의 컴퓨팅 유닛이 가능하지만 64개의 컴퓨팅 유닛을 포함한다. 컴퓨팅 유닛(210)은 예를 들어 중첩 루프(220)를 사용하여 텐서(205)에 대한 텐서 계산을 병렬로 수행할 수 있다.
컴파일러, 예를 들어, 도 1의 컴파일러(136)는 중첩 루프(215)(또는 중첩 루프(215)를 나타내는 코드) 및 프로그램이 실행될 컴퓨팅 시스템의 컴퓨팅 유닛(210)의 수를 포함하는 프로그램에 기초하여 중첩 루프(220)를 생성할 수 있다. 예를 들어, 컴파일러는 텐서 계산 루프의 반복(이 예에서 X 차원의 루프)을 여러 개의 외부 루프 반복으로 나누기 위해 외부 루프가 생성되어야 하는지를 결정할 수 있다.
외부 루프가 생성되어야 하는지 여부를 결정하기 위해, 컴파일러는 각 텐서 계산 루프의 반복 횟수를 컴퓨팅 시스템의 하드웨어 특성과 비교할 수 있다. 예를 들어, 하드웨어 특성은 컴퓨팅 유닛(210)의 수 또는 컴퓨팅 시스템이 병렬로 수행할 수 있는 총 계산 수일 수 있다. 텐서 계산 루프에 대한 루프 반복 횟수가 하드웨어 특성의 값을 초과하면 컴파일러는 외부 루프를 생성할 수 있다. 이 예에서, X 차원에 대한 루프의 반복 횟수(160)는 컴퓨팅 유닛(64)의 수를 초과한다. 따라서 컴파일러는 인덱스 변수 "i"를 가진 외부 루프를 생성한다.
컴파일러는 또한 텐서 계산 루프의 반복 횟수 및 하드웨어 특성의 값(예를 들어, 컴퓨팅 유닛의 수)에 기초하여 외부 루프에 대한 루프 바운드를 결정할 수 있다. 예를 들어, 컴파일러는 텐서 계산 루프의 반복 횟수(160)를 컴퓨팅 유닛의 수(64)로 나눔으로써 상기 바운드(다(나머지 32를 갖는 2)를 결정할 수 있다. 전술한 바와 같이, 외부 루프 바운드는 임의의 나머지에 대해 1씩 증가 될 수 있다. 따라서, 이 예에서 외부 루프 바운드는 3이다.
컴파일러는 또한 텐서 계산 루프의 반복 횟수 및 하드웨어 특성의 값에 기초하여 텐서 계산 루프에 대한 하나 이상의 루프 바운드를 결정할 수 있다. 텐서 계산 루프의 반복 횟수가 하드웨어 특성의 값을 초과하지 않으면 텐서 계산 루프에 대한 루프 바운드는 반복 횟수와 동일할 수 있다. 텐서 계산 루프의 반복 횟수가 하드웨어 특성의 정확한 배수인 경우, 텐서 계산 루프에 대한 루프 바운드는 하드웨어 특성의 값과 동일할 수 있다. 텐서 계산 루프의 반복 횟수가 하드웨어 특성 값을 초과하지만 하드웨어 특성 값의 정확한 배수가 아닌 경우, 텐서 계산 루프는 루프의 최종 반복을 제외한 모든 것에 대해 제1 루프 바운드 및 루프의 최종 반복에 대해 대안적인(alternative) 루프 바운드를 가질 수 있다. 제1 루프 바운드는 하드웨어 특성의 값과 동일할 수 있고 그리고 대안적인 루프 바운드는 텐서 계산 루프의 반복 횟수를 하드웨어 특성의 값으로 나눈 후의 나머지와 동일할 수 있다.
이 예에서, 텐서 계산 루프의 반복 횟수(160)는 컴퓨팅 유닛(64)의 수를 초과하지만, 컴퓨팅 유닛의 수의 정확한 배수는 아니다. 따라서, X 차원에 대한 제1 루프 바운드는 64이고 대안적인 바운드(대안 바운드)(alternative bound)는 32이다(160/64 = 2와 나머지 32). 외부 루프(루프 i)의 처음 2 반복(first two iterations)에서 X 차원의 루프에 대한 루프 바운드는 64가 될 것이다. 외부 루프의 최종 반복에서 X 차원에 대한 루프 바운드는 32가 될것이다.
외부 루프의 제1 반복을 위해, 텐서의 64개의 메모리 어드레스는 64개의 컴퓨팅 유닛을 사용하여 병렬로 결정될 수 있다. 예를 들어, 제1 컴퓨팅 유닛은 z=0; y=0; x=0에 대한 메모리 어드레스를 결정할 수 있고; 제2 컴퓨팅 유닛은 z=0; y=0; x=0에 대한 메모리 어드레스를 결정할 수 있고, .....; 제64 컴퓨팅 유닛은 z=0; y=0; x=63에 대한 메모리 어드레스를 계산할 수 있다. 외부 루프의 마지막 반복을 위해, 64개의 컴퓨팅 유닛 중 32개가 내부 루프의 마지막 32 반복(32 iterations)을 결정하는데 사용될 수 있다.
도 3은 텐서 계산을 수행하기 위한 예시적인 프로세스(300)를 도시하는 흐름도이다. 프로세스(300)는 하나 이상의 컴퓨터의 시스템, 예를 들어 도 1의 컴퓨팅 시스템(102)에 의해 수행될 수 있다.
제1 중첩(네스트) 루프의 하나 이상의 제1 반복 각각에 대해, 시스템은 제2 중첩 루프에 대한 제1 루프 바운드에 도달할 때까지 제1 중첩 루프 내에 중첩된(네스트된) 제2 중첩 루프의 반복을 수행한다(302). 예를 들어, 제2 중첩 루프는 텐서 계산(예를 들어, 메모리 어드레스 계산의 내적 계산(dot product computation))이 프로그램의 일부로서 수행되는 루프일 수 있다.
제1 루프는 예를 들어 제1 및 제2 중첩(네스트) 루프를 포함하는 프로그램을 컴파일한 컴파일러에 의해 생성된 외부 루프일 수 있다. 예를 들어, 컴파일러는 텐서 계산 루프를 식별하고, 텐서 계산 루프에 대한 외부 루프를 생성할지 여부를 결정하고, 생성된 외부 루프 및/또는 텐서 계산 루프에 대한 하나 이상의 루프 바운드를 결정할 수 있다.
컴파일러는 제2 중첩 루프의 총 반복 횟수(예를 들어, 제2 루프에 해당하는 텐서 차원의 총 요소 수) 및 시스템의 다수의 컴퓨팅 유닛에 기초하여 제2 중첩 루프에 대한 제1 루프 바운드를 결정할 수 있다. 예를 들어, 제2 루프의 총 반복 횟수가 컴퓨팅 유닛 수보다 적은 경우, 제1 루프 바운드는 제2 중첩 루프의 총 반복 횟수와 동일할 수 있다. 제2 중첩 루프의 총 반복 횟수가 컴퓨팅 유닛 수의 정확한 배수인 경우, 제1 루프 바운드는 상기 반복 횟수와 동일할 수 있다. 제2 중첩 루프의 총 반복 횟수가 컴퓨팅 유닛 수보다 크지만 컴퓨팅 유닛의 정확한 배수가 아닌 경우, 컴파일러는 제1 루프 바운드를 컴퓨팅 유닛의 수로 설정하고, 컴퓨팅 유닛의 수로 나누어진 제2 중첩 루프의 총 반복 횟수의 나머지와 동일한 대안적인 루프 바운드를 결정할 수 있다.
이 예에서, 제2 중첩 루프의 총 반복 횟수가 컴퓨팅 유닛의 수보다 크고 그리고 제2 중첩 루프의 총 반복 횟수가 컴퓨팅 유닛의 수의 정확한 배수가 아니라고 가정한다. 따라서, 이 예에서, 제1 중첩 루프의 하나 이상의 제1(first) 반복에 대한 제2(second) 중첩 루프의 반복 횟수는 컴퓨팅 유닛의 하드웨어 특성의 값을 초과하는 총 반복 횟수를 갖는 제2 중첩 루프에 응답하여 제1 루프 바운드에 의해 제한된다.
상기 시스템은 제2 중첩 루프의 반복을 병렬로 수행할 수 있다. 예를 들어, 전술한 바와 같이, 제2 중첩(네스트) 루프에 대한 제1 루프 바운드는 제2 중첩 루프의 반복 횟수가 컴퓨팅 유닛의 수를 초과하지 않도록 결정될 수 있다. 이 예에서, 제1 중첩 루프의 하나 이상의 제1 반복 각각에 대한 제2 루프의 각 반복은 병렬로 수행될 수 있다. 상기 시스템이 제2 중첩 루프의 반복을 컴퓨팅 유닛에 할당함에 따라, 시스템은 제2 루프에 대한 인덱스 변수를 반복할 수 있다. 인덱스 변수가 제1 루프 바운드와 동일할 때, 제2 루프가 완료된다.
상기 시스템은 제1 루프의 끝에서 두 번째(penultimate)(next to last) 반복이 완료되었는지를 결정한다(304). 예를 들어, 시스템은 제1 루프에 대한 인덱스 변수를 제1 루프에 대한 루프 바운드와 비교할 수 있다. 루프 바운드와 인덱스 변수의 차이가 지정된 수(예: 1)인 경우, 시스템은 제1 루프의 끝에서 두 번째 반복이 완료되지 않았다고 결정할 수 있다. 예를 들어, 인덱스 변수가 "i"인 루프는 3 반복(three iterations)을 포함할 수 있다. 이 예에서, 상기 루프는 "for (i=0; i<3)" 또는 "for (i=1; i<4)로 프로그래밍 될 수 있다.
첫 번째 예에서, 루프 바운드는 3이고, 루프의 최종 반복은 i = 2에 대해 수행되며, 루프의 끝에서 두 번째(penultimate) 반복은 i=1에 대해 수행된다. 일반적으로, 인덱스 변수는 일반적으로 루프 반복이 수행될 때 또는 직후에 증가된다. 이 예제에서, 루프 반복이 수행된 후 인덱스 변수가 2인 경우, 상기 수행된 반복은 끝에서 두 번째 반복이다. 따라서, 바운드(3)와 인덱스 변수의 차이가 1이면 루프의 끝에서 두 번째 반복은 완료된 반복이다.
유사하게, 제2 예에서, 루프 바운드는 4이고, 루프의 최종 반복은 i = 3에 대해 수행되고, 루프의 끝에서 두 번째 반복은 i = 2에 대해 수행된다. 이 예제에서 루프 반복이 수행된 후 인덱스 변수가 3이면 상기 수행된 반복은 끝에서 두 번째 반복이다. 따라서, 바운드(3)와 인덱스 변수의 차이가 1이면 루프의 끝에서 두 번째 반복은 완료된 반복이다. 제1(첫 번째) 루프의 끝에서 두 번째 반복이 완료되지 않은 경우, 시스템은 업데이트된 인덱스 변수 값에 대응하는 제1 중첩 루프의 다음 반복에 대해 제2 중첩 루프의 반복을 수행하기 위해 동작(302)으로 복귀한다.
제1 루프의 끝에서 두 번째 반복이 완료된 경우, 시스템은 제1 루프 바운드 대신에 제2 루프를 대안 바운드(alternative bound)로 대체한다(308). 예를 들어, 상기 시스템은 제1 중첩(네스트) 루프의 최종 반복을 위해 제2 중첩(네스트) 루프에 대한 상기 대안 바운드를 사용할 수 있다.
상기 시스템은 대안 루프 바운드에 도달할 때까지 제1 중첩 루프에 대한 최종 반복을 위해 제2 중첩 루프의 하나 이상의 반복을 수행한다(310). 예를 들어, 남아있는 제2 중첩 루프의 다수의 반복이 존재하면, 상기 시스템은 다수의 컴퓨팅 유닛을 사용하여 병렬로 상기 반복을 수행할 수 있다.
본 명세서에서 설명된 요지 및 기능적 동작의 실시 예는 디지털 전자 회로, 유형적으로 구현된 컴퓨터 소프트웨어 또는 펌웨어, 컴퓨터 하드웨어로 구현될 수 있으며, 이 명세서 및 구조적 등가물에 개시된 구조 또는 이들 중 하나 이상의 조합을 포함한다. 본 명세서에서 설명된 본 발명의 실시 예는 하나 이상의 컴퓨터 프로그램, 즉 데이터 처리 장치에 의해 실행되거나 데이터 처리 장치의 동작을 제어하기 위한 유형적인 비-일시적인 프로그램 캐리어상에 인코딩된 컴퓨터 프로그램 명령어의 하나 이상의 모듈로서 구현될 수 있다. 선택적으로 또는 부가적으로, 프로그램 명령어는 데이터 처리 장치에 의한 실행을 위해 적절한 수신기 장치로의 송신을 위해 정보를 인코딩하기 위해 생성된, 인위적으로 생성된 전파된 신호, 예를 들어, 기계-생성 전기, 광학 또는 전자기 신호 상에 인코딩될 수 있다. 컴퓨터 저장 매체는 기계 판독 가능 저장 장치, 기계 판독 가능 저장 기판, 랜덤 또는 시리얼 액세스 메모리 장치, 또는 이들 중 하나 이상의 조합일 수 있다.
본 명세서에서 설명된 프로세스 및 로직 흐름은 입력 데이터를 오퍼레이팅하고 출력을 생성함으로써 기능을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그램 가능 컴퓨터에 의해 수행될 수 있다. 프로세스 및 로직 흐름은 또한 특수 목적 로직 회로에 의해 수행될 수 있고, 장치는 FPGA(field programmable gate array), ASIC(application specific integrated circuit) 또는 GPGPU(General purpose graphics processing unit)와 같은 특수 목적의 로직 회로에 의해 수행될 수 있다.
컴퓨터 프로그램의 실행에 적합한 컴퓨터는 예를 들어 범용 또는 특수 목적 마이크로프로세서 또는 둘 모두, 또는 임의의 다른 종류의 중앙 처리 장치를 기반으로 할 수 있다. 일반적으로, 중앙 처리 장치는 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 둘 모두로부터 명령어 및 데이터를 수신할 것이다. 컴퓨터의 필수 구성 요소는 명령어를 수행하거나 실행하기 위한 중앙 처리 장치 및 명령어 및 데이터를 저장하기 위한 하나 이상의 메모리 장치이다. 일반적으로, 컴퓨터는 데이터를 저장하기 위한 하나 이상의 대용량 저장 장치(예를 들어, 자기, 광 자기 디스크 또는 광 디스크)로부터 데이터를 수신하거나 또는 그 이상의 대용량 저장 장치로 데이터를 전송하거나 둘 모두를 포함하거나 동작 가능하도록 결합될 것이다. 그러나 컴퓨터에는 이러한 장치가 필요하지 않다. 또한, 컴퓨터는 다른 장치, 예를 들어 이동 전화, 개인 휴대 정보 단말기(PDA), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS(Global Positioning System) 수신기 또는 휴대용 저장 장치(예를 들어 USB(범용 직렬 버스) 플래시 드라이브)에 내장될 수 있다.
컴퓨터 프로그램 명령어 및 데이터를 저장하기에 적합한 컴퓨터 판독 가능 매체는 예를 들어 EPROM, EEPROM 및 플래시 메모리 장치, 내부 하드 디스크 또는 이동식 디스크, 광 자기 디스크, CD ROM 및 DVD-ROM 디스크와 같은 자기 디스크와 같은 반도체 메모리 장치를 포함하는 모든 형태의 비휘발성 메모리, 매체 및 메모리 장치를 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로에 의해 보충되거나 또는 그 안에 포함될 수 있다.
본 명세서는 많은 구현 세부 사항을 포함하지만, 이들은 임의의 발명 또는 청구되는 범위에 대한 제한으로 해석되어서는 안되며, 오히려 특정 발명의 특정 실시 예에 특정할 수 있는 특징에 대한 설명으로 해석되어야 한다. 별도의 실시 예와 관련하여 본 명세서에서 설명되는 특정 특징은 또한 단일 실시 예에서 조합하여 구현될 수 있다. 반대로, 단일 실시 예의 컨텍스트에서 설명된 다양한 특징은 또한 다수의 실시 예에서 개별적으로 또는 임의의 적합한 하위 조합으로 구현될 수 있다. 더욱이, 특징들은 특정 조합으로 작용하는 것으로 상기에서 설명될 수 있고, 심지어 처음에는 그러한 것으로서 주장될지라도, 청구된 조합으로부터의 하나 이상의 특징이 어떤 경우 조합으로부터 제거될 수 있고, 청구된 조합은 부분 조합 또는 서브 조합의 변형으로 유도될 수 있다.
유사하게, 동작들이 특정 순서로 도면들에 도시되어 있지만, 이는 바람직한 동작을 달성하기 위해 이러한 동작이 도시된 순서 또는 순차적인 순서로 수행되거나 도시된 모든 동작이 수행될 것을 요구하는 것으로 이해되어서는 안된다. 특정 상황에서 멀티태스킹 및 병렬 처리가 유리할 수 있다. 또한, 상술한 실시 예들에서 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시 예들에서 그러한 분리를 요구하는 것으로 이해되어서는 안되며, 서술된 프로그램 컴포넌트들 및 시스템들은 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 다중 소프트웨어 제품들로 패키징될 수 있다는 것을 이해해야 한다.
본 발명의 특정 실시 예가 설명되었다. 다른 실시 예들은 다음의 청구항들의 범위 내에 있다. 예를 들어, 청구 범위에서 열거된 동작은 상이한 순서로 수행될 수 있으며 여전히 바람직한 결과를 달성한다. 하나의 예로서, 첨부된 도면에 도시된 프로세스는 바람직한 결과를 달성하기 위해 도시된 특정 순서 또는 순차적 순서를 반드시 필요로 하지는 않는다. 특정 구현예에서, 멀티태스킹 및 병렬 처리가 유리할 수 있다.

Claims (19)

  1. N-차원 텐서에 액세스하기 위해 컴퓨팅 시스템에 의해 수행되는 방법으로서,
    제1 네스트 루프(nested loop)의 하나 이상의 제1 반복 각각에 대해, 제2 네스트 루프에 대한 제1 루프 바운드에 도달할 때까지 상기 제1 네스트 루프 내에 네스트된 제2 네스트 루프의 반복들을 수행하는 단계 -상기 제1 네스트 루프의 상기 하나 이상의 제1 반복에 대한 상기 제2 네스트 루프의 다수의 반복들은 컴퓨팅 시스템의 다수의 컴퓨팅 유닛들의 수를 초과하는 총 반복 횟수를 갖는 상기 제2 네스트 루프에 응답하여 상기 제1 루프 바운드에 의해 제한됨-; 그리고
    상기 제1 네스트 루프의 끝에서 두 번째(penultimate) 반복이 완료된 후, 대안 루프 바운드에 도달할 때까지 상기 제1 네스트 루프의 최종 반복을 위해 상기 제2 네스트 루프의 하나 이상의 반복들을 수행하는 단계를 포함하며, 상기 대안 루프 바운드는 상기 제1 루프 바운드보다 작으며, 상기 대안 루프 바운드는 상기 제2 네스트 루프의 총 반복 횟수를 상기 컴퓨팅 유닛들의 수로 나눈 나머지 값에 기초하며, 상기 제1 루프 바운드는 상기 컴퓨팅 유닛들의 수와 동일하게 설정되는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위해 컴퓨팅 시스템에 의해 수행되는 방법.
  2. 제1항에 있어서, 상기 제1 네스트 루프의 끝에서 두 번째 반복이 완료되었다는 결정에 응답하여 상기 제1 네스트 루프의 최종 반복을 위해 상기 제1 루프 바운드를 상기 대안 루프 바운드로 대체하는 단계를 더 포함하는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위해 컴퓨팅 시스템에 의해 수행되는 방법.
  3. 제1항에 있어서, 각각의 개별 컴퓨팅 유닛은 컴퓨팅 타일, 프로세서 또는 매스(math) 유닛을 포함하는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위해 컴퓨팅 시스템에 의해 수행되는 방법.
  4. 제2항에 있어서,
    상기 제2 네스트 루프에 대한 제1 루프 바운드에 도달할 때까지 상기 제1 네스트 루프 내에 네스트된 제2 네스트 루프의 반복들을 수행하는 단계는, 상기 컴퓨팅 유닛들을 이용하여 병렬로 상기 제2 네스트 루프의 각 반복을 수행하는 단계를 포함하며, 각각의 컴퓨팅 유닛은 상기 제2 네스트 루프의 각각의 반복을 수행하는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위해 컴퓨팅 시스템에 의해 수행되는 방법.
  5. 제2항에 있어서,
    상기 대안 루프 바운드는 상기 제2 네스트 루프의 총 반복 횟수를 상기 컴퓨팅 유닛들의 수로 나눈 나머지 값에 기초하는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위해 컴퓨팅 시스템에 의해 수행되는 방법.
  6. 제1항에 있어서, 상기 제1 네스트 루프 및 상기 제2 네스트 루프를 포함하는 네스트 루프 세트는 상기 제1 네스트 루프와 상기 제2 네스트 루프 사이에 네스트된 하나 이상의 루프들을 포함하고, 상기 제2 네스트 루프는 다른 루프 내에 네스트되는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위해 컴퓨팅 시스템에 의해 수행되는 방법.
  7. 제1항에 있어서, 상기 제2 네스트 루프는 상기 제1 네스트 루프와 상기 제2 네스트 루프 사이에 네스트된 다른 루프들 없이 상기 제1 네스트 루프 내에 직접 네스트되는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위해 컴퓨팅 시스템에 의해 수행되는 방법.
  8. N-차원 텐서에 액세스하기 위한 시스템으로서, 상기 시스템은,
    다수의 개별 컴퓨팅 유닛들;
    하나 이상의 프로세서들을 포함하며,
    상기 하나 이상의 프로세서들은,
    제1 네스트 루프(nested loop)의 하나 이상의 제1 반복(one or more first iterations) 각각에 대해, 제2 네스트 루프에 대한 제1 루프 바운드에 도달할 때까지 상기 제1 네스트 루프 내에 네스트된 제2 네스트 루프의 반복들을 수행하고 -상기 제1 네스트 루프의 상기 하나 이상의 제1 반복에 대한 상기 제2 네스트 루프의 다수의 반복들은 다수의 컴퓨팅 유닛들의 수를 초과하는 총 반복 횟수를 갖는 상기 제2 네스트 루프에 응답하여 상기 제1 루프 바운드에 의해 제한됨-; 그리고
    상기 제1 네스트 루프의 끝에서 두 번째(penultimate) 반복이 완료된 후, 대안 루프 바운드에 도달할 때까지 상기 제1 네스트 루프의 최종 반복을 위해 상기 제2 네스트 루프의 하나 이상의 반복들을 수행하도록 구성되며, 상기 대안 루프 바운드는 상기 제1 루프 바운드보다 작으며, 상기 대안 루프 바운드는 상기 제2 네스트 루프의 총 반복 횟수를 상기 컴퓨팅 유닛들의 수로 나눈 나머지 값에 기초하며, 상기 제1 루프 바운드는 상기 컴퓨팅 유닛들의 수와 동일하게 설정되는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 시스템.
  9. 제8항에 있어서, 상기 하나 이상의 프로세서들은,
    상기 제1 네스트 루프의 끝에서 두 번째 반복이 완료되었다는 결정에 응답하여 상기 제1 네스트 루프의 최종 반복을 위해 상기 제1 루프 바운드를 상기 대안 루프 바운드로 대체하도록 더 구성되는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 시스템.
  10. 제8항에 있어서, 각각의 개별 컴퓨팅 유닛은 컴퓨팅 타일, 프로세서 또는 매스 유닛을 포함하는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 시스템.
  11. 제8항에 있어서,
    상기 제2 네스트 루프에 대한 제1 루프 바운드에 도달할 때까지 상기 제1 네스트 루프 내에 네스트된 제2 네스트 루프의 반복들을 수행하는 것은, 상기 컴퓨팅 유닛들을 이용하여 병렬로 상기 제2 네스트 루프의 각 반복을 수행하는 것을 포함하며, 각각의 컴퓨팅 유닛은 상기 제2 네스트 루프의 각각의 반복을 수행하는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 시스템.
  12. 제8항에 있어서,
    상기 대안 루프 바운드는 상기 제2 네스트 루프의 총 반복 횟수를 상기 컴퓨팅 유닛들의 수로 나눈 나머지 값에 기초하는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 시스템.
  13. 제8항에 있어서, 상기 제1 네스트 루프 및 상기 제2 네스트 루프를 포함하는 네스트 루프 세트는 상기 제1 네스트 루프와 상기 제2 네스트 루프 사이에 네스트된 하나 이상의 루프들을 포함하고, 상기 제2 네스트 루프는 다른 루프 내에 네스트되는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 시스템.
  14. 제8항에 있어서, 상기 제2 네스트 루프는 상기 제1 네스트 루프와 상기 제2 네스트 루프 사이에 네스트된 다른 루프들 없이 상기 제1 네스트 루프 내에 직접 네스트되는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 시스템.
  15. N-차원 텐서에 액세스하기 위한 장치로서, 상기 장치는,
    텐서 요소들에 대한 메모리 어드레스들을 각각 연산하는 다수의 개별 컴퓨팅 유닛들; 그리고
    동작들을 수행함으로써 네스트 루프들(nested loops)의 반복들을 상기 개별 컴퓨팅 유닛들에 할당하도록 구성된 제어기를 포함하며, 상기 동작들은,
    제1 네스트 루프(nested loop)의 하나 이상의 제1 반복(one or more first iterations) 각각에 대해, 제2 네스트 루프에 대한 제1 루프 바운드에 도달할 때까지 상기 제1 네스트 루프 내에 네스트된 제2 네스트 루프의 반복들을 수행하는 동작 -상기 제1 네스트 루프의 상기 하나 이상의 제1 반복에 대한 상기 제2 네스트 루프의 다수의 반복들은 다수의 컴퓨팅 유닛들의 수를 초과하는 총 반복 횟수를 갖는 상기 제2 네스트 루프에 응답하여 상기 제1 루프 바운드에 의해 제한됨-; 그리고
    상기 제1 네스트 루프의 끝에서 두 번째(penultimate) 반복이 완료된 후, 대안 루프 바운드에 도달할 때까지 상기 제1 네스트 루프의 최종 반복을 위해 상기 제2 네스트 루프의 하나 이상의 반복들을 수행하는 동작을 포함하며, 상기 대안 루프 바운드는 상기 제1 루프 바운드보다 작으며, 상기 대안 루프 바운드는 상기 제2 네스트 루프의 총 반복 횟수를 상기 컴퓨팅 유닛들의 수로 나눈 나머지 값에 기초하며, 상기 제1 루프 바운드는 상기 컴퓨팅 유닛들의 수와 동일하게 설정되는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 장치.
  16. 제15항에 있어서, 상기 제어기는,
    상기 제1 네스트 루프의 끝에서 두 번째 반복이 완료되었다는 결정에 응답하여 상기 제1 네스트 루프의 최종 반복을 위해 상기 제1 루프 바운드를 상기 대안 루프 바운드로 대체하도록 더 구성되는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 장치.
  17. 제15항에 있어서, 각각의 개별 컴퓨팅 유닛은 컴퓨팅 타일, 프로세서 또는 매스 유닛을 포함하는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 장치.
  18. 제15항에 있어서,
    상기 제2 네스트 루프에 대한 제1 루프 바운드에 도달할 때까지 상기 제1 네스트 루프 내에 네스트된 제2 네스트 루프의 반복들을 수행하는 것은, 상기 컴퓨팅 유닛들을 이용하여 병렬로 상기 제2 네스트 루프의 각 반복을 수행하는 것을 포함하며, 각각의 컴퓨팅 유닛은 상기 제2 네스트 루프의 각각의 반복을 수행하는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 장치.
  19. 제15항에 있어서,
    상기 대안 루프 바운드는 상기 제2 네스트 루프의 총 반복 횟수를 상기 컴퓨팅 유닛들의 수로 나눈 나머지 값에 기초하는 것을 특징으로 하는 N-차원 텐서에 액세스하기 위한 장치.
KR1020197030429A 2017-06-19 2018-04-27 대안적인 루프 제한 KR102261768B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020217016591A KR102278661B1 (ko) 2017-06-19 2018-04-27 대안적인 루프 제한

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/627,022 2017-06-19
US15/627,022 US10248908B2 (en) 2017-06-19 2017-06-19 Alternative loop limits for accessing data in multi-dimensional tensors
PCT/US2018/029796 WO2018236468A1 (en) 2017-06-19 2018-04-27 ALTERNATE LOOP LIMITS

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020217016591A Division KR102278661B1 (ko) 2017-06-19 2018-04-27 대안적인 루프 제한

Publications (2)

Publication Number Publication Date
KR20190126887A KR20190126887A (ko) 2019-11-12
KR102261768B1 true KR102261768B1 (ko) 2021-06-07

Family

ID=62186548

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020197030429A KR102261768B1 (ko) 2017-06-19 2018-04-27 대안적인 루프 제한
KR1020217016591A KR102278661B1 (ko) 2017-06-19 2018-04-27 대안적인 루프 제한

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020217016591A KR102278661B1 (ko) 2017-06-19 2018-04-27 대안적인 루프 제한

Country Status (7)

Country Link
US (2) US10248908B2 (ko)
EP (1) EP3642708A1 (ko)
JP (2) JP7035080B2 (ko)
KR (2) KR102261768B1 (ko)
CN (2) CN116663604A (ko)
TW (2) TWI672594B (ko)
WO (1) WO2018236468A1 (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11321092B1 (en) * 2017-11-08 2022-05-03 Habana Labs Ltd. Tensor-based memory access
US10936942B2 (en) * 2017-11-21 2021-03-02 Google Llc Apparatus and mechanism for processing neural network tasks using a single chip package with multiple identical dies
US10373291B1 (en) * 2018-01-31 2019-08-06 Google Llc Image transformation for machine learning
CN109359732B (zh) 2018-09-30 2020-06-09 阿里巴巴集团控股有限公司 一种芯片及基于其的数据处理方法
JP6832329B2 (ja) * 2018-12-18 2021-02-24 富士通株式会社 データ構造
US11748599B2 (en) * 2019-02-21 2023-09-05 Texas Instruments Incorporated Super-tiling in neural network processing to enable analytics at lower memory speed
EP3828698B1 (en) * 2019-04-04 2022-07-20 Cambricon Technologies Corporation Limited Data processing method and apparatus, and related product
US11354564B2 (en) * 2019-06-27 2022-06-07 Intel Corporation Tuning of loop orders in blocked dense basic linear algebra subroutines
CN114270319A (zh) * 2019-10-07 2022-04-01 谷歌有限责任公司 在机器学习计算单元之间重新分配张量元素
CN114430838A (zh) * 2019-12-19 2022-05-03 谷歌有限责任公司 使用神经网络加速器来处理连续输入
US11275671B2 (en) 2020-07-27 2022-03-15 Huawei Technologies Co., Ltd. Systems, methods and media for dynamically shaped tensors using liquid types
US11954580B2 (en) 2020-09-16 2024-04-09 Meta Platforms, Inc. Spatial tiling of compute arrays with shared control
US11704562B1 (en) 2020-11-04 2023-07-18 Meta Platforms, Inc. Architecture for virtual instructions
US11709783B1 (en) 2020-11-11 2023-07-25 Meta Platforms, Inc. Tensor data distribution using grid direct-memory access (DMA) controller
US11972349B1 (en) * 2020-11-12 2024-04-30 Meta Platforms, Inc. Flexible compute array utilization in a tensor processor
US12001893B1 (en) 2020-12-28 2024-06-04 Meta Platforms, Inc. Distributed synchronization scheme
US11922306B2 (en) 2020-12-28 2024-03-05 Meta Platforms, Inc. Tensor controller architecture
US11656854B2 (en) * 2021-08-30 2023-05-23 Huawei Technologies Co., Ltd. Methods and devices for computing a memory size for software optimization
US20230196081A1 (en) * 2021-12-21 2023-06-22 International Business Machines Corporation Federated learning for training machine learning models
CN115599442B (zh) * 2022-12-14 2023-03-10 成都登临科技有限公司 一种ai芯片、电子设备及张量处理方法

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3102027B2 (ja) * 1990-11-20 2000-10-23 日本電気株式会社 ループ制御のネスティング管理機構
US5752037A (en) 1996-04-26 1998-05-12 Hewlett-Packard Company Method of prefetching data for references with multiple stride directions
US5958048A (en) * 1996-08-07 1999-09-28 Elbrus International Ltd. Architectural support for software pipelining of nested loops
US6374403B1 (en) 1999-08-20 2002-04-16 Hewlett-Packard Company Programmatic method for reducing cost of control in parallel processes
US6438747B1 (en) * 1999-08-20 2002-08-20 Hewlett-Packard Company Programmatic iteration scheduling for parallel processors
GB2359641B (en) * 2000-02-25 2002-02-13 Siroyan Ltd Mapping circuitry and method
US6952821B2 (en) * 2002-08-19 2005-10-04 Hewlett-Packard Development Company, L.P. Method and system for memory management optimization
US7107199B2 (en) * 2002-10-31 2006-09-12 Hewlett-Packard Development Company, L.P. Method and system for the design of pipelines of processors
US7047480B2 (en) * 2002-11-12 2006-05-16 Microsoft Corporation Matrix multiplication in a Galois field for forward error correction
US7225439B2 (en) * 2003-03-21 2007-05-29 Sun Microsystems, Inc. Combining write-barriers within an inner loop with fixed step
WO2005029318A2 (en) 2003-09-19 2005-03-31 University Of Delaware Methods and products for processing loop nests
CN100520714C (zh) * 2005-01-25 2009-07-29 Nxp股份有限公司 多线程处理器
US8806183B1 (en) * 2006-02-01 2014-08-12 Ixys Ch Gmbh Blank bit and processor instructions employing the blank bit
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
US20080141013A1 (en) 2006-10-25 2008-06-12 On Demand Microelectronics Digital processor with control means for the execution of nested loops
ATE463788T1 (de) * 2007-06-26 2010-04-15 Ericsson Telefon Ab L M Datenverarbeitungseinheit für anweisungen in geschachtelten schleifen
US8087012B2 (en) 2007-08-21 2011-12-27 International Business Machines Corporation Eliminating maximum/minimum operations in loop bounds
US8509162B2 (en) * 2008-02-13 2013-08-13 Qualcomm Incorporated System and method for scheduling over multiple hops
US20090327674A1 (en) * 2008-06-27 2009-12-31 Qualcomm Incorporated Loop Control System and Method
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
CA2684226A1 (en) * 2009-10-30 2011-04-30 Ibm Canada Limited - Ibm Canada Limitee Eleminating redundant operations for common properties using shared real registers
JP5402746B2 (ja) * 2010-03-18 2014-01-29 富士通株式会社 最適化処理プログラム,最適化処理装置および最適化処理方法
US8683185B2 (en) * 2010-07-26 2014-03-25 International Business Machines Corporation Ceasing parallel processing of first set of loops upon selectable number of monitored terminations and processing second set
JP2012032986A (ja) * 2010-07-30 2012-02-16 Fujitsu Ltd コンパイル方法及びプログラム
US20140181171A1 (en) * 2012-12-24 2014-06-26 Pavel Dourbal Method and system for fast tensor-vector multiplication
US20140188961A1 (en) * 2012-12-27 2014-07-03 Mikhail Plotnikov Vectorization Of Collapsed Multi-Nested Loops
CN103218347B (zh) * 2013-04-28 2016-01-20 清华大学 面向可重构阵列的多参数融合性能建模方法
US9087394B1 (en) * 2014-02-13 2015-07-21 Raycast Systems, Inc. Computer hardware architecture and data structures for packet binning to support incoherent ray traversal
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

Also Published As

Publication number Publication date
CN110520834A (zh) 2019-11-29
JP7035080B2 (ja) 2022-03-14
TWI672594B (zh) 2019-09-21
TW201947466A (zh) 2019-12-16
CN110520834B (zh) 2023-05-23
TW201905730A (zh) 2019-02-01
JP2020524318A (ja) 2020-08-13
KR20210068155A (ko) 2021-06-08
JP7279226B2 (ja) 2023-05-22
JP2022084674A (ja) 2022-06-07
US10248908B2 (en) 2019-04-02
US20180365561A1 (en) 2018-12-20
WO2018236468A1 (en) 2018-12-27
KR20190126887A (ko) 2019-11-12
US20190205756A1 (en) 2019-07-04
CN116663604A (zh) 2023-08-29
TWI710974B (zh) 2020-11-21
EP3642708A1 (en) 2020-04-29
KR102278661B1 (ko) 2021-07-16
US10885434B2 (en) 2021-01-05

Similar Documents

Publication Publication Date Title
KR102261768B1 (ko) 대안적인 루프 제한
KR102243036B1 (ko) 가산기를 이용한 다차원 텐서의 데이터 액세스
CN109324827B (zh) 用于处理用于访问数据的指令的装置、方法和系统
JP7379581B2 (ja) 特殊目的計算ユニットを用いたハードウェアダブルバッファリング
US10373291B1 (en) Image transformation for machine learning
GB2567038B (en) Accessing prologue and epilogue data

Legal Events

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