KR20220010747A - 다중 프로세서가 있는 컴퓨터에서의 통신 - Google Patents

다중 프로세서가 있는 컴퓨터에서의 통신 Download PDF

Info

Publication number
KR20220010747A
KR20220010747A KR1020217041489A KR20217041489A KR20220010747A KR 20220010747 A KR20220010747 A KR 20220010747A KR 1020217041489 A KR1020217041489 A KR 1020217041489A KR 20217041489 A KR20217041489 A KR 20217041489A KR 20220010747 A KR20220010747 A KR 20220010747A
Authority
KR
South Korea
Prior art keywords
data
processor
processors
computer
index value
Prior art date
Application number
KR1020217041489A
Other languages
English (en)
Inventor
리차드 루크 사우스웰 오스본
매튜 데이비드 파일스
Original Assignee
그래프코어 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 그래프코어 리미티드 filed Critical 그래프코어 리미티드
Publication of KR20220010747A publication Critical patent/KR20220010747A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17318Parallel communications techniques, e.g. gather, scatter, reduce, roadcast, multicast, all to all
    • 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]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/177Initialisation or configuration control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • 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
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • 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/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • 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/045Combinations of networks
    • G06N3/0454
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Multi Processors (AREA)

Abstract

복수의 프로세서를 포함하는 컴퓨터가 개시되며, 각각의 프로세서는 컴퓨터에 대한 계산 단계 동안 데이터에 대한 오퍼레이션을 수행하고, 사전 컴파일된 동기화 베리어에 따라 컴퓨터에 대한 교환 단계 동안 프로세서들 중 적어도 하나의 다른 프로세서와 데이터를 교환하도록 구성되며, 컴퓨터의 프로세서들 중 하나가 인덱싱되고 그리고 데이터 교환 오퍼레이션은 인덱스 값에 따라 교환 단계에서 각 프로세서에 의해 수행된다.

Description

다중 프로세서가 있는 컴퓨터에서의 통신
본 개시는 다중 프로세서를 포함하는 컴퓨터에서 상이한 프로세서 사이에서 수행되는 데이터 전송 오퍼레이션을 제어하는 것에 관한 것이다.
대규모 병렬 오퍼레이션을 수행할 때 컴퓨터 내부에 여러 프로세서가 제공된다. 이러한 컴퓨터는 각 프로세서가 단일 칩에 제공되는 시스템일 수 있다. 각각의 프로세서는 그 자체로 복수의 프로세싱 유닛을 포함할 수 있다. 일부 경우에, 각각의 프로세서는 다른 데이터 세트에 대해 동일한 오퍼레이션 세트를 수행하도록 구성될 수 있다. 각 프로세서는 교환 단계에서 하나 이상의 다른 프로세서와 결과를 교환하기 전에 계산 단계에서 각각의 계산을 수행한다. 계산 단계와 교환 단계 사이에 미리 컴파일된 베리어(barrier)가 부과된다. 결과 교환을 통해 더 큰 오퍼레이션의 컨텍스트에서 각각 다른 태스크를 수행하는 다른 프로세서 간에 동기화를 수행할 수 있다.
다중 프로세서를 포함하는 컴퓨터 적용의 한 예는 기계 학습 알고리즘의 컨텍스트에서, 예를 들어 심층 신경망의 컨텍스트에서 발견된다. 기계 지능 분야의 숙련자에게 친숙한 바와 같이, 기계 지능 알고리즘은 인터커넥트된 여러 노드의 그래프로 나타낼 수 있는 "지식 모델"에 대한 반복적인 업데이트 수행을 기반으로 한다. 각 노드는 입력의 함수를 나타낸다. 일부 노드는 그래프에 대한 입력을 수신하고 일부는 하나 이상의 다른 노드로부터 입력을 수신하는 반면, 일부 노드의 출력은 다른 노드의 입력을 형성하고 일부 노드의 출력은 그래프의 출력을 제공한다(어떤 경우에는 주어진 노드가 그래프에 대한 입력, 그래프의 출력 및 다른 노드에 대한 연결을 모두 가질 수도 있다). 또한, 각 노드의 함수는 하나 이상의 개별 파라미터, 예를 들어 가중치에 의해 파라미터화된다. 학습 단계에서 목표는 일련의 경험적 입력 데이터를 기반으로 그래프 전체가 가능한 입력 범위에 대해 원하는 출력을 생성할 수 있도록 다양한 파라미터에 대한 값을 찾는 것이다. 이를 수행하기 위한 다양한 알고리즘, 예를 들어 확률적 경사 하강법(stochastic gradient descent)에 기초한 역전파 알고리즘이 공지되어 있다. 입력 데이터를 기반으로 여러 번 반복하면 파라미터가 점차적으로 조정되어 오류가 감소하므로 그래프가 솔루션으로 수렴된다. 후속 단계에서 학습된 모델을 사용하여 지정된 입력 세트가 주어지면 출력을 예측하거나 지정된 출력 세트가 주어지면 입력(원인)에 대해 추론할 수 있다.
일반적으로 각 노드의 프로세싱 중 적어도 일부는 그래프의 노드 중 일부 또는 전체와 독립적으로 수행될 수 있으므로 큰 그래프는 동시성 및/또는 병렬 처리(parallelism)에 대한 큰 기회를 노출한다. 각 프로세싱 유닛은 다른 노드와 관련된 프로세싱을 수행하는 데 사용할 수 있는 컴퓨터이다. 이러한 방식으로, 복수의 프로세싱 유닛은 단일 신경망을 훈련시키기 위해 집합적으로 사용될 수 있다. 이는 각 프로세싱 유닛이 다른 데이터 세트를 사용하여 신경망의 각 프로세싱 유닛에 대한 가중치 업데이트를 유도하는 데이터 병렬 처리를 적용하여 달성된다. 그런 다음 업데이트는 교환 단계에서 프로세싱 유닛 간에 동기화된다.
따라서, 컴퓨터의 프로세서들 간에 데이터를 교환할 때, 각각의 프로세서는 서로 다른 시간에 서로 다른 데이터 프래그먼트(fragment)들을 교환해야 한다는 것을 이해할 수 있다. 또한, 각각의 프로세서는 컴퓨터에서 각각의 프로세서의 위치에 의존하는 수신된 데이터에 대해 데이터의 저장 및 감소와 같은 상이한 오퍼레이션을 수행하도록 구성될 수 있다. 따라서 컴퓨터의 각 프로세서가 적절한 시간에 각각의 오퍼레이션을 수행하도록 해야 한다.
언급한 바와 같이, 컴퓨터의 프로세서 간에 데이터가 교환되도록 하려면, 각 프로세서는 적절한 시간에 데이터 교환에 필요한 적절한 오퍼레이션을 수행해야 한다. 이를 달성하는 한 가지 방법은 컴퓨터의 각 프로세서에 대해 서로 다른 실행 코드 세트(실행 이미지)을 컴파일하는 것이다. 각 프로세서에 대해 서로 다른 코드 세트를 컴파일함으로써, 각 프로세서는 프로세서 간의 적절한 데이터 교환을 허용하기 위해 서로 다른 시간에 데이터 교환을 위한 적절한 오퍼레이션을 수행하도록 프로그래밍될 수 있다. 그러나, 프로세서마다 별도의 프로그램을 컴파일하는 것과 관련된 문제가 있는데, 이는 프로세서의 수에 따라 컴파일 시간이 크게 증가하여 바람직하지 않은 컴파일 시간이 길어질 수 있다는 점이다.
본 발명은 기계 학습 모델을 사용하여 훈련을 수행할 때 사용하기에 특히 적용 가능한 프로세서 간 데이터 교환을 위한 기술을 제공하지만, 이에 제한되지 않는다.
애플리케이션의 실시예에 따르면, 컴퓨터의 프로세서 세트 각각에는 실행 가능한 이미지의 형태를 취할 수 있는 단일 세트의 실행 가능한 컴퓨터 코드가 제공된다. 각 프로세서 세트에는 실행 중 특정 시간에 수행되는 실행 가능한 컴퓨터 코드 세트에 표현된 오퍼레이션을 결정하는 인덱스 값이 제공된다. 인덱스 값에 따른 오퍼레이션은 프로세서 간의 데이터 교환을 제어하는 오퍼레이션이다. 따라서, 프로세서는 각각의 프로세서에 대해 컴파일될 별도의 실행 코드 세트를 요구하지 않고 각각의 인덱스 값에 따라 적절한 교환 오퍼레이션을 수행하도록 구성된다.
제1 양태에 따르면, 복수의 프로세서를 포함하는 컴퓨터가 제공되며, 각 프로세서는 컴퓨터의 계산 단계 동안 데이터에 대한 오퍼레이션을 수행하고, 동기화 베리어에 따라, 컴퓨터의 교환 단계 동안 상기 프로세서들중 적어도 하나의 다른 프로세서와 데이터를 교환하도록 구성되며, 각 프로세서는, 복수의 프로세싱 유닛; 복수의 프로세서들의 각각의 프로세서를 식별하는 인덱스 값 그리고 실행 가능 명령어의 동일한 세트를 포함하는 프로그램을 포함하는 적어도 하나의 스토리지 -각각의 적어도 하나의 스토리지는 프로세서의 각각의 프로세싱 유닛에 적어도 하나의 메모리를 포함하고, 각각의 적어도 하나의 메모리는 실행 가능한 명령어의 세트의 서브세트와 프로세서의 인덱스 값의 카피(copy)를 저장함-; 실행 가능한 명령어의 세트에 의해 지정된 계산에 사용하기 위한 데이터를 저장하는 복수의 데이터 메모리 -복수의 데이터 메모리는 프로세서의 복수의 프로세싱 유닛 각각의 데이터 메모리를 포함함-; 프로세서의 복수의 프로세싱 유닛 각각에 실행 유닛을 포함하는 복수의 실행 유닛을 포함하며, 실행 유닛 중 적어도 일부의 각각은 동작들을 수행하도록 하는 실행 가능한 명령어의 각각의 서브세트 중 하나 이상을 실행하도록 배열되며, 상기 동작들은, 각각의 인덱스 값에 따라, 컴퓨터에 대한 교환 단계 동안 상기 프로세서들 중 적어도 하나의 다른 프로세서 그리고 각각의 프로세싱 유닛의 데이터 메모리 사이에서 데이터 전송을 수행하기 위한 오퍼레이션을 선택하는 동작; 그리고 교환 단계 동안 데이터 전송을 수행하기 위해 선택한 오퍼레이션을 수행하는 동작을 포함한다.
일부 실시예에서, 상기 프로세서들 중 적어도 일부 각각에 대해, 각각의 인덱스 값에 따라, 데이터 전송을 수행하기 위한 오퍼레이션을 선택하는 동작은 데이터가 전송되는 프로세서들 중 각각의 적어도 하나의 다른 프로세서를 선택하는 동작을 포함한다.
일부 실시예에서, 프로세서들 중 적어도 일부 각각에 대해, 상기 오퍼레이션은 각각의 인덱스 값에 따라 선택된 각각의 데이터 메모리의 영역과 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이에서 데이터 전송을 야기한다.
일부 실시예에서, 프로세서들 중 적어도 일부 각각에 대해, 각각의 실행 유닛은 각각의 인덱스 값에 대해 산술 오퍼레이션을 수행함으로써 데이터 메모리의 각각의 영역의 어드레스를 계산하도록 구성된다.
일부 실시예에서, 프로세서들 중 적어도 일부 각각에 대해, 각각의 실행 유닛은 각각의 인덱스 값에 따라 실행 가능한 명령어의 각각의 서브세트에서 적어도 하나의 명령어로 브랜치(branch)하도록 구성되고, 적어도 하나의 명령어는, 상기 각각의 실행 유닛에 의해 실행될 때, 상기 데이터 메모리의 각각의 영역과 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이에서 데이터 전송을 야기한다.
일부 실시예에서, 프로세서들 중 적어도 일부 각각에 대해, 상기 오퍼레이션은 데이터 메모리의 각각의 영역에 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로부터 수신된 데이터를 저장하는 동작을 포함한다.
일부 실시예에서, 프로세서들 중 적어도 일부 각각에 대해, 상기 오퍼레이션은 각각의 인덱스 값에 따라 각각의 데이터 메모리에 저장된 데이터를 선택하는 동작 그리고 상기 선택된 데이터를 프로세서들 중 각각의 적어도 하나의 다른 프로세서에 전송하는 동작을 포함한다.
일부 실시예들에서, 상기 프로세서들 중 적어도 일부 각각의 프로세싱 유닛들 중 적어도 일부 각각의 실행 유닛은, 각각의 선택된 데이터를 프로세싱하여, 각각의 선택된 데이터를 포함하는 데이터 패킷 및 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 상의 버퍼의 어드레스를 포함하는 헤더를 생성하도록 구성된다.
일부 실시예에서, 상기 컴퓨터는 데이터 전송에서 전송되는 데이터를 정적으로 라우팅하도록 구성된 라우팅 하드웨어를 포함한다.
일부 실시예에서, 프로세서들 중 적어도 일부 각각에 대해: 상기 오퍼레이션은 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로부터 수신된 데이터를 각각의 데이터 메모리에 저장된 추가 데이터와 결합하는 동작을 포함하고; 그리고 각각의 실행 유닛은 각각의 인덱스 값에 따라 각각의 데이터 메모리로부터 상기 추가 데이터를 선택하도록 구성된다.
일부 실시예에서, 프로세서들 중 적어도 일부 각각에 대해: 각각의 데이터 메모리는 적어도 하나의 기계 학습 모델에 대한 복수의 델타 가중치를 포함하고; 그리고 각각의 데이터 메모리와 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이의 데이터 전송은 각각의 데이터 메모리와 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이의 하나 이상의 델타 가중치의 전송을 제어하는 동작을 포함한다.
일부 실시예에서, 프로세서들 중 적어도 일부 각각에 대해, 각각의 적어도 하나의 실행 유닛은 각각의 인덱스 값에 따라 각각의 데이터 메모리로부터 하나 이상의 델타 가중치를 선택하도록 구성되고, 상기 선택된 하나 이상의 델타 가중치를 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로 전송하도록 구성된다.
일부 실시예에서, 프로세서들 중 적어도 일부 각각에 대해, 각각의 실행 유닛은, 각각의 인덱스 값에 따라 각각의 데이터 메모리로부터 하나 이상의 델타 가중치를 선택하고; 그리고 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로부터 수신된 하나 이상의 추가 델타 가중치를 사용하여 상기 선택된 하나 이상의 델타 가중치를 감소시키도록 구성된다.
일부 실시예에서, 컴퓨터의 각 프로세서는 시스템 온 칩(system on chip)이다.
제2 양태에 따르면,복수의 프로세서를 포함하는 컴퓨터의 실행 유닛에 의한 실행에 적합한 복수의 프로그램을 생성하는 컴퓨터 구현 방법이 제공되며, 각각의 프로세서는 각각의 프로그램을 유지하기 위한 적어도 하나의 메모리, 각각의 프로그램을 실행하기 위한 실행 유닛 및 데이터를 유지하기 위한 데이터 스토리지를 포함하고, 상기 컴퓨터 구현 방법은, 실행 가능한 명령어의 단일 세트를 컴파일하는 단계; 각각의 프로세서에 대해, 각각의 프로세서와 연관된 인덱스 값을 결정하는 단계; 그리고 각각의 프로세서에 대해, 명령어의 단일 세트 및 각각의 인덱스 값을 포함하는 로컬 프로그램을 생성하는 단계를 포함하며, 상기 로컬 프로그램 각각의 서브세트는, 로컬 프로그램이 각각의 프로세서에 할당될 때, 각각의 프로세서의 실행 유닛 중 하나에서 실행되어 동작들을 수행하도록 스케줄링되며, 상기 동작들은, 컴퓨터에 대한 계산 단계 동안 데이터에 대한 오퍼레이션을 수행하는 동작; 각각의 인덱스 값에 따라, 컴퓨터에 대한 교환 단계 동안 상기 프로세서들 중 적어도 하나의 다른 프로세서와 각각의 프로세싱 유닛의 데이터 메모리 사이에서 데이터 전송을 수행하기 위한 오퍼레이션을 선택하는 동작; 그리고 동기화 베리어를 따라, 상기 교환 단계 동안 데이터 전송을 수행하기 위해 상기 선택된 오퍼레이션을 수행하는 동작을 포함한다.
일부 실시예에서, 각각의 로컬 프로그램에 대해, 각각의 인덱스 값에 따라, 데이터 전송을 수행하기 위한 오퍼레이션을 선택하는 단계는 데이터가 전송되는 프로세서들 중 각각의 적어도 하나의 다른 프로세서를 선택하는 단계를 포함한다.
일부 실시예에서, 각각의 로컬 프로그램에 대해, 오퍼레이션은 각각의 인덱스 값에 따라 선택된 각각의 적어도 하나의 데이터 메모리의 영역과 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이에서 데이터 전송을 야기한다.
일부 실시예에서, 각각의 로컬 프로그램에 대해, 각각의 적어도 하나의 실행 유닛은 각각의 인덱스 값에 대해 산술 오퍼레이션을 수행함으로써 데이터 메모리의 각각의 영역의 어드레스를 계산하도록 구성된다.
일부 실시예에서, 각각의 로컬 프로그램에 대해, 각각의 실행 유닛은 각각의 인덱스 값에 따라 실행 가능한 명령어의 각각의 서브세트에서 적어도 하나의 명령어로 브랜치(branch)하도록 구성되고, 적어도 하나의 명령어는, 상기 각각의 실행 유닛에 의해 실행될 때, 상기 데이터 메모리의 각각의 영역과 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이에서 데이터 전송을 야기한다.
일부 실시예에서, 각각의 로컬 프로그램에서, 상기 오퍼레이션은 데이터 메모리의 각각의 영역에 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로부터 수신된 데이터를 저장하는 것을 포함한다.
일부 실시예에서, 각각의 로컬 프로그램에서, 상기 오퍼레이션은 각각의 인덱스 값에 따라 각각의 데이터 메모리에 저장된 데이터를 선택하는 동작 그리고 상기 선택된 데이터를 프로세서들 중 각각의 적어도 하나의 다른 프로세서에 전송하는 동작을 포함한다.
일부 실시예에서, 각각의 로컬 프로그램은, 각각의 프로세서에 할당될 때, 각각의 선택된 데이터를 프로세싱하여 각각의 선택된 데이터를 포함하는 데이터 패킷 및 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 상의 버퍼의 어드레스를 포함하는 헤더를 생성하도록, 각각의 프로세서의 적어도 하나의 실행 유닛에서 실행하도록 스케줄링된다.
일부 실시예에서, 컴퓨터는 데이터 전송에서 전송되는 데이터를 정적으로 라우팅하도록 구성된 라우팅 하드웨어를 포함한다.
일부 실시예에서, 각각의 로컬 프로그램에 대해, 상기 오퍼레이션은 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로부터 수신된 데이터를 각각의 데이터 메모리에 저장된 추가 데이터와 결합하는 동작을 포함하고; 그리고 각각의 적어도 하나의 실행 유닛은 각각의 인덱스 값에 따라 각각의 데이터 메모리로부터 상기 추가 데이터를 선택하도록 구성된다.
일부 실시예에서, 각각의 로컬 프로그램에 대해, 각각의 데이터 메모리는 적어도 하나의 기계 학습 모델에 대한 복수의 델타 가중치를 포함하고; 그리고 각각의 데이터 메모리와 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이의 데이터 전송은 각각의 데이터 메모리와 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이의 하나 이상의 델타 가중치의 전송을 제어하는 동작을 포함한다.
일부 실시예에서, 로컬 프로그램 각각에 대해, 각각의 적어도 하나의 실행 유닛은 각각의 인덱스 값에 따라 각각의 데이터 메모리로부터 하나 이상의 델타 가중치를 선택하도록 구성되고, 상기 선택된 하나 이상의 델타 가중치를 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로 전송하도록 구성된다.
일부 실시예에서, 로컬 프로그램의 각각에 대해, 각각의 적어도 하나의 실행 유닛은, 각각의 인덱스 값에 따라 각각의 데이터 메모리로부터 하나 이상의 델타 가중치를 선택하고; 그리고 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로부터 수신된 하나 이상의 추가 델타 가중치를 사용하여 상기 선택된 하나 이상의 델타 가중치를 감소시키도록 구성된다.
일부 실시예에서, 컴퓨터의 각 프로세서는 시스템 온 칩(system on chip)이다.
본 발명이 어떻게 실행될 수 있는지를 보여주기 위해 본 발명을 더 잘 이해하기 위해, 이제 첨부 도면을 예로서 참조할 것이다.
도 1은 신경망에서 분산 훈련을 예시하는 개략도이고,
도 1a는 단순한 "스트리밍" 라인 올리듀스(all-reduce) 알고리즘을 구현하기 위한 프로세서 라인을 보여주는 개략도이고,
도 2는 올리듀스 오퍼레이션의 개략도이고,
도 3a는 리듀스-스캐터(reduce-scatter) 오퍼레이션의 단계의 개략도이고,
도 3b는 올리듀스 오퍼레이션에서 오퍼레이션 타이밍의 개략도이고,
도 4는 인덱스 값에 따라 선택된 오퍼레이션에 따른 프로세서 간의 데이터 교환의 개략도이고,
도 4a는 인덱스 값에 따라 선택된 오퍼레이션에 따른 프로세서 간의 데이터 교환의 개략도이고,
도 4b는 다중 타일(multi-tile) 프로세서의 개략도이고,
도 5는 다중 타일 프로세서 내의 계산 및 교환 단계(exchange phase)를 나타내는 개략도이며,
도 6은 벌크(bulk) 동기 병렬 시스템에서 데이터 교환을 보여주며,
도 7은 컴퓨터에서 다중 타일 프로세서의 배열을 보여주며,
도 8은 컴퓨터에서 타일 간의 데이터 패킷 교환을 보여주며,
도 9는 다중 타일 프로세서의 타일의 단순화된 개략도이고,
도 10은 다중 프로세서 컴퓨터에서 타일의 배열을 보여주며,
도 11은 컴퓨터의 각 프로세서에 대한 프로그램을 컴파일하는 방법을 보여주며,
도 12는 인덱스 값에 따라 선택된 오퍼레이션에 따른 프로세서 간의 데이터 교환의 개략도이다.
본 발명의 양태는 기계 학습 워크로드를 위한 가속기로서 작용하도록 설계된 다중 타일 프로세서를 포함하는 컴퓨터의 컨텍스트에서 개발되었다. 그러나, 본 발명은 기계 학습 컨텍스트에 제한되지 않는다. 가속기는 인터커넥트된 복수의 프로세서를 포함한다. 일부 실시예에서, 각각의 프로세서는 다중 타일 프로세서의 형태를 취할 수 있다. 본 발명의 실시예를 구현하기 위해 사용될 수 있는 다중 타일 프로세서는 미국 특허 출원 번호: 15/886315에 설명되어 있으며, 이는 여기에 참조로 포함된다. 대안적으로, 각 프로세서는 단순히 단일 모놀리식(monolithic) 프로세서의 형태를 취할 수 있다.
본 발명의 예시적인 실시예가 첨부된 도면을 참조하여 더 상세하게 설명될 것이다.
애플리케이션의 실시예에 따른 컴퓨터(700)의 예를 도시하는 도 12를 참조한다. 컴퓨터(700)는 복수의 프로세서(2i, 2ii, 2iii, 2iv, 2v, 2vi)(집합적으로 프로세서 2로 지칭됨)를 포함한다. 프로세서(2) 각각은 칩으로 알려진 집적 회로로 구현된다. 따라서 각각의 프로세서(2)는 시스템 온 칩(system on chip)이다.
복수의 프로세서(2) 각각은 각각의 프로세서(2)의 적어도 하나의 실행 유닛(420)에 의해 실행 가능한 명령어를 저장하는 적어도 하나의 명령어 메모리(410)를 포함한다. 각각의 프로세서(2)는 또한 인덱스 값을 저장하는 적어도 하나의 스토리지(storage)(415)를 포함한다. 스토리지(405, 410, 415)의 각 유닛이 도 12에서 별도의 저장 요소로 도시되어 있지만, 일부 실시예에서, 이들 중 둘 이상이 단일 메모리 유닛의 일부를 형성할 수 있다. 스토리지(405, 410, 415)의 각각의 유닛이 연속적인 메모리 뱅크로 도시되어 있지만, 하나 이상의 스토리지(405, 410, 415)의 유닛 각각은 각각의 프로세서(2) 전체에 분산된 복수의 메모리 유닛을 포함할 수 있다. 유사하게, 적어도 하나의 실행 유닛(420) 각각은 복수의 실행 유닛일 수 있다. 인덱스 스토리지(415)는 레지스터일 수 있다.
함께, 명령어 메모리(410)의 명령어 세트와 인덱스 스토리지(415)의 인덱스는 각각의 프로세서(2)를 위한 프로그램을 구성한다. 각각의 프로세서(2)는 데이터 메모리(405)에 저장된 데이터 값을 수정하고 다른 프로세서(2)와 데이터를 주고받는 오퍼레이션을 수행하기 위해 명령어 메모리(410)에 저장된 명령어를 실행하도록 구성된 적어도 하나의 실행 유닛을 포함한다. 명령어 메모리(410)의 명령어는 프로세서(2) 각각에서 동일하다. 그러나 인덱스 스토리지(415)에 보관된 인덱스 값은 프로세서(2)마다 다르다. 컴퓨터(700)의 각 프로세서(2)는 각각의 인덱스 스토리지(415)에 상이한 인덱스 값을 저장한다. 각 프로세서(2)에 의해 스토리지(415)에 유지되는 인덱스 값은 컴퓨터(700)의 프로세서(2)에서 프로세서(2)를 고유하게 식별한다. 프로세서(2) 각각은 컴퓨터(700)의 프로세서(2) 사이에서 데이터를 적절하게 전송하기 위해 저장된 인덱스 값에 따라 다른 세트의 데이터 전송 오퍼레이션을 수행하도록 구성된다. 인덱스 값(index value)은 메모리(405)로부터 어떤 데이터가 전송되는지를 제어하고, 수신된 데이터에 대해 수행되는 오퍼레이션을 제어한다.
라우팅 하드웨어(도 12에 도시되지 않음)는 프로세서(2) 사이에서 데이터를 라우팅하기 위해 컴퓨터(700)에 위치한다. 라우팅 하드웨어는 도 10과 관련하여 더 상세히 설명된 바와 같이 외부 인터커넥트(external interconnect)(72)의 형태를 취한다. 데이터는 데이터 패킷의 형태로 프로세서(2) 사이에서 전송된다. 라우팅 하드웨어는 데이터 패킷을 정적으로 라우팅하도록 구성된다. 정적 라우팅(static routing)에서, 라우팅 하드웨어는 데이터 패킷을 라우팅하기 위한 고정 라우팅 정보를 포함하는 라우팅 테이블을 포함한다.
컴퓨터(700)는 계산 단계(compute phases)와 교환 단계 사이에서 교번한다. 계산 단계 동안, 컴퓨터의 프로세서(2) 각각은 미리 컴파일된 동기화 베리어에 도달할 때까지 계산을 수행한다. 베리어 이후에, 컴퓨터(700)는 프로세서(2)가 서로 데이터를 교환하는 교환 단계로 이동한다. 명령어 메모리(410)의 일부 명령어는 실행 유닛(420)에 의해 실행될 때 실행 유닛(420)이 데이터 메모리(405)에 보유된 데이터를 사용하여 계산을 수행하도록 한다.
명령어 메모리(410)의 명령어 중 일부는 실행 유닛(420)에 의해 실행될 때 데이터 메모리(405)에 보유된 데이터를 프로세서(2) 중 다른 하나로 전송한다. 명령어 메모리(410)의 명령어 중 일부는 실행 유닛(420)에 의해 실행될 때 프로세서(2) 중 추가 하나로부터 수신된 데이터를 프로세서의 데이터 메모리(405)에 저장하게 한다.
따라서, 명령어는 실행 유닛(420)을 포함하는 프로세서(2)와 컴퓨터(700)의 추가 프로세서 사이의 데이터 전송을 제어하기 위해 실행 유닛(420)에 의해 실행된다. 인덱스 스토리지(415)에 저장된 인덱스는 데이터 전송을 제어하기 위해 실행 유닛(420)에 의해 사용된다. 이는 다른 방법으로 구현될 수 있다. 일부 실시예에서, 명령어 메모리(410)로부터의 명령어는 인덱스 값을 입력으로 취하고, 실행될 때 실행 유닛(420)이 인덱스 값에 대해 수행된 계산에 따라 데이터 전송이 어떻게 수행되어야 하는지를 결정하게 한다. 일부 실시예에서, 인덱스 값은 특정 데이터 전송 오퍼레이션을 수행하기 위해 명령어 메모리(410)로부터 특정 명령어를 선택하는 데 사용된다.
인덱스 값은 데이터 메모리(405)로부터 데이터가 전송될 복수의 프로세서(2) 중 특정 프로세서를 선택하기 위해 실행 유닛(420)에 의해 사용될 수 있다. 일례에서, 프로세서(2i)는 인덱스 스토리지(415)에 저장된 인덱스 값에 기초하여, 복수의 프로세서들로부터 프로세서(2ii)를 선택한다. 실행 유닛(420)은 그 후 데이터가 선택된 프로세서(2ii)로 전송되게 한다. 이를 위해, 실행 유닛(420)은 데이터를 프로세싱하여 프로세서(2ii)의 어드레스를 포함하는 데이터 패킷을 생성한 다음, 컴퓨터(2)의 라우팅 하드웨어에 의해 제공되는 패킷을 프로세서(2ii)로 디스패치(dispatche)한다.
인덱스 값은 데이터가 저장될 목적지 프로세서 상의 어드레스를 선택하기 위해 실행 유닛(420)에 의해 사용될 수 있다. 예를 들어, 프로세서(2i)의 실행 유닛(420)은 프로세서(2i)의 인덱스 값에 기초하여, 프로세서(2ii)의 데이터 메모리(205) 내의 어드레스를 결정한다. 그 다음 실행 유닛(420)은 프로세서(2ii)로 전송될 데이터를 프로세싱하여, 데이터가 저장될 프로세서(2ii)의 메모리(405) 내의 어드레스를 포함하는 하나 이상의 헤더를 갖는 하나 이상의 데이터 패킷을 생성한다. 실행 유닛(420)은 이러한 데이터 패킷이 프로세서(2ii)로 전송되게 하고, 이는 데이터 패킷의 헤더에 표시된 어드레스에서 메모리(405)에 저장된다.
인덱스 값은 전송될 데이터 메모리(405)로부터 특정 데이터를 선택하기 위해 실행 유닛(420)에 의해 사용될 수 있다. 실행 유닛(420)은 전송될 데이터의 데이터 메모리(405) 내의 어드레스를 결정한다. 실행 유닛(420)은 선택된 데이터가 프로세서 중 하나로, 예를 들어, 프로세서(2ii)로 전송되게 한다. 실행 유닛은 인덱스 값의 어드레스를 입력으로 사용하는 계산을 수행하거나 특정 데이터가 전송되도록 하기 위해 명령어 메모리(405)로부터 명령어를 선택함으로써 전송될 데이터의 데이터 메모리(405)의 어드레스를 결정할 수 있다.
인덱스 값은 프로세서(2)에서 수신된 데이터의 핸들링을 제어하기 위해 실행 유닛(420)에 의해 사용될 수 있다. 예를 들어, 프로세서(2ii)가 프로세서(2i)로부터 데이터를 수신할 때, 프로세서(2ii)의 실행 유닛(420)은 데이터 메모리(405)에서 데이터가 저장되는 위치를 제어하기 위해 각각의 인덱스 값을 사용할 수 있다. 추가적으로 또는 대안적으로, 프로세서(2ii)가 프로세서(2i)로부터 데이터를 수신할 때, 프로세서(2ii)의 실행 유닛(420)은 데이터 메모리(405)로부터 데이터를 선택하고 수신된 데이터와 메모리(405)로부터 선택된 데이터 모두를 포함하는 오퍼레이션(예를 들어, 데이터 결합)을 수행하기 위해 각각의 인덱스 값을 사용할 수 있다. 그 다음, 프로세서(2ii)는 오퍼레이션의 결과를 메모리(405)에 저장할 수 있다.
도 12에서, 프로세서(2i와 2ii) 사이의 데이터 전송만 도시되어 있지만, 데이터 전송은 컴퓨터(700)의 다른 프로세서(2) 사이에서 수행될 수 있고, 각각의 프로세서(2)에 대해, 각각의 프로세서(2)의 인덱스 값은 프로세서(2i 및 2ii)에 대해 위에서 설명된 임의의 방식으로 수행될 특정 데이터 전송 오퍼레이션을 선택하는 데 사용될 수 있다.
본 발명의 실시예는 기계 학습 모델을 훈련할 때 컴퓨터의 프로세서 간의 데이터 교환에 적용될 수 있다. 개시된 기술의 그러한 예시적인 적용을 설명하기 위해, 신경망을 훈련하기 위한 분산 아키텍처의 개략적인 블록도를 도시하는 도 1을 참조한다. 훈련 데이터(100)의 소스가 제공된다. 이는 훈련되는 신경망 모델에 적용 가능한 훈련 데이터를 보유할 수 있는 데이터베이스 또는 다른 종류의 데이터 저장소일 수 있다. 신경망 모델에 따른 프로세싱 자체는 여러 프로세서(110a, 110b, 110c) 등에 걸쳐 분산된다. 도 1에는 3개의 유닛만 표시되어 있지만 여러 프로세서를 사용할 수 있음을 쉽게 알 수 있다. 각각의 프로세서(110a, b, c)는 훈련 데이터 소스(100)로부터 훈련 데이터의 배치(batche)를 수신한다. 각 프로세서(110a, b, c)는 모델을 정의하는 파라미터(112a, 112b, 112c) 세트를 보유한다. 훈련 데이터의 유입(incoming) 배치는 계산 함수(114)에서 현재 파라미터 세트로 프로세싱되고, 계산 함수(114)의 결과는 훈련 데이터의 배치 및 현재 파라미터 세트에 계산 함수를 적용한 결과로서 원래 파라미터와 새로운 파라미터 사이의 차이를 나타내는 소위 델타를 생성하는 데 사용된다. 많은 신경망에서 이러한 파라미터를 "가중치(weights)"라고 하므로 델타 값을 "델타 가중치(delta weights)"라고 한다. 가중치는 112a, b, c로 표시되고 델타 가중치는 도 1에서 116a, b, c로 표시된다. 실제로, 가중치 및 델타 가중치는 프로세서에 의해 액세스 가능한 적절한 저장소에 저장된다는 것이 이해될 것이다. 가중치와 델타 가중치를 로컬 메모리에 보관할 수 있으면 학습 프로세스가 훨씬 더 효율적이다.
도 1의 아키텍처의 목표는 3개의 개별 모델을 훈련하는 것이 아니라 분산 방식으로 단일 모델을 훈련하는 것이다. 따라서 목적은 모델 파라미터(또는 가중치)를 각 프로세서의 단일 공통 세트로 수렴하는 것이다. 특정 가중치 세트에서 시작하여 각 프로세서에서 수신된 훈련 데이터 배치가 동일하지 않다고 가정하면 각 프로세서의 각 계산 함수에 의해 생성되는 델타 가중치에 변동이 있을 것이다. 따라서 필요한 것은 배치된 훈련 데이터의 각 반복 후에 프로세서 전체에 델타 가중치를 분배하는 방법이다. 이는 조합 함수(comb
Figure pct00001
)(118)가 각 프로세서로부터 델타 가중치를 수신하고 평균화 함수와 같은 델타 가중치를 감소시키는 수학적 함수를 수행하는 도 1에 도식적으로 도시되어 있다. 결합 함수(118)의 출력은 그 다음 각각의 프로세서 내의 결합 회로(120a, 120b, 120c)로 피드백된다. 따라서 새로운 가중치 세트는 원래 가중치와 조합 함수(118)로부터의 조합 출력의 조합으로 생성되고, 새로운 가중치(118a, 118b, 118c)는 로컬 메모리에 다시 저장된다. 그런 다음 다음 훈련 데이터 배치가 각 프로세서에 제공되고 프로세스가 여러 번 반복된다. 프로세서의 시작 가중치가 동일한 경우 각 반복 후에 동일한 새 값으로 다시 재설정된다. 델타 가중치는 감소된 조합 함수(118)에 공급되고, 그 후 원래 가중치와 결합될 수 있는 감소된 형태로 각각의 프로세서에 다시 공급된다.
프로세서 간에 데이터 교환이 효율적으로 구현될 수 있는 한 가지 방법은 컴퓨터에서 데이터를 프로세싱할 때 일반적으로 사용되는 루틴인 콜렉티브(collectives)를 사용하는 것이다. 이는 동일한 프로세서 또는 다른 프로세서에서 실행될 수 있는 여러 다른 프로세스에서 데이터를 공유하고 프로세싱할 수 있는 루틴이다. 예를 들어, 한 프로세스가 데이터 저장소(스토리지)에서 데이터를 읽는 경우 "브로드캐스트(broadcast)" 프로세스를 사용하여 해당 데이터를 다른 프로세스와 공유할 수 있다. 또 다른 예는 특정 함수의 결과가 여러 프로세스에서 필요한 경우이다. "감소(리덕션)(reduction)"는 여러 프로세스 각각의 데이터 값에 계산 함수을 적용해야 하는 결과이다. "게더(Gather)" 및 "스캐터(Scatter)" 콜렉티브는 둘 이상의 데이터 아이템을 처리한다. 특정 콜렉티브는 기계 학습 애플리케이션을 프로세싱하는 데 점점 더 중요해지고 있다.
MPI(Message Passing Interface)는 많은 병렬 컴퓨팅 아키텍처에 적용될 수 있는 메시지 전달 표준이다. MPI는 기계 학습에 적용할 수 있는 여러 콜렉티브를 정의한다. 그러한 콜렉티브 중 하나를 "올리듀스(all-reduce)"라고 한다. 올리듀스 오퍼레이션을 사용하면 서로 다른 소스 프로세스의 여러 데이터 값에 대해 작동하는 계산 함수의 결과가 수신 프로세스에서 제공될 수 있다. 수신 프로세스는 소스 프로세스 중 하나일 수 있으며 여러 수신 프로세스가 있을 수 있다. 올리듀스 콜렉티브(all-reduce Collective)는 여러 소스 프로세스의 데이터 값을 감소시키고 결과를 모든 소스 프로세스(감소된 결과에 대한 수신 프로세스 역할을 함)에 배포한다. MPI 표준에 따르면, 올리듀스 콜렉티브는 리듀스 콜렉티브의 모든 소스 프로세스(예: 프로세스 중 하나에서)의 데이터 값을 감소시킨 다음 각 소스 프로세스에 결과를 브로드캐스트하여 구현된다.
도 1a는 5개의 프로세서(N0...N5)의 라인 연결 토폴로지(line connected topology)에서 올리듀스 콜렉티브를 구현하는 방법을 설명하기 위한 개략도이다. 이들 프로세서는 조합 함수가 분산된 도 1의 프로세서에 대응할 수 있다. 프로세서는 각 프로세서가 "순방향(forwards)" 링크(LF) 및 "역방향(backwards)" 링크(LB)에 의해 이웃에 연결된 라인 구성으로 연결된 것으로 표시된다. 다이어그램에 표시된 대로 방향 문구가 암시하는 것처럼 순방향 링크는 도 1a의 왼쪽에서 오른쪽으로 프로세서를 연결하고 역방향 링크는 도 1a의 오른쪽에서 왼쪽으로 프로세서를 연결한다. 각 프로세서에는 200으로 지정된 프로세싱 기능(processing capability)과 202로 지정된 스토리지 기능(storage capability)이 있다. 각 프로세서에는 링크 LF/LB를 통해 인접 프로세서에 연결할 수 있는 하나 이상의 링크 인터페이스도 있다.
프로세서 간에 델타 가중치를 교환하는 데 사용할 수 있는 올리듀스 콜렉티브는 도 2에 나와 있다. 도 2는 시작 상태 S1에 있는 4개의 프로세서 각각에 대한 부분 값(partial values) 또는 "부분(partial)" P0, P1, P2, P3의 세트(벡터)를 보여준다. 이러한 컨텍스트에서, 프로세서는 프로세서 네트워크의 프로세서이다. 각 프로세서 N0, N1, N2, N3에는 4개의 "대응하는" 부분 P0, P1, P2 및 P3이 있다. 즉, 각 부분은 P0(n)이 프로세서 n + 1의 벡터에서 P0(n+1)처럼, 프로세서 n의 벡터에서 동일한 위치를 갖도록 벡터에서 위치를 갖는다. 접미사(suffix)(n)은 부분이 있는 프로세서를 나타내는 데 사용된다. 따라서 P0(0)은 프로세서 N0의 부분 P0이다. 리듀스-스캐터 패스(pass)에서 해당 부분이 감소되고, 감소(리덕션)가 프로세서 중 하나에 제공된다. 예를 들어, 부분 P0(0), P0(1), P0(2), P0(3)은 (r0으로) 감소(리듀스)되어 프로세서 N0에 배치된다. 유사하게, 부분 P1(0), P1(1), P1(2) 및 P1(3)은 (r1로) 감소되어 프로세서 N1에 배치된다. 중간 상태 S2에서 각 프로세서는 감소(리덕션) r0, r1, r2 및 r3 중 하나를 갖는다. 설명된 대로 감소(리덕션)는 독립 오퍼레이터(연산자)(예: 최대(max)) 또는 연관 오퍼레이터 = P1(N0) * P1(N1) * P1(N2) * P1(N3)을 포함할 수 있는 조합 함수(combinational function)(
Figure pct00002
)에 의해 수행될 수 있다. 그런 다음, 올게더 패스에서, 각 감소는 모든 프로세서에 제공되어 각 프로세서가 이제 4개의 감소(리덕션)를 모두 보유하는 상태 S3을 활성화한다. S1에서 "해당(corresponding)" 부분(partials), 예를 들어 P0(0), P0(1), P0(2) 및 P0(3)은 모두 다를 수 있으며, 반면, 상태 S3에서 각 감소(리덕션), 예를 들어 r0은 모든 프로세서에서 동일하며, ri = f{(Pi(0), Pi(1), Pi(2) 및 Pi(3))}이다. 기계 학습에서 부분 값 P0, P1, P2, P3의 세트는 벡터이다. 부분 벡터(예: 업데이트된 가중치)는 훈련 중 모델의 각 패스에서 생성된다. 상태 S3의 각 프로세서에 대한 감소(리덕션) r0, r1, r2, r3은 풀 리덕션 벡터이다(full reduction vector). 기계 학습의 컨텍스트에서 각 부분은 모델의 파라미터에 대한 업데이트 델타 세트일 수 있다. 대안적으로(여기서 더 설명되지 않은 배열에서) 이는 업데이트된 파라미터일 수 있다.
따라서 언급한 바와 같이 올리듀스 오퍼레이션은 리듀스-스캐터 오퍼레이션과 뒤이어 올게더(all-gather) 오퍼레이션으로 구성된다. 리듀스-스캐터 오퍼레이션 동안, 각 노드는 부분의 서로 다른 요소를 교환한다. 리듀스-스캐터가 완료되면 모든 노드는 최종 올리듀스의 n분의 1을 갖는다. 올게더(all-gather) 동안, 각 노드는, n-1 단계 후에, 모든 노드가 완전한 데이터 세트를 가질 때까지 최종 올리듀스의 추가 1/n을 수신한다.
도 3a 및 3b는 6개의 "가상(virtual)" ID 링(ID rings)을 사용하는 리듀스-스캐터/올게더의 예를 보여준다. 이들은 또한 본 명세서에서 "논리적(logical)" 링으로 지칭된다. 도 3a는 복수의 가상 링에서 부분의 감소(리덕션)를 예시하는 개략도이다. 각 부분은 6개의 프래그먼트로 나뉜다. 도 3a에서 대문자 R, Y, G, B, P, L은 각각 각 프로세서에 저장된 부분의 다른 프래그먼트를 나타낸다. 문자는 서로 감소(리듀스)되어야 하는 해당 프래그먼트를 나타내며 해당 프래그먼트에 대한 "가상" 또는 "논리적" 링을 정의한다. 도 3a를 보면, 부분 P0, P1, P2, P3, P4, P5 각각의 "R" 프래그먼트는 결과 벡터
Figure pct00003
에서 단일 프래그먼트로 감소(리듀스)된다. 마찬가지로 Y, G, B, P 및 L 프래그먼트에 대해서도 마찬가지이다.
도 3b는 올리듀스 프로세스의 각 단계에서 데이터 교환 및 계산을 나타내는 수평 축에 시간이 있는 타이밍 다이어그램을 보여준다. 도 3a 및 b에서, 올리듀스 프로세스는 올게더 단계(all-gather phase)가 뒤따르는 리듀스-스캐터 단계에 의해 수행된다.
도 3a 및 도 3b의 표기는 다음과 같다. 부분은 각각 P0, P1, P2, P3, P4 및 P5로 표시된다. 프로세스 시작 시 각 부분은 각각의 프로세서 N0, N1, N2, N3, N4, N5에 저장된다. 각 프래그먼트는 프래그먼트 순서와 감소(리듀스)된 것으로 간주되는 가상 링에서의 위치에 따라 레이블이 지정된다. 예를 들어, RA0은 부분 P0의 R 프래그먼트를 나타내며, 이는 프로세서 N0-N1-N2-N3-N4-N5에 의해 형성된 가상 링의 첫 번째 프래그먼트가기 때문이다. RA1은 가상 링의 두 번째 위치에 있는 프로세서 N1에서 계산된 R 프래그먼트를 나타낸다. YA0은 프로세서 N1에서 계산된 Y 프래그먼트를 나타낸다. "0" 접미사는 가상 링의 첫 번째 프래그먼트임을 나타내며, Y-링은 N1-N2-N3-N4-N5-N0이다. 특히 A의 접미사는 가상 링을 반영하며 물리적 프로세서(또는 부분(partials))에 해당하지 않는다. 도 3a는 순방향 링크의 가상 링만 보여준다. 도 3b는 B로 표시된 프래그먼트과 함께 역방향 링크에서 동등한 프로세스가 발생하고 있음을 보여준다.
1단계(step one)에서, 각 가상 링의 첫 번째 프래그먼트(A0)는 프로세서에서 다음 인접 프로세서로 전송되며, 여기서 해당 프로세서의 해당 프래그먼트로 감소된다. 즉, RA0은 N0에서 N1으로 이동하여 RA1과 함께 감소하여 RA0,1을 형성한다. 표기법 0, 1은 가상 링에서 첫 번째 및 두 번째 프래그먼트의 감소(reduction)에 의해 프래그먼트가 형성됨을 나타낸다. 동일한 단계에서 각 가상 링의 A0 프래그먼트가 동시에 전송된다. 즉, N1과 N2 사이의 링크는 YA0을 전송하는 데 사용되고, N2와 N3 사이의 링크는 GA0 등을 전송하는 데 사용된다. 다음 단계에서 해당 감소 프래그먼트(corresponding reduced fragments)는 순방향 링크를 통해 다음 인접 프로세서로 전송된다. 예를 들어, RA0,1은 N1에서 N2로 전송되고, YA0,1은 N2에서 N3으로 전송된다. 명확성을 위해 도 3a의 모든 프래그먼트에 번호가 매겨진 것은 아니다. 프래그먼트과 숫자의 전체 세트는 도 3b에 나와 있다. 이 프로세스는 5단계로 진행된다. 5단계 후에 각 프로세서의 모든 프래그먼트의 감소(리덕션)가 있다. 다섯 번째 단계(5단계)가 끝나면, 이 감소(리덕션)는 해당 프래그먼트에 대한 각 해당 링의 마지막 프로세서에 있다. 예를 들어 R 감소(리덕션)는 프로세서 N5에 있다.
모든 올게더 단계의 시작은 각 가상 링의 마지막 프로세서에서 첫 번째 프로세서로의 전송으로 시작된다. 따라서 R 프래그먼트에 대한 최종 감소(리덕션)는 올게더 단계의 첫 번째 단계를 위해 준비된 프로세서 N5에서 끝난다. Y 프래그먼트의 최종 감소는 이에 따라 프로세서 N0에서 끝난다. 올게더 단계의 다음 단계에서 감소된(리듀스된) 프래그먼트는 다음 인접 프로세서로 다시 전송된다. 따라서 완전히 감소된(리듀스된) R 프래그먼트는 이제 N2에도 있고, 완전히 리듀스된 Y 프래그먼트도 이제 N3에 있는 식이다. 이러한 방식으로 각 프로세서는 부분의 모든 완전히 감소된 프래그먼트 R, Y, G, B, P, L과 함께 올게더 단계의 끝에서 끝난다.
본 발명의 예시적인 실시예는 기계 학습 컨텍스트에서 데이터 교환을 제어하기 위해 적용될 수 있다. 구체적으로, 예시적인 실시예는 도 2, 3a 및 3b와 관련하여 위에서 설명된 리듀스-스캐터 오퍼레이션 동안 데이터 교환을 제어하기 위해 적용될 수 있다.
도 12와 관련하여 설명된 컴퓨터(700)의 예시적인 실시예를 도시하는 도 4를 참조한다. 이 예시적인 실시예는 위에서 설명된 바와 같이 기계 학습 컨텍스트에서 프로세서 간의 데이터 교환을 제어하기 위해 적용될 수 있다. 도 4에서, 데이터는 교환 단계의 특정 부분 동안 컴퓨터(700)의 프로세서(2) 사이에서 교환된다.
도 4에 도시된 바와 같이, 특정 부분 동안, 각 프로세서(2)의 실행 유닛(420)은 인덱스 스토리지(415)에 보유된 인덱스 값에 따라 데이터 메모리(405)로부터 데이터 프래그먼트/요소를 선택하도록 구성된다. 프로세서 N0의 실행 유닛(420)은 프로세서 N0에 의해 스토리지(415)에 보유된 인덱스 값에 따라 RA0으로 라벨링된 데이터를 선택하고 프로세서 N1로 전송한다. 프로세서 N1의 실행 유닛(420)은 프로세서 N1에 의해 보유된 인덱스 값에 따라 YA0으로 라벨링된 데이터를 선택하고 프로세서 N2로 전송한다. 프로세서 N2의 실행 유닛(420)은 프로세서 N2에 의해 보유된 인덱스 값에 따라 GA0으로 라벨링된 데이터를 선택하고 프로세서 N3으로 전송한다. 프로세서 N3의 실행 유닛(420)은 프로세서 N3에 의해 보유된 인덱스 값에 따라 BA0으로 라벨링된 데이터를 선택하고 프로세서 N4로 전송한다. 프로세서 N4의 실행 유닛(420)은 프로세서 N4에 의해 보유된 인덱스 값에 따라 PA0으로 라벨링된 데이터를 선택하고 프로세서 N5로 전송한다. 프로세서 N5의 실행 유닛(420)은 프로세서 N5에 의해 보유된 인덱스 값에 따라 LA0으로 라벨링된 데이터를 선택하고 프로세서 N0으로 전송한다.
각 프로세서(2)가 인덱스 값을 사용하여 전송할 데이터를 선택하는 것 외에도, 다른 프로세서(2)로부터 데이터 패킷을 수신하면, 각 프로세서(2)의 실행 유닛(420)은 메모리(405)에서 수신된 데이터 패킷들로부터 유도된 데이터 프래그먼트들이 인덱스 스토리지(415)에 저장된 인덱스 값에 따라 저장될 위치를 결정한다. 각 프로세서(2)의 실행 유닛(420)은 또한 수신된 데이터를 결합할 임의의 다른 데이터 프래그먼트를 선택한다. 예를 들어, 프로세서 N0의 실행 유닛(420)은 프로세서 N5로부터 LA0로 라벨링된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 L에 유지된 데이터 LA1으로 이를 감소(리듀스)시키기 위한 명령어를 실행한다. 프로세서 N1의 실행 유닛(420)은 프로세서 N0으로부터 RA0으로 라벨링된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 R에 유지된 데이터 RA1으로 이를 감소(리듀스)시키기 위한 명령어를 실행한다. 프로세서 N2의 실행 유닛(420)은 프로세서 N1으로부터 YA0으로 라벨링된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 Y에 유지된 데이터 YA1으로 이를 감소(리듀스)시키기 위한 명령어를 실행한다. 프로세서 N3의 실행 유닛(420)은 프로세서 N2로부터 GA0으로 라벨링된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 G에 유지된 데이터 GA1으로 이를 감소(리듀스)시키기 위한 명령어를 실행한다. 프로세서 N4의 실행 유닛(420)은 프로세서 N3으로부터 BA0으로 라벨링된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 B에 유지된 데이터 BA1로 이를 감소(리듀스)시키기 위한 명령어를 실행한다. 프로세서 N5의 실행 유닛(420)은 프로세서 N4로부터 PA0으로 라벨링된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 P에 유지된 데이터 PA1으로 이를 감소(리듀스)시키기 위한 명령어를 실행한다. 프로세서 N0의 실행 유닛(420)은 프로세서 N5로부터 LA0으로 라벨링된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 L에 유지된 데이터 LA1으로 이를 감소(리듀스)시키기 위한 명령어를 실행한다.
전송된 데이터 프래그먼트 각각은 도 3a 및 3b에 도시된 데이터 프래그먼트에 대응할 수 있다. 그러한 경우에, 각 데이터 프래그먼트는 훈련 데이터를 사용하여 각 프로세서(2)에 의해 계산된 델타 값의 서브세트에 대응한다. 집합적으로, 메모리(405)에 유지되고 문자 R, Y, G, B, P, L로 표시되는 데이터 값은 각각의 프로세서(2)에 제공된 훈련 데이터를 사용하여 계산되는 델타 값의 부분 벡터를 형성한다. 도 4는 각각의 프로세서(2)가 하나 이상의 델타 가중치를 포함하는 감소된 프래그먼트 세트를 제공받는 도 2에 도시된 리듀스-스캐터 오퍼레이션의 첫 번째 단계를 도시한다. 수신자 프로세서(2)로 전송되는 하나 이상의 델타 가중치의 각 프래그먼트는 해당 수신자 프로세서의 메모리(405)에 보유된 대응하는 델타 가중치 프래그먼트과 결합된다. 예를 들어, 프래그먼트 RA0은 프로세서 N0에서 프로세서 N1으로 전송되고 도 4에 표시된 단계에서 프래그먼트 RA1과 결합(combined)된다. 프래그먼트를 전송하고 후속 단계에서 결합하여 리듀스-스캐터 오퍼레이션이 수행된다. 각 단계에서, 프로세서들 사이에서 교환되는 프래그먼트는 인덱스 값 스토리지(415)에 보관된 인덱스 값에 의존한다. 각 프로세서(2)의 적어도 하나의 실행 유닛은 이 인덱스 값을 사용하여 전송할 프래그먼트와 수신한 각 프래그먼트를 메모리에 저장할 위치를 결정한다.
도 4a는 도 2에 표시된 올리듀스 프로세스의 일부로, 리듀스-스캐터 프로세스에 따라 수행되는 올게더 프로세스 동안 데이터 교환을 나타낸다. 도 2에서, 프로세서의 메모리(405)에 표시된 각 프래그먼트는 감소(리듀스)된 프래그먼트, 즉 리듀스-스캐터 오퍼레이션의 시작 전에 도 4의 메모리에 존재하는 해당 프래그먼트의 조합이다.
각 프로세서(2)의 적어도 하나의 실행 유닛(420)은 저장하는 인덱스 값에 따라 감소된 프래그먼트를 선택하고 전달(패스)하도록 구성된다. 프로세서 N0의 실행 유닛(420)은 프로세서 N0에 의해 보유된 인덱스 값에 따라
Figure pct00004
로 표시된 데이터를 선택하여 프로세서 N1로 전송한다. 프로세서 N1의 실행 유닛(420)은 프로세서 N1이 보유하고 있는 인덱스 값에 따라
Figure pct00005
로 표시된 데이터를 선택하여 프로세서 N2로 전송한다. 프로세서 N2의 실행 유닛(420)은 프로세서 N2에 의해 보유된 인덱스 값에 의존하여
Figure pct00006
로 표시된 데이터를 선택하여 프로세서 N3으로 전송한다. 프로세서 N3의 실행 유닛(420)은 프로세서 N3에 의해 보유된 인덱스 값에 따라
Figure pct00007
로 표시된 데이터를 선택하여 프로세서 N4로 전송한다. 프로세서 N4의 실행 유닛(420)은 프로세서 N4에 의해 보유된 인덱스 값에 따라
Figure pct00008
로 표시된 데이터를 선택하여 프로세서 N5로 전송한다. 프로세서 N5의 실행 유닛(420)은 프로세서 N5에 의해 보유된 인덱스 값에 따라
Figure pct00009
로 표시된 데이터를 선택하여 프로세서 N0으로 전송한다. 이러한 각 데이터 전송은 올게더 오퍼레이션의 첫 번째 단계(제1 단계)를 완료한다. 후속 단계를 수행함으로써, 각각의 프로세서(2)에는 각각의 감소(리듀스)된 프래그먼트가 제공된다.
각 프로세서(2)가 인덱스 값을 사용하여 전송할 데이터를 선택하는 것 외에도 다른 프로세서(2)로부터 데이터를 수신하면, 수신자 프로세서는 인덱스 스토리지(415)에 저장된 인덱스 값에 따라 데이터가 메모리 내 어디에 저장되어야 하는지를 결정한다. 예를 들어, 프로세서 N0의 실행 유닛(420)은 프로세서 N5로부터
Figure pct00010
로 표시된 데이터를 수신하고, 인덱스에 따라 메모리(405)의 위치 L에 이 데이터를 저장하기 위한 명령어를 실행한다. 프로세서 N1의 실행 유닛(420)은 프로세서 N0으로부터
Figure pct00011
로 표시된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 R에 이 데이터를 저장하기 위한 명령어를 실행한다. 프로세서 N2의 실행 유닛(420)은 프로세서 N1로부터
Figure pct00012
로 표시된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 Y에 이를 저장하기 위한 명령어를 실행한다. 프로세서 N3의 실행 유닛(420)은 프로세서 N2로부터
Figure pct00013
로 표시된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 G에 이 데이터를 저장하기 위한 명령어를 실행한다. 프로세서 N4의 실행 유닛(420)은 프로세서 N3로부터
Figure pct00014
로 표시된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 B에 이 데이터를 저장하기 위한 명령어를 실행한다. 프로세서 N5의 실행 유닛(420)은 프로세서 N4로부터
Figure pct00015
로 표시된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 P에 이 데이터를 저장하기 위한 명령어를 실행한다. 프로세서 N0의 실행 유닛(420)은 프로세서 N5로부터
Figure pct00016
로 표시된 데이터를 수신하고, 그 인덱스에 따라 메모리(405)의 위치 L에 이 데이터를 저장하기 위한 명령어를 실행한다.
각 프로세서는 도 4 및 4a의 메모리에 표시된 것과 같은 데이터를 추가 프로세서로 전송하기 위한 전체 명령어 세트를 포함하며, 인덱스 값은 데이터 전송을 제어한다.
인덱스는 다양한 방식으로 데이터 전송을 제어할 수 있다. 일부 실시예에서, 각 프로세서에 의해 유지되는 인덱스 값은 메모리(405)로부터 다른 프로세서(2)로의 적절한 데이터 프래그먼트의 전송을 수행하기 위해 각 실행 유닛(420)에 의해 실행되는 명령어 세트의 명령어를 결정한다. 각 프로세서(2)는 또한 메모리(405)의 적절한 위치에서 프래그먼트를 수신하고 저장하기 위한 전체 명령 세트를 포함한다. 각 프로세서(2)에 의해 유지되는 인덱스 값은 적절한 위치에 수신된 프래그먼트를 저장하기 위해 프로세서(2)의 적어도 하나의 실행 유닛(420)에 의해 실행되는 명령어 세트의 명령어를 결정한다. 이 경우, 실행 유닛(420)은 인덱스 값에 의존하는 브랜치 오퍼레이션(branch operation)을 수행하여 관련 데이터 전송을 수행하기 위해 실행되는 특정 명령어 세트를 선택한다.
일부 실시예에서, 각각의 프로세서(2)의 적어도 하나의 실행 유닛(402)은 데이터가 판독되거나 기록될 데이터 메모리(405)의 어드레스를 결정하기 위해 입력으로서 인덱스 값을 사용하여 산술 오퍼레이션을 수행한다.
도 4 및 도 4a에서, 각각의 프로세서(2)는 통합 데이터 메모리(405) 및 명령어 메모리(410)를 갖는 것으로 예시되어 있다. 그러나 이러한 메모리는 각각의 프로세서(2) 전체에 분산될 수 있다. 일부 실시예에서, 각각의 프로세서(2)는 복수의 프로세싱 유닛을 포함할 수 있으며, 이들은 여기에서 타일로 지칭된다. 이러한 배열은 참조로 포함된 미국 특허 출원 번호: 15/886315에 설명되어 있다. 각 타일은 프로세서(2)에 대한 인덱스의 카피(copy)를 포함하고, 도 12, 4 및 4a를 참조하여 위에서 설명된 것과 같이, 적절한 데이터 전송 오퍼레이션을 구현하기 위해 인덱스 값에 의존하는 명령어 세트로부터 오퍼레이션을 실행하도록 구성된다.
다중 타일 프로세서(2)의 예를 도시하는 도 4b를 참조한다. 프로세서(2)는 다중 프로세서 타일(4)의 어레이(6) 및 타일(4) 사이를 연결하는 인터커넥트(34)를 포함한다. 프로세서(2)는 동일한 IC 패키지에 패키징된 다중 다이(dies) 중 하나로 단독으로 구현될 수 있다. 인터커넥트(34)는 타일(4)이 서로 데이터를 교환할 수 있게 하기 때문에 여기에서 "교환 패브릭(exchange fabric)"(34)으로 지칭될 수도 있다. 각각의 타일(4)은 프로세서 및 메모리의 각각의 인스턴스를 포함한다. 예를 들어, 프로세서(2)는 수백 개의 타일(4), 또는 심지어 천 개 이상으로 구성될 수 있다. 완전성을 위해 여기에 언급된 "어레이(배열)"가 타일(4)의 특정 수의 치수 또는 물리적 레이아웃을 반드시 의미하는 것은 아니다.
실시예에서, 각각의 프로세서(2)는 또한 하나 이상의 외부 링크(8)를 포함하여, 프로세서(2)가 하나 이상의 다른 프로세서(예를 들어, 동일한 프로세서(2)의 하나 이상의 다른 인스턴스)에 연결될 수 있게 한다. 이러한 외부 링크(8)는, 프로세서(2)를 호스트 프로세서에 연결하기 위한 하나 이상의 프로세서-호스트 링크, 및/또는 동일한 IC 패키지 또는 카드 또는 다른 카드에 있는 프로세서(2)의 하나 이상의 다른 인스턴스와 함께 연결하기 위한 하나 이상의 프로세서 대 프로세서 링크 중 하나 이상을 포함할 수 있다. 하나의 예시적인 배열에서, 프로세서(2)는 프로세서(2)에 의해 프로세싱될 입력 데이터의 형태로 프로세서-호스트 링크 중 하나를 통해 프로세서에 연결된 호스트 프로세서(도시되지 않음)로부터 워크(work)를 수신한다. 프로세서(2)의 다중 인스턴스는 프로세서 간 링크에 의해 카드로 함께 연결될 수 있다. 따라서 호스트는 호스트 애플리케이션에 필요한 워크로드에 따라 각각이 칩 상의 다중 타일 시스템으로 구성된 다중 프로세서(2)를 갖는 컴퓨터에 액세스한다.
인터커넥트(34)는 어레이(6)의 상이한 타일(4)이 서로 통신할 수 있도록 구성된다. 그러나 동일한 타일(4)의 스레드 간에 잠재적으로 종속성이 있을 뿐만 아니라, 어레이(6)의 다른 타일(4)에서 실행되는 프로그램 부분 사이에도 종속성이 있을 수 있다. 따라서 한 타일 4의 코드 프래그먼트가 의존하는 데이터보다 앞서 실행되는 것을 방지하기 위해 다른 타일 4의 다른 코드 프래그먼트가 사용할 수 있도록 하는 기술이 필요하다.
각 타일(4)은 그 자체로 로컬 명령어 메모리에서 명령어(코드)를 실행하고 로컬 데이터 메모리에서 데이터를 처리할 수 있는 프로세서이다. 타일(4)은 배럴 쓰레드(barrel-threaded) 프로세서 및 메모리의 각각의 인스턴스를 포함할 수 있다. 예를 들어, 프로세서(2)는 수백 개의 타일(4), 또는 심지어 천 개 이상으로 구성될 수 있다. 완전성을 위해 여기에 언급된 "배열(어레이)"이 타일(4)의 특정 수의 치수 또는 물리적 레이아웃을 반드시 의미하는 것은 아니다.
프로세서(2) 상의 타일(4) 간의 통신은 시간 결정적 방식으로 발생한다. 그러나 다른 형태의 타일 간 교환이 가능하다. 어레이(배열)(6)의 다른 타일(4)에서 실행되는 프로그램 부분 사이에 종속성이 있을 수 있다. 즉, 한 타일에서 데이터를 프로세싱하는 것은 다른 타일의 결과에 따라 달라질 수 있으며, 예를 들어 다른 타일이 의존하는 결과를 제공할 수 있다. 따라서 한 타일 4의 코드 피스(piece)가 의존하는 데이터보다 앞서 실행되는 것을 다른 타일 4의 다른 코드 피스에서 사용할 수 있게 하는 기술이 필요하다.
AI 및 데이터 과학용 병렬 프로그래밍 모델은 일반적으로 컴퓨팅(Compute), 베리어(Barrier) 및 교환(Exchange)의 3단계 반복 실행 모델을 따른다. 함축된 의미(implications)는 프로세서와의 데이터 전송이 일반적으로 프로세서 간에 그리고 각 프로세서와 호스트 간에 데이터 일관성을 제공하기 위해 베리어 종속적이라는 것이다. 일반적으로 사용되는 데이터 일관성 모델은 BSP(Bulk Synchronous Parallel), SSP(Stale Synchronous Parallel) 및 비동기(Asynchronous)이다. 여기에 설명된 실시예는 BSP 모델을 사용하지만, 다른 동기화 모델이 대안으로서 활용될 수 있음이 명백할 것이다.
도 5 및 6는 각각의 타일(4)이 타일들 사이의 베리어 동기화(SYNC)(30)에 의해 서로 분리되는 교대 사이클에서 계산 단계(33) 및 교환 단계(32)를 수행하는 BSP 교환 방식의 구현을 예시한다. 도 5 및 6에 예시된 경우, 각 계산 단계(33)와 다음 교환 단계(32) 사이에 베리어 동기화가 배치된다. 계산 단계(33) 동안, 각 타일(4)은 하나 이상의 계산 오퍼레이션을 타일에서 로컬로 수행하지만 이러한 계산의 결과를 타일(4)의 다른 어떤 것과도 통신하지 않는다. 교환 단계(32)에서, 각 타일(4)은 이전 계산 단계로부터의 하나 이상의 계산 결과를 타일의 하나 이상의 다른 것으로 및/또는 타일로부터 교환하도록 허용되며, 그러나 다른 타일 4에서 태스크(들)에 종속성이 있는 데이터를 수신할 때까지 새로운 계산을 수행하지 않는다. 이전 계산 단계에서 계산된 데이터를 제외한 모든 데이터는 다른 타일로 보내지 않는다. 교환단계(32)에서 내부 제어-관련(internal control-related) 오퍼레이션 등 기타 오퍼레이션이 수행될 수 있음을 배제하지 않는다. 타일 그룹 외부의 통신은 선택적으로 BSP 메커니즘을 활용할 수 있지만, 대안적으로 BSP를 활용하지 않고 대신 자체적으로 일부 다른 동기화 메커니즘을 사용할 수 있다.
BSP 원칙에 따르면, 베리어 동기화(30)는 계산 단계(33)에서 교환 단계(32)로 전환하는 접점(juncture), 또는 교환 단계(32)에서 계산 단계(33)로 전환하는 접점, 또는 둘 다에 배치된다. 즉, (a) 모든 타일(4)는 그룹의 어느 타일이 다음 교환 단계(32)로 진행하도록 허용되기 전에 각각의 계산 단계(33_을 완료해야 한다. 또는 (b) 그룹의 모든 타일(4)은 그룹의 타일이 다음 계산 단계(33)로 진행하도록 허용되기 전에 각각의 교환 단계(32)를 완료해야 한다. 또는 (c) 이 두 조건이 모두 시행된다는 것 중에서 하나이다. 세 가지 변형 모두에서 단계 간에 교대(교번)하는 개별 타일과 동기화하는 전체 어셈블리이다. 그런 다음 교환 및 계산 단계의 시퀀스가 여러 번 반복될 수 있다. BSP 용어에서 교환 단계와 계산 단계의 각 반복은 때때로 "수퍼스텝(superstep)"이라고 하며(문헌에서 용어가 항상 일관되게 사용되는 것은 아니지만, 때때로 각 개별 교환 단계와 계산 단계를 개별적으로 수퍼스텝이라고 한다.); 반면에 여기에서 채택된 용어에서와 같이 다른 곳에서는 교환 및 계산 단계를 함께 수퍼스텝이라고 한다.
또한 동일한 프로세서(2) 또는 타일(4)의 여러 개의 서로 다른 독립 그룹이 각각 서로에 대해 비동기적으로 작동하는 별도의 개별 BSP 그룹을 형성할 수 있다는 점은 제외되지 않으며, 계산, 동기화 및 교환의 BSP 사이클(주기)은 주어진 각 그룹 내에서만 부과되지만 각 그룹은 다른 그룹과 독립적으로 수행한다. 즉. 다중 타일 어레이(6)는 각각 독립적으로 그리고 다른 그러한 그룹에 대해 비동기적으로 작동하는 다중 내부 동기 그룹을 포함할 수 있다(나중에 더 자세히 설명함). 일부 실시예에서 동기화 및 교환의 계층적 그룹화(hierarchical grouping)가 존재하며, 이는 나중에 더 자세히 설명될 것이다.
도 6은, (a) 계산 단계(33)에서 교환 단계(32)로의 베리어 동기화(위 참조)를 부가하는 경우, 어레이(6)에 있는 타일의 일부 또는 전부의 그룹(4i, 4ii, 4iii) 사이에서 구현되는 BSP 원리를 도시한다. 이 배열에서, 일부 타일(4)은 컴퓨팅(계산)(33)을 시작할 수 있는 반면 일부 타일(4)은 여전히 교환 중이다.
프로세서(2)의 타일(4) 간의 통신은 데이터 패킷이 헤더 없이 전송되는 시간 결정적 방식으로 발생한다. 이는 우리의 초기 출원 미국 특허 출원 번호: 15/886315에 설명되어 있다.
실시예에서, 프로세서(2)의 다중 인스턴스는 다중 프로세서(2)에 걸쳐 있는 훨씬 더 큰 타일 어레이(4)를 형성하기 위해 함께 연결된다. 이는 도 7에 나와 있다. 프로세서(2)는 (도 7에 도시된 외부 링크(8)를 통해) 외부 인터커넥트(72)에 의해 함께 연결된다. 이는 동일한 IC 패키지 상의 프로세서(2), 동일한 카드 상의 상이한 IC 패키지, 및/또는 상이한 카드 상의 상이한 IC 패키지 사이에 연결될 수 있다. 서로 다른 프로세서의 타일(4) 사이에서 데이터 교환을 위한 콘듀잇(conduit)을 제공할 뿐만 아니라, 외부 인터커넥트(72)는 또한 상이한 프로세서(2) 상의 타일(4) 사이의 베리어 동기화를 수행하고 상이한 프로세서(2) 상의 타일(4)의 로컬 출구 상태를 집계하기 위한 하드웨어 지원을 제공한다.
도 8은 프로세서(2)(외부 교환) 간의 통신을 위한 예시적인 메커니즘을 도시한다. 이 메커니즘은 시간이 결정되지 않는다(non-time-deterministic). 메커니즘은 외부 인터커넥트(72)의 전용 하드웨어 로직으로 구현된다. 데이터는 패킷 형태로 외부 인터커넥트(72)를 통해 전송된다. 내부 인터커넥트(34)를 통해 전송된 패킷과 달리 이러한 패킷에는 헤더가 있다. 전송 순서가 변경될 수 있으므로 패킷 헤더에 목적지 어드레스가 있어야 한다. 외부 인터커넥트(72)는 데이터 패킷의 헤더에 따라 다른 프로세서 사이에서 데이터 패킷을 정적으로 라우팅하기 위한 라우팅 테이블을 포함한다.
물리적 계층에서, 인터커넥트 메커니즘은 손실되지만 트랜잭션 계층(transaction layer)에서는 링크 계층의 아키텍처로 인해 메커니즘이 손실되지 않으며; 패킷이 승인되지 않으면 인터커넥트(72)의 하드웨어에서 자동으로 재전송한다. 그러나 데이터 링크 계층에서 손실 및 재전송 가능성은 외부 인터커넥트(72)을 통한 데이터 패킷의 전달이 시간 결정적(time-deterministic)이지 않다는 것을 의미한다. 또한, 주어진 교환의 모든 패킷은 시간과 순서에 관계없이 함께 도착하거나 분리되어 도착할 수 있으므로 외부 인터커넥트에는 플로우(flow) 제어 및 대기열(queuing)이 필요하다. 또한, 인터커넥트는 클록 데이터 복구(CDR: clock-data-recovery) 기술을 사용하여 비트 잠금(bit-lock)을 유지하기에 충분한 데이터 신호 전환을 갖는 수신된 데이터 스트림으로부터 클록을 추론할 수 있다. 이 추론된 클럭은 전송 클럭과 위상 관계를 알 수 없으므로 비결정성의 추가 소스(additional source of non-determinism)를 나타낸다.
도시된 바와 같이, 외부 인터커넥트(72)는 외부 교환 블록(XB)(78)을 포함한다. 컴파일러는 타일(4) 중 하나를 지정하여 외부 교환 요청(XREQ)을 교환 블록(78)으로 보낼 수 있다(오퍼레이션 S1). XREQ는 타일(4) 중 어느 타일이 다른 타일 또는 다른 프로세서(2)의 타일(4)로 보낼 데이터 패킷(콘텐츠)을 가지고 있는지를 나타내는 하나 이상의 제어 패킷을 포함하는 메시지이다. 이는 도 8에 눈금과 십자가로 개략적으로 설명되어 있으며; 예시 시나리오를 통해, 눈금 레이블이 지정된 패킷에는 외부로 보낼 데이터 패킷이 있고 십자가 레이블이 지정된 패킷은 그렇지 않다. 오퍼레이션 S2에서, 교환 블록(78)은 외부로 보낼 데이터와 함께 XON(Exchange-on) 제어 패킷을 타일(4) 중 첫 번째 타일로 보낸다. 이는 제1 타일이 외부 인터커넥트(78)를 통해 관련 목적지로 패킷을 전송하기 시작하도록 한다(오퍼레이션 S3). 외부 인터커넥트의 첫 번째(제1) 타일로부터 수신된 데이터 패킷은 외부 인터커넥트(78)의 라우팅 테이블을 사용하여 목적지(destination)로 정적으로 라우팅된다. 언제라도 XB(78)가 인터커넥트에 패킷을 계속 보낼 수 없는 경우(예: 인터커넥트의 이전 패킷 손실 및 재전송으로 인해 또는 많은 다른 XB 및 타일에 의한 외부 인터커넥트의 초과 스크립션(over-subscription)으로 인해) XB(78)는 XB 대기열이 오버플로(queue overflow)되기 전에 해당 타일에 교환 해제(exchange-off)(XOFF)를 보낸다. 혼잡(congestion)이 해소되고 XB(78)가 다시 대기열에 충분한 공간을 갖게 되면 타일에 XON을 보내어 콘텐츠를 계속 전송할 수 있다. 일단 타일이 마지막 데이터 패킷을 보내면, 오퍼레이션 S4에서 교환 블록(78)은 이 타일에 교환-오프(XOFF) 제어 패킷을 보내고, 그 다음 오퍼레이션 S5에서 보낼 데이터 패킷과 함께 다음 타일 4에 또 다른 XON을 보낸다. XON 및 XOFF의 시그널링은 외부 교환 블록(78)의 형태로 전용 하드웨어 로직에서 하드웨어 메커니즘으로 구현된다.
프로세서(2)의 일부인 타일(4)의 예를 예시하는 도 9를 참조한다. 타일(4)는 명령어 메모리(910)에 저장된 명령어에 의해 정의된 바와 같이 산술 및 논리 오퍼레이션, 어드레스 계산, 로드 및 저장 오퍼레이션, 및 기타 오퍼레이션을 수행할 수 있는 적어도 하나의 실행 유닛(905)을 포함한다. 실행 유닛(905)은 데이터 메모리(915)에 보유된 데이터에 대한 오퍼레이션을 수행하기 위한 명령어를 실행하도록 구성된다. 각각의 타일(4)의 명령어 메모리(910)에 보유된 명령어는 도 4 및 4a의 전체 프로세서(2)에 대해 도시된 명령어 메모리(410)에 보유된 명령어 세트의 서브세트로서 고려될 수 있다. 명령어 메모리(410)는 각 타일(4)의 명령어 메모리(910)를 포함하는 분산 메모리로 간주될 수 있다.
명령어 메모리(910)에 보유된 명령어는 각 프로세서(2)의 대응하는 타일(4)에서 동일할 수 있다. 각 프로세서(2)의 서로 다른 타일(4)이 어떻게 서로 대응하는지를 도시하는 도 10을 참조한다. 제1 프로세서(2i)는 타일(4ia)을 포함한다. 제2 프로세서(2ii)는 타일(4iia)을 포함한다. 제3 프로세서(2iii)는 타일(4iiia)을 포함한다. 타일(4ia, 4iia 및 4iiia) 각각에는 동일한 명령어가 로드된다. 각 타일(4ia, 4iia, 4iiia)의 실행 유닛(905)에 의해 수행되는 오퍼레이션은 그들이 속한 각 프로세서(2)의 인덱스에 따라 상이하다. 유사하게, 제1 프로세서(2i)는 타일(4ib)을 포함한다. 제2 프로세서(2ii)는 타일(4iib)을 포함한다. 제3 프로세서(2iii)는 타일(4iiib)을 포함한다. 타일(4ib, 4iib 및 4iiib) 각각에는 동일한 명령어가 로드된다. 각 타일(4ib, 4iib, 4iiib)의 실행 유닛(905)에 의해 수행되는 오퍼레이션은 그들이 속한 프로세서(2)의 인덱스에 따라 상이하다. 따라서, 프로세서(2)의 각각의 대응하는 타일(4)이 동일한 명령어 세트로 로드되기 때문에, 컴퓨터(700)의 각 프로세서(2)는 동일한 전체 명령어 세트를 포함한다는 것을 이해할 것이다.
도 9를 다시 참조하면, 계산 단계 동안, 데이터 메모리(915)에 보유된 데이터에 대해 특정 오퍼레이션이 수행되어 그러한 데이터의 값을 변경한다. 명령어 메모리(910)에 보유된 명령어는 상이한 프로세서(2)에 걸쳐 대응하는 타일(4)에서 동일하기 때문에, 계산 단계 동안 데이터 메모리(915)에 보유된 데이터를 조작하기 위해 수행되는 오퍼레이션은 프로세서(2)의 대응하는 타일에 걸쳐 동일할 수 있다. 그러나, 일부 실시예에서, 명령어 메모리(910)에 보유된 명령어는, 데이터 의존적일 수 있어서, 데이터 메모리(915)에 보유된 상이한 데이터 세트에 따라 상이한 오퍼레이션이 계산 단계 동안 수행된다.
타일(4)는 인덱스 값 저장소(스토리지)(인덱스)(920)에 보관된 인덱스 값을 포함한다. 데이터 메모리(915)에 보유된 데이터를 조작하기 위해 계산 단계 동안 실행 유닛(905)에 의해 수행되는 오퍼레이션은 인덱스 값 저장소(스토리지)(920)에 보유된 인덱스 값과 독립적이다. 그러나, 다른 프로세서(2)와의 교환 단계 동안 실행 유닛(905)에 의해 수행되는 오퍼레이션은 인덱스 값에 의존한다. 인덱스 스토리지(920)가 명령어 메모리(910)와 별개인 것으로 도시되어 있지만, 일부 실시예에서 인덱스 스토리지(920) 및 명령어 메모리(910)는 단일 메모리 어레이의 일부를 형성할 수 있다.
도시된 바와 같이, 데이터 메모리(915)에 보유된 데이터는 상이한 부분/프래그먼트(슬라이스로서 도시됨)으로 분할된다. 데이터가 다른 타일과 교환되기 전에, 적어도 하나의 실행 유닛(905)은 부분들 중 하나 이상으로부터 전송 버퍼(925)로 데이터를 전송하기 위한 명령어를 실행하도록 구성된다. 실행 유닛(905)은 인덱스 스토리지(920)에 보유된 인덱스 값에 따라 전송할 데이터를 선택한다. 그 다음 실행 유닛(905)은 선택된 데이터를 전송 버퍼(925)에 전달한다. 교환 단계 동안, 실행 유닛(905)은 인터페이스(8)을 통해 데이터를 전송하기 위한 명령어를 실행한다. 인터페이스(8)를 통해 데이터를 전송하는 것은 다른 프로세서(2)의 데이터에 대한 목적지 어드레스가 있는 데이터 패킷에 헤더를 추가하는 것을 포함한다. 데이터 패킷은 도 8과 관련하여 위에서 설명된 방식에 따라 프로세서(2)로 전송된다.
교환 단계 동안 타일(4)는 하나 이상의 데이터 패킷을 수신하도록 구성된다.이러한 데이터 패킷은 다른 프로세서(2)의 타일에서 수신된다. 하나 이상의 데이터 패킷을 수신하면, 데이터 패킷은 수신 버퍼(930)에 저장된다. 적어도 실행 유닛(905)은 스토리지(920)에 보유된 인덱스 값에 따라 수신된 데이터를 프로세싱하기 위한 명령어를 실행한다. 적어도 하나의 실행 유닛(905)은 스토리지(920)에 보유된 인덱스 값에 따라 데이터 메모리(915)의 위치에서 데이터 패킷으로부터 유도된 데이터를 저장하도록 구성된다. 적어도 하나의 실행 유닛(905)은 또한 메모리(915)에 오퍼레이션의 결과를 저장하기 전에 수신된 데이터 패킷들로부터의 데이터 및 메모리(915)에 저장된 데이터로 감소(리덕션) 오퍼레이션과 같은 오퍼레이션들을 수행할 수 있다.
따라서, 스토리지(920)에 보유된 인덱스 값은 적어도 하나의 실행 유닛(905)에 의해 사용되어, 전송을 위해 메모리(915)로부터 특정 어드레스의 데이터 선택하는 동작, 수신된 데이터에 대한 오퍼레이션(예를 들어, 감소 오퍼레이션)을 수행하기 위한 데이터를 선택하는 동작, 및 인덱스 값에 의존하는 메모리(915)의 특정 어드레스에서 수신된 데이터로부터 도출된 결과를 저장하는 동작중 적어도 하나를 수행한다.
인덱스 값이 데이터를 저장하기 위해 메모리(915)에서 어드레스를 선택하기 위해 실행 유닛(905)에 의해 사용될 수 있는 상이한 방식이 있다.
일부 실시예에서, 상이한 데이터 부분은 메모리(915)에 연속적으로 배열(어레이)된다. 실행 유닛(905)은 인덱스 값에 따라 데이터가 판독되거나 기록될 메모리(915)의 어드레스를 계산하도록 구성된다. 실행 유닛(905)은 명령어 메모리(910)의 명령어에 정의된 오퍼레이션을 수행함으로써 어드레스를 계산한다. 오퍼레이션은 산술 오퍼레이션이다.
일부 실시예에서, 명령어 메모리(910)는 코드의 복수의 부분을 저장하고, 각각은 데이터 전송을 상이하게 제어하도록 구성된다. 예를 들어, 코드의 한 부분은 메모리(915)의 특정 메모리 위치에 있는 데이터가 다른 프로세서(2)로 전송되도록 할 수 있다. 코드의 다른 부분은 실행 유닛(905)이 메모리(915)의 다른 메모리 위치에 있는 데이터가 다른 프로세서(2)로 전송되게 할 수 있다. 코드의 다른 부분은 수신된 데이터가 메모리(915)의 특정 위치에 저장되게 하거나 수신된 데이터에 대해 특정 오퍼레이션이 수행되게 할 수 있다. 실행 유닛(905)은 명령어 메모리(915)로부터 코드를 실행하고, 데이터가 메모리(915)로부터 판독되거나 기록될 실행 시퀀스(execution sequence)의 한 포인트에서, 실행 유닛(905)은 데이터에 대한 판독 또는 기록 오퍼레이션을 수행하기 위한 코드의 일부를 선택하기 위해 브랜치 오퍼레이션(branch operation)을 수행한다. 코드 부분은 인덱스 값에 따라 선택된다.
여기에 개시된 기술의 예시적인 적용에 따르면, 각 프로세서(2)에는 기계 학습 모델을 훈련하기 위해 델타 가중치를 생성하기 위한 훈련 데이터의 다른 세트가 제공된다. 이 경우, 각각의 타일(4)에는 하나 이상의 델타 가중치를 생성하기 위한 다른 세트의 훈련 데이터가 제공된다. 함께, 각 프로세서(2)의 모든 타일(4)은 다른 프로세서(2)에서 생성된 델타 가중치로 평균화된 전체 델타 가중치 세트(델타 가중치의 풀 세트)를 함께 생성한다.
일부 실시예에서, 실행 유닛(905)은 상이한 워커 스레드(worker threads)를 프로세싱하는 것 사이에서 스위칭하도록 구성된다. 이 경우 실행 유닛(905)은 미국 특허 출원 번호: 15/886315에 설명된 바와 같이 배럴 스레드 프로세서(barrel-threaded processor)의 일부이다. 이 경우, 각 워커 스레드는 기계 지능 그래프의 개별 프로세서와 관련된 계산을 수행하도록 프로그래밍된다. 이 경우, 프로세서 간의 에지 중 적어도 일부는 스레드 간의 데이터 교환에 해당한다. 데이터가 교환되는 스레드는 동일한 실행 유닛(905) 상에서 실행되는 스레드일 수 있거나 상이한 타일(4)의 실행 유닛 상에서 실행되는 스레드일 수 있다. 일부는 프로세서(2)의 서로 다른 타일 간의 교환을 포함할 수 있다. 메모리(915)에 도시된 슬라이스(slice)는 프로세서 간의 특정 에지와 연관된 델타 값에 대응할 수 있으며, 델타 값은 훈련 동안 실행 유닛(905)에 의해 계산된다. 메모리(915)는 또한 추가 데이터를 포함하는 것으로 도시된다. 이 추가 데이터는 활성화 함수, 각 계층의 프로세서 수 등과 같은, 기계 학습 모델을 정의하는 임의의 추가 데이터, 훈련 데이터, 가중치의 현재 값과 같은, 델타 값을 생성하기 위한 데이터를 포함할 수 있다.
도 12에 도시된 컴퓨터(700)와 같은, 컴퓨터의 각 프로세서에 대한 프로그램을 컴파일하기 위한 컴파일 프로세스를 예시하는 도 11을 참조한다. 위에서 설명한 일련의 명령어와 인덱스 값은 함께 각 프로세서(2)에서 실행하기 위한 프로그램을 구성한다. 각 프로세서(2)에 대한 컴파일된 명령어 세트는 동일하며, 각 프로세서(2)에 대한 다른 인덱스 값이 명령어 세트에 추가된다.
방법(1100)은 적어도 하나의 실행 유닛 및 적어도 하나의 실행 유닛에 의한 실행을 위한 컴퓨터 코드를 보유하는 적어도 하나의 메모리를 포함하는 임의의 적절한 컴퓨팅 장치 상에서 실행할 수 있는 컴파일러에 의해 수행된다.
단계 S1110에서, 컴파일러는 각 프로세서(2)에 제공하기 위한 단일 세트의 실행 가능한 명령어를 컴파일한다. 실행 가능한 명령어의 단일 세트는 실행 가능한 이미지의 형태이다. 실행 가능한 명령어 세트는 명령어의 복수의 서브세트를 포함할 수 있으며, 각각의 서브세트는 프로세서(2)의 다른 타일(4)에 의한 실행을 위한 것이다.
단계 S1120에서, 컴파일러는 컴퓨터(700)의 각 프로세서(2)에 대해 프로세서(2)와 관련된 인덱스 값을 결정한다. 고유하게 결정된 각 인덱스 값은 컴퓨터(700) 내에서 서로 다른 프로세서(2)를 식별한다.
단계 S1130에서, 컴파일러는, 각 프로세서(2)에 대해, 단일 세트의 명령어 및 프로세서(2)와 관련된 인덱스 값을 포함하는 로컬 프로그램을 생성한다. 컴파일러는, 각 프로세서(2)에 대해, S1110에서 생성된 컴파일된 명령어 세트를 취하고 이 명령어 세트를 S1120에서 결정된 프로세서에 대한 인덱스 값으로 패치한다.
위의 실시예들은 단지 예로서 설명되었다는 것을 이해할 것이다. 특정 실시예가 설명되었지만, 개시된 기술의 다른 적용 및 변형은 일단 본 명세서에 개시가 주어지면 당업자에게 명백해질 수 있다.

Claims (15)

  1. 복수의 프로세서들을 포함하는 컴퓨터로서, 각 프로세서는 컴퓨터의 계산 단계 동안 데이터에 대한 오퍼레이션을 수행하고, 동기화 베리어에 따라, 컴퓨터의 교환 단계 동안 상기 프로세서들중 적어도 하나의 다른 프로세서와 데이터를 교환하도록 구성되며, 각 프로세서는,
    복수의 프로세싱 유닛;
    복수의 프로세서들의 각각의 프로세서를 식별하는 인덱스 값 그리고 실행 가능 명령어의 동일한 세트를 갖는 프로그램을 포함하는 적어도 하나의 스토리지 -각각의 적어도 하나의 스토리지는 프로세서의 각각의 프로세싱 유닛에 적어도 하나의 메모리를 포함하고, 각각의 적어도 하나의 메모리는 실행 가능한 명령어의 세트의 서브세트와 프로세서의 인덱스 값의 카피(copy)를 저장함-;
    실행 가능한 명령어의 세트에 의해 지정된 계산에 사용하기 위한 데이터를 저장하는 복수의 데이터 메모리 -복수의 데이터 메모리는 프로세서의 복수의 프로세싱 유닛 각각의 데이터 메모리를 포함함-;
    프로세서의 복수의 프로세싱 유닛 각각에 실행 유닛을 포함하는 복수의 실행 유닛을 포함하며, 실행 유닛 중 적어도 일부의 각각은 동작들을 수행하도록 하는 실행 가능한 명령어의 각각의 서브세트 중 하나 이상을 실행하도록 배열되며, 상기 동작들은,
    각각의 인덱스 값에 따라, 컴퓨터에 대한 교환 단계 동안 상기 프로세서들 중 적어도 하나의 다른 프로세서 그리고 각각의 프로세싱 유닛의 데이터 메모리 사이에서 데이터 전송을 수행하기 위한 오퍼레이션을 선택하는 동작; 그리고
    교환 단계 동안 데이터 전송을 수행하기 위해 선택한 오퍼레이션을 수행하는 동작을 포함하는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  2. 제1항에 있어서, 상기 프로세서들 중 적어도 일부 각각의 프로세싱 유닛 중 적어도 일부 각각에 대해, 각각의 인덱스 값에 따라, 데이터 전송을 수행하기 위한 오퍼레이션을 선택하는 동작은,
    데이터가 전송되는 프로세서들 중 각각의 적어도 하나의 다른 프로세서를 선택하는 동작을 포함하는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  3. 제1항 내지 제2항에 있어서, 프로세서들 중 적어도 일부 각각의 프로세싱 유닛 중 적어도 일부 각각에 대해, 상기 오퍼레이션은 각각의 인덱스 값에 따라 선택된 각각의 데이터 메모리의 영역과 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이에서 데이터 전송을 야기하는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  4. 제3항에 있어서, 프로세서들 중 적어도 일부 각각의 프로세싱 유닛 중 적어도 일부 각각에 대해, 각각의 실행 유닛은 각각의 인덱스 값에 대해 산술 오퍼레이션을 수행함으로써 데이터 메모리의 각각의 영역의 어드레스를 계산하도록 구성되는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  5. 제3항에 있어서, 프로세서들 중 적어도 일부 각각의 프로세싱 유닛 중 적어도 일부 각각에 대해, 각각의 실행 유닛은 각각의 인덱스 값에 따라 실행 가능한 명령어의 각각의 서브세트에서 적어도 하나의 명령어로 브랜치(branch)하도록 구성되고, 적어도 하나의 명령어는, 상기 각각의 실행 유닛에 의해 실행될 때, 상기 데이터 메모리의 각각의 영역과 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이에서 데이터 전송을 야기하는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  6. 제3항 내지 제5항 중 어느 한 항에 있어서, 상기 프로세서들 중 적어도 일부 각각의 프로세싱 유닛의 적어도 일부 각각에 대해, 상기 오퍼레이션은 데이터 메모리의 각각의 영역에 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로부터 수신된 데이터를 저장하는 동작을 포함하는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  7. 선행하는 청구항 중 어느 한 항에 있어서, 상기 프로세서들 중 적어도 일부 각각의 프로세싱 유닛 중 적어도 일부 각각에 대해,
    상기 오퍼레이션은 각각의 인덱스 값에 따라 각각의 데이터 메모리에 저장된 데이터를 선택하는 동작 그리고 상기 선택된 데이터를 프로세서들 중 각각의 적어도 하나의 다른 프로세서에 전송하는 동작을 포함하는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  8. 제7항에 있어서, 상기 프로세서들 중 적어도 일부 각각의 프로세싱 유닛들 중 적어도 일부 각각의 실행 유닛은,
    각각의 선택된 데이터를 프로세싱하여, 각각의 선택된 데이터를 포함하는 데이터 패킷 및 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 상의 버퍼의 어드레스를 포함하는 헤더를 생성하도록 구성되는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  9. 선행하는 청구항 중 어느 한 항에 있어서, 상기 컴퓨터는 데이터 전송에서 전송되는 데이터를 정적으로 라우팅하도록 구성된 라우팅 하드웨어를 포함하는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  10. 선행하는 청구항 중 어느 한 항에 있어서, 상기 프로세서들 중 적어도 일부 각각의 프로세싱 유닛 중 적어도 일부 각각에 대해,
    상기 오퍼레이션은 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로부터 수신된 데이터를 각각의 데이터 메모리에 저장된 추가 데이터와 결합하는 동작을 포함하고; 그리고
    각각의 실행 유닛은 각각의 인덱스 값에 따라 각각의 데이터 메모리로부터 상기 추가 데이터를 선택하도록 구성되는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  11. 선행하는 청구항 중 어느 한 항에 있어서, 상기 프로세서들 중 적어도 일부 각각의 프로세싱 유닛 중 적어도 일부 각각에 대해,
    각각의 데이터 메모리는 적어도 하나의 기계 학습 모델에 대한 복수의 델타 가중치를 포함하고; 그리고
    각각의 데이터 메모리와 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이의 데이터 전송은 각각의 데이터 메모리와 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서 사이의 하나 이상의 델타 가중치의 전송을 제어하는 동작을 포함하는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  12. 제11항에 있어서, 상기 프로세서들 중 적어도 일부 각각의 프로세싱 유닛 중 적어도 일부 각각에 대해, 각각의 적어도 하나의 실행 유닛은, 각각의 인덱스 값에 따라 각각의 데이터 메모리로부터 하나 이상의 델타 가중치를 선택하도록 구성되고, 상기 선택된 하나 이상의 델타 가중치를 상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로 전송하도록 구성되는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  13. 제11항 또는 제12항에 있어서, 상기 프로세서들 중 적어도 일부 각각의 프로세싱 유닛의 적어도 일부 각각에 대해, 상기 각각의 실행 유닛은,
    각각의 인덱스 값에 따라 각각의 데이터 메모리로부터 하나 이상의 델타 가중치를 선택하고; 그리고
    상기 프로세서들 중 각각의 적어도 하나의 다른 프로세서로부터 수신된 하나 이상의 추가 델타 가중치를 사용하여 상기 선택된 하나 이상의 델타 가중치를 감소시키도록 구성되는 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  14. 제1항에 있어서, 상기 프로세서들 각각은 시스템 온 칩(system on chip)인 것을 특징으로 하는 복수의 프로세서들을 포함하는 컴퓨터.
  15. 복수의 프로세서들을 포함하는 컴퓨터의 프로세서에 의한 실행에 적합한 복수의 프로그램을 생성하는 컴퓨터 구현 방법으로서, 각각의 프로세서는 복수의 프로세싱 유닛을 가지며, 각각의 프로세싱 유닛은 각각의 프로세서의 각각의 프로그램의 서브세트를 유지하기 위한 적어도 하나의 메모리, 각각의 프로그램의 각각의 서브세트를 실행하기 위한 실행 유닛 및 데이터를 유지하기 위한 데이터 메모리를 포함하고, 상기 컴퓨터 구현 방법은,
    실행 가능한 명령어의 단일 세트를 컴파일하는 단계;
    각각의 프로세서에 대해, 각각의 프로세서와 연관된 인덱스 값을 결정하는 단계; 그리고
    각각의 프로세서에 대해, 명령어의 단일 세트 및 각각의 인덱스 값을 포함하는 로컬 프로그램을 생성하는 단계를 포함하며,
    상기 로컬 프로그램 각각의 서브세트는, 로컬 프로그램이 각각의 프로세서에 할당될 때, 각각의 프로세서의 실행 유닛 중 하나에서 실행되어 동작들을 수행하도록 스케줄링되며, 상기 동작들은,
    컴퓨터에 대한 계산 단계 동안 데이터에 대한 오퍼레이션을 수행하는 동작;
    각각의 인덱스 값에 따라, 컴퓨터에 대한 교환 단계 동안 상기 프로세서들 중 적어도 하나의 다른 프로세서와 각각의 프로세싱 유닛의 데이터 메모리 사이에서 데이터 전송을 수행하기 위한 오퍼레이션을 선택하는 동작; 그리고
    동기화 베리어를 따라, 상기 교환 단계 동안 데이터 전송을 수행하기 위해 상기 선택된 오퍼레이션을 수행하는 동작을 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
KR1020217041489A 2019-12-23 2020-12-16 다중 프로세서가 있는 컴퓨터에서의 통신 KR20220010747A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1919148.5 2019-12-23
GB1919148.5A GB2590658A (en) 2019-12-23 2019-12-23 Communication in a computer having multiple processors
PCT/EP2020/086418 WO2021130075A1 (en) 2019-12-23 2020-12-16 Communication in a computer having multiple processors

Publications (1)

Publication Number Publication Date
KR20220010747A true KR20220010747A (ko) 2022-01-26

Family

ID=69322866

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217041489A KR20220010747A (ko) 2019-12-23 2020-12-16 다중 프로세서가 있는 컴퓨터에서의 통신

Country Status (7)

Country Link
US (2) US11599363B2 (ko)
EP (1) EP3973465A1 (ko)
JP (1) JP7357767B2 (ko)
KR (1) KR20220010747A (ko)
CN (1) CN113994318A (ko)
GB (1) GB2590658A (ko)
WO (1) WO2021130075A1 (ko)

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3003418B2 (ja) * 1992-09-25 2000-01-31 株式会社日立製作所 プロセッサ間データ通信方法
JPH06266683A (ja) 1993-03-12 1994-09-22 Toshiba Corp 並列処理装置
US5682491A (en) * 1994-12-29 1997-10-28 International Business Machines Corporation Selective processing and routing of results among processors controlled by decoding instructions using mask value derived from instruction tag and processor identifier
US6643763B1 (en) 2000-02-28 2003-11-04 International Business Machines Corporation Register pipe for multi-processing engine environment
FR2809204B1 (fr) * 2000-05-17 2003-09-19 Bull Sa Interface applicative multiprosseur, ne necessitant pas l'utilisation d'un systeme d'exploitation multiprocesseur
US6738842B1 (en) * 2001-03-29 2004-05-18 Emc Corporation System having plural processors and a uni-cast/broadcast communication arrangement
US8316190B2 (en) * 2007-04-06 2012-11-20 Waratek Pty. Ltd. Computer architecture and method of operation for multi-computer distributed processing having redundant array of independent systems with replicated memory and code striping
NL2002799C2 (en) * 2009-04-24 2010-10-26 Univ Delft Tech Data structure, method and system for address lookup.
US10698859B2 (en) * 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
US9122700B2 (en) * 2011-12-20 2015-09-01 Los Alamos National Security, Llc Parallel log structured file system collective buffering to achieve a compact representation of scientific and/or dimensional data
US10055228B2 (en) * 2013-08-19 2018-08-21 Shanghai Xinhao Microelectronics Co. Ltd. High performance processor system and method based on general purpose units
GB2569269B (en) 2017-10-20 2020-07-15 Graphcore Ltd Synchronization in a multi-tile processing arrangement
GB2569775B (en) * 2017-10-20 2020-02-26 Graphcore Ltd Synchronization in a multi-tile, multi-chip processing arrangement
US10963003B2 (en) * 2017-10-20 2021-03-30 Graphcore Limited Synchronization in a multi-tile processing array

Also Published As

Publication number Publication date
GB201919148D0 (en) 2020-02-05
GB2590658A (en) 2021-07-07
WO2021130075A1 (en) 2021-07-01
US11907725B2 (en) 2024-02-20
US20210191731A1 (en) 2021-06-24
US20230185577A1 (en) 2023-06-15
US11599363B2 (en) 2023-03-07
JP2022545222A (ja) 2022-10-26
JP7357767B2 (ja) 2023-10-06
EP3973465A1 (en) 2022-03-30
CN113994318A (zh) 2022-01-28

Similar Documents

Publication Publication Date Title
JP6797880B2 (ja) マルチタイル、マルチチップ処理構成における同期
US11586483B2 (en) Synchronization amongst processor tiles
KR102228501B1 (ko) 컴파일러 방법
KR102167059B1 (ko) 멀티-타일 프로세싱 어레이의 동기화
KR102253628B1 (ko) 복수-쓰레드 프로세서에서의 복수 쓰레드들의 상태들의 결합
KR102262483B1 (ko) 복수-타일 프로세싱 구성에서의 동기화
KR102178190B1 (ko) 명령 세트
KR102228502B1 (ko) 컴퓨터 프로세싱의 타이밍 제어
US20220197857A1 (en) Data exchange pathways between pairs of processing units in columns in a computer
KR20220010747A (ko) 다중 프로세서가 있는 컴퓨터에서의 통신
US20220326988A1 (en) Explicit scheduling of on-chip operations
US11625357B2 (en) Control of data transfer between processors
US11726937B2 (en) Control of data sending from a multi-processor device
US11940940B2 (en) External exchange connectivity
US20220019668A1 (en) Hardware Autoloader
US20220019487A1 (en) Communication Between Host and Accelerator Over Network

Legal Events

Date Code Title Description
E902 Notification of reason for refusal