KR20230062651A - 메모리 채널 제어기들에 대한 온칩 상호접속 - Google Patents

메모리 채널 제어기들에 대한 온칩 상호접속 Download PDF

Info

Publication number
KR20230062651A
KR20230062651A KR1020237012453A KR20237012453A KR20230062651A KR 20230062651 A KR20230062651 A KR 20230062651A KR 1020237012453 A KR1020237012453 A KR 1020237012453A KR 20237012453 A KR20237012453 A KR 20237012453A KR 20230062651 A KR20230062651 A KR 20230062651A
Authority
KR
South Korea
Prior art keywords
memory
channel
oci
data
system memory
Prior art date
Application number
KR1020237012453A
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 KR20230062651A publication Critical patent/KR20230062651A/ko

Links

Images

Classifications

    • 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/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • G06F15/7842Architectures of general purpose stored program computers comprising a single central processing unit with memory on one IC chip (single chip microcontrollers)
    • G06F15/7846On-chip cache and off-chip main memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • G06F13/1621Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by maintaining request order
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • G06F13/1626Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by reordering requests
    • G06F13/1631Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by reordering requests through address comparison
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1642Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • 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
    • 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
    • G06F15/8053Vector processors
    • G06F15/8061Details on data memory access

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Complex Calculations (AREA)
  • Memory System (AREA)

Abstract

컴퓨터-판독가능 매체들을 포함하는 방법들, 시스템들, 및 장치들이 머신-학습 계산들을 가속하는 집적 회로에 대해 설명된다. 회로는 다수의 채널 제어기들; 각각의 채널 제어기를 시스템 메모리의 임의의 메모리 채널에 커플링하기 위한 인터페이스 제어기; 및 각각의 채널 제어기 내 페치 유닛을 각각 포함하는 프로세서 코어들을 포함한다. 각각의 페치는 어드레싱 정보를 인코딩하는 채널 데이터를 수신하고; 어드레싱 정보에 기초하여, 인터페이스 제어기를 이용하여 시스템 메모리의 임의의 메모리 채널로부터 데이터를 획득하고; 그리고 획득된 데이터를 개개의 페치 유닛을 포함하는 대응하는 채널 제어기를 통해 프로세서 코어의 벡터 메모리에 기록하도록 구성된다.

Description

메모리 채널 제어기들에 대한 온칩 상호접속
관련 출원들에 대한 상호-참조
[0001] 본 출원은 2021년 3월 29일에 출원된 미국 가출원 번호 제63/167,593호의 이익을 주장하며, 본원에 전체적으로 참고로 포함된다.
[0002] 본 출원은 2020년 3월 27일에 출원된 미국 가출원 번호 제63/001,216호와 관련된다. 이의 내용이 본원에 참조로 포함된다.
[0003] 본 출원은 2020년 5월 4일에 출원된 미국 출원번호 제16/865,539호와 관련된다. 이의 내용이 본원에 참조로 포함된다.
[0004] 본 명세서는 일반적으로 신경망 계산들을 수행하는 회로부를 이용하는 것에 관한 것이다.
[0005] 신경망들은 수신된 입력에 대한 출력, 예를 들어, 분류를 발생시키기 위해 노드들의 하나 이상의 계층들을 채용하는 머신-학습 모델들이다. 일부 신경망들은 출력 계층에 추가하여 하나 이상의 은닉 계층들을 포함한다. 각각의 은닉 계층의 출력이 네트워크 내 하나 이상의 다른 계층들, 예를 들어, 네트워크의 다른 은닉 계층들 또는 출력 계층에의 입력으로서 이용된다. 네트워크의 계층들 중 일부는 파라미터들의 개개의 세트의 현재 값들에 따라 수신된 입력으로부터 출력을 발생시킨다.
[0006] 일부 신경망들은 콘볼루션 신경 네트워크(CNN)들(예를 들어, 이미지 프로세싱의 경우) 또는 순환 신경 네트워크(RNN)들(예를 들어, 음성 및 언어 프로세싱의 경우)이다. 이들 신경망들의 각각은 콘볼루션 또는 순환 신경 네트워크 계층들의 개개의 세트들을 포함한다. 신경망 계층은 연관된 커널들의 세트뿐만 아니라, 신경망을 훈련하기 위한 벡터들의 세트들을 발생시키기 위해 입력들을 프로세싱하기 위한 임베딩 계층을 가질 수 있다. 커널들은 가중치들의 텐서, 즉, 다-차원 어레이로서 표현될 수 있다. 일 예로서, 임베딩 계층들은 신경망 계층에 의해 발생되는 활성화 값들 또는 이미지 픽셀 데이터의 입력들과 같은, 입력들의 세트를 프로세싱할 수 있다. 입력들의 세트 또는 활성화 값들의 세트는 또한 텐서로서 표현될 수 있다.
[0007] 분배 시스템은 동작을 수행하거나 또는 값을 계산하기 위해 액세스되어 사용되는 값들을 저장하는 메모리를 포함할 수 있다. 각각의 값은 어드레스로 식별되는 메모리 내 개개의 로케이션에 저장될 수도 있다. 메모리는 상이한 메모리 채널들을 포함하도록 배열될 수도 있으며, 각각의 채널은 대응하는 어드레스들의 세트에 의해 구별되는 메모리 로케이션들의 세트를 포함한다. 요청에 의해 규정되는 데이터를 취출하기 위해 주어진 메모리 채널의 특정의 메모리 로케이션들에 대한 액세스들을 제어 및 관리하는데 채널 제어기가 이용된다. 보다 구체적으로, 채널 제어기들은 분배 시스템의 통신 채널들을 이용하여 메모리로 및 이로부터의 데이터의 흐름을 관리한다.
[0008] 이러한 상황에 기초하여, 집적 회로의 임의의 채널 제어기로 하여금 예시적인 시스템 메모리의 임의의 메모리 채널과 통신 가능하게 하도록 구성된 공유 상호접속 또는 크로스바 디바이스인 하드웨어 인터페이스 제어기를 구현하는 기법들이 설명된다. 예를 들어, 인터페이스 제어기는 고대역폭 메모리의 다양한 메모리 채널들에 대한 주어진 채널 제어기의 동적 커플링을 제공하도록 구성된다. 채널 제어기들은 인터페이스 제어기의 하드웨어 아키텍처로 포함될 수도 있다. 집적 회로는 하드웨어 머신-학습 액셀러레이터 또는 다중 프로세서 코어들을 포함하는 다른 특수-목적 프로세서일 수 있다. 인터페이스 제어기는 각각의 채널 제어기로 하여금 고대역폭 메모리 시스템의 임의의 채널로부터 데이터를 판독하고 이에 데이터를 기록 가능하게 하기 위해 액셀러레이터의 회로부의 프로세싱 파이프라인에 통합될 수도 있다.
[0009] 본 명세서에서 설명되는 기술요지의 일 양태는 머신-학습 계산들을 가속하도록 구성된 집적 회로로 구현될 수 있다. 회로는 다중 프로세서 코어들을 포함하며, 각각의 프로세서 코어는 다수의 채널 제어기들; 다수의 채널 제어기들 각각을 시스템 메모리의 각각의 메모리 채널에 커플링하도록 구성된 온칩 상호접속(OCI) 인터페이스; 및 다수의 채널 제어기들 각각 내의 개개의 페치 유닛을 포함한다. 개개의 페치 유닛은 i) 어드레싱 정보를 인코딩해 달라는 요청을 수신하고; ii) 어드레싱 정보에 기초하여, 인터페이스 제어기를 이용하여 시스템 메모리의 임의의 메모리 채널로부터 데이터를 획득하고; 그리고 iii) 페치 유닛을 포함하는 채널 제어기를 통해 임의의 메모리 채널로부터 획득된 데이터를 프로세서 코어의 벡터 메모리에 기록하도록 구성된다.
[0010] 이들 및 다른 구현예들은 각각 선택적으로 다음 특징들 중 하나 이상을 포함할 수 있다. 예를 들어, 일부 구현예들에서, 인터페이스 제어기는 i) 시스템 메모리의 임의의 메모리 채널을 따라 임의의 메모리 로케이션으로부터 데이터를 획득하는데 사용되는 다수의 판독 인터페이스들; 및 ii) 시스템 메모리의 임의의 메모리 채널을 따라 임의의 메모리 로케이션에 데이터를 기록하는데 사용되는 다수의 기록 인터페이스들을 포함하는 인트라-메모리 OCI 노드를 갖거나, 또는 제어하도록 동작 가능하다.
[0011] 일부 구현예들에서, 인트라-메모리 OCI 노드는 i) 시스템 메모리의 임의의 메모리 로케이션으로부터 데이터를 획득하기 위해 또는 ii) 시스템 메모리의 임의의 메모리 로케이션에 데이터를 기록하기 위해, 기존 OCI 트랜잭션의 중재 동안, 유입하는 OCI 트랜잭션 요청들을 저장하도록 구성된 선입선출(FIFO) 메모리 큐를 포함한다. 일부 구현예들에서, 집적 회로는 어드레싱 정보를 인코딩해 달라는 요청을 수신하고; 어드레싱 정보 내 다수의 ID들에 기초하여 다수의 제어 신호들을 발생시키고; 그리고 시스템 메모리의 메모리 로케이션에 저장된 데이터를 페치하기 위해 다수의 제어 신호들을 시스템 메모리의 임의의 메모리 채널에 제공하도록 구성된 인터페이스 제어기를 더 포함한다.
[0012] 일부 구현예들에서, 어드레싱 정보는 인터페이스 제어기에서 수신된 하나 이상의 유입하는 OCI 트랜잭션 요청들로부터 도출되며; 시스템 메모리의 임의의 메모리 로케이션에 액세스하기 위한 적어도 하나의 기존 OCI 트랜잭션 요청은 FIFO 메모리 큐에 이전에 저장되었다. 어드레싱 정보는 하나 이상의 유입하는 OCI 트랜잭션 요청들로부터 도출될 수 있으며; 각각의 유입하는 OCI 트랜잭션 요청은 시스템 메모리의 임의의 메모리 채널에 걸쳐 메모리 로케이션들의 임의의 세트에 대응하는 다수의 식별자(ID)들을 포함할 수 있다.
[0013] 일부 구현예들에서, OCI 인터페이스는 2개 이상의 어드레싱 모드들을 포함하며; 인터페이스 제어기는 OCI 인터페이스의 2개 이상의 어드레싱 모드들 사이에 선택하는 것을 가능하게 하는 제어 신호들을 발생시키도록 동작 가능하다. 2개 이상의 어드레싱 모드들의 제1 어드레싱 모드는 시스템 메모리의 메모리 채널들에 대한 임베딩 테이블의 맵핑을 제한하는 채널-인터리브 모드이다. 2개 이상의 어드레싱 모드들의 제2 어드레싱 모드는 시스템 메모리의 메모리 채널들에 대한 임베딩 테이블의 맵핑을 확장하는 스택-인터리브 모드이다.
[0014] 일부 구현예들에서, 각각의 OCI 트랜잭션 요청은 페치 유닛에 의해 수신되고; 그리고 OCI 트랜잭션 요청에 표시된 임의의 메모리 로케이션에 액세스하는 것을 개시하기 위해 인터페이스 제어기에 의해 프로세싱된다. 일부 구현예들에서, 시스템 메모리에 저장된 데이터에 액세스하기 위한 각각의 OCI 트랜잭션 요청은 i) 액세스 중인 데이터에 대응하는 32 바이트 길이; ii) 시스템 메모리 내 임의의 메모리 로케이션에 특정한 소스 어드레스를 나타내는 TokenID; 및 iii) 벡터 메모리의 메모리 로케이션의 목적지 어드레스를 인코딩한다. 일부 구현예들에서, 임베딩 테이블은 전체 시스템 메모리의 메모리 채널들에 걸쳐 할당되는 다수의 데이터 샤드들로서 분할되며; 인터페이스 제어기는 다수의 채널 제어기들 중 임의의 하나를 이용하여 임베딩 테이블의 임의의 부분에 액세스하기 위해 스택-인터리브 모드를 선택한다.
[0015] 집적 회로는 다수의 채널 제어기들의 각각 내 개개의 플러시 유닛을 더 포함하며, 개개의 플러시 유닛은 i) 어드레싱 정보를 인코딩해 달라는 요청을 수신하고; ii) 어드레싱 정보에 기초하여, 인터페이스 제어기를 이용하여 벡터 메모리 내 소스 어드레스로부터 시스템 메모리의 임의의 메모리 로케이션에 데이터를 기록하도록 구성된다. 일부 구현예들에서, 머신-학습 계산들이 신경망 계층을 통해 신경망 입력들을 프로세싱하기 위해 수행되며; 플러시 유닛은 인터페이스 제어기를 이용하여 신경망 계층에 대한 파라미터들을 시스템 메모리의 임의의 메모리 로케이션에 기록하기 위해 사용된다.
[0016] 본 명세서에서 설명되는 기술요지의 다른 양태는 머신-학습 계산들을 가속하도록 구성된 집적 회로를 이용하여 수행되는 컴퓨터-구현 방법으로 구현될 수 있다. 집적 회로는 시스템 메모리, 및 다수의 채널 제어기들을 포함하는 프로세서 코어를 포함하며, 본 방법은 다수의 요청들을 수신하는 단계를 포함하며, 다수의 요청들 각각은 어드레싱 정보를 인코딩한다. 다수의 요청들 중 제1 요청에 대해, 본 방법은 제1 요청의 어드레싱 정보에 기초하여, 시스템 메모리의 임의의 메모리 채널의 임의의 메모리 로케이션을 식별하는 단계; 채널 제어기들의 각각을 시스템 메모리의 각각의 메모리 채널에 커플링하는 온칩 상호접속(OCI) 인터페이스를 이용하여 시스템 메모리의 임의의 메모리 로케이션 중의 메모리 로케이션으로부터 데이터를 획득하는 단계; 및 제1 요청의 어드레싱 정보에 기초하여, 메모리 로케이션으로부터 획득된 데이터를 프로세서 코어의 벡터 메모리에 기록하는 단계를 포함한다.
[0017] 이들 및 다른 구현예들은 각각 선택적으로 다음 특징들 중 하나 이상을 포함할 수 있다. 예를 들어, 일부 구현예들에서, OCI 인터페이스는 다수의 판독 인터페이스들 및 다수의 기록 인터페이스들을 포함하는 인트라-메모리 OCI 노드를 포함하며; 본 방법은 인터페이스 제어기에 의해 발생된 제어 신호들에 기초하여, 판독 인터페이스들을 이용하여 시스템 메모리의 임의의 메모리 채널을 따라 임의의 메모리 로케이션으로부터 데이터를 획득하는 단계; 및 인터페이스 제어기에 의해 발생된 제어 신호들에 기초하여, 기록 인터페이스들을 이용하여 시스템 메모리의 임의의 메모리 채널을 따라 임의의 메모리 로케이션에 데이터를 기록하는 단계를 더 포함한다.
[0018] 일부 구현예들에서, 인트라-메모리 OCI 노드는 선입선출(FIFO) 메모리 큐를 포함하며, 본 방법은 i) 시스템 메모리의 임의의 메모리 로케이션으로부터 데이터를 획득하기 위해 또는 ii) 시스템 메모리의 임의의 메모리 로케이션에 데이터를 기록하기 위해, 기존 OCI 트랜잭션의 중재 동안 유입하는 OCI 트랜잭션 요청들을 FIFO 메모리 큐에 저장하는 단계를 포함한다.
[0019] 일부 구현예들에서, 본 방법은 또한 인터페이스 제어기에 의해, 어드레싱 정보를 인코딩해 달라는 요청을 수신하는 단계; 인터페이스 제어기에 의해, 어드레싱 정보 내 다수의 ID들에 기초하여 다수의 제어 신호들을 발생시키는 단계; 및 인터페이스 제어기에 의해, 시스템 메모리의 메모리 로케이션에 저장된 데이터를 페치하기 위해 제어 신호들을 시스템 메모리의 임의의 메모리 채널에 제공하는 단계를 포함한다.
[0020] 일부 구현예들에서, 어드레싱 정보는 인터페이스 제어기에서 수신된 하나 이상의 유입하는 OCI 트랜잭션 요청들로부터 도출되며; 시스템 메모리의 임의의 메모리 로케이션에 액세스하기 위한 적어도 하나의 기존 OCI 트랜잭션 요청은 FIFO 메모리 큐에 이전에 저장되었다. 일부 구현예들에서, 어드레싱 정보는 하나 이상의 유입하는 OCI 트랜잭션 요청들로부터 도출되며; 각각의 유입하는 OCI 트랜잭션 요청은 시스템 메모리의 임의의 메모리 채널에 걸쳐 메모리 로케이션들의 임의의 세트에 대응하는 다수의 식별자(ID)들을 포함한다.
[0021] 이러한 및 다른 양태들의 다른 구현예들은 컴퓨터 저장 디바이스들 상에 인코딩된 방법들의 액션들을 수행하도록 구성된, 대응하는 시스템들, 장치들, 및 컴퓨터 프로그램들을 포함한다. 하나 이상의 컴퓨터들의 시스템은 동작 시 시스템으로 하여금 액션들을 수행하게 하는, 시스템 상에 설치된 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합에 의해 그렇게 구성될 수 있다. 하나 이상의 컴퓨터 프로그램들은 데이터 프로세싱 장치에 의해 실행될 때, 본 장치로 하여금, 액션들을 수행하게 하는 명령들을 가짐으로써 그렇게 구성될 수 있다.
[0022] 본 명세서에서 설명되는 기술요지는 다음 이점들 중 하나 이상을 실현하기 위해 특정의 실시형태들로 구현될 수 있다.
[0023] 크로스바/온칩 상호접속을 위한 회로부는 분배 시스템에서 사용되는 하드웨어 액셀러레이터와 같은, 특수-목적 하드웨어 회로에서 구현될 수 있다. 크로스바는 각각의 채널 제어기로 하여금, 프로세서 코어 또는 액셀러레이터 칩과 통신하는 고대역폭 메모리 시스템의 임의의 채널에서 메모리 셀의 임의의 어드레스 로케이션으로부터 데이터를 판독하고 이에 데이터를 기록 가능하게 한다. 이는 채널 제어기들을 특정의 메모리 채널들에 맵핑할 필요성을 회피할 수 있으며, 이는 성능 패널티들을 발생시키는 로드 불균형들을 초래할 수 있다. 크로스바는 모든 메모리 채널들에 걸쳐 프로세싱하기 위해 어드레스들을 임의의 채널 제어기에 할당함으로써 어드레스들의 할당을 로드-밸런싱하도록 구현된다. 따라서, 크로스바는 이전 접근법들에 비해 분배 시스템의 성능을 향상시킬 수 있다.
[0024] 본 명세서에서 설명된 기술요지의 하나 이상의 구현예들의 세부사항들이 첨부 도면 및 아래의 상세한 설명에서 개시된다. 본 기술요지의 다른 잠재적인 특징들, 양태들, 및 이점들은 설명, 도면들, 및 청구범위로부터 명백해질 것이다.
[0025] 도 1은 예시적인 컴퓨팅 시스템의 블록도이다.
[0026] 도 2는 제어 유닛, 채널 제어기들, 및 메모리 채널들의 예들을 포함하는 아키텍처의 블록도이다.
[0027] 도 3은 메모리 채널 제어기들에 대한 로드 밸런싱을 구현하는데 사용되는 예시적인 알고리즘을 예시한다.
[0028] 도 4는 상이한 채널 제어기들에 대한 요청들의 예시적인 할당을 예시한다.
[0029] 도 5a 및 5b는 예시적인 OCI 인터페이스 제어기를 도시한다.
[0030] 도 6은 OCI 프로세서 노드와 관련된 기록 동작에 대한 예시적인 흐름도를 도시한다.
[0031] 도 7은 OCI 프로세서 노드와 관련된 판독 동작에 대한 예시적인 흐름도를 도시한다.
[0032] 다양한 도면들에서 유사한 참조 번호들 및 명칭들은 동일한 엘리먼트들을 표시한다.
[0033] 도 1은 시스템(100)의 메모리에 저장된 데이터 엘리먼트들을 취출하도록 구성된 예시적인 컴퓨팅 시스템(100)의 블록도를 도시한다. 데이터 엘리먼트들은 예시적인 머신-학습 작업부하에 대한 신경망 계산들을 수행하기 위해 취출되어 사용될 수 있다. 예를 들어, 데이터 엘리먼트들은 신경망 계층에 대한 출력을 계산하기 위해 또는 임베딩 계층 동작들을 수행하여 신경망을 훈련하기 위한 임베딩들의 세트들을 발생시키기 위해 프로세싱될 수 있다.
[0034] 임베딩 출력들은, 시스템(100)의 신경망이 기계 변환, 자연 언어 이해, 랭킹 모델들, 또는 콘텐츠 추천 모델들에 관련된 계산들과 같은, 특정의 연산 기능들을 수행하도록 훈련될 때, 발생된다. 일부 구현예들에서, 신경망을 훈련하는 것은 예컨대, 훈련 신경망의 이전 단계 동안, 신경망의 임베딩 테이블에 이전에 저장된 임베딩들의 세트를 업데이트하는 것을 포함한다. 예를 들어, 신경망의 임베딩 계층의 임베딩들은 임베딩들이 사용될 신경망과 공동으로 훈련될 수도 있다. 따라서, 본 명세서에서 설명되는 기법들은 이전 접근법들보다 향상된 효율로, 신경망의 훈련 동안 임베딩들을 업데이트하기 위해 이용될 수 있다.
[0035] 일반적으로, 신경망의 임베딩 계층은 임베딩 계층에 대응하는 피쳐/임베딩 공간에 피쳐들을 임베딩하기 위해 사용된다. 임베딩 벡터는 임베딩 계층을 나타내는 룩업 테이블의 피쳐들의 세트 내 대응하는 피쳐에 맵핑되는 숫자들의 개개의 벡터일 수 있다. 피쳐는 분석 또는 예측이 수행될 독립 유닛들에 의해 공유되는 속성 또는 특성일 수 있다. 예를 들어, 독립 유닛들은 어휘 내 단어들의 그룹들이거나 또는 이미지들 및 다른 문서들과 같은, 아이템들의 부분들을 형성하는 이미지 픽셀들일 수 있다. 임베딩 계층의 임베딩들을 훈련하는 알고리즘은 피쳐들을 임베딩 벡터들에 맵핑하기 위해 신경망 프로세서에 의해 실행될 수 있다. 일부 구현예들에서, 임베딩 테이블의 임베딩들은 임베딩들이 사용될 신경망의 다른 계층들과 공동으로 학습된다. 이러한 유형의 학습은 임베딩 테이블들을 업데이트하기 위해 기울기들을 역전파함으로써 발생한다.
[0036] 다른 구현예들에서, 임베딩들은 예컨대, 임베딩들이 사전-훈련될 때, 임베딩들이 사용될 신경망의 다른 계층들과 별도로 학습될 수도 있다. 예를 들어, 알고리즘은 별개의 입력 피쳐들에 관한 정보를 프로세싱하여 임베딩 공간에서 기하학적으로 가까운 임베딩 벡터들에 대한 유사한 입력들의 맵핑 또는 배치를 결정함으로써 임베딩들을 계산하기 위해 신경망 프로세서에 의해 이용될 수 있다. 일부의 경우, 컴퓨팅 임베딩들의 프로세스는 시스템으로 하여금 원시 입력 데이터로부터의 피쳐 검출에 필요한 표현들을 자동으로 발견하게 하는 피쳐 학습 또는 피쳐 엔지니어링을 위한 기법을 나타낼 수 있다.
[0037] 일부 구현예들에서, 주어진 "입력"은 하나 이상의 유형들의 하나 이상의 피쳐들을 가질 수 있으며, 임베딩 계층은 이들 유형들 각각에 대한 개개의 임베딩을 발생시킨다. 예를 들어, 입력은 몇 개의 상이한 피쳐 유형들을 갖는 탐색 쿼리에 대한 것일 수 있다. 피쳐 유형들은 사용자 또는 사용자 디바이스의 특성들(예를 들어, 로케이션, 선호사항들, 디바이스 유형, 등), 쿼리 토큰들, 이전에 실행의뢰된 쿼리들, 또는 탐색 쿼리의 속성들에 대응할 수도 있는 다른 관련된 유형들을 포함할 수 있다. 주어진 입력에 대해 하나 보다 많은 피쳐를 갖는 임의의 피쳐 유형들에 대해, 컴퓨팅 시스템은 이들 피쳐들 각각에 대한 개개의 임베딩들을 취출하도록 동작 가능하다. 시스템은 또한 해당 피쳐 유형에 대한 최종 임베딩을 발생시키기 위해, 예를 들어, 임베딩 값들의 평균들을 계산함으로써, 취출된 임베딩들을 결합하도록 동작 가능하다.
[0038] 컴퓨팅 시스템(100)은 호스트(102), 다중 코어 프로세싱 유닛(104), 및 메모리 유닛(105)("메모리(105)")을 포함한다. 메모리(105)는 데이터 샤드들(106a-106k)을 포함하며, 여기서 k는 1보다 큰 정수이다. 메모리(105)는 이하에서 좀더 자세하게 설명된다. 일반적으로, 호스트(102)는 프로세서, 다수의 프로세서들, 또는 다수의 프로세서 코어들과 같은, 프로세싱 유닛일 수 있다. 따라서, 호스트(102)는 하나 이상의 프로세서들을 포함할 수도 있으며, 목표 밀집 매트릭스에 액세스하기 위한 명령을 발생시키거나 또는 프로세싱하고 명령(110)을 다중 코어 프로세싱 유닛(104)로 전송하여 목표 밀집 매트릭스를 발생시키도록 동작 가능하다. 아래에 더 자세히 설명된 바와 같이, 임베딩 계층 동작들을 수행하는 것은 밀집 매트릭스를 발생시키기 위해 하나 이상의 매트릭스들로부터 희소 엘리먼트들을 변환하는 것을 포함할 수 있다.
[0039] 다중 코어 프로세싱 유닛(104)은 메모리(105) 내 데이터 샤드들(106a-106k) 중 하나 이상으로부터 대응하는 엘리먼트들(108a-108n)에 액세스하며, 여기서 n은 1보다 큰 정수이다. 다중 코어 프로세싱 유닛(104)은 대응하는 엘리먼트들(108a-108n)을 이용하여 목표 밀집 매트릭스(112)를 발생시키고, 추가적인 프로세싱을 위해 목표 밀집 매트릭스(112)를 호스트(102)에 제공한다. 다중 코어 프로세싱 유닛(104)은 엘리먼트들(108a-108n) 각각을 벡터로 변환하고, n개의 벡터들을 단일 벡터로 연쇄(concatenating)시킴으로써 목표 밀집 매트릭스(112)를 발생시킬 수도 있다.
[0040] 일반적으로, 임베딩들의 상황에서, 희소 엘리먼트들에 대응하는 '희소' 정보는 피쳐 값을 식별하는 원-핫(one-hot) 벡터일 수도 있다. 예를 들어, 주어진 피쳐(예를 들어, A, B, C, D, E)에 대해 5개의 가능한 값들이 있으면, 희소 벡터는 피쳐 값 'A'를 (1, 0, 0, 0, 0)으로서 식별할 것이며, 임베딩 계층은 (1, 0, 0, 0, 0)을 피쳐 값 "A"에 대한 밀집한 임베딩 벡터에 맵핑할 것이다. 일부 구현예들에서, 임베딩들을 학습하기 위한 임베딩 계층의 훈련 동안, 엘리먼트들(108a-108n)은 피쳐 값 "B" 또는 "C"에 대한 임베딩 벡터와 같은, 벡터로 변환되는 임베딩 테이블의 가중 값들일 수도 있다. 가중 값들은 임베딩 벡터들에 대한 피쳐들의 맵핑에 적어도 기초하여 임베딩들을 계산하기 위해 훈련 알고리즘을 실행하는 다중 코어 프로세싱 유닛(104)의 신경망 프로세서를 이용하여 변환될 수도 있다.
[0041] 호스트(102)는 목표 밀집 매트릭스를 업데이트하기 위한 명령을 프로세싱하여, 업데이트된 밀집 매트릭스를 다중 코어 프로세싱 유닛(104)으로 전송할 수 있다. 예를 들어, 목표 밀집 매트릭스는 신경망의 임베딩에 대응할 수도 있다. 따라서, 호스트(102)는 업데이트된 밀집 매트릭스를 발생시키기 위해 임베딩들을 업데이트하라는 명령을 프로세싱할 수 있다. 예를 들어, 임베딩들을 업데이트하기 위해 신경망을 훈련하는 후속 반복 동안, 역방향 패스가 임베딩 벡터들에 대한 입력 피쳐들의 새로운 맵핑을 결정하고 새로운 맵핑에 기초하여 업데이트된 밀집 매트릭스를 발생시킴으로써, 임베딩들을 업데이트하기 위해 수행될 수도 있다. 일부 구현예들에서, 다중 코어 프로세싱 유닛(104)은 업데이트된 밀집 매트릭스를 대응하는 희소 엘리먼트들로 변환하고 그에 따라 데이터 샤드들(106a-106k)에 저장된 하나 이상의 희소 엘리먼트들(예를 들어, 가중치들)을 업데이트하도록 동작 가능하다.
[0042] 위에서 표시된 바와 같이, 호스트(102)는 컴퓨팅 시스템(100) 내에서 실행을 위한 명령들을 프로세싱하도록 구성된다. 일부 구현예들에서, 호스트(102)는 다중 코어 프로세싱 유닛(104)에 의해 발생된 목표 밀집 매트릭스(112)를 프로세싱하도록 구성된다. 일부 다른 구현예들에서, 호스트(102)는 목표 밀집 매트릭스(112)를 발생시키도록 다중 코어 프로세싱 유닛(104)에 요청하도록 구성될 수도 있으며, 다른 프로세싱 유닛은 목표 밀집 매트릭스(112)를 프로세싱하도록 구성될 수도 있다.
[0043] 다중 코어 프로세싱 유닛(104) 각각의 프로세서는 시스템(100)의 메모리에 저장된 데이터 엘리먼트들을 취출하도록 구성된다. 메모리는 엘리먼트들(108a-108n)을 포함하는 데이터를 저장하는 다수의 데이터 샤드들(106a-106k)을 포함할 수 있다. 데이터는 가중치들의 매트릭스 구조의 파라미터들 또는 커널들에 대응하는, 입력들, 활성화들, 이득 값들, 또는 가중 값들을 포함할 수 있다. 일부 구현예들에서, 데이터 샤드들(106a-106k)은 휘발성 메모리 유닛 또는 유닛들일 수도 있다. 일부 다른 구현예들에서, 데이터 샤드들(106a-106k)은 비-휘발성 메모리 유닛 또는 유닛들일 수도 있다.
[0044] 본 문서에서 사용될 때, 데이터 샤드는 메모리 뱅크, 메모리 셀, 또는 온칩 메모리, 고대역폭 시스템 메모리, 외부 메모리, 또는 이들의 조합과 같은 메모리의 관련 섹션을 포함할 수 있다. 데이터 샤드들(106a-106k)은 또한 저장 영역 네트워크 또는 다른 구성들에서의 디바이스들과 같은, 다른 유형의 컴퓨터-판독가능 매체일 수도 있다. 데이터 샤드들(106a-106k)은 전기 접속들, 광학 접속들, 또는 무선 접속들을 이용하여 다중 코어 프로세싱 유닛(104)에 커플링될 수도 있다. 일부 구현예들에서, 데이터 샤드들(106a-106k)은 다중 코어 프로세싱 유닛(104)의 부분일 수도 있으며 PIM(Processor-in-memory) 아키텍처에 기반할 수도 있다.
[0045] 다중 코어 프로세싱 유닛(104)은 희소 엘리먼트들에 기초하여 밀집 매트릭스를 결정하도록 구성된다. 다중 코어 프로세싱 유닛(104)은 다수의 상호접속된 프로세서들 또는 프로세서 코어들을 포함한다. 예를 들어, 다중 코어 프로세싱 유닛(104)은 다수의 상호접속된 프로세서 코어들을 포함하는 분산 프로세싱 시스템일 수 있다. 일반적으로, 용어들 "프로세서" 및 "프로세서 코어"는 다중 코어 프로세싱 유닛(104)의 별개의 상호접속된 프로세싱 리소스들을 설명하기 위해 상호교환 가능하게 사용될 수도 있다.
[0046] 시스템(100)은 또한 프로세스 ID 제어 유닛(114)("제어 유닛(114)")을 포함한다. 제어 유닛(114)은 ID 헤더들의 세트를 수신하고, ID 헤더들을 디스패치하거나 또는 ID 헤더들에 포함된 정보의 부분들을 디스패치하는 동작들을 수행한다. ID 헤더들은 채널 제어기들로 디스패치되며, 이는 도 2를 참조하여 아래에서 좀더 자세하게 설명된다. 일부 구현예들에서, 시스템(100)은 다수의 제어 유닛들(114)을 포함한다. 예를 들어, 시스템(100)은 시스템(100)에서 각각의 프로세서 또는 프로세서 코어에 대한 제어 유닛(114)을 포함할 수 있다. 다중 코어 프로세싱 유닛(104)의 프로세서/코어에 커플링된 제어 유닛들(114) 각각은 소스로부터 ID 헤더들의 세트를 수신한다. 소스는 호스트(102) 또는 다중 코어 프로세싱 유닛(104)의 다른 프로세서일 수 있다.
[0047] ID 헤더는 메모리(105) 내 메모리 로케이션들에 대한 어드레스들을 규정하는 정보를 포함해 달라는 요청을 나타낼 수 있다. 메모리(105)는 고대역폭 메모리(HBM), 또는 시스템(100)에 포함된 예시적인 하드웨어 회로의 프로세서 코어에서 제어 유닛(114)과 데이터 통신들을 교환하는 입력/출력(I/O) 디바이스를 나타낼 수 있다. 예를 들어, 메모리(105)는 입력들을 코어로 전달하고 코어의 하나 이상의 컴퓨팅 리소스들에 의해 발생된 출력들을 수신하기 위해 다중 코어 프로세싱 유닛(104)의 프로세서 코어와 데이터 통신들을 교환할 수도 있다. 메모리(105)의 메모리 로케이션들에 저장되거나 또는 기록되는 입력들 및 데이터 값들은 벡터 값들의 벡터 엘리먼트들 또는 어레이들을 나타낼 수 있다.
[0048] 메모리(105)는 시스템(100)의 동적 랜덤 액세스 메모리(DRAM) 자산들일 수 있다. 일부 구현예들에서, 메모리(105)는 하나 이상의 프로세서들 또는 프로세서 코어들을 포함하는 예시적인 하드웨어 회로에 대한 외부 또는 오프-칩 메모리이다. 메모리(105)는 벡터 프로세싱 유닛(VPU) 또는 (아래에서 설명되는) VPU의 벡터 메모리 뱅크들과 같은, 하드웨어 회로의 온칩 리소스들과 데이터 통신들을 교환하도록 구성된다. 예를 들어, 메모리(105)는 시스템(100)의 하드웨어 회로를 나타내는 집적 회로 다이의 외부에 있는 물리적 로케이션에 배치될 수 있다. 따라서, 메모리(105)는 집적 회로 다이 내에 배치된 컴퓨팅 리소스들에 대해 원위이거나 또는 비국소적일 수도 있다. 대안적으로, 메모리(105), 또는 그의 리소스들의 부분들은 메모리(105)가 회로의 컴퓨팅 리소스들에 국소적이거나 또는 병치되도록, 특수-목적 하드웨어 회로를 나타내는 집적 회로 다이 내에 배치될 수 있다.
[0049] 도 2는 채널 제어기들(202) 및 메모리(105)의 메모리 채널들(204)뿐만 아니라, 위에서 설명된 제어 유닛(114)의 예들을 포함하는 아키텍처(200)의 블록도이다. 메모리 채널들(204) 각각은 메모리(105)의 메모리 뱅크, 메모리(105)의 메모리 뱅크들의 세트, 메모리(105)의 메모리 로케이션들의 세트, 또는 이들의 조합들을 나타낼 수 있다.
[0050] 채널 제어기들(202)의 세트는 적어도 C0, C1, C2, 및 C15로 표시되는 다수의 개개의 채널 제어기들을 포함한다. 도 2의 예에서, 아키텍처(200)는 16개의 채널 제어기들을 포함할 수 있다. 일부 구현예들에서, 아키텍처(200)는 더 많거나 또는 적은 채널 제어기들을 포함한다. 예를 들어, 아키텍처(200)는 N 개의 채널 제어기들뿐만 아니라 N 개의 메모리 채널들(204)을 포함할 수 있다. 아키텍처(200)의 이들 양태들은 개개의 채널 제어기에 대해 참조 번호 202-n로, 그리고 개개의 메모리 채널에 대해 참조 번호 204-n로 표시된다.
[0051] 도 2의 구현예는 채널 제어기들(202-0)(C0) 및 (202-2)(C2)과 같은, 개개의 채널 제어기들이 각각 메모리 채널들(204-0)(C0) 및 (204-2)(C2)과 같은, 특정의 대응하는 메모리 채널들에 하드 맵핑되는 예를 도시한다. 위에서 설명한 바와 같이, 특정의 메모리 채널들에 하드 맵핑된 채널 제어기들(202)을 갖는 시스템 메모리(105)는 로드 불균형들을 경험할 수 있다. 이들 로드 불균형들은 임베딩 계층에 대한 출력을 발생시키기 위한 동작들과 같은, 시스템(100)에서 수행되는 신경망 계산들을 위한 동작들을 중지시키거나 또는 실질적으로 지연시킬 수 있다.
[0052] 특정의 채널 제어기들(202)을 특정의 메모리 채널에 맵핑하는 이러한 이전 접근법은 다른 문제들을 가질 수 있다. 예를 들어, 접근법은 어드레스들 및 데이터가 특정의 채널 제어기들(202)에 맵핑되는 방법에 민감한 방식으로 데이터가 저장되도록 요구하는 제약을 가질 수 있다. 추가적으로, 접근법은 시스템이 다수의 무작위 탐색들을 수행하여 메모리 내 큰 공간으로부터 벡터들을 취출하도록 요구될 때 비효율적일 수 있다. 이러한 문제들을 해결하기 위해, 온칩 상호접속(OCI), 또는 크로스바(아래에서 설명됨)가 특수-목적 하드웨어 회로에 통합된다. 크로스바는 각각의 채널 제어기로 하여금 고대역폭 메모리 시스템의 임의의 채널로부터 데이터를 판독하고 이에 데이터를 기록 가능하게 하기 위해 액셀러레이터의 회로부의 프로세싱 파이프라인에 통합될 수도 있다.
[0053] 일부 구현예들에서, 특수-목적 회로는 다중 코어 하드웨어 액셀러레이터 및 OCI는 하드웨어 액셀러레이터의 다중 코어 구조에 적어도 기초하여 고유하게 구성된 채널 제어기 인터페이스이다. 예를 들어, 채널 제어기 인터페이스는 다중 코어 하드웨어 액셀러레이터의 각각의 코어와, 메모리 채널들에 대응하는 상이한 유형들의 메모리 구조들을 포함하는 메모리(105)의 각각의 메모리 채널 사이의 통신을 가능하게 하도록 구성된다.
[0054] 채널 제어기 인터페이스는 128B x1 대신, 32B x 4의 사이즈로 형성될 수 있다. 이러한 예시적인 사이징(sizing)에 기초하여, 채널 제어기 인터페이스는 OCI 하드웨어에 대한 외부 포트들을 요함이 없이, 메모리(105)와 채널 제어기들(202) 사이에 다수의 독립적인 트랜잭션 쓰레드들을 포함할 수 있다. 일부 구현예들에서, 채널 제어기 인터페이스는 각각의 채널에서, 그리고 상이한 계산의 단계들에 대해, 동적 대역폭 요구사항들을 효율적으로 처리하도록 구성된다. 예를 들어, 초당 기가바이트(GBps) 대역폭 요구사항들은 32 바이트(32B) 액세스, 64 바이트(64B) 액세스, 128 바이트(128B) 액세스와 같은, 상이한 액세스 사이즈들에 대한 상이한 계산들마다 상이할 수 있다. 단계들은 정방향 패스 계산, 역방향 패스 계산, 및 일부 훈련 데이터에 대해 신경망을 평가하는 것으로부터 발생되는 기울기들에 기초하여 특정의 벡터의 학습된 값들을 업데이트하기 위해 Adagrad와 같은 최적화 알고리즘들을 구현하는 역방향 패스 계산을 포함할 수 있다.
[0055] 채널 제어기 인터페이스는 다수의 노드 인터페이스들을 포함하도록 고유하게 구성될 수 있다. 예를 들어, 크로스바는 i) 직접 메모리 액세스(DMA) 디스크립터들 및 제어 메시지들을 운반하도록 동작 가능한 인트라-클라이언트 노드 인터페이스; ii) 메모리 시스템의 다양한 메모리 구조들(예를 들어, 버퍼 메모리, 명령 메모리, 공유된 메모리, 벡터 메모리, 호스트 메모리)에 대한 판독/기록 지령들 및 데이터를 운반하도록 동작 가능한 인트라-메모리 노드 인터페이스; iii) 로드/저장 트래픽을 채널 제어기들(202)의 제1/하부 세트로부터 메모리(105)로 운반하도록 동작 가능한 인트라-프로세서 노드 인터페이스(하부); 및 iv) 로드/저장 트래픽을 채널 제어기들(202)의 제2/상부 세트로부터 메모리(105)로 운반하도록 동작 가능한 인트라-프로세서 노드 인터페이스(상부)를 포함할 수 있다. 이는 적어도 도 5a 및 5b를 참조하여 아래에서 좀더 자세하게 설명된다.
[0056] 채널 제어기 인터페이스는 채널 제어기들의 세트들로 하여금 메모리(105)의 임의의 메모리 채널/어드레스에 액세스 가능하게 한다. 그러나, 요청들에서 규정된 어드레스들이 채널 제어기들(202)의 세트 사이에 퍼져 있는 경우에도, 특정의 머신-학습 작업부하들의 대규모 실행은 다른 채널 제어기들에 비해 특정의 채널 제어기가 데이터 프로세싱 로드의 대부분을 수신하는 데이터 액세스 패턴들을 나타낼 수 있다. 도 2의 예에서, 채널 제어기(202-0)는 해당 채널이 다른 채널 제어기들(예를 들어, C1, C2)에 비해 데이터 프로세싱 로드의 대부분을 수신하는 불균형을 보여준다. 이 문제를 해결하기 위해, 크로스바가 각각의 채널 제어기(202)에 대한 어드레스들 또는 요청들의 할당들을 제어하기 위한 특정의 제어 방식을 구현하기 위해 사용된다. 제어 방식은 어드레스들이 채널 제어기들(202) 사이에 실질적으로 동일하게 할당되게 한다. 이는 아래에서 도 3을 참조하여 좀더 자세히 설명된다.
[0057] 도 3은 메모리 채널 제어기들(202)에 대한 로드 밸런싱을 구현하는데 사용되는 예시적인 알고리즘(300)을 예시한다.
[0058] 위에서 표시된 바와 같이, 예시적인 머신-학습 작업부하에 대한 데이터 액세스들은 특정의 병리학적 패턴들을 나타낼 수 있다. 예를 들어, 세트 요청들 및 어드레스들이 일반적으로 채널 제어기들(202)에 걸쳐 퍼져 있을 수도 있지만, 특정의 채널 제어기가 상당한 수의 더 큰 피쳐들 또는 큰 벡터들에 대해 동작하도록 요구되는 특정의 패턴들이 존재할 수도 있다. 이러한 패턴들은 제어 유닛(114)으로 하여금, 채널 제어기들(202)에서 로드 불균형을 여전히 초래하는 프로세싱 태스크들 또는 ID 헤더들의 세트를 디스패치하게 할 수 있다. 예를 들어, 패턴들은 프로세싱의 특정의 짧은 시간 윈도우들, 예컨대 20 사이클과 100 사이클 사이 동안 나타나게 하는 버스티 특성을 가질 수도 있다. 로드 불균형은 채널 제어기들(202) 중 임의의 하나가 메모리(105)의 임의의 메모리 로케이션 및 임의의 메모리 채널(204)에 액세스하도록 구성되더라도 발생할 수 있다.
[0059] 알고리즘(300)은 위에서 언급된 제어 방식에 대응하며, 시스템(100)의 메모리 채널 제어기들(202)에 대한 로드 밸런싱을 구현하는데 사용되는 예시적인 디스패치 알고리즘이다. 알고리즘(300)은 도 3의 예에서 도시된 바와 같은 의사-코드를 포함할 수 있으며, 이는 디스패치 알고리즘(300)의 명령 단계들 중 하나 이상을 나타낸다. 일부 구현예들에서, 알고리즘(300)은 수정된 라운드-로빈 디스패치 알고리즘이다. 디스패치 알고리즘(300)의 수정된 라운드-로빈 속성들은 ID 헤더들의 세트가 파싱되어 채널 제어기들(202)로 디스패치될 수 있게 한다.
[0060] 예를 들어, 수정된 라운드-로빈 디스패치 알고리즘(300)은 머신-학습 작업부하에 대한 데이터 액세스들 동안 발생할 수 있는 잠재적인 병리학적 시퀀스들을 방해하거나 또는 금지하도록 구성된다. 이 때문에, 수정된 라운드-로빈 디스패치 알고리즘(300)은 ID 헤더들(예를 들어, 활성화들의 어드레스 또는 기울기들)의 할당들을 채널 제어기들의 세트(350) 내 각각의 채널 제어기(202)에 걸쳐 로드 밸런싱되는 방식으로 가능하게 하도록 구성된다. 프로세스를 스케쥴링하기 위한 표준 라운드-로빈 접근법은 채널 제어기를 선택들이 우선순위 없이 수행되는 간단한 순환의 순서로 선택하는 것을 표시한다.
[0061] 위에서 설명된 버스티 패턴들을 해결하기 위해, 라운드-로빈 접근법은 선택들의 첫 번째 순환의 순서의 초기 완료를 먼저 검출하기 위해 적응되거나 또는 수정될 수 있다. 초기 완료를 검출하는 것에 응답하여, 제어 유닛(114)은 이후 선택들의 제2 또는 후속 순환의 라운드를 위해 선택되는 초기 채널 제어기를 수정하기 위해 증분 파라미터를 조정할 수 있다.
[0062] 예를 들어, 시스템(100)은 16개의 채널 제어기들(예를 들어, CC0 - CC15)을 포함할 수 있다. 제어 유닛(114)은 초기 라운드 동안 각각의 채널 제어기(202)를 선택하고, CC15가 해당 라운드 동안 선택되었음을 표시하는 카운트 파라미터에 기초하여 초기 라운드의 완료를 검출할 수 있다. 카운트 파라미터는 초기 라운드 동안 CC15의 선택이 16개의 채널 제어기들 각각의 선택을 표시하도록 채널 제어기들의 총 개수 16에 대응할 수 있다. 제어 유닛(114)은 이후 증분 파라미터의 값을 조정하여 특정의 채널 제어기의 선택을 바이패스할 수 있다.
[0063] 예를 들어, 제어 유닛(114)은 이후 증분 파라미터를 증가시켜, CC0의 선택을 바이패스하고 채널 선택들의 후속 라운드의 시작에서 CC1을 선택할 수 있다. 이와 유사하게, 제어 유닛(114)은 다시 증분 파라미터를 증가시켜, CC1의 선택을 바이패스하고 채널 선택들의 다른 후속 라운드의 시작에서 CC2를 선택할 수 있다. 일부 구현예들에서, 제어 유닛(114)은 도 4를 참조하여 아래에서 좀더 자세히 설명하는 바와 같이, 하나 이상의 관찰된 데이터 액세스 패턴들에 기초하여 채널 카운트의 증분을 증가(또는, 감소)시키기 위해 증분 파라미터의 값을 주기적으로 조정할 수 있다.
[0064] 도 4는 상이한 채널 제어기들(202)에 대한 요청들의 균형된 할당을 실행하기 위해 채널 제어기들(202)을 선택하는 예시적인 시퀀스(410)를 도시하는 테이블(400)을 예시한다.
[0065] 위에서 간략히 설명한 바와 같이, 네이티브 라운드-로빈 방식은 계산을 위해 액세스되는 입력 데이터에서의 병리학적 패턴들로 인해 어려움을 겪을 수 있다. 예를 들어, 패턴은 매 16번째 ID 헤더가 가장 긴 임베딩 벡터들 및 가장 계산 집약적인 옵티마이저(optimizer)를 갖는 임베딩 테이블에 속하는 것일 것이다. 예시적인 패턴은 네이티브 라운드-로빈 방식에서도 로드 불균형을 초래할 수 있다. 제어 유닛(114)은 수정된 라운드-로빈 ID 헤더 디스패치 방식을 구현하기 위해 디스패치 알고리즘(300)에 대응하는 명령들을 실행하는 프로세서 코어의 하드웨어 컴포넌트일 수 있다.
[0066] 알고리즘(300)에 기초하여, 이 디스패치 방식은 입력 데이터의 세트에서의 병리학적 패턴들로 인해 로드 불균형의 확률을 감소시키도록 동작 가능하다. 알고리즘(300)은 채널 제어기들(202)을 선택하는 예시적인 시퀀스(410)를 발생시키기 위해 이용될 수 있다. 시퀀스에서 각각의 숫자는 선택될 채널 제어기를 표시한다. 일부 구현예들에서, 시퀀스(410)는 초기 비수정된 라운드-로빈 흐름에 기초하여 세트(예를 들어, 0 내지 15) 내 각각의 채널 제어기를 통해 초기에 반복할 수 있다.
[0067] 각각의 채널 제어기가 선택되는 초기 반복 이후, 라운드-로빈 흐름은 채널 제어기(CC0)의 선택으로 다시 시작하기 보다는, 채널 제어기(CC1)를 선택하도록 수정될 수 있다. 이와 유사하게, 각각의 채널 제어기가 선택되는 제2 반복 이후, 라운드-로빈 흐름은 채널 제어기(CC1)의 선택으로 다시 시작하기 보다는, 채널 제어기(CC2)를 선택하도록 수정될 수 있다. 이 수정된 선택 방식은 세트 내 각각의 채널 제어기가 세트 간에 동일하거나 또는 실질적으로 동일한, 어드레스들의 분배를 가능하게 하도록 제어 유닛(114)에 의해 선택될 수 있는 방법의 일 예를 제공한다. 일부 구현예들에서, 시스템(100)은 각각의 채널 제어기에 대한 데이터 액세스 패턴들을 모니터링하고, 관찰된 패턴들에 기초하여 디스패치 방식들을 동적으로 조정 또는 수정한다.
[0068] 제어 유닛(114)은 수정된 디스패치 방식들을 이용하여, 채널 제어기들(202)의 세트에 대한 채널 번호들의 세트를 발생시킨다. 발생된 채널 번호들의 세트는 ID 헤더들을 대응하는 채널 제어기들(204)로 포워딩하도록 제어 유닛(114)에서 프로세싱된다. 일부 구현예들에서, 제어 유닛(114)은 수정된 디스패치 방식으로 유도되는 예시적인 시퀀스(410)에 기초하여 ID 헤더들을 대응하는 채널 제어기들(204)로 포워딩한다. 채널 제어기들(202)에 걸친 ID 헤더들에 대한 프로세싱 작업부하들의 충분한 로드-밸런싱을 보장하기 위해, 알고리즘(300)은 제어 유닛(114)으로 하여금 채널 번호들의 선택을 위한 특정의 특성들을 구현하게 한다. 일부 구현예들에서, 알고리즘(300)은 도 3에 도시된 의사-코드의 예시적인 단계들에 기초한 채널 선택에 이용된다.
[0069] 예를 들어, 채널 선택 특성들은 채널 번호들의 발생이 공정하고 비-버스티일 것을 요한다. 채널 번호들을 발생시키기 위한 "공정한" 특성은 모든 채널 제어기들이 주어진 머신-학습 태스크에 동일하게 또는 실질적으로 동일하게 선택되도록 한다(또는, 요구한다). 채널 번호들을 발생시키기 위한 "비-버스티" 특성은 채널 제어기들이 주어진 머신-학습 태스크에 대해 특정의 채널 제어기의 반복 선택에서의 간헐적인 증가들 없이, 선택되도록 한다(또는, 요구한다). 예를 들어, "0, 1, 0, 1, 4, 5, 0,..."의 채널 번호 시퀀스는 바람직한 패턴이 아니며, 채널 번호들을 발생시키기 위한 "비-버스티" 특성을 만족하지 않을 것이다.
[0070] 예시적인 메트릭들의 세트가 상기 특성들(예를 들어, 공정한 및 비-버스티) 각각이 만족되는지 여부를 결정하기 위해 사용될 수 있다. 메트릭들은 선택을 위해 채널 번호가 나타나는 횟수에 대한 카운트, 평균 (평균값), 및 중앙값을 결정하는 것을 포함한다. "카운트" 메트릭의 경우, 시스템(100)은 채널 또는 채널 번호가 프로세싱 반복 당 포함되는 횟수의 카운트를 결정하도록 동작 가능하다. 횟수는 모든 채널들(202) 또는 채널 제어기들(202)에 대해 동일해야 한다. 횟수가 동일하지 않다고 시스템(100)이 결정하면, 시스템(100)은 채널 제어기 선택의 특정의 패턴이 편향되고 주어진 동작들의 세트에 대해 로드-밸런싱되지 않음을 검출할 수 있다.
[0071] "평균" 메트릭의 경우, 시스템(100)은 각각의 채널 번호에 대해, 선택을 위해 채널 번호가 나타나는 횟수가 반복들의 임계 횟수 이후 N으로 수렴하는지 여부를 결정하도록 동작 가능하며, 여기서 N은 1보다 크거나 같은 정수이다. 예를 들어, 시스템(100)이 16개의 채널 제어기들을 포함하면, 시스템(100)은 각각의 채널 번호에 대해, 선택을 위해 채널 번호가 나타나는 횟수가 ID 헤더들 또는 반복들의 임계 횟수 이후 16으로 수렴하는지 여부를 결정하도록 동작 가능하다. 일부 구현예들에서, 반복들의 임계 횟수는 취출되어 작업될 데이터의 사이즈 및 복잡성에 기초하여 변한다.
[0072] "중앙값" 메트릭은 특정의 채널 제어기의 버스티니스(burstiness)를 표시한다. 예를 들어, 채널 제어기(204-n)가 낮은 중앙값 선택 값을 갖는다고 시스템(100)이 결정하면, 다른 채널 제어기들에 비해 버스트에서 더 많은 ID 헤더들을 수신할 것이며, 이는 불균형을 표시할 수 있다. 테이블(400)은 임계치 2048 ID 헤더들에 대해 실행된 예시적인 프로세싱 반복에 대한 각각의 채널 번호에 대한 샘플 메트릭 값들을 포함한다. 앞서 언급한 바와 같이, 시스템(100)은 위에서 설명된 메트릭들 및 특성들에 대해 각각의 채널 제어기에 대한 데이터 액세스 패턴들을 모니터링하고, 관찰된 패턴들에 기초하여 디스패치/제어 방식들을 동적으로 조정 또는 수정할 수 있다. 예를 들어, 제어 유닛(114)은 데이터 액세스 패턴들에 기초하여 채널 카운트의 증분을 증가(또는, 감소)시키기 위해 증분 파라미터의 값을 주기적으로 조정할 수 있다.
[0073] 도 5a 및 도 5b는 시스템(100)의 OCI 패브릭(fabric)(또는, 아키텍처)과 연관된 동작들을 관리 또는 제어하는 채널 OCI 제어기(502)를 포함하는 예시적인 OCI 인터페이스(500)를 도시한다. 시스템(100) (및 OCI 인터페이스(500))은 다수의 OCI 제어기들(502)을 포함할 수 있다. 일부 구현예들에서, OCI 제어기(502)는 위에서 설명된 개개의 채널 제어기들(202)에 대응한다. 일부 다른 구현예들에서, OCI 제어기(502)는 위에서 설명된 개개의 채널 제어기들(202)과 구별된다. OCI 제어기(502)는 OCI 인터페이스의 노드들 및 판독 또는 기록 인터페이스들을 포함한, OCI 인터페이스(500)를 제어하도록 동작 가능한 인터페이스 제어기이다. 일부 구현예들에서, OCI 인터페이스(500)의 하나 이상의 피쳐들이 인터페이스 제어기에 포함되고/되거나, 인터페이스 제어기에 의해 제어 가능할 수도 있다.
[0074] OCI 인터페이스(500)는 다수의 칩들을 포함하는 집적 회로의 네트워크 노드일 수 있으며, 각각의 칩은 프로세서, 프로세서 코어, 또는 하드웨어 액셀러레이터를 나타낼 수 있다. 예를 들어, OCI 인터페이스(500)는 하나의 칩을 통해 획득된 데이터가 네트워크 노드를 통해 다른 칩으로 라우팅될 수 있게 집적 회로의 각각의 칩을 커플링 또는 상호 접속하도록 협력하는 다수의 서브-네트워크 노드들로 구성될 수도 있다.
[0075] 일반적으로, 제어기(502)는 시스템(100)의 OCI 인터페이스의 하나 이상의 인터페이스 디바이스들과 연관된 동작들을 제어한다. OCI 인터페이스(500)는 각각의 채널 제어기로부터의 개개의 32B 무작위 액세스 로드/저장 인터페이스를 포함할 수 있으며, 메모리 채널 당 메모리(105)로의 효율적인 32B 판독/기록 액세스의 다중 쓰레드(예를 들어, 8개의 쓰레드들)를 지원할 수 있다. 제어기(502)는 주어진 채널 제어기의 페치 또는 플러시 유닛을 업데이트하기 위해 메모리(105)로부터의 하나 이상의 유입하는 응답들을 재정렬하도록 구성된다. 이는 이하에서 좀더 자세하게 설명된다.
[0076] 일부 구현예들에서, OCI 인터페이스는 채널(504, 506) 당 4 × 32B 판독 및 기록 인터페이스를 포함한다. 이들 판독 및 기록 인터페이스들은 인트라 프로세서 OCI 노드들을 나타낼 수 있으며, 여기서, 각각의 노드는 2개의 채널들(504, 506), 또는 채널들(504 및 506)에 대응하는 채널 제어기들을 서빙한다. 도 5a의 예는 판독 인터페이스(508)와 연관된 판독 동작을 도시하며, 반면 도 5b의 예는 기록 인터페이스(510)와 연관된 기록 동작을 도시한다. OCI 인터페이스(500)의 4 × 32B 구성은 독립적인 트랜잭션 쓰레드들이 메모리(105)와 채널 제어기들 사이에 발생 가능하게 한다. 예를 들어, 위에서 언급한 바와 같이, OCI 인터페이스(500)는 128B × 1 대신, 32B × 4의 사이즈로 형성될 수 있다. 이러한 예시적인 사이징에 기초하여, OCI 인터페이스(500)는 OCI 하드웨어에 대한 외부 포트들을 요함이 없이, 메모리(105)와 채널 제어기들(202) 사이에 다수의 독립적인 트랜잭션 쓰레드들을 포함할 수 있다.
[0077] OCI 인터페이스(500)는 데이터 인터페이스마다 유지되는 채널 크레딧들을 발행하도록 구성된다. 일부 구현예들에서, 각각의 데이터 인터페이스는 OCI 인터페이스(500)의 서브-네트워크 또는 노드에 대응한다. 제어기(502)는 각각의 채널 크레딧에 대응하는 하나 이상의 제어 신호들을 발생시킬 수 있다. 예를 들어, 제어기(502)는 OCI 트랜잭션 요청에 인코딩된 어드레싱 정보 내 다양한 ID들에 기초하여 제어 신호들을 발생시킬 수 있다. 제어기(502)는 또한 시스템 메모리의 메모리 로케이션에 저장된 데이터를 페치하기 위해 제어 신호들을 시스템 메모리의 임의의 메모리 채널에 제공하거나 또는 라우팅할 수 있다.
[0078] 일부 구현예들에서, OCI 인터페이스(500)의 각각의 노드는 2개의 채널 제어기들을 서비스하며, 이 인터페이스 노드 상의 크레딧들이 2개의 채널 제어기들 사이에 공유된다. 다른 채널 제어기들이 사용 중일 때, 적게 로드된 채널 제어기가 그의 트랜잭션들에서 긴 레이턴시들을 볼 수 있게 하는 단일 128B 인터페이스와는 달리, OCI 인터페이스(500)의 4 × 32B 구성에서, 이러한 상호 의존성은 주로(또는, 오직) 동일한 포트에 대해 중재하고 있는 2개의 채널들 사이에만 존재한다.
[0079] 채널 제어기 대 OCI 인터페이스 맵핑은 고정되거나 또는 동적일 수 있다. 맵핑이 고정된 구현예들에서, 하나의 포트가 사용 중일 수도 있고 다른 포트들은 짧은 시간 기간들 동안 유휴 상태일 수 있지만, 전체 구성은 모든 포트들이 동일하게 잘 이용될 수 있도록 ID들의 분배를 가능하게 한다.
[0080] OCI 인터페이스(500)는 주어진 프로세서 코어에 대한 대량 전송들 및 제어 메시지들을 처리하는 시스템(100)의 직접 메모리 액세스(DMA) 유닛과 상호 작용하는 적어도 2개의 인터페이스들을 포함할 수 있다. 예를 들어, DMA 유닛은 적어도 2개의 OCI 인터페이스들, DMA 클라이언트 인터페이스 및 DMA 메모리 인터페이스와 상호 작용한다. DMA 클라이언트 인터페이스는 BMEM, BIMEM, SMEM, VIMEM 및 HMF를 위한 대량 데이터 이동 인터페이스이며, 디스크립터들을 OCI 노드로 전송하는 디스크립터 서브-인터페이스, 및 싱크 플래그들에 관련된 제어 메시지들 및 인터럽트 동작들에 사용되는 메시지 서브-인터페이스를 포함한다. DMA 메모리 인터페이스는 OCI로부터의 판독 및 기록 요청들을 처리하며, 판독 서브-인터페이스 및 기록 서브-인터페이스를 포함한다. 판독 서브-인터페이스는 OCI 인터페이스(500)의 제어기(502)로부터의 판독 지령들을 수신하고 128 바이트 데이터 인터페이스 상에서 응답을 다시 전송한다. 기록 서브-인터페이스는 기록 지령들을 수신하고 128 바이트 인터페이스 상에 데이터를 기록한다.
[0081] BMEM은 데이터의 벡터들을 저장하는 벡터 메모리 구조이며, 반면 SMEM은 스칼라 데이터 값들을 저장하는 스칼라 메모리 구조이다. BIMEM은 프로세서 코어 명령 메모리이며, 반면 VIMEM은 어드레스 핸들러 VPU 유닛에 의해 실행되는 프로그램을 저장하는 벡터 명령 메모리(vimem)이다. 일부 구현예들에서, 16개의 채널 제어기들에 걸친 VIMEM은 시스템(100)의 DMA 유닛에 의해 하나의 큰 순차 메모리로 취급(또는, 구성)된다.
[0082] 일부의 경우, OCI 인터페이스(500)의 판독 및 기록 인터페이스들은 시스템(100)의 인트라-메모리 OCI 노드의 부분이다. 이 노드 또는 유닛은 상이한 메모리 블록들/스택들이 기록 또는 판독 동작들을 중재하고 있는 동안 유입하는 OCI 트랜잭션을 저장하는 입력 선입선출(FIFO) 메모리 큐(또는, 버퍼)를 포함할 수 있다. 일부 구현예들에서, 기존 동작 동안 프로세싱되는 유입하는 OCI 트랜잭션 요청들 중 하나 이상은 동작들의 세트를 중재할 때의 한 단계로 FIFO 메모리 큐에 이전에 저장되었다.
[0083] 이 입력 FIFO는 최악의 경우 BMEM 액세스 레이턴시에 기초하여 사이즈가 정해질 수 있다. 일부 구현예들에서, FIFO는 BMEM 액세스 레이턴시가 가장 느린 메모리가 아닐 수도 있지만 이와 같이 사이즈가 정해진다. 이는 BMEM 이외의 메모리들이 단지 배치의 시작 시에만 액세스될 수도 있기 때문이며, 따라서 이들 액세스들의 결과로서 OCI 인터페이스(500)에 대한 임의의 성능 패널티는 오직 한번만 겪을 것이다.
[0084] 메모리(105)(예를 들어, HBM)는 64 바이트 그래뉼래러티로 인터리브된 4개의 HBM 스택들을 포함할 수 있다. 예를 들어, 메모리(105)는 바이트 [0-63] [128-191]로 인터리브되는 HBM 스택, 바이트 [64-127] [192-255]로 인터리브되는 HBM 스택 1, 바이트 [256-319][384-447]로 인터리브되는 HBM 스택 2, 및 바이트 [320-383][448- 511]로 인터리브되는 HBM 스택 3을 포함할 수 있다. 일부 구현예들에서, 메모리(105)는 더 많거나 또는 더 적은 스택들 및 다양한 바이트 그래뉼래러티들을 포함할 수 있다. 64 바이트 그래뉼래러티와 관련하여, 128 바이트가 HBM 스택 0으로부터 액세스될 때, 해당 스택은 바이트 [0-63] [128-191]에 대응하는 메모리 로케이션들에 저장된 데이터를 반환할 것이다. 이는 OCI 패브릭 상에서의 예시적인 Q128 어드레싱 모드를 나타낼 수 있다.
[0085] 예시적인 프로세서 코어의 OCI 제어기(502)는 코어가 채널-인터리브 모드 또는 스택-인터리브 모드에서 동작하게 할 수 있다. 채널-인터리브 모드 및 스택-인터리브 모드 각각은 프로세서 코어의 예시적인 어드레싱 모드를 나타낸다. 채널 인터리브 어드레싱 모드는 모든 메모리 액세스들이 다른 HBM 스택에 비해 더 작은 레이턴시를 제공하는 가장 가까운 HBM 스택에 대해 이루어지도록, 임베딩 테이블을 프로세서 코어에 가장 가까운 단일 HBM 스택에 맵핑할 수 있다.
[0086] 스택-인터리브 모드에서, 임베딩 테이블은 상이한 시스템 어드레싱 방식들을 이용하기 위해 칩 상의 (예를 들어, 메모리(105)의) 고대역폭 메모리(HBM) 스택들 모두에 걸쳐 분할될 수 있다. 예를 들어, 스택-인터리브 모드 동안, 임베딩 테이블은 시스템(100)의 나머지와 동일한 어드레스 방식을 이용하여 액세스될 수 있으며, 시스템(100)의 소프트웨어 제어들은, 다수의 코어들을 포함하는 집적 회로 칩 상의 더 적은 프로세싱 코어들을 이용하도록 선택하더라도, 메모리(105)의 전체 용량을 이용하도록 구성될 수 있다.
[0087] 일부 구현예들에서, 시스템(100)의 채널 제어기는 적어도 2개(선택적으로는, 3개)의 프로세싱 스테이지들: 페치, 계산, 및 플러시(선택적으로)를 포함한다. 이는 채널 ID들을 FIFO 순서로 프로세싱하는 순차 프로세싱 파이프라인일 수 있다.
[0088] 페치 프로세스들은 도 7을 참조하여 아래에서 설명되는 페치 ID 유닛(702)(또는, 704)과 같은, 페치 ID 유닛을 이용하여 구현된다. 일부 구현예들에서, 페치 ID 유닛은 채널 제어기 파이프라인의 제1 프로세싱 스테이지이다. 페치 ID 유닛은 프로세서 코어 ID 유닛(114)으로부터 채널 ID 데이터 구조를 수신한다. 채널 ID 데이터는 취출될 데이터의 길이(32 바이트), TokenID (예를 들어, 메모리(105)의 소스 어드레스), 및 BMEM 목적지 어드레스를 인코딩한다. 페치 ID 유닛은 메모리(105)로부터 데이터를 로드하고 획득된 데이터를 채널 ID 데이터에 규정된 BMEM 어드레스에 저장하기 위해 사용된다. 채널 ID가 채널 제어기의 어드레스 핸들러 유닛으로 포워딩되며 대응하는 데이터가 BMEM에 저장된다.
[0089] 일부 구현예들에서, 데이터는 BMEM의 버퍼(예를 들어, 순환 버퍼)에 저장되는 파라미터들의 벡터일 수도 있다. 버퍼 기록 포인터는 페치 ID 유닛이 메모리에 대한 로드 요청을 발행할 때마다 이동된다. 후속 파이프라인 스테이지는 이들이 버퍼 내 데이터를 소비하면 판독 포인터를 증분시킨다. 페치 ID 유닛은 버퍼가 BMEM에 저장될 메모리(105) 로드 데이터에 대해 충분한 공간을 갖지 않을 때 메모리(105) 로드의 발행을 중지시킬 수 있다. 또한, 메모리(105)는 판독-응답을 비순차로 발생할 수 있다. 페치 ID 유닛은 채널 ID들이 어드레스 핸들러로 순차로 전송되도록 보장하기 위해 응답 재정렬 로직을 포함한다.
[0090] 플러시 프로세스들은 도 6을 참조하여 아래에서 설명되는 플러시 ID 유닛(602)(또는, 604)과 같은, 플러시 ID 유닛을 이용하여 구현된다. 일부 구현예들에서, 플러시 ID 유닛은 채널 제어기 파이프라인에서의 선택적인 제3 프로세싱 스테이지이다. 일반적으로, 플러시 ID 유닛은 예를 들어, BMEM 소스 어드레스로부터 메모리(105) 목적지 어드레스로 데이터를 이동시키기 위해 사용된다. 플러시 ID 유닛은 어드레스 핸들러로부터 FIFO로 채널 ID 데이터 구조를 수신한다. 채널 ID 데이터는 취출될 데이터의 길이 (32 바이트), TokenID (예를 들어, 메모리(105)의 목적지 어드레스), 및 BMEM 소스 어드레스를 인코딩한다. 페치 ID 유닛과 유사하게, 플러시 ID 유닛은 BMEM 소스 어드레스(즉, 메모리 로케이션)로부터 파라미터들을 로드하고 이를 메모리(105)의 목적지 어드레스(즉, 메모리 로케이션)에 저장하는 간결한 책임을 갖는다. 따라서, 플러시 ID 유닛은 OCI 인터페이스(500)를 이용하여 신경망 계층에 대한 파라미터들을 고대역폭 시스템 메모리의 임의의 메모리 로케이션에 기록하기 위해 사용될 수 있다.
[0091] OCI 인터페이스(500)는 모든 요청들이 128바이트 (128B) 전송들로 분류되도록 요구할 수 있다. 일부의 경우, 요청들은 요청들을 구현하는 프로세서 코어의 어드레스 모드에 따라 64B 또는 128B 전송들로 분류될 수도 있다. 프로세서 코어는 다수의 어드레싱 모드들을 지원하도록 구성될 수도 있다. 다수의 128B (또는, 64B) 요청들로의 전송들의 어드레스 변환 및 분할은 OCI 인터페이스/크로스바(500)로 요청을 전송하기 전에 이루어진다.
[0092] 싱크(sync) 플래그는 메모리(105)로부터 저장들에 대한 응답들을 수신한 후 플러시 ID 유닛에 의해 업데이트된다. 이는 최신 데이터를 일관되게 볼 수 있도록 후속 배치 프로세싱으로부터의 로드들을 가능하게 한다. 응답들이 비순차로 도달할 수 있으므로, 플러시 ID 유닛은 전송된 저장 지령들의 총 개수를 메모리(105)로부터 수신된 응답들의 총 개수와 비교하는 간단한 메커니즘을 이용한다. 싱크 플래그는 카운트들이 매칭하고 미해결된 추가적인 채널 ID 데이터가 없을 때 업데이트된다.
[0093] 도 6은 OCI 프로세서 노드와 관련된 기록 동작(600)을 위한 예시적인 흐름도를 도시한다. 기록 동작(600)은 하나 이상의 트랜잭션들을 포함할 수 있다. 각각의 채널 제어기는 OCI 인터페이스를 통해 메모리(105)에 접속되며, 동작(600)을 구현하기 위한 기록 파이프라인을 구현하기 위해 사용된다. 각각의 채널 제어기는 기록 동작(600)과 연관된 트랜잭션을 언롤링하는 개개의 플러시 식별(ID) 유닛을 포함한다. 도 6의 예에서, 제1 채널 제어기 0은 플러시 ID 유닛(602)("플러시 유닛(602)")을 포함하며 하나 이상의 언롤링 및 변환 동작들(606)을 수행하며, 반면 제2, 상이한 채널 제어기 1은 플러시 ID 유닛(604)("플러시 유닛(604)")을 포함하며 하나 이상의 언롤링 및 변환 동작들(608)을 수행한다. 일부 구현예들에서, 채널 제어기 0 및 채널 제어기 1은 동일한 채널 제어기이다.
[0094] 플러시 유닛들(602, 604) 각각은 개개의 채널 제어기들 0 및 1을 포함하는 주어진 프로세서 코어의 채널 동작 모드에 따라, 개개의 트랜잭션을 128B 또는 64B의 배수들로 언롤링할 수 있다. 예를 들어, 위에서 설명한 바와 같이, OCI 트랜잭션 요청은 OCI 인터페이스를 이용하여 시스템 메모리의 임의의 메모리 채널로부터 데이터를 획득하기 위한, 또는 임의의 메모리 채널로부터 획득된 데이터를 프로세서 코어의 벡터 메모리에 기록하기 위한 어드레싱 정보를 인코딩한다. 따라서, 일부 구현예들에서, 어드레싱 정보는 OCI 제어기에서 수신된 하나 이상의 유입하는 OCI 트랜잭션 요청들로부터 도출된다. 각각의 유입하는 OCI 트랜잭션 요청은 시스템 메모리의 임의의 메모리 채널에 걸쳐 메모리 로케이션들의 임의의 세트에 대응하는 다수의 식별자(ID)들을 포함할 수 있다.
[0095] OCI 트랜잭션 요청은 요청들을 구현하는 프로세서 코어의 어드레스 모드에 따라, 64B 또는 128B 전송들로 언롤링되고/되거나 변환(예를 들어, 변환)될 수도 있다. 128B 또는 64B의 배수들에 대한 개개의 트랜잭션의 언롤링은 또한 32B로 정렬되고 OCI 제어기(502)로 전송될 수 있다. 위에서 언급한 바와 같이, 시스템(100)의 각각의 프로세서 코어는 프로세서 코어의 예시적인 어드레싱(또는, 동작) 모드를 각각 나타내는 채널-인터리브 모드 또는 스택-인터리브 모드에서 동작할 수 있다.
[0096] 각각의 OCI 제어기(502)는 2개의 상이한 플러시 유닛들, 예컨대 플러시 유닛들(602, 604), 또는 메모리(105)의 하나 이상의 다른 메모리 채널들에 대응하는 플러시 유닛들과 통신할 수 있다. 요청자에 기초하여, 제어기(502)는 OCI ID를 각각의 기록 요청에 할당하고 대응하는 기록 인터페이스 상에서 기록 요청을 전송한다. 예를 들어, 제어기(502)는 채널 아비터(610)의 예시적인 선택 로직을 이용하여 2개의 플러시 유닛들(602, 604) 사이에 라운드 로빈 방식으로 선택함으로써, 예시적인 채널 0 또는 채널 1에 커플링된 기록 인터페이스를 통해 요청을 전송 또는 송신할 수 있다. 선택 로직은 위에서 설명된, 수정된 라운드-로빈 디스패치 알고리즘(300)에 기초할 수 있다. 일부 구현예들에서, 플러시 ID 유닛(602, 604) 각각은 채널 ID 데이터 프로세싱이 완료될 때마다 표시하기 위해 "할당해제" 신호를 발생시키도록 동작 가능하다. 위에서 설명한 바와 같이, 역방향 패스가 신경망 머신-학습/데이터 모델의 훈련 단계 동안 임베딩 테이블을 업데이트하기 위해 수행될 수도 있다. 할당해제 신호는 파라미터들에 대한 역방향 패스 동작들 동안 대응하는 페치 ID 유닛으로 송신된다.
[0097] 일부 구현예들에서, 플러시 유닛들(602, 604) 각각에 의해 수행되는 동작들은 기록 동작들이 완료되는 순서에 의해 영향을 받지 않는다. 주어진 플러시 유닛(602, 604)이 기록 완료들의 순서에 대해 신경쓰지 않을 수도 있기 때문에, 기록들을 위해 2개보다 많은 OCI ID들을 사용할 필요가 없다. 따라서, 제어기(502)는 추가적인 OCI ID들을 기록 요청에 할당하는 동작들을 최소화함으로써 그의 동작들을 합리하고 계산 절약 또는 효율성을 실현할 수 있다. 일부 구현예들에서, OCI 인터페이스(500)는 미해결 ID를 추적하기 위해 비트 벡터를 이용할 수 있다. 기록 완료에 대한 OCI ID에 따라, ID는 미해결 완료들의 수가 카운트되는 트랜잭션을 발생시킨 플러시 유닛으로 포워딩된다.
[0098] 도 7은 OCI 프로세서 노드와 관련된 판독 동작(700)을 위한 예시적인 흐름도를 도시한다.
[0099] 각각의 채널 제어기(예를 들어, 제어기(502))는 판독 동작(700)과 연관된 트랜잭션을 언롤링하는 개개의 페치 식별(ID) 유닛을 포함한다. 도 7의 예에서, 제1 채널 제어기 0은 페치 ID 유닛(702)("페치 유닛(702)")을 포함하고 언롤링 및 변환 동작(706)을 수행하며, 반면 제2, 상이한 채널 제어기 1은 페치 ID 유닛(704)("페치 유닛(704)")을 포함한다. 예시적인 판독 동작을 위해, 트랜잭션 언롤링 및 어드레스 변환이 대응하는 OCI 제어기(502) 내에서 이루어지며, 이후에, 판독 요청을 OCI로 전송해 달라는 요청이 채널 아비터(arbiter)(610)에 대해 이루어진다. 이 예에서, OCI 제어기(502)는 채널 제어기 0 또는 채널 제어기 1에 대응한다.
[00100] 일부 구현예들에서, 각각의 페치 유닛(702, 704)은 카운트 태그 메모리를 이용하여 판독 동작들의 완료를 추적하고, 완료를 고려하기 위해 싱크 플래그 메모리를 업데이트한다. 일부 다른 구현예들에서, 트랜잭션들을 언롤링하는 제어 모듈은 판독 데이터가 수락될 수 있는 레이트와 매칭하도록 적어도 하나의 128B 트랜잭션을 4 사이클들 마다 발생시키도록 구성된다. 채널 아비터(610)는 2개의 채널 제어기들을 라운드 로빈 방식으로 서빙하고 태그 트래킹 테이블(710)에서 가용 ID들을 탐색한다. 예를 들어, 트래킹 테이블은 ID 당 하나의 엔트리 유지할 수 있으며, 256개의 엔트리들을 포함할 수 있다. 일부 구현예들에서, 트래킹 테이블은 더 많거나 또는 더 적은 엔트리들을 유지하도록 구성될 수 있다. 256 엔트리들의 예에서, 테이블의 라인들 0-127은 페치 유닛(702)용으로 예약될 수도 있으며, 테이블의 라인들 128-255는 페치 유닛(704)용으로 예약될 수도 있다.
[00101] 요청자 페치 유닛에 따라, 채널 아비터(610)는 하나 이상의 가용 ID들을 포함하는 테이블의 영역을 결정하기 위해 탐색을 수행할 수 있다. ID들은 증분 방식으로 할당될 수 있다. 예를 들어, 일단 ID0가 할당되면, ID0에 대한 판독 데이터가 반환되더라도, ID127이 할당될 때까지 다시 할당되지 않을 것이다. 이 구성은 테이블의 구현예를 간소화하고, OCI가 ID들의 부족을 경험할 우도를 감소 또는 제거하는 방식으로 채널 제어기 당 128 ID들의 이용가능성을 제공한다. 일부 구현예들에서, 태그 트래킹 테이블 내 각각의 엔트리는 트랜잭션의 최하위 32B의 메모리 어드레스에 대해 32B, 데이터가 기록될 BMEM 어드레스에 대해 13B, 트랜잭션 길이 (32B의 배수들)를 표시하는 2B, 완료 (아마도 더 큰) 트랜잭션을 추적하기 위해 페치 유닛으로부터 수신된 카운트 태그에 대해 5B, 및 이 트랜잭션이 판독 바이패스 버퍼에서 캐시 가능한지 여부를 표시하기 위한 캐시에 대해 1B를 유지한다. 일부의 경우, 트랜잭션의 최하위 32B가 판독 바이패스 버퍼에 기록하는데 요구된다.
[00102] OCI 인터페이스(500)로부터의 판독 데이터는 트랜잭션의 사이즈에 따라 1-4 사이클들에 걸쳐 FIFO로 전송될 수 있다. 트랜잭션의 첫번째 32B 라인의 이 FIFO로의 기록은 태그 테이블에 대한 탐색을 트리거하여, 이 데이터에 첨부된 BMEM 어드레스, HBM 어드레스 및 카운트 태그를 취출한다. 트랜잭션은 캐시 활성화 비트를 포함할 수 있다. 이 트랜잭션을 위한 캐시 활성화 비트가 테이블(710)에서 0으로 설정되면, 판독 바이패스 버퍼에 대해 업데이트가 이루어지지 않으며, ID가 할당해제된다. 캐시 비트가 1로 설정되면, 데이터가 판독 바이패스 버퍼에 기록된다.
[00103] 판독 바이패스 버퍼에서 축출들은 FIFO 순서로 발생할 수 있으며, 이때 트랜잭션의 최하위 32B가 먼저 기록된다. 이는 HBM 어드레스 매치 리스트가 트랜잭션의 최하위 32B로 탐색된다는 사실과 결합되어, 트랜잭션의 하부 32B가 "히트(hit)"를 초래하면, 트랜잭션의 나머지 바이트가 또한 버퍼에 존재할 수 있도록 보장할 것이다. 페치 유닛(702, 704)으로부터 탐색되는 데이터는 특정의 HBM 어드레스에 대한 액세스들이 동일한 길이가 되도록 하는 것이며, 이는 해당 특정의 HBM 어드레스에 대한 각각의 트랜잭션이 동일한 방법으로 언롤링되게 한다. 이러한 구현 세부사항은 판독 바이패스 버퍼의 단지 트랜잭션의 부분 상에서만 "히트들"을 초래하는 시나리오들을 회피한다.
[00104] 태그 테이블(710)로부터의 메모리(105) 어드레스가 매치 리스트에 추가될 수 있고, 대응하는 데이터가 4개의 채널 OCI 제어기들 각각으로부터의 기록들에 걸쳐 기록 포트에 대해 중재함으로써, 버퍼에서 업데이트될 수 있다. 메모리(105) 어드레스 리스트에서 "히트"된 엔트리를 축출할 위험을 피하기 위해, 축출을 위해 다음 후보에 가깝게 위치된 메모리 어드레스들은 "미스(miss)"로서 표시될 수도 있다. 일부의 경우, 이는 실제 히트와 바이패스 버퍼로부터 데이터를 판독하는데 걸리는 시간 사이의 중재 지연이기 때문이다.
[00105] 집적 회로의 아키텍처 레이아웃에 따라, HBM 어드레스 매치 리스트의 다양한 복사본들을 덮어쓰는 것과 바이패스 버퍼 사이에 약간의 지연들의 차이가 있을 수 있다. 일부 구현예들에서, 시스템(100)은 히트가 미스로 표시될 축출 후보에 얼마나 근접해야 하는지에 대한 임계치를 정의하는 제어 파라미터를 포함한다. 메모리(105) 어드레스 리스트들은 엔트리가 바이패스 버퍼에 존재하는지 여부를 결정하기 위해 중재할 필요성을 회피할 수 있도록, 채널 OCI 제어기들에 걸쳐 복제될 수 있다. 시스템(100)은 시스템이 오래된 데이터를 사용하지 않도록 보장하기 위해 판독 바이패스 버퍼의 일부(또는, 모든) 엔트리들이 배치들 사이에 무효화되도록 구성될 수도 있다. 이 바이패스 버퍼로의 무효화 요청은 페치 유닛으로부터 배치 내 최종 ID와 함께 전송될 수도 있다.
[00106] OCI 또는 바이패스 버퍼로부터의 판독 데이터가 기록해야 하는 BMEM 어드레스와 함께 32B 라인들에서 BMEM으로 전송된다. 위에서 언급한 바와 같이, 대응하는 페치 유닛(예를 들어, 페치 유닛(702 또는 704))은 카운트 태그 메모리를 이용하여 판독 완료들을 추적하고 싱크 플래그 메모리의 업데이트를 수행한다.
[00107] 하나 이상의 트랜잭션들이 캐시 불가능한(non-cacheable) 것으로 표시될 수도 있으며 이들 트랜잭션들과 탐색 미스를 갖는 임의의 캐시 가능한 트랜잭션들 사이에서 선택하는 다른 라운드 로빈 채널 아비터(610)로 전송될 수도 있다. 이 채널 아비터에 의해 제공되는 승인은 OCI 인터페이스에 표시되는 가용 크레딧들에 기반한다.
[00108] 캐시가능한 것으로 마크된 트랜잭션은 판독 바이패스 버퍼에 존재하는 메모리(105) 어드레스들을 탐색하기 위해 별개의 FIFO 큐 또는 테이블로 전송될 수도 있다. 시스템(100)은 트랜잭션의 최하위 32B에 대한 메모리(105) 어드레스들에 대해 병렬로 예를 들어, 512개의 엔트리들을 탐색함으로써 어드레스 매칭을 수행한다. 일부 구현예들에서, 시스템(100)은 모든 4개의 제어기들에 걸쳐 공유되는 바이패스 버퍼에 존재하는 메모리(105) 어드레스들의 리스트의 자체 복사본을 각각 갖는 4 채널 OCI 제어기들을 포함할 수 있다. 바이패스 버퍼로의 업데이트는 어드레스들의 모든 복사본들의 업데이트를 초래할 수 있다. 어드레스들의 리스트에서 히트의 경우에, 트랜잭션은 판독 데이터에 액세스하기 위해 다른 3개의 제어기들로부터의 트랜잭션들과 중재해야 한다.
[00109] 일부 구현예들에서, 이 트랜잭션에 할당된 OCI ID가 해제되고 트랜잭션이 판독 데이터 룩업을 위해 큐잉된다. 이 바이패스 버퍼로부터의 판독 데이터가 요청이 발생한 페치 유닛으로 다시 전송하기 위해 큐잉되며, 이는 이 트랜잭션에 초기에 할당된 OCI ID의 최상위 비트로부터 취출될 수도 있다. 이러한 판독 데이터의 전송은 OCI 인터페이스(500)로부터의 데이터와 바이패스 버퍼로부터의 데이터 사이에서 선택하는 라운드 로빈 아비터를 통해 수행된다.
[00110] 본 명세서에서 설명된 기술요지 및 기능적 동작들의 실시형태들은 디지털 전자 회로부로, 유형으로-구현된 컴퓨터 소프트웨어 또는 펌웨어로, 본 명세서 및 이들의 구조적 균등물들에 개시된 구조들을 포함하여, 컴퓨터 하드웨어로, 또는 이들 중 하나 이상의 조합들로 구현될 수 있다. 본 명세서에서 설명된 기술요지의 실시형태들은 하나 이상의 컴퓨터 프로그램들, 즉, 데이터 프로세싱 장치에 의한 실행을 위해, 또는 데이터 프로세싱 장치의 동작을 제어하기 위해 유형의 비일시성 프로그램 캐리어 상에 인코딩된 컴퓨터 프로그램 명령들의 하나 이상의 모듈들로서 구현될 수 있다.
[00111] 대안적으로 또는 추가적으로, 프로그램 명령들은 인공적으로 발생된 전파 신호, 예를 들어, 데이터 프로세싱 장치에 의한 실행을 위해 적합한 수신기 장치로의 송신을 위한 정보를 인코딩하기 위해 발생되는 기계-발생된 전기, 광학, 또는 전자기 신호 상에 인코딩될 수 있다. 컴퓨터 저장 매체는 머신-판독가능 저장 디바이스, 머신-판독가능 저장 기판, 무작위 또는 직렬 액세스 메모리 디바이스, 또는 이들 중 하나 이상의 조합일 수 있다.
[00112] 용어 "컴퓨팅 시스템"은 일 예로서 프로그래밍가능 프로세서, 컴퓨터, 또는 다수의 프로세서들 또는 컴퓨터들을 포함하여, 데이터를 프로세싱하기 위한 모든 종류의 장치, 디바이스들, 및 머신들을 포괄한다. 본 장치는 특수 목적 로직 회로부, 예를 들어, FPGA(field programmable gate array) 또는 ASIC(application specific integrated circuit)를 포함할 수 있다. 본 장치는 또한 하드웨어에 추가하여, 해당 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드, 예를 들어, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 시스템, 가상 머신, 또는 이들 중 하나 이상의 조합을 구성하는 코드를 포함할 수 있다.
[00113] 컴퓨터 프로그램(또한, 프로그램, 소프트웨어, 소프트웨어 애플리케이션, 모듈, 소프트웨어 모듈, 스크립트, 또는 코드로 지칭되거나 또는 설명될 수도 있음)은 컴파일 또는 해석 언어들, 또는 선언적 또는 절차적 언어들을 포함하여, 임의 유형의 프로그래밍 언어로 기록될 수 있으며, 독립형 프로그램으로서, 또는 모듈, 컴포넌트, 서브루틴, 또는 컴퓨팅 환경에서 사용하기에 적합한 다른 유닛으로서를 포함하여, 임의의 형태로 배포될 수 있다.
[00114] 컴퓨터 프로그램은 파일 시스템의 파일에 대응할 수도 있지만 반드시 그럴 필요는 없다. 프로그램은 다른 프로그램들 또는 데이터, 예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트들을 보유하는 파일의 부분에, 해당 프로그램 전용 단일 파일에, 또는 다중 조정(coordinated) 파일들, 예를 들어, 하나 이상의 모듈들, 하위 프로그램들, 또는 코드의 부분들을 저장하는 파일들에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서 또는 하나의 사이트에 로케이트되거나 또는 다중 사이트들에 걸쳐 분배되어 통신 네트워크에 의해 상호 접속되는 다중 컴퓨터들 상에서 실행되도록 분배될 수 있다.
[00115] 본 명세서에서 설명된 프로세스들 및 로직 흐름들은 입력 데이터에 대해 동작하여 출력을 발생시킴으로써 기능들을 수행하기 위해 하나 이상의 컴퓨터 프로그램들을 실행하는 하나 이상의 프로그래밍가능 컴퓨터들에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한 특수 목적 로직 회로부, 예를 들어, FPGA(field programmable gate array), ASIC(application specific integrated circuit) 또는 GPGPU(General purpose graphics processing unit)에 의해 수행될 수 있으며, 장치는 또한 특수 목적 로직 회로부, 예를 들어, FPGA(field programmable gate array), ASIC(application specific integrated circuit), 또는 GPGPU(General purpose graphics processing unit)로서 구현될 수 있다.
[00116] 컴퓨터 프로그램의 실행에 적합한 컴퓨터들은 일반 또는 특수 목적 마이크로프로세서들 또는 둘 모두, 또는 임의의 다른 종류의 중앙 처리 유닛을 포함하며, 일 예로서 이들에 기반할 수 있다. 일반적으로, 중앙 프로세싱 유닛은 판독 전용 메모리 또는 랜덤-액세스 메모리 또는 양자로부터 명령들 및 데이터를 수신할 것이다. 컴퓨터의 일부 엘리먼트들은 명령들을 수행 또는 실행하는 중앙 프로세싱 유닛, 및 명령들 및 데이터를 저장하는 하나 이상의 메모리 디바이스들이다. 일반적으로, 컴퓨터는 또한 데이터를 저장하는 하나 이상의 대용량 저장 디바이스들, 예컨대, 자기, 광자기 디스크들, 또는 광 디스크들로부터 데이터를 수신하거나 이들로 데이터를 전송하거나, 둘 모두를 포함하거나, 또는 동작가능하게 커플링될 것이다. 그러나, 컴퓨터는 이러한 디바이스들을 가질 필요가 없다. 더욱이, 컴퓨터는 다른 디바이스, 예를 들어, 몇 개만 예를 들자면, 모바일 전화기, 개인 휴대정보 단말기(PDA), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, 위성 위치확인 시스템(GPS) 수신기, 또는 포터블 저장 디바이스, 예를 들어, 범용 시리얼 버스(USB) 플래시 드라이브에 내장될 수 있다.
[00117] 컴퓨터 프로그램 명령들 및 데이터를 저장하는데 적합한 컴퓨터 판독가능 매체들은 예로서, 예시적인 반도체 메모리 디바이스들, 예컨대, EPROM, EEPROM, 및 플래시 메모리 디바이스들; 자기 디스크들, 예컨대, 내부 하드 디스크들 또는 착탈식 디스크들; 광자기 디스크들; 및 CD ROM 및 DVD-ROM 디스크들을 포함하여, 모든 형태의 비휘발성 메모리, 매체들 및 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로부에 의해 보충되거나 또는 통합될 수 있다.
[00118] 사용자와의 상호작용을 제공하기 위해, 본 명세서에서 설명된 기술요지의 실시형태들은 사용자에게 정보를 디스플레이하기 위한 디스플레이 디바이스, 예를 들어, LCD(liquid crystal display) 모니터, 및 사용자가 컴퓨터에 입력을 제공할 수 있는 키보드 및 포인팅 디바이스, 예를 들어, 마우스 또는 트랙볼을 갖는 컴퓨터 상에 구현될 수 있다. 다른 종류의 디바이스들이 사용자와의 상호작용도 역시 제공하기 위해 사용될 수 있으며; 예를 들어, 사용자에게 제공되는 피드백은 임의 유형의 감각의 피드백, 예를 들어, 시각적 피드백, 청각의 피드백, 또는 촉각 피드백일 수 있으며; 사용자로부터의 입력은 음향, 음성, 또는 촉각 입력을 포함한, 임의의 형태로 수신될 수 있다. 게다가, 컴퓨터는 사용자에 의해 사용되는 디바이스로 문서들을 전송하고 이들로부터 문서들을 수신함으로써; 예를 들어, 웹 브라우저로부터 수신된 요청들에 응답하여 사용자의 클라이언트 디바이스 상에서 웹 페이지들을 웹 브라우저로 전송함으로써, 사용자와 상호작용할 수 있다.
[00119] 본 명세서에서 설명된 기술요지의 실시형태들은 백엔드 컴포넌트를 예를 들어, 데이터 서버로서 포함하거나, 또는 미들웨어 컴포넌트, 예를 들어, 애플리케이션 서버를 포함하거나, 또는 프론트 엔드 컴포넌트, 예를 들어, 사용자가 본 명세서에서 설명되는 기술요지의 구현예와 상호 작용할 수 있는 그래픽 사용자 인터페이스 또는 웹 브라우저를 갖는 클라이언트 컴퓨터를 포함하거나, 또는 하나 이상의 이러한 백엔드, 미들웨어, 또는 프론트 엔드 컴포넌트들의 임의의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 컴포넌트들은 디지털 데이터 통신의 임의의 형태 또는 매체, 예를 들어, 통신 네트워크에 의해 상호 접속될 수 있다. 통신 네트워크들의 예들은 근거리 네트워크("LAN") 및 광역 네트워크("WAN"), 예를 들어, 인터넷을 포함한다.
[00120] 컴퓨팅 시스템은 클라이언트들 및 서버들을 포함할 수 있다. 클라이언트 및 서버는 일반적으로 서로 원격일 수 있으며, 전형적으로 통신 네트워크를 통해 상호 작용한다. 클라이언트와 서버의 관계는 개개의 컴퓨터들 상에서 실행하고 서로에 대해 클라이언트-서버 관계를 갖는 컴퓨터 프로그램들 덕분에 발생한다.
[00121] 본 명세서가 다수의 특정의 구현 세부사항들을 포함하고 있지만, 이들은 임의의 발명 또는 청구될 수 있는 것의 범위에 대한 제한들이 아닌, 특정의 발명들의 특정의 실시형태들에 특정될 수도 있는 특징들의 설명들로서 해석되어야 한다. 별개의 실시형태들의 상황에서 본 명세서에서 설명되는 특정의 특징들은 또한 단일 실시형태에서 조합하여 구현될 수 있다. 반대로, 단일 실시형태의 상황에서 설명되는 다양한 특징들은 또한 다수의 실시형태들에서 개별적으로 또는 임의의 적합한 하위조합으로 구현될 수 있다. 더욱이, 특징들이 특정의 조합들로 동작하는 것으로 위에서 설명되고 설령 처음에 그렇게 주장되었을지라도, 청구된 조합으로부터의 하나 이상의 특징들은 일부 경우들에서 조합으로부터 제거될 수 있으며, 청구된 조합은 부조합 또는 부조합의 변형에 관한 것일 수도 있다.
[00122] 이와 유사하게, 동작들이 도면들에서 특정의 순서로 묘사되지만, 이는 바람직한 결과들을 달성하기 위해, 이러한 동작들이 특정의 도시된 순서로 또는 순차적인 순서로 수행되거나, 또는 모든 예시된 동작들이 수행되도록 요구하는 것으로 이해되어서는 안 된다. 특정의 상황들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수도 있다. 더욱이, 위에서 설명된 실시형태들에서 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시형태들에서 이러한 분리를 요구하는 것으로 이해되어서는 안 되며, 설명된 프로그램 컴포넌트들 및 시스템들이 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 또는 다수의 소프트웨어 제품들로 패키징될 수 있는 것으로 이해되어야 한다.
[00123] 기술요지의 특정의 실시형태들이 설명되었다. 다른 실시형태들은 다음 청구범위의 범위 내에 있다. 예를 들어, 청구범위에서 인용된 액션들은 상이한 순서로 수행될 수 있으며 바람직한 결과들을 여전히 달성한다. 일 예로서, 첨부 도면들에서 묘사된 프로세스들은 바람직한 결과들을 달성하기 위해, 반드시 특정의 도시된 순서, 또는 순차적인 순서를 요구하지는 않는다. 특정의 구현예들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수도 있다.

Claims (20)

  1. 머신-학습 계산들을 가속하도록 구성된 집적 회로로서,
    복수의 프로세서 코어들을 포함하며,
    각각의 프로세서 코어는,
    복수의 채널 제어기들;
    상기 복수의 채널 제어기들 각각을 시스템 메모리의 각각의 메모리 채널에 커플링하도록 구성된 인터페이스 제어기; 및
    상기 복수의 채널 제어기들 각각 내 개개의 페치 유닛을 포함하며,
    상기 개개의 페치 유닛은,
    i) 어드레싱 정보를 인코딩해 달라는 요청을 수신하도록;
    ii) 상기 어드레싱 정보에 기초하여, 상기 인터페이스 제어기를 이용하여 상기 시스템 메모리의 임의의 메모리 채널로부터 데이터를 획득하도록; 그리고
    iii) 임의의 메모리 채널로부터 획득된 데이터를 상기 페치 유닛을 포함하는 상기 채널 제어기를 통해서 상기 프로세서 코어의 벡터 메모리에 기록하도록 구성되는,
    집적 회로.
  2. 제1항에 있어서,
    상기 인터페이스 제어기는,
    인트라-메모리 OCI 노드를 제어하도록 동작 가능하며,
    상기 인트라-메모리 OCI 노드는,
    i) 상기 시스템 메모리의 임의의 메모리 채널을 따라 임의의 메모리 로케이션으로부터 데이터를 획득하기 위해 사용되는 복수의 판독 인터페이스들; 및
    ii) 상기 시스템 메모리의 임의의 메모리 채널을 따라 임의의 메모리 로케이션에 데이터를 기록하기 위해 사용되는 복수의 기록 인터페이스들을 포함하는, 집적 회로.
  3. 제2항에 있어서,
    상기 인트라-메모리 OCI 노드는,
    i) 상기 시스템 메모리의 임의의 메모리 로케이션으로부터 데이터를 획득하기 위해 또는 ii) 상기 시스템 메모리의 임의의 메모리 로케이션에 데이터를 기록하기 위해, 기존 OCI 트랜잭션의 중재 동안 유입하는 OCI 트랜잭션 요청들을 저장하도록 구성되는 선입선출(FIFO) 메모리 큐를 포함하는, 집적 회로.
  4. 제3항에 있어서,
    상기 인터페이스 제어기는,
    상기 어드레싱 정보를 인코딩해 달라는 상기 요청을 수신하도록;
    상기 어드레싱 정보 내 복수의 ID들에 기초하여 복수의 제어 신호들을 발생시키도록; 그리고
    상기 시스템 메모리의 메모리 로케이션에 저장된 데이터를 페치하기 위해 상기 복수의 제어 신호들을 상기 시스템 메모리의 임의의 메모리 채널에 제공하도록 구성되는, 집적 회로.
  5. 제4항에 있어서,
    상기 어드레싱 정보는 상기 인터페이스 제어기에서 수신된 하나 이상의 유입하는 OCI 트랜잭션 요청들로부터 도출되며;
    상기 시스템 메모리의 임의의 메모리 로케이션에 액세스하기 위한 적어도 하나의 기존 OCI 트랜잭션 요청은 상기 FIFO 메모리 큐에 이전에 저장된, 집적 회로.
  6. 제5항에 있어서,
    각각의 유입하는 OCI 트랜잭션 요청은 상기 시스템 메모리의 임의의 메모리 채널에 걸쳐 메모리 로케이션들의 임의의 세트에 대응하는 복수의 식별자(ID)들을 포함하는, 집적 회로.
  7. 제6항에 있어서,
    상기 OCI 인터페이스는 2개 이상의 어드레싱 모드들을 포함하며;
    상기 인터페이스 제어기는 상기 인터페이스 제어기의 상기 2개 이상의 어드레싱 모드들 사이에서 선택 가능하게 하는 제어 신호들을 발생시키도록 동작 가능한, 집적 회로.
  8. 제7항에 있어서,
    상기 2개 이상의 어드레싱 모드들의 제1 어드레싱 모드는 상기 시스템 메모리의 메모리 채널들에 대한 임베딩 테이블의 맵핑을 제한하는 채널-인터리브 모드인, 집적 회로.
  9. 제8항에 있어서,
    상기 2개 이상의 어드레싱 모드들의 제2 어드레싱 모드는 상기 시스템 메모리의 메모리 채널들에 대한 상기 임베딩 테이블의 맵핑을 확장하는 스택-인터리브 모드인, 집적 회로.
  10. 제7항에 있어서,
    각각의 OCI 트랜잭션 요청은,
    상기 페치 유닛에 의해 수신되도록; 그리고
    상기 인터페이스 제어기에 의해, 상기 OCI 트랜잭션 요청에 표시된 임의의 메모리 로케이션에 액세스하는 것을 개시하도록 프로세싱되는, 집적 회로.
  11. 제10항에 있어서,
    상기 시스템 메모리에 저장된 데이터에 액세스하기 위한 각각의 OCI 트랜잭션 요청은,
    i) 상기 액세스 중인 데이터에 대응하는 32 바이트 길이;
    ii) 시스템 메모리 내 임의의 메모리 로케이션에 특정한 소스 어드레스를 나타내는 TokenID; 및
    iii) 상기 벡터 메모리의 메모리 로케이션의 목적지 어드레스를 인코딩하는, 집적 회로.
  12. 제8항에 있어서,
    상기 임베딩 테이블은 전체 시스템 메모리의 메모리 채널들에 걸쳐 할당되는 다수의 데이터 샤드들로서 분할되며;
    상기 인터페이스 제어기는 상기 복수의 채널 제어기들 중 임의의 하나를 이용하여 상기 임베딩 테이블의 임의의 부분에 액세스하기 위해 스택-인터리브 모드를 선택하는, 집적 회로.
  13. 제1항에 있어서,
    상기 복수의 채널 제어기들 각각 내 개개의 플러시 유닛을 더 포함하며,
    상기 개개의 플러시 유닛은,
    i) 어드레싱 정보를 인코딩해 달라는 요청을 수신하도록; 그리고
    ii) 상기 어드레싱 정보에 기초하여, 상기 인터페이스 제어기를 이용하여 데이터를 상기 벡터 메모리 내 소스 어드레스로부터 상기 시스템 메모리의 임의의 메모리 로케이션에 기록하도록 구성되는, 집적 회로.
  14. 제13항에 있어서,
    상기 머신-학습 계산들은 신경망 계층을 통해 신경망 입력들을 프로세싱하도록 수행되며;
    상기 플러시 유닛은 상기 인터페이스 제어기를 이용하여 상기 신경망 계층에 대한 파라미터들을 상기 시스템 메모리의 임의의 메모리 로케이션에 기록하기 위해 사용되는, 집적 회로.
  15. 머신-학습 계산들을 가속하도록 구성된 집적 회로를 이용하여 수행되는 컴퓨터-구현 방법으로서,
    상기 집적 회로는 시스템 메모리, 및 복수의 채널 제어기들을 포함하는 프로세서 코어를 포함하며,
    상기 방법은,
    복수의 요청들 ―상기 복수의 요청들 각각은 어드레싱 정보를 인코딩함― 을 수신하는 단계;
    상기 복수의 요청들의 제1 요청에 대해:
    상기 제1 요청의 어드레싱 정보에 기초하여, 상기 시스템 메모리의 임의의 메모리 채널의 임의의 메모리 로케이션을 식별하는 단계;
    상기 복수의 채널 제어기들 각각을 상기 시스템 메모리의 각각의 메모리 채널에 커플링하는 온칩 상호접속(OCI) 인터페이스를 이용하여 상기 시스템 메모리의 임의의 메모리 로케이션 중의 메모리 로케이션으로부터 데이터를 획득하는 단계; 및
    상기 제1 요청의 상기 어드레싱 정보에 기초하여, 상기 메모리 로케이션으로부터 획득된 데이터를 상기 프로세서 코어의 벡터 메모리에 기록하는 단계를 포함하는,
    컴퓨터-구현 방법.
  16. 제15항에 있어서,
    상기 OCI 인터페이스는 복수의 판독 인터페이스들 및 복수의 기록 인터페이스들을 포함하는 인트라-메모리 OCI 노드를 포함하며;
    상기 방법은,
    인터페이스 제어기에 의해 발생된 제어 신호들에 기초하여, 상기 복수의 판독 인터페이스들을 이용하여 상기 시스템 메모리의 임의의 메모리 채널을 따라 임의의 메모리 로케이션으로부터 데이터를 획득하는 단계; 및
    상기 인터페이스 제어기에 의해 발생된 제어 신호들에 기초하여, 상기 복수의 기록 인터페이스들을 이용하여 상기 시스템 메모리의 임의의 메모리 채널을 따라 임의의 메모리 로케이션에 데이터를 기록하는 단계를 더 포함하는, 컴퓨터-구현 방법.
  17. 제16항에 있어서,
    상기 인트라-메모리 OCI 노드는 선입선출(FIFO) 메모리 큐를 포함하며,
    상기 방법은,
    i) 상기 시스템 메모리의 임의의 메모리 로케이션으로부터 데이터를 획득하기 위해 또는 ii) 상기 시스템 메모리의 임의의 메모리 로케이션에 데이터를 기록하기 위해, 기존 OCI 트랜잭션의 중재 동안 유입하는 OCI 트랜잭션 요청들을 상기 FIFO 메모리 큐에 저장하는 단계를 포함하는, 컴퓨터-구현 방법.
  18. 제17항에 있어서,
    상기 인터페이스 제어기에 의해, 상기 어드레싱 정보를 인코딩해 달라는 요청을 수신하는 단계;
    상기 인터페이스 제어기에 의해, 상기 어드레싱 정보 내 복수의 ID들에 기초하여 복수의 제어 신호들을 발생시키는 단계; 및
    상기 인터페이스 제어기에 의해, 상기 시스템 메모리의 메모리 로케이션에 저장된 데이터를 페치하기 위해, 상기 복수의 제어 신호들을 상기 시스템 메모리의 임의의 메모리 채널에 제공하는 단계를 더 포함하는, 컴퓨터-구현 방법.
  19. 제18항에 있어서,
    상기 어드레싱 정보는 상기 인터페이스 제어기에서 수신된 하나 이상의 유입하는 OCI 트랜잭션 요청들로부터 도출되며;
    상기 시스템 메모리의 임의의 메모리 로케이션에 액세스하기 위한 적어도 하나의 기존 OCI 트랜잭션 요청은 상기 FIFO 메모리 큐에 이전에 저장된, 컴퓨터-구현 방법.
  20. 제19항에 있어서,
    각각의 유입하는 OCI 트랜잭션 요청은 상기 시스템 메모리의 임의의 메모리 채널에 걸쳐 메모리 로케이션들의 임의의 세트에 대응하는 복수의 식별자(ID)들을 포함하는, 컴퓨터-구현 방법.
KR1020237012453A 2021-03-29 2022-03-29 메모리 채널 제어기들에 대한 온칩 상호접속 KR20230062651A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202163167593P 2021-03-29 2021-03-29
US63/167,593 2021-03-29
PCT/US2022/022401 WO2022212415A1 (en) 2021-03-29 2022-03-29 On-chip interconnect for memory channel controllers

Publications (1)

Publication Number Publication Date
KR20230062651A true KR20230062651A (ko) 2023-05-09

Family

ID=81581256

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237012453A KR20230062651A (ko) 2021-03-29 2022-03-29 메모리 채널 제어기들에 대한 온칩 상호접속

Country Status (6)

Country Link
EP (1) EP4315089A1 (ko)
JP (1) JP2024512843A (ko)
KR (1) KR20230062651A (ko)
CN (1) CN117015767A (ko)
TW (1) TW202238368A (ko)
WO (1) WO2022212415A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI826216B (zh) * 2022-12-29 2023-12-11 瑞昱半導體股份有限公司 記憶體控制系統與記憶體控制方法
CN118036098A (zh) * 2024-04-11 2024-05-14 北京智芯微电子科技有限公司 缓冲存储器、芯片、缓存访问控制方法、装置和设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6751698B1 (en) * 1999-09-29 2004-06-15 Silicon Graphics, Inc. Multiprocessor node controller circuit and method
EP3550440A1 (en) * 2014-05-29 2019-10-09 Altera Corporation An accelerator architecture on a programmable platform

Also Published As

Publication number Publication date
WO2022212415A1 (en) 2022-10-06
WO2022212415A9 (en) 2023-08-10
TW202238368A (zh) 2022-10-01
EP4315089A1 (en) 2024-02-07
JP2024512843A (ja) 2024-03-21
US20220309011A1 (en) 2022-09-29
CN117015767A (zh) 2023-11-07

Similar Documents

Publication Publication Date Title
US11487698B2 (en) Parameter server and method for sharing distributed deep learning parameter using the same
US11222258B2 (en) Load balancing for memory channel controllers
JP6356675B2 (ja) 集約/グループ化動作:ハッシュテーブル法のハードウェア実装
KR20230062651A (ko) 메모리 채널 제어기들에 대한 온칩 상호접속
CN107844267B (zh) 缓冲区分配和存储器管理
US11928580B2 (en) Interleaving memory requests to accelerate memory accesses
JP7205033B2 (ja) キャッシュの割当方法と装置、記憶媒体、電子装置
US20130067169A1 (en) Dynamic cache queue allocation based on destination availability
US8566532B2 (en) Management of multipurpose command queues in a multilevel cache hierarchy
CN111684430A (zh) 支持同一信道上对不统一等待时间的存储器类型的响应
US11410032B2 (en) Word2VEC processing system
US11061676B2 (en) Scatter gather using key-value store
Guo et al. Software-hardware co-design of heterogeneous SmartNIC system for recommendation models inference and training
US12007913B2 (en) On-chip interconnect for memory channel controllers
KR101862799B1 (ko) 메모리 컨트롤러 및 메모리 컨트롤 방법
KR100328726B1 (ko) 메모리 엑세스 시스템 및 그 제어방법
US7120776B2 (en) Method and apparatus for efficient runtime memory access in a database
WO2023151216A1 (zh) 图数据处理的方法和芯片
US11281612B2 (en) Switch-based inter-device notational data movement system
CN118051470A (zh) 用于操作计算装置的方法和存储装置
CN118012788A (zh) 数据处理器、数据处理方法、电子设备和存储介质
CN117973558A (zh) 面向Serverless机器学习模型训练的动态可伸缩数据共享系统
Kabir A self-managed cloud cache for accelerating data intensive applications
Beri Unicorn: a bulk synchronous programming model, framework and runtime for hybrid CPU-GPU clusters
WO2017087001A1 (en) Distributed data shuffling