KR20240025019A - 니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공 - Google Patents

니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공 Download PDF

Info

Publication number
KR20240025019A
KR20240025019A KR1020247003215A KR20247003215A KR20240025019A KR 20240025019 A KR20240025019 A KR 20240025019A KR 1020247003215 A KR1020247003215 A KR 1020247003215A KR 20247003215 A KR20247003215 A KR 20247003215A KR 20240025019 A KR20240025019 A KR 20240025019A
Authority
KR
South Korea
Prior art keywords
memory
operations
sequential operations
near memory
atomic operation
Prior art date
Application number
KR1020247003215A
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 KR20240025019A publication Critical patent/KR20240025019A/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/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7821Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Advance Control (AREA)

Abstract

니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하는 것이 개시된다. 구현예에서, 복합 원자 연산은 니어 메모리 명령어 저장소에 저장된 순차적 연산들의 세트로 분해된다. 메모리 제어기는 상기 복합 원자 연산을 발행하라는 요청을 호스트 실행 엔진으로부터 수신하고, 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시한다. 상기 복합 원자 연산은 사용자 정의 복합 원자 연산일 수 있다.

Description

니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공
컴퓨팅 시스템들은 보통, 명령어들을 검색 및 실행하고 실행된 명령어들의 결과들을 적합한 위치에 저장할 수 있는 다수의 프로세싱 자원들(예를 들어, 하나 이상의 프로세서)을 포함한다. 프로세싱 자원(예를 들어, 중앙 프로세싱 유닛(CPU) 또는 그래픽 프로세싱 유닛(GPU))은 예를 들어, 데이터에 대한 산술 연산들을 수행함으로써 명령어들을 실행하기 위해 사용될 수 있는, 산술 논리 유닛(arithmetic logic unit, ALU) 회로부, 부동 소수점 유닛(floating point unit, FPU) 회로부, 및/또는 조합 논리 블록과 같은 다수의 기능 유닛들을 포함할 수 있다. 예를 들어, 기능 유닛 회로부는 피연산자들에 대한 덧셈, 뺄셈, 곱셈, 및/또는 나눗셈과 같은 산술 연산들을 수행하기 위해 사용될 수 있다. 통상적으로, 프로세싱 자원들(예를 들어, 프로세서 및/또는 연관된 기능 유닛 회로부)은 메모리 디바이스 외부에 있을 수 있고, 명령어들의 세트를 실행하기 위해 프로세싱 자원들과 메모리 디바이스 사이의 버스 또는 인터커넥트를 통해 데이터가 액세스된다. 메모리 디바이스에서 데이터를 페칭 또는 저장하기 위한 액세스량을 감소시키기 위해, 컴퓨팅 시스템들은 프로세싱 자원 또는 프로세싱 자원들의 그룹에 의한 사용을 위해 최근에 액세스 또는 수정된 데이터를 일시적으로 저장하는 캐시 계층 구조(cache hierarchy)를 채용할 수 있다. 하지만, 프로세싱 성능은 또한, 메모리 내부에 그리고/또는 메모리 부근에 프로세싱 자원들이 구현되는 메모리 기반 실행 디바이스로 특정 연산들을 오프로딩하여서, 데이터 프로세싱이 데이터를 프로세싱 자원에 더 가까이 가져오기보다는 데이터를 저장한 메모리 위치에 더 가까이에서 수행되도록 함으로써 개선될 수 있다. 니어 메모리(near-memory) 또는 인 메모리(in-memory) 컴퓨트 디바이스는 외부 통신(즉, 호스트에서 메모리 디바이스로의 통신)을 감소시킴으로써 시간을 절감할 수 있고, 또한 전력을 보전할 수 있다.
도 1은 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 원자성(atomicity)을 제공하기 위한 예시적인 시스템의 블록도를 제시한다.
도 2는 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 원자성을 제공하기 위한 다른 예시적인 시스템의 블록도를 제시한다.
도 3은 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 원자성을 제공하기 위한 다른 예시적인 시스템의 블록도를 제시한다.
도 4는 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 원자성을 제공하는 다른 예시적인 방법을 나타내는 흐름도를 제시한다.
도 5는 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 원자성을 제공하는 다른 예시적인 방법을 나타내는 흐름도를 제시한다.
도 6은 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 원자성을 제공하는 다른 예시적인 방법을 나타내는 흐름도를 제시한다.
도 7은 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 원자성을 제공하는 다른 예시적인 방법을 나타내는 흐름도를 제시한다.
도 8은 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 원자성을 제공하는 다른 예시적인 방법을 나타내는 흐름도를 제시한다.
다수의 스레드들이 동일한 메모리 위치를 업데이트하는 것은 보통 스레드간 동기화를 필요로 하는 많은 애플리케이션 도메인들(그래프 프로세싱, 기계 학습 추천 시스템, 과학 시뮬레이션 등)에서의 공통적인 모티프이다. 다수의 병렬 스레드들로부터의 인 메모리 데이터 구조들에 대한 불규칙적인 업데이트들은 동일한 데이터 항목들에 대한 충돌하는 동시 업데이트들로 인한 부정확한 결과들을 피하기 위한 기법들을 필요로 한다. 이러한 업데이트들에 대한 정확성을 보장하기 위해 소프트웨어 기반 기법들이 사용될 수 있지만, 이와 같은 소프트웨어 기반 솔루션은 높은 오버헤드를 초래한다. 또한, 하드웨어에서의 원자 연산들에 대한 지원은 통상적으로 동기화 프리미티브(synchronization primitive)(예를 들어, 로크(lock))로 제한되고, 벌크 데이터에 대한 사용자 정의 또는 복합 원자 연산들의 원자 애플리케이션으로 확장되지 않는다.
위에서 언급된 바와 같이, 동시 업데이트들에 대한 정확성을 제공하기 위해 소프트웨어 솔루션들이 사용될 수 있다. 예를 들어, 소프트웨어는 스레드들 간의 명시적 동기화(예를 들어, 로크를 획득하는 것)를 제공하도록 사용될 수 있다. 그러나, 이는 동기화 연산 자체의 오버헤드(예를 들어, 로크를 획득하고 해제하는 것)뿐만 아니라, 많은 데이터 요소들이 통상적으로 세분화된(fine-grained) 데이터 구조들에서의 단일 동기화 변수를 통해 보호되므로 과동기화(over-synchronization)를 발생시킨다. 소프트웨어는 불규칙한 업데이트들의 스트림을 이들이 영향을 미치는 데이터 항목들의 인덱스들에 의해 정렬하도록 또한 사용될 수 있다. 정렬되면, 동일한 데이터 요소에 대한 다수의 업데이트들이 (정렬된 리스트에서 인접해 있음에 따라) 검출되고, 프로세싱된다. 그러나, 이는 보통 관심 애플리케이션들에서 대량의 데이터인, 업데이트들의 스트림을 정렬하는 오버헤드를 초래한다. 소프트웨어는 주어진 데이터 요소에 대한 모든 업데이트들이 하나의 스레드에 의해 수행되도록 리던던시 컴퓨테이션을 수행하도록 또한 사용될 수 있다(이에 의해 동기화의 필요성을 피함). 그러나, 이는 컴퓨테이션의 수를 증가시키고, 모든 알고리즘이 이 접근법에 적합하지는 않다. 정확성을 제공하기 위해 사용될 수 있는 다른 기법은 로크 없는 데이터 구조이다. 이는 명시적 동기화에 대한 필요성을 피하지만, 소프트웨어 복잡성을 크게 증가시키고, 동기화 오버헤드를 제외하고는 기존의 대응물보다 느릴 수 있으며, 모든 경우에 적용가능한 것은 아니다.
또한, 메모리 내의 단순 원자 연산들(예를 들어, 원자-덧셈)이 이용가능해지는 경우, 이와 같은 연산들은 산술 연산들의 시퀀스를 완료해야 하는 복합 사용자 정의 원자 연산 능력이 부족하다. 예를 들어, 원자-덧셈(또는 '페치-및-덧셈(fetch-and-add)') 연산은 메모리 내의 단일 위치로부터 값을 판독하는 것, 판독 값에 단일 피연산자 값을 더하는 것, 및 결과를 메모리 내의 동일한 위치에 저장하는 것으로 제한된다.
본 개시에 따른 구현예들은 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하는 것에 관한 것이다. 구현예들은 메모리 제어기가 명시적 스레드 레벨 동기화의 어려움과 오버헤드를 피하기 위해 니어 메모리 또는 인 메모리 컴퓨트 유닛들을 이용하여 사용자 정의 복합 연산들을 원자적으로 실행할 수 있게 하는 메커니즘들을 제공한다. 구현예들은 소프트웨어 동기화 및 다른 소프트웨어 기법들의 오버헤드 없이 벌크 데이터에 사용자 정의 복합 원자 연산들을 적용하는 유연성을 또한 제공한다. 구현예들은 임의적인(arbitrary) 원자 연산들을 가능하게 하는 사용자 프로그램가능성을 또한 지원한다. 특히, 구현예들은 메모리 제어기들과 같은 세밀한 비순서형 스케줄러들의 맥락에서 원자성에 대한 필요성을 해결한다.
구현예는 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하는 방법으로서, 순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하는 단계 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산(component operation)들임 ― 를 포함하는, 방법에 관한 것이다. 본 방법은 복합 원자 연산을 발행하라는 요청을 수신하는 단계를 또한 포함한다. 본 방법은 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계를 또한 포함한다. 일부 구현예들에서, 본 방법은 상기 복합 원자 연산에 대응하는 상기 순차적 연산들의 세트를 저장하라는 요청을 수신하는 단계를 포함하며, 상기 복합 원자 연산은 사용자 정의 복합 원자 연산인 것이다. 이러한 구현예들 중 일부에서, 상기 사용자 정의 복합 원자 연산에 대한 상기 순차적 연산들의 세트를 저장하라는 요청은 호스트 시스템 소프트웨어 또는 호스트 애플리케이션으로부터 애플리케이션 프로그래밍 인터페이스(application programming interface, API) 호출을 통해 수신된다. 일부 경우들에서, 순차적 연산들의 세트는 하나 이상의 산술 연산을 포함한다. 일부 구현예들에서, 메모리 제어기가, 다른 메모리 액세스를 스케줄링하기 전에, 상기 순차적 연산들의 세트에서의 모든 연산들이 개시될 때까지 대기한다.
일부 구현예들에서, 순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하는 단계 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 는 복수의 복합 원자 연산들에 제각기 대응하는 복수의 순차적 연산 세트들을 저장하는 단계, 및 특정 복합 원자 연산을 상기 니어 메모리 명령어 저장소에서의 대응하는 순차적 연산 세트의 위치에 매핑하는 테이블을 저장하는 단계를 포함한다.
일부 구현예들에서, 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계는 메모리 제어기에 의해, 상기 니어 메모리 명령어 저장소로부터 상기 순차적 연산들의 세트에서의 각 연산을 판독하는 단계 ― 상기 니어 메모리 명령어 저장소는 상기 메모리 제어기에 결합됨 ― 를 포함한다. 이와 같은 구현예들은 상기 메모리 제어기에 의해, 각 연산을 상기 니어 메모리 컴퓨트 유닛에 발행하는 단계를 더 포함한다.
일부 구현예들에서, 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계는 메모리 제어기에 의해 메모리 디바이스로, 상기 순차적 연산들의 세트를 실행하라는 커맨드를 발행하는 단계 ― 상기 니어 메모리 명령어 저장소가 상기 메모리 디바이스에 결합됨 ― 를 포함한다. 이러한 구현예들 중 일부에서, 상기 메모리 제어기는 일련의 트리거들을 통해 상기 니어 메모리 컴퓨트 유닛 상의 상기 성분 연산들의 실행을 오케스트레이팅한다. 일부 구현예들에서, 상기 니어 메모리 명령어 저장소와 상기 니어 메모리 컴퓨트 유닛은 메모리 디바이스와 인터페이싱하는 메모리 제어기에 밀접하게 결합된다.
다른 구현예는 니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공하기 위한 컴퓨팅 디바이스에 관한 것이다. 컴퓨팅 디바이스는 순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하도록 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 구성된다. 컴퓨팅 디바이스는 복합 원자 연산을 발행하라는 요청을 수신하도록 또한 구성된다. 컴퓨팅 디바이스는 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하도록 또한 구성된다. 일부 구현예들에서, 컴퓨팅 디바이스는 상기 복합 원자 연산에 대응하는 상기 순차적 연산들의 세트를 저장하라는 요청을 수신하도록 또한 구성되며, 여기서 상기 복합 원자 연산은 사용자 정의 복합 원자 연산이다. 일례에서, 상기 사용자 정의 복합 원자 연산에 대한 상기 순차적 연산들의 세트를 저장하라는 요청은 호스트 시스템 소프트웨어 또는 호스트 애플리케이션으로부터 API 호출을 통해 수신된다.
일부 구현예들에서, 순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하는 단계 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 는 복수의 복합 원자 연산들에 제각기 대응하는 복수의 순차적 연산 세트들을 저장하는 단계, 및 특정 복합 원자 연산을 상기 니어 메모리 명령어 저장소에서의 대응하는 순차적 연산 세트의 위치에 매핑하는 테이블을 저장하는 단계를 포함한다.
일부 구현예들에서, 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계는 메모리 제어기에 의해, 상기 니어 메모리 명령어 저장소로부터 상기 순차적 연산들의 세트에서의 각 연산을 판독하는 단계 ― 상기 니어 메모리 명령어 저장소는 상기 메모리 제어기에 결합됨 ― 를 포함한다. 이와 같은 구현예들은 상기 메모리 제어기에 의해, 각 연산을 상기 니어 메모리 컴퓨트 유닛에 발행하는 단계를 더 포함한다.
일부 구현예들에서, 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계는 메모리 제어기에 의해 메모리 디바이스로, 상기 순차적 연산들의 세트를 실행하라는 커맨드를 발행하는 단계 ― 상기 니어 메모리 명령어 저장소가 상기 메모리 디바이스에 결합됨 ― 를 포함한다. 이러한 구현예들 중 일부에서, 상기 메모리 제어기는 일련의 트리거들을 통해 상기 니어 메모리 컴퓨트 유닛 상의 상기 성분 연산들의 실행을 오케스트레이팅한다. 일부 구현예들에서, 상기 니어 메모리 명령어 저장소와 상기 니어 메모리 컴퓨트 유닛은 메모리 디바이스와 인터페이싱하는 메모리 제어기에 밀접하게 결합된다.
또 다른 구현예는 니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공하기 위한 시스템에 관한 것이다. 본 시스템은 메모리 디바이스, 상기 메모리 디바이스에 결합된 니어 메모리 메모리 컴퓨트 유닛, 및 순차적 연산들의 세트를 저장하는 니어 메모리 명령어 저장소 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 를 포함한다. 본 시스템은 상기 복합 원자 연산을 발행하라는 요청을 수신하도록, 그리고 상기 저장된 순차적 연산들의 세트의 실행을 상기 니어 메모리 컴퓨트 유닛 상에서 개시하도록 구성된 메모리 제어기를 또한 포함한다.
니어 메모리 명령어 저장소가 메모리 제어기에 결합되는 일부 구현예들에서, 상기 저장된 순차적 연산들의 세트의 실행을 상기 니어 메모리 컴퓨트 유닛 상에서 개시하는 것은 메모리 제어기에 의해, 상기 니어 메모리 명령어 저장소로부터 상기 순차적 연산들의 세트에서의 각 연산을 판독하는 것, 그리고 상기 메모리 제어기에 의해, 각 연산을 상기 니어 메모리 컴퓨트 유닛에 발행하는 것을 포함한다.
니어 메모리 명령어 저장소가 메모리 디바이스에 결합되는 일부 구현예들에서, 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 것은 메모리 제어기에 의해 메모리 디바이스로, 상기 순차적 연산들의 세트를 실행하라는 커맨드를 발행하는 것을 포함한다. 이러한 구현예들 중 일부에서, 상기 메모리 제어기는 일련의 트리거들을 통해 상기 니어 메모리 컴퓨트 유닛 상의 상기 성분 연산들의 실행을 오케스트레이팅한다.
본 개시에 따른 구현예들은 도 1을 시작으로 더 상세히 설명될 것이다. 같은 참조 번호들은 본 명세서 및 도면들 전체에 걸쳐 같은 요소들을 지칭한다. 도 1은 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하기 위한 예시적인 시스템의 블록도(100)를 제시한다. 도 1의 예시적인 시스템(100)은 적어도 하나의 호스트 실행 엔진(102)을 포함하는 호스트 디바이스(130)(예를 들어, 시스템 온 칩(system-on-chip, SoC) 디바이스 또는 시스템 인 패키지(system-in-package, SiP) 디바이스)를 포함한다. 도시되지 않았지만, 호스트 디바이스(130)는 다수의 상이한 타입들의 호스트 실행 엔진들을 포함하는 다수의 호스트 실행 엔진들을 포함할 수 있다. 다양한 예들에서, 호스트 실행 엔진(102)은 중앙 프로세싱 유닛(CPU), 그래픽 프로세싱 유닛(GPU), 가속 프로세싱 유닛(APU), 애플리케이션 특정 프로세서, 구성가능 프로세서, 또는 다중 동시(multiple concurrent) 컴퓨테이션 시퀀스들을 지원할 수 있는 다른 컴퓨트 엔진이다. 일부 구현예들에서, 호스트 컴퓨트 엔진은 다수의 물리적 코어들 또는 다른 형태들의 독립적인 실행 유닛들을 포함한다. 호스트 디바이스(130)는 호스트 실행 엔진(102) 상에서 하나 이상의 애플리케이션을 호스팅한다. 호스팅된 애플리케이션들은 예를 들어 단일 스레드 애플리케이션들 또는 다중 스레드 애플리케이션들이어서, 호스트 실행 엔진(102)이 애플리케이션 또는 다중 동시 애플리케이션들의 다중 동시 스레드들을 실행하고/하거나 실행 엔진(102)이 동일한 애플리케이션 또는 다수의 애플리케이션들의 스레드들을 동시에 실행하게 된다.
시스템(100)은 호스트-메모리 인터페이스(180)(예를 들어, 버스 또는 인터커넥트)를 통해 메모리 디바이스(108)에 액세스하기 위해 호스트 실행 엔진들(102)에 의해 사용되는 적어도 하나의 메모리 제어기(106)를 또한 포함한다. 일부 예들에서, 메모리 제어기(106)는 다수의 호스트 실행 엔진들(102)에 의해 공유된다. 도 1의 예는 단일 메모리 제어기(106) 및 단일 메모리 디바이스(108)를 도시하지만, 시스템(100)은 하나 이상의 메모리 디바이스의 메모리 채널에 각각 대응하는 다수의 메모리 제어기들을 포함할 수 있다. 메모리 제어기(106)는 호스트 실행 엔진(102) 또는 시스템(100) 내의 다른 요청자들로부터 수신된 메모리 요청들을 버퍼링하기 위한 보류 중(pending) 요청 큐(116)를 포함한다. 예를 들어, 보류 중 요청 큐(116)는 하나의 호스팅 실행 엔진 상에서 실행되는 다수의 스레드들로부터 수신된 메모리 요청들 또는 다수의 호스트 실행 엔진들에서 제각기 실행되는 스레드들로부터 수신된 메모리 요청들을 홀딩한다. 단일 보류 중 요청 큐(116)가 도시되어 있지만, 일부 구현예들은 다수의 보류 중 요청 큐들을 포함한다. 메모리 제어기(106)는 보류 중 요청 큐(116)에서의 보류 중인 메모리 요청들을 서비스할 순서를 결정하고, 메모리 요청들을 메모리 디바이스(108)에 발행하는 스케줄러(118)를 또한 포함한다. 도 1에서 호스트 디바이스(130)의 구성요소인 것으로서 도시되어 있지만, 메모리 제어기(106)는 호스트 디바이스로부터 또한 분리될 수도 있다.
일부 예들에서, 메모리 디바이스(108)는 메모리 제어기(106)가 메모리 요청들을 발행하는 DRAM 디바이스이다. 다양한 예들에서, 메모리 디바이스(108)는 고대역폭 메모리(high bandwidth memory, HBM), 듀얼 인라인 메모리 모듈(dual in-line memory module, DIMM), 또는 이들의 칩 또는 다이이다. 도 1의 예에서, 메모리 디바이스(108)는 메모리 제어기(106)로부터 수신된 메모리 요청들을 서비스하는 적어도 하나의 DRAM 뱅크(128)를 포함한다.
일부 구현예들에서, 메모리 제어기(106)는 다이(예를 들어, 입력/출력 다이) 상에서 구현되고, 호스트 실행 엔진(102)은 하나 이상의 상이한 다이 상에서 구현된다. 예를 들어, 호스트 실행 엔진(102)은 프로세서 코어(예를 들어, CPU 코어 또는 GPU 코어) 또는 다른 독립적인 프로세싱 유닛에 각각 대응하는 다수의 다이들에 의해 구현될 수 있다. 일부 예들에서, 메모리 제어기(106)와 호스트 실행 엔진(102)을 포함하는 호스트 디바이스(130)가 동일한 칩 상에서(예를 들어, SoC 아키텍처 내에) 구현된다. 일부 예들에서, 메모리 디바이스(108), 메모리 제어기(106), 및 호스트 실행 엔진(102)을 포함하는 호스트 디바이스(130)가 동일한 칩 상에서(예를 들어, SoC 아키텍처 내에) 구현된다. 일부 예들에서, 메모리 디바이스(108), 메모리 제어기(106), 및 호스트 실행 엔진(102)을 포함하는 호스트 디바이스(130)가 동일한 패키지 내서(예를 들어, SiP 아키텍처 내에) 구현된다.
예시적인 시스템(100)은 메모리 제어기(106)에 밀접하게 결합되고 이와 인터페이싱되는 니어 메모리 명령어 저장소(132)를 또한 포함한다(즉, 호스트-메모리 인터페이스(180)의 호스트 측 상에 있음). 일부 예들에서, 니어 메모리 명령어 저장소(132)는 메모리 제어기(106)와 동일한 다이 또는 동일한 칩 상에 위치되는 버퍼 또는 다른 저장 디바이스이다. 니어 메모리 명령어 저장소(132)는 복합 원자 연산에 대응하는 순차적 연산들의 세트(134)를 저장하도록 구성된다. 즉, 순차적 연산들의 세트(134)는 복합 원자 연산의 성분 연산들이다. 순차적 연산들의 세트(134)(즉, 로드 및 저장과 같은 메모리 연산들뿐만 아니라 컴퓨테이션 연산들)는 순차적으로 수행될 때, 복합 원자 연산을 완료한다. 이러한 맥락에서, 복합 원자 연산은 복합 원자 연산에 의해 액세스되는 동일한 메모리 위치(들)에 대한 개입 액세스 없이 완료된 연산이다. 일부 예들에서, 니어 메모리 명령어 저장소(132)는 다수의 복합 원자 연산들에 대응하는 복수의 상이한 순차적 연산 세트들을 저장한다. 일부 구현예들에서, 특정 복합 원자 연산에 대응하는 특정 순차적 연산 세트는 순차적 연산 세트의 초기 연산의 니어 메모리 명령어 저장소(132) 내의 메모리 위치(예를 들어, 어드레스)에 의해 식별된다.
메모리 제어기(106)에 의해 수신될 때, 복합 원자 연산에 대한 요청은 보류 중 요청 큐(116)에 저장되고, 메모리 제어기(106)에 의해 구현되는 스케줄링 정책에 따라 서비스하기 위해 스케줄러(118)에 의해 후속해서 선택된다. 복합 원자 연산에 대한 요청은 호스트 실행 엔진 레지스터 값들 또는 메모리 어드레스들과 같은 피연산자들을 포함할 수 있다. 복합 원자 연산이 서비스를 위해 스케줄링되면, 대응하는 순차적 연산 세트(134)가 니어 메모리 명령어 저장소(132)로부터 판독되고, 서비스를 위해 보류 중 요청 큐로부터 임의의 다른 연산들을 선택하기 전에 메모리 제어기(106)에 의한 완료를 위해 오케스트레이팅된다(즉, 원자성 보존). 성분 연산들을 발행할 때, 메모리 제어기는 복합 원자 연산 요청에서 제공된 피연산자들에 기초하여 성분 연산에 피연산자들의 값들을 삽입한다.
니어 메모리 명령어 저장소(132)가 다수의 복합 원자 연산들에 대응하는 복수의 순차적 연산 세트들을 저장할 때, 메모리 제어기(106)에 보내지는 복합 원자 연산 요청들은 요청이 대응하는 복합 원자 연산의 표시를 포함한다. 일부 예들에서, 각 복합 원자 연산은 그 복합 원자 연산에 대응하는 순차적 연산들의 세트(134)에 대한 복합 원자 연산 식별자로서 사용될 수 있는 고유한 연산 부호(opcode)를 갖는다. 다른 예들에서, 하나의 연산 부호는 요청이 복합 원자 연산 요청이라는 것을 표시하기 위해 사용되는 한편, 복합 원자 연산 식별자는 특정 복합 원자 연산 및 대응하는 순차적 연산들의 세트를 식별하기 위한 인수(argument)로서 요청과 전달된다. 일례에서, 룩업 테이블이 복합 원자 연산 식별자를, 순차적 연산들의 세트의 제1 연산을 포함하는 니어 메모리 명령어 저장소(132) 내의 메모리 위치에 매핑한다.
일부 예들에서, 복합 원자 연산은 사용자 정의 원자 연산이다. 예를 들어, 사용자 정의 복합 원자 연산은 개발자에 의해(예를 들어, 커스텀 코드 시퀀스를 작성함으로써) 또는 애플리케이션 개발자에 의해 제공되는 원자 연산의 표현에 기초하여 소프트웨어 툴(예를 들어, 컴파일러 또는 어셈블러)에 의해 그 성분 연산들로 분해된다. 니어 메모리 명령어 저장소(132)는 예를 들어 시스템 시동, 애플리케이션 시동, 또는 애플리케이션 런타임 시에, 호스트 실행 엔진(102)에 의해 순차적 연산들의 세트(134)로 초기화된다. 일부 예들에서, 순차적 연산들의 세트(134)를 저장하는 것은 시스템 소프트웨어 구성요소에 의해 수행된다. 일례에서, 이 시스템 소프트웨어는 니어 메모리 명령어 저장소(132)의 영역을 애플리케이션의 시작 시에 해당 애플리케이션에 할당하고, 애플리케이션 코드가 니어 메모리 명령어 저장소(132)에 순차적 연산들의 세트(134)를 저장하는 것을 수행한다. 복합 원자 연산을 위한 순차적 연산들의 세트(134)를 니어 메모리 명령어 저장소에 기록하는 특정 연산은 메모리 매핑된 기록을 통해 또는 특정 애플리케이션 프로그래밍 인터페이스(application programming interface, API) 호출을 통해 이루어질 수 있다. 따라서, 호스트 실행 엔진(102)은 순차적 연산들의 세트(134)를 제공하기 위해 니어 메모리 명령어 저장소(132)와 인터페이싱한다. 그러나, 니어 메모리 명령어 저장소(132)는 니어 메모리 명령어 저장소(132)가 호스트 실행 엔진(102)의 구성요소가 아니라는 점에서 호스트 실행 엔진(102)에 의해 이용되는 다른 캐시 및 버퍼와 구별된다. 그보다, 니어 메모리 명령어 저장소(132)는 메모리 제어기와 밀접하게 연관된다(즉, 호스트 실행 엔진(102)과 메모리 제어기(106) 간의 인터페이스의 메모리 제어기 측 상에 있음).
도 1의 예시적인 시스템(100)에서, 메모리 디바이스(108)는 니어 메모리 컴퓨트 유닛(142)을 포함한다. 일부 예들에서, 니어 메모리 컴퓨트 유닛(142)은 기본적인 산술 연산들을 실행하고 로드 및 저장 명령어들을 수행하기 위한 산술 논리 유닛(ALU), 레지스터들, 제어 로직, 및 다른 구성요소들을 포함한다. 일부 경우들에서, 니어 메모리 컴퓨트 유닛(142)은 메모리 디바이스(108)의 구성요소인 프로세싱 인 메모리(processing-in-memory, PIM) 유닛이다. 도시되지 않았지만, 니어 메모리 컴퓨트 유닛(142)은 DRAM 뱅크(128) 내에서 또는 하나 이상의 메모리 코어 다이에 결합된 메모리 로직 다이에서 구현될 수 있다. 다른 예들에서, 도시되지 않았지만, 니어 메모리 컴퓨트 유닛(142)은 메모리 디바이스(108)와 별개이지만 이에 밀접하게 결합된 애플리케이션 특정 프로세서 또는 구성가능 프로세서와 같은 프로세싱 유닛이다.
메모리 제어기(106)가 메모리 디바이스(108)로의 발행을 위해 복합 원자 연산을 스케줄링할 때, 메모리 제어기는 니어 메모리 명령어 저장소(132)로부터 순차적 연산들의 세트(134)를 판독하고, 연산들을 커맨드들로서 니어 메모리 컴퓨트 유닛(142)에 발행한다. 니어 메모리 컴퓨트 유닛(142)은 메모리 제어기(106)로부터 순차적 연산들의 세트(134) 내의 연산들에 대한 커맨드들을 수신하고, 복합 원자 연산을 실행한다. 즉, 니어 메모리 컴퓨트 유닛(142)은 순차적 연산들의 세트(134)에 포함되지 않은 연산들에 의한 어떠한 개입 액세스도 없이 타겟 메모리 위치(들) 상의 순차적 연산들의 세트(134) 내의 각 연산(예를 들어, 로드, 저장, 덧셈, 곱셈)을 실행한다.
메모리 요청이 메모리 제어기(106)에 의해 수신될 때, 메모리 제어기(106)는 메모리 요청이 복합 원자 연산 요청인지 여부를 결정한다. 예를 들어, 특수 연산 부호 또는 커맨드가 메모리 요청이 복합 원자 연산 요청임을 표시한다. 요청이 복합 원자 연산에 대한 것이라면, 순차적 연산들의 세트(134)는 니어 메모리 명령어 저장소(132)로부터 페칭되고, 실행을 위해 니어 메모리 컴퓨트 유닛(142)에 발행된다. 니어 메모리 명령어 저장소(132)에서의 성분 연산들에 대한 시작점은 메모리 제어기(106)에 의해 수신된 복합 원자 연산 요청에서, 직접적으로(예를 들어, 니어 메모리 명령어 저장소(132)에서의 위치에 의해) 또는 간접적으로(예를 들어, 포함된 복합 원자 연산 식별자의 테이블 룩업을 통해) 표시된다. 복합 원자 연산의 완료는 원자 연산 요청에 인코딩된 성분 연산의 수, 니어 메모리 명령어 저장소(132)에 저장된 명령어 스트림에 임베딩된 마커를 통해, 니어 메모리 컴퓨트 유닛(142)으로부터의 확인 응답에 의해, 또는 다른 적합한 기법에 의해 표시된다. 예를 들어, 순차적 연산들의 세트(134)의 시작점을 식별하는 성분 연산의 수는 룩업 테이블에 포함될 수 있다.
추가 설명을 위해, 도 2은 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하기 위한 대안적인 예시적인 시스템의 블록도(200)를 제시한다. 예시적인 시스템(200)은 니어 메모리 명령어 저장소(232)가 메모리 제어기(106) 대신에 메모리 디바이스(108)에 밀접하게 결합되는 것(즉, 호스트-메모리 인터페이스(180)의 메모리 측 상에 있음)을 제외하고, 도 1의 예시적인 시스템(100)과 유사하다. 일부 예들에서, 도 2에서 도시된 바와 같이, 니어 메모리 명령어 저장소(232)는 메모리 디바이스(108)의 구성요소이다. 이러한 예들에서, 니어 메모리 명령어 저장소(232)는 메모리 디바이스의 버퍼 또는 다른 독립적인 저장 구성요소이거나, 또는 니어 메모리 명령어 저장소(232)로서 사용하기 위해 할당된 DRAM 저장소(예를 들어, DRAM 뱅크(128))의 일부분일 수 있다. 다른 예들에서, 니어 메모리 명령어 저장소(232)는 외부에 있지만, 메모리 디바이스(108)에 밀접하게 결합된다. 순차적 연산들의 세트(234)는 시스템 또는 애플리케이션 시동 시 또는 애플리케이션 런타임 시에, 위에서 설명된 바와 같이, 메모리 제어기(106)를 통해 호스트 실행 엔진(102)에 의해 니어 메모리 명령어 저장소(232)에 저장된다.
도 2의 예에서, 메모리 제어기(106)는 복합 원자 연산 요청을 수신하는 것에 응답하여 니어 메모리 명령어 저장소(232)로부터 순차적 연산들의 세트(234)를 판독할 필요가 없다. 그보다, 메모리 제어기(106)는 니어 메모리 컴퓨트 유닛(142) 상의 순차적 연산들의 세트(234)의 실행을 개시할 수 있다. 일부 구현예들에서, 메모리 제어기(106)는 복합 원자 연산의 이슈를 표시하는 단일 커맨드를 메모리 디바이스(108)에 발행하여서, 니어 메모리 컴퓨트 유닛(142)이 니어 메모리 명령 저장소(232)로부터 순차적 연산들의 세트를 판독하도록 한다. 이와 같은 경우들에서, 메모리 제어기(106)에 의해 직접적으로 또는 간접적으로(예를 들어, 복합 원자 연산 식별자의 테이블 룩업을 통해) 수신된 복합 원자 연산 요청은 순차적 연산들의 세트(234)의 (예를 들어, 클록 사이클들에서의) 지속시간의 표시 또는 복합 원자 연산을 위해 실행될 성분 연산의 수를 포함한다. 이러한 정보는 원자성을 보장하면서 후속 커맨드가 메모리 디바이스(108)에 보내질 수 있는 때를 결정하기 위해 메모리 제어기(106)에 의해 사용된다. 다른 구현예들에서, 복합 원자 연산 요청은 복합 원자 연산의 성분 연산들을 오케스트레이팅하기 위해 메모리 제어기(106)가 메모리 디바이스(108)에 보내야 하는 트리거들의 시퀀스를 포함한다. 하나의 이와 같은 구현예에서, 트리거들은 메모리 디바이스(108)에 의해 이와 연관된 니어 메모리 명령 저장소(232)에 저장된 순차적 연산들을 오케스트레이팅할 것으로 해석될 로드 및 저장 연산들(또는 이들의 변형들)의 시퀀스를 포함한다. 이와 같은 구현의 예는 특정 값을 통해 로드를 표시하고 대안적인 특정 값을 통해 저장하는 복합 원자 연산 요청의 일부로서 메모리 제어기(106)에 의해 수신되는 비트 벡터 또는 어레이이다. 이러한 로드 및 저장은 복합 원자 연산과 연관된 하나 이상의 메모리 어드레스와 호스트 실행 엔진(102)에 의해 발행될 수 있다(가장 간단한 경우는 이와 같은 모든 연산들이 복합 원자 연산 요청의 일부로서 메모리 제어기(106)에 보내진 단일 어드레스와 발행되는 것이다). 복합 원자 연산과 연관된 이와 같은 모든 트리거들은 원자성을 보장하기 위해 임의의 다른 보류 중인 요청들이 메모리 제어기에 의해 서비스되기 전에 메모리 디바이스(108)에 보내진다.
추가 설명을 위해, 도 3은 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하기 위한 대안적인 예시적인 시스템의 블록도(300)를 제시한다. 예시적인 시스템(300)은 니어 메모리 컴퓨트 유닛(342)이 메모리 디바이스(108) 대신에 메모리 제어기(106)에 밀접하게 결합되는 것(즉, 호스트-메모리 인터페이스(180)의 호스트 측 상에 있음)을 제외하고, 도 1의 예시적인 시스템(100)과 유사하다. 도 3의 예시적인 시스템(300)의 일부 구현예들에서, 메모리 제어기(106)는 도 1의 예시적인 시스템(100)을 참조하여 위에서 설명된 바와 같이, 복합 원자 연산에 대한 요청을 수신하는 것에 응답하여 니어 메모리 명령어 저장소(132)로부터 순차적 연산들의 세트(134) 내의 연산들을 판독하고, 각 성분 연산을 니어 메모리 컴퓨트 유닛(342)에 발행한다. 다른 구현예들에서, 메모리 제어기(106)는 니어 메모리 컴퓨트 유닛(342)이 니어 메모리 명령 저장소(132)로부터 순차적 연산들의 세트(134) 내의 연산들을 판독하도록 프롬프트하는 단일 커맨드를 니어 메모리 컴퓨트 유닛(342)에 발행한다. 예를 들어, 커맨드는 복합 원자 연산 식별자, 또는 니어 메모리 명령어 저장소(132)에서의 위치를 포함할 수 있다. 이러한 예시적인 시스템에서, 순차적 연산들의 세트(134)의 실행은 복합 원자 연산에 필요한 메모리 데이터에 액세스하기 위해 호스트-메모리 인터페이스(180)를 통해 메모리 디바이스(108)로부터의 판독 및 기록을 개시한다. 일부 예들에서, 커맨드가 연산의 수를 또한 표시하거나, 마커가 시퀀스의 끝을 표시하기 위해 순차적 연산들의 세트(134)에 포함된다. 일부 구현예들에서는, 니어 메모리 컴퓨트 유닛(342)이 메모리 제어기(106)가 원자성을 보존하면서 보류 중 요청 큐(116)에서의 다음 요청을 서비스하는 것으로 진행할 수 있도록 순차적 연산들의 세트(134)가 완료되었음을 메모리 제어기(106)에 시그널링한다. 이러한 예들에서, 니어 메모리 컴퓨트 유닛(342)이 호스트-메모리 인터페이스의 호스트 측 상에 위치되기 때문에, 이와 같은 시그널링은 메모리 인터페이스 상에 추가적인 트래픽을 일으키지 않는다.
추가 설명을 위해, 도 4는 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하는 예시적인 방법을 나타내는 흐름도를 제시한다. 본 방법은 순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하는 단계(402)를 포함하며, 상기 순차적 연산들은 복합 원자 연산의 성분 연산들이다. 일부 예들에서, 복합 원자 연산은 하나 이상의 메모리 위치에 대한 개입 액세스 없이 완료되어야 하는 하나 이상의 메모리 위치를 타겟으로 하는 순차적 연산들의 세트이다. 일부 예들에서, 순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하는 단계(402)는 복합 원자 연산에 대응하는 상기한 바와 같은 성분 연산들을 예를 들어, 도 1 및 도 3의 니어 메모리 명령어 저장소(132) 또는 도 3의 니어 메모리 명령어 저장소(232)와 같은 니어 메모리 명령어 저장소에 저장함으로써 수행된다. 일부 구현예들에서, 순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하는 단계(402)는 호스트 실행 엔진(예를 들어, 도 1 내지 도 3의 호스트 실행 엔진(102))이 순차적 연산들의 세트의 연산들을 니어 메모리 명령어 저장소에 기록함으로써 수행된다. 다른 구현예들에서, 순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하는 단계(402)는 메모리 제어기(예를 들어, 도 1 내지 도 3의 메모리 제어기(106))가 순차적 연산들의 세트의 연산을 니어 메모리 명령어 저장소에 기록함으로써 수행된다.
복합 원자 연산은 복합 원자 연산에 의해 액세스되는 메모리 위치들에 저장된 데이터의 개입 수정 없이 실행되는 일련의 성분 연산들을 포함한다. 예를 들어, 특정 메모리 위치에서의 데이터에 대해 복합 원자 연산을 실행하는 제1 스레드는 복합 원자 연산이 완료되기 전에 다른 스레드가 해당 메모리 위치에 액세스하지 않을 것이라는 것을 보장받는다. 하드웨어에 특유하지 않은(즉, 니어 메모리 컴퓨팅 구현, 메모리 벤더 등에 특유한) 복합 원자 연산들을 제공하고, 사용자 정의 복합 원자 연산들을 제공하기 위해, 복합 원자 연산의 성분 연산들은 니어 메모리 명령어 저장소에 저장된다. 이는 프로세서가, '페치-및-덧셈'과 같은 단순 원자 연산들보다 더 많은 성분 연산들을 포함할 수 있는 복합 원자 연산에 대한 단일 명령어를 디스패칭할 수 있게 한다.두 개의 메모리 위치들과 스칼라 값을 인자로서 취하는 '페치-페치-덧셈-및-곱셈(fetch-fetch-add-and-multiply)' 원자 연산인 사용자 정의 복합 연산의 비제한적인 예를 고려한다. 이 예시적인 복합 원자 연산에서, 제1 값이 제1 메모리 위치로부터 로딩되고 제2 값이 제2 메모리 위치로부터 로딩되고, 제2 값이 제1 값에 더해지고, 이 결과가 스칼라 값으로 곱해지며, 최종 결과가 제1 메모리 위치에 기록된다. 의사 코드로 작성된 예시적인 복합 원자 연산 FetchFetchAddMult (mem_location1, mem_location2, value1)는 다음의 성분 연산들의 시퀀스를 포함할 수 있다:
load reg1, [mem_location1] //mem_location1의 값을 reg1로 로딩함
load reg2, [mem_location2] //mem_location2의 값을 reg2로 로딩함
add reg1, reg1, reg2 //값들을 reg1 및 reg2에 더하고 결과를 reg1에 저장함
mult reg1, reg1, value1 //reg1 내의 값을 value1로 곱하고 결과를 reg1에 저장함
store mem_location1, reg1 //reg1 내의 값을 mem_location1에 저장함
다른 스레드들에 의한 mem_location1 및 mem_location2에 대한 개입 액세스 없이, 복합 원자 연산이 수행되고, 그 결과가 저장된다. 메모리 제어기는 복합 원자 연산의 모든 성분 연산들이 디스패칭될 때까지 다른 큐잉된 메모리 요청들을 디스패칭하지 않을 것이다.
도 4의 예시적인 방법은 복합 원자 연산을 발행하라는 요청을 수신하는 단계(404)를 포함한다. 일부 예들에서, 복합 원자 연산을 발행하라는 요청을 수신하는 단계(404)는 메모리 제어기(예를 들어, 도 1 내지 도 3의 메모리 제어기(106))가 복합 원자 연산에 대한 요청을 포함하는 메모리 요청을 수신함으로써 수행된다. 예를 들어, 메모리 요청은 호스트 실행 엔진(예를 들어, 도 1 내지 도 3의 호스트 실행 엔진(102))으로부터 수신된다. 일부 구현예들에서, 복합 원자 연산에 대한 요청은 요청에서, 특수 명령어 또는 연산 부호에 의해, 또는 플래그 또는 인자에 의해 표시된다. 일부 구현예들에서, 복합 원자 연산을 발행하라는 요청을 수신하는 단계(404)는 요청에서의 특수 명령어, 연산 부호, 플래그, 인수, 또는 메타데이터에 기초하여 요청이 복합 원자 연산 요청이라고 결정하는 단계를 포함한다. 일부 예들에서, 요청에 대한 메타데이터는 순차적 연산들의 세트에 얼마나 많은 성분 연산들이 포함되는지 또는 복합 원자 연산을 완료하는 데 필요한 시간의 지속시간을 표시한다. 일부 구현예들에서, 복합 원자 연산을 발행하라는 요청을 수신하는 단계(404)는 복합 원자 연산 요청이 아닌 메모리 요청들을 포함하는 다른 메모리 요청들과 함께 요청을 보류 중 요청 큐(예를 들어, 도 1 내지 도 3의 보류 중 요청 큐(116))에 삽입하는 단계를 또한 포함한다.
도 4의 예시적인 방법은 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계(406)를 또한 포함한다. 일부 예들에서, 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계(406)는 메모리 제어기(예를 들어, 도 1 내지 도 3의 메모리 제어기(106))의 스케줄러(예를 들어, 도 1 내지 도 3의 스케줄러(118))가 니어 메모리 컴퓨트 유닛(예를 들어, 도 1 및 도 2의 니어 메모리 컴퓨트 유닛(142) 또는 도 3의 니어 메모리 컴퓨트 유닛(342))로의 발행을 위해 복합 원자 연산 요청을 스케줄링함으로써 수행된다. 일부 구현예들에서, 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계(406)는 아래에서 더 상세히 설명될 바와 같이, 니어 메모리 명령어 저장소로부터 복합 원자 연산에 대응하는 순차적 연산들의 세트를 판독하고, 실행을 위해 각 연산을 니어 메모리 컴퓨트 유닛에 발행하는 단계를 포함한다. 다른 구현예들에서, 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계(406)는 아래에서 더 상세히 설명될 바와 같이, 니어 메모리 명령어 저장소로부터 순차적 연산들의 세트를 판독하고 명령어들을 실행하라는 커맨드를 니어 메모리 컴퓨트 유닛에 보내는 단계를 포함한다.
추가 설명을 위해, 도 5는 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하는 다른 예시적인 방법을 나타내는 흐름도를 제시한다. 도 4의 예와 같이, 도 5의 예시적인 방법은 순차적 연산들 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 의 세트를 니어 메모리 명령어 저장소에 저장하는 단계(402); 상기 복합 원자 연산을 발행하라는 요청을 수신하는 단계(404); 및 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계(406)를 포함한다.
도 5의 예시적인 방법은 상기 복합 원자 연산 ― 복합 원자 연산은 사용자 정의 복합 원자 연산임 ― 에 대응하는 상기 순차적 연산들의 세트를 저장하라는 요청을 수신하는 단계(502)를 또한 포함한다. 일부 예들에서, 복합 원자 연산 ― 복합 원자 연산은 사용자 정의 복합 원자 연산임 ― 에 대응하는 상기 순차적 연산들의 세트를 저장하라는 요청을 수신하는 단계(502)는 호스트 실행 엔진(예를 들어, 도 1 내지 도 3의 호스트 실행 엔진(102))이 사용자 정의 복합 원자 연산으로부터 분해된 순차적 연산들의 세트를 저장하라는 요청을 나타내는 명령어들을 실행함으로써 수행된다. 다양한 예들에서, 사용자 정의 복합 원자 연산의 성분 연산들로의 분해는 개발자에 의해(예를 들어, 커스텀 코드 시퀀스를 작성함으로써), 애플리케이션 개발자에 의해 제공되는 복합 원자 연산의 표현에 기초하여 소프트웨어 툴(예를 들어, 컴파일러 또는 어셈블러)에 의해, 또는 소스 코드의 일부 다른 주석을 통해 수행된다. 순차적 연산들의 세트를 저장하라는 요청은 시스템 시동 시, 애플리케이션 시동 시, 또는 애플리케이션 런타임 동안 수신된다. 일부 예들에서, 순차적 연산들의 세트를 저장하라는 요청은 시스템 소프트웨어 구성요소에 의해 발행된다. 일부 예들에서, 시스템 소프트웨어는 니어 메모리 명령어 저장소의 영역을 해당 애플리케이션의 시작 시에 애플리케이션에 할당하고, 순차적 연산들의 세트를 니어 메모리 명령어 저장소의 해당 영역에 저장하라는 요청은 사용자 애플리케이션 코드에 의해 발행된다. 다양한 구현예들에서는, 성분 연산들을 니어 메모리 명령어 저장소에 기록하라는 특정 요청이 메모리 매핑된 기록을 통해 또는 특정 API 호출을 통해 이루어진다.
추가 설명을 위해, 도 6은 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하는 다른 예시적인 방법을 나타내는 흐름도를 제시한다. 도 4의 예와 같이, 도 6의 예시적인 방법은 순차적 연산들 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 의 세트를 니어 메모리 명령어 저장소에 저장하는 단계(402); 상기 복합 원자 연산을 발행하라는 요청을 수신하는 단계(404); 및 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계(406)를 포함한다.
도 6의 예시적인 방법에서, 순차적 연산들 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 의 세트를 니어 메모리 명령어 저장소에 저장하는 단계(402)는 복수의 복합 원자 연산들에 제각기 대응하는 복수의 순차적 연산 세트들을 저장하는 단계(602)를 포함한다. 일부 예들에서, 복수의 복합 원자 연산들에 제각기 대응하는 복수의 순차적 연산 세트들을 저장하는 단계(602)는 특정 복합 원자 연산에 대해, 니어 메모리 명령어 저장소의 하나의 메모리 영역에 연속적으로, 순차적 연산들의 특정 세트를 저장하고, 상이한 복합 원자 연산에 대해, 니어 메모리 명령어 저장소의 다른 메모리 영역에 연속적으로, 순차적 연산들의 다른 특정 세트를 저장하는 등으로써 수행된다. 예를 들어, 복합 원자 연산의 순차적 연산들의 세트는 순차적 연산들의 세트 내의 제1 연산의 메모리 위치(예를 들어, 어드레스, 라인, 오프셋 등)에 의해 식별될 수 있다. 복합 원자 연산 1이 니어 메모리 명령어 저장소의 라인들 0-15를 점유하고, 복합 원자 연산 2가 니어 메모리 명령어 저장소의 라인들 16-31을 점유하는 등의 예를 고려한다. 이와 같은 예에서, 복합 원자 연산 1은 라인 0에 의해 식별될 수 있고, 복합 원자 연산 2는 라인 16에 의해 식별될 수 있다. 일부 예들에서, 마커들이 시퀀스의 끝을 표시하기 위해 사용된다. 상기한 예를 사용하여, 라인들 15 및 31이 순차적 연산들의 세트에서의 시퀀스의 끝을 표시하는 널 라인들일 수 있다.
도 6의 예시적인 방법에서, 순차적 연산들 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 의 세트를 니어 메모리 명령어 저장소에 저장하는 단계(402)는 특정 복합 원자 연산을 니어 메모리 명령어 저장소에서의 대응하는 순차적 연산들의 세트의 위치에 매핑하는 테이블을 저장하는 단계(604)를 또한 포함한다. 일부 예들에서, 특정 복합 원자 연산을 니어 메모리 명령어 저장소에서의 대응하는 순차적 연산들의 세트의 위치에 매핑하는 테이블을 저장하는 단계(604)는 복합 원자 연산 식별자를 대응하는 순차적 연산들의 세트를 식별하는 니어 메모리 명령어 저장소에서의 특정 위치에 매핑하는 룩업 테이블을 구현함으로써 수행된다. 상기한 예를 사용하여, 룩업 테이블은 복합 원자 연산 2를 니어 메모리 명령어 저장소의 라인 16에 매핑할 수 있다. 일부 구현예들에서, 룩업 테이블은 얼마나 많은 성분 연산들이 시퀀스에 포함되는지 또는 순차적 연산들이 니어 메모리 컴퓨트 유닛에 발행되기 시작하면 이들의 세트를 완료하는 데 필요한 지속시간을 표시한다.
추가 설명을 위해, 도 7은 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하는 다른 예시적인 방법을 나타내는 흐름도를 제시한다. 도 4의 예와 같이, 도 7의 예시적인 방법은 순차적 연산들 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 의 세트를 니어 메모리 명령어 저장소에 저장하는 단계(402); 상기 복합 원자 연산을 발행하라는 요청을 수신하는 단계(404); 및 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계(406)를 포함한다.
도 7의 예에서, 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계(406)는 메모리 제어기에 의해, 상기 니어 메모리 명령어 저장소 ― 상기 니어 메모리 명령어 저장소는 상기 메모리 제어기에 결합됨 ― 로부터 상기 순차적 연산들의 세트에서의 각 연산을 판독하는 단계(702)를 포함한다. 도 7의 예에서, 니어 메모리 명령어 저장소(예를 들어, 도 1 및 도 3의 니어 메모리 명령어 저장소(132)는 니어 메모리 명령어 저장소가 호스트-메모리 인터페이스(예를 들어, 도 1 내지 도 3의 호스트-메모리 인터페이스(180))의 메모리 제어기 측 상에서 구현된다는 점에서 메모리 제어기(예를 들어, 도 1 및 도 3의 메모리 제어기(106))에 결합된다. 일부 예들에서, 상기 니어 메모리 명령어 저장소 ― 상기 니어 메모리 명령어 저장소는 상기 메모리 제어기에 결합됨 ― 로부터 상기 순차적 연산들의 세트에서의 각 연산을 판독하는 단계(702)는 니어 메모리 명령어 저장소에 저장된 순차적 연산들의 세트에서의 초기 연산을 식별함으로써 수행된다. 니어 메모리 명령어 저장소가 다수의 복합 원자 연산들에 대응하는 다수의 순차적 연산 세트들을 포함하는 구현예들에서, 상기 니어 메모리 명령어 저장소로부터 상기 순차적 연산들의 세트에서의 각 연산을 판독하는 단계(702)는 복합 원자 연산 식별자를 식별하고, 복합 원자 연산 식별자들을 니어 메모리 명령어 저장소에서의 메모리 위치들에 매핑하는 테이블로부터 순차적 연산들의 세트에서의 초기 연산의 위치를 결정하는 단계를 포함한다.
순차적 연산들의 세트에서의 초기 연산이 식별되고 니어 메모리 컴퓨트 유닛 또는 니어 메모리 컴퓨트 유닛을 포함하는 메모리 디바이스에 발행되면, 순차적 연산들의 세트에서의 다음 연산은 위치를 일부 값(예를 들어, 라인 수, 오프셋, 어드레스 범위)만큼 증분시킴으로써 식별된다. 시퀀스에서의 각 연산의 위치를 반복적으로 결정하기 위해 메모리 제어기에 의해 카운터가 이용될 수 있다. 일부 예들에서, 상기 니어 메모리 명령어 저장소로부터 상기 순차적 연산들의 세트에서의 각 연산을 판독하는 단계(702)는 복합 원자 연산 식별자들을 복합 원자 연산들에 대응하는 순차적 연산들의 세트에 포함된 연산의 수에 매핑하는 테이블로부터 순차적 연산들의 세트에서의 연산의 수를 결정하는 단계를 또한 포함한다. 일부 구현예들에서, 순차적 연산들의 세트에서의 마커가 시퀀스의 끝을 표시한다.
도 7의 예에서, 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계(406)는 메모리 제어기에 의해, 각 연산을 니어 메모리 컴퓨트 유닛에 발행하는 단계(704)를 또한 포함한다. 일부 예들에서, 메모리 제어기에 의해, 각 연산을 니어 메모리 컴퓨트 유닛에 발행하는 단계(704)는 니어 메모리 명령어 저장소로부터 판독된 순차적 연산들의 세트 내의 하나 이상의 연산에 하나 이상의 피연산자를 삽입하는 단계를 포함한다. 예를 들어, 복합 원자 연산 요청은 호스트 실행 엔진에 의해 컴퓨트된 메모리 어드레스들 또는 레지스터 값들과 같은 피연산자 값들을 포함할 수 있다. 이러한 예에서, 이들 값들은 니어 메모리 명령어 저장소로부터 판독된 성분 연산의 피연산자들로서 삽입된다. 일부 구현예들에서, 복합 원자 연산 요청은 순차적 연산들의 세트로 매핑될 수 있는 피연산들의 벡터 또는 어레이를 포함한다. 일부 예들에서, 메모리 제어기에 의해, 각 연산을 니어 메모리 컴퓨트 유닛에 발행하는 단계(704)는 메모리 제어기(예를 들어, 도 1 및 도 3의 메모리 제어기(106))가 연산의 시퀀스에서의 각 성분 연산에 대한 커맨드를 니어 메모리 컴퓨트 유닛(예를 들어, 도 1의 니어 메모리 컴퓨트 유닛(142) 또는 도 3의 니어 메모리 컴퓨트 유닛(342))에 발행함으로써 수행된다.
상기 니어 메모리 명령어 저장소로부터 상기 순차적 연산들의 세트에서의 각 연산을 판독하는 단계(702) 및 메모리 제어기에 의해, 각 연산을 니어 메모리 컴퓨트 유닛에 발생하는 단계(704)는 (각 연산이 니어 메모리 명령어 저장소로부터 판독되고, 다음 연산이 판독되기 전에 니어 메모리 컴퓨트 유닛으로의 발행을 위해 스케줄링되는) 반복적인 프로세스로서 위에서 설명되었지만, 순차적 연산들이 뱃치(batch)들로 니어 메모리 명령어 저장소로부터 판독될 수 있다는 것이 또한 고려된다. 예를 들어, 메모리 제어기는 세트의 다수의 연산들 또는 심지어 모든 연산들을 메모리 제어기 내의 버퍼 또는 큐로 판독하고, 그 뱃치를 메모리 제어기로 판독한 후에, 그 뱃치에서의 각 연산에 대한 커맨드들을 발행하기 시작한다. 또한, 메모리 제어기는 복합 원자 연산에 대한 순차적 연산들의 세트에서의 모든 연산들이 니어 메모리 컴퓨트 유닛에 발행될 때까지, 이슈에 대한 보류 중 요청 큐로부터의 어떠한 다른 메모리 요청도 스케줄링하지 않으며, 이에 따라 복합 원자 연산의 원자성을 보존한다는 것을 이해할 것이다.
추가 설명을 위해, 도 8은 본 개시의 일부 구현예들에 따른 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하는 다른 예시적인 방법을 나타내는 흐름도를 제시한다. 도 4의 예와 같이, 도 8의 예시적인 방법은 순차적 연산들 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 의 세트를 니어 메모리 명령어 저장소에 저장하는 단계(402); 상기 복합 원자 연산을 발행하라는 요청을 수신하는 단계(404); 및 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계(406)를 포함한다.
도 8의 예에서, 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계(406)는 메모리 제어기에 의해, 니어 메모리 컴퓨트 유닛에 순차적 연산들의 세트를 실행하라는 커맨드를 메모리 디바이스 ― 메모리 디바이스와 니어 메모리 명령어 저장소가 연관됨 ― 에 발행하는 단계(802)를 포함한다. 도 8의 예에서, 니어 메모리 명령어 저장소(예를 들어, 도 2의 니어 메모리 명령어 저장소(232))는 니어 메모리 명령어 저장소가 호스트-메모리 인터페이스(예를 들어, 도 1 내지 도 3의 호스트-메모리 인터페이스(180))의 메모리 디바이스 측 상에서 구현된다는 점에서 메모리 디바이스(예를 들어, 도 1 및 도 3의 메모리 디바이스(108))와 연관된다. 일부 예들에서, 니어 메모리 컴퓨트 명령어 저장소는, 예를 들어, DRAM의 할당된 부분, 메모리 코어 다이 내의 버퍼, 하나 이상의 메모리 코어 다이에 결합된 메모리 로직 다이 내의 버퍼(예를 들어, 메모리 디바이스가 HBM 스택인 경우) 등으로서, 메모리 디바이스 내에 구현되거나 또는 메모리 디바이스에 결합된다. 일부 구현예들에서, 니어 메모리 컴퓨트 유닛은 메모리 디바이스의 PIM 유닛이다. 다른 예들에서, 니어 메모리 저장소는 예를 들어 메모리 가속기에서, 니어 메모리 컴퓨트 유닛에 결합된 버퍼로서 구현된다. 이러한 예들에서, 이와 같은 메모리 가속기는 메모리 다이(즉, 메모리 디바이스)와 동일한 칩 상에서 또는 동일한 패키지에서 구현되고, 직접 고속 인터페이스를 통해 메모리 다이에 결합된다.
도 8의 예에서, 메모리 제어기에 의해, 니어 메모리 컴퓨트 유닛에 순차적 연산들의 세트를 실행하라는 커맨드를 메모리 디바이스에 발행하는 단계(802)는 메모리 제어기(예를 들어, 도 2의 메모리 제어기(106))가 메모리 커맨드를 니어 메모리 컴퓨트 유닛(예를 들어, 도 2의 니어 메모리 컴퓨트 유닛(142)) 또는 니어 메모리 컴퓨트 유닛에 결합된 메모리 디바이스에 발행함으로써 수행될 수 있다. 일부 구현예들에서, 커맨드는 니어 메모리 명령 저장소에서 대응하는 순차적 연산들의 세트를 식별하기 위해 니어 메모리 컴퓨트 유닛에 의해 사용되는 복합 원자 연산 식별자를 제공한다. 이 테이블은 복합 원자 연산에 대해 실행될 성분 연산들의 지속시간 또는 수를 또한 표시할 수 있다. 일부 구현예들에서, 메모리 제어기에 의해 수신된 복합 원자 연산 요청은 복합 원자 연산에 대해 실행될 성분 연산들의 지속시간 또는 수를 직접적으로 표시한다. 성분 연산들의 실행 지속시간은 후속 메모리 연산을 스케줄링할 때를 결정하는 데 메모리 제어기에 의해 사용된다. 다른 메모리 액세스 커맨드를 발행하기 전에 이러한 지속시간을 대기함으로써, 복합 원자 연산에 대해 원자성이 보존된다. 일부 예들에서, 니어 메모리 컴퓨트 유닛에 발행된 커맨드는 복합 원자 연산에 의한 타겟이 되는 피연산자 값들 또는 메모리 어드레스들을 포함한다. 일례에서, 커맨드는 피연산자들 및/또는 메모리 어드레스들의 벡터 또는 어레이를 포함한다.
일부 예들에서, 상기 메모리 제어기는 일련의 트리거들을 통해 상기 니어 메모리 컴퓨트 유닛 상의 상기 성분 연산들의 실행을 오케스트레이팅한다. 예를 들어, 메모리 제어기는 성분 연산의 수에 대응하는 다수의 커맨드들을 발행하며, 여기서, 각 커맨드는 니어 메모리 컴퓨트 유닛이 니어 메모리 명령어 저장소에서의 다음 성분 연산을 실행하기 위한 트리거이다. 일례에서, 니어 메모리 컴퓨트 유닛은 복합 원자 연산 식별자를 포함하는 커맨드를 수신한다. 그런 다음, 니어 메모리 컴퓨트 유닛은 복합 원자 연산에 대응하는 니어 메모리 명령어 저장소의 영역에서의 순차적 연산들의 세트 중의 제1 연산의 위치를 식별한다. 트리거를 수신하는 것에 응답하여, 니어 메모리 컴퓨트 유닛은 니어 메모리 명령어 저장소의 영역에서의 위치를 증분시키고, 다음 성분 연산을 판독하며, 그 성분 연산을 실행한다.
전술한 바를 고려하여, 당업자는 본 개시의 여러 장점들을 이해할 것이다. 메모리 근처에서 사용자 정의 및/또는 복합 원자 컴퓨테이션들을 제공함으로써, 메모리에 대한 다중 동시 업데이트들이 명시적 동기화의 오버헤드 또는 대안적인 소프트웨어 기법들의 오버헤드 없이 수행될 수 있다. 사용자 정의가능한 복합 원자 연산이 컴퓨트 엔진으로부터 메모리 제어기로 보내지는 단일 요청으로 인코딩된다. 메모리 제어기는 복합 원자 연산에 대한 단일 요청을 수신하고, 복합 연산을 오케스트레이팅하기 위해 하나 이상의 인 메모리 또는 니어 메모리 컴퓨트 유닛(들)에 사용자 정의 커맨드들의 시퀀스를 생성할 수 있고, 원자적으로(즉, 시스템 내의 임의의 다른 요청자들로부터의 다른 개입 연산들 없이) 그렇게 할 수 있다.
구현예들은 시스템, 장치, 방법, 및/또는 논리 회로부일 수 있다. 본 개시의 컴퓨터 판독가능 프로그램 명령어는 어셈블러 명령어, 명령어 집합 아키텍처(ISA) 명령어, 기계 명령어, 기계 종속적 명령어, 마이크로코드, 펌웨어 명령어, 상태 설정 데이터, 또는 Smalltalk, C++ 등과 같은 객체 지향 프로그래밍 언어 및 "C" 프로그래밍 언어 또는 유사한 프로그래밍 언어와 같은 기존의 절차적 프로그래밍 언어를 포함하는 하나 이상의 프로그래밍 언어의 조합으로 작성된 소스 코드 또는 개체 코드 중 어느 하나일 수 있다. 일부 구현예들에서, 예를 들어 프로그램가능 논리 회로부, 현장 프로그램가능 게이트 어레이(FPGA), 또는 프로그램가능 논리 어레이(PLA)를 포함하는 전자 회로부는 컴퓨터 판독가능 프로그램 명령어의 상태 정보를 이용함으로써 컴퓨터 판독가능 프로그램 명령어를 실행할 수 있다.
본 개시의 양태들은 본 명세서에서 본 개시의 일부 구현예들에 따른 방법, 장치(시스템), 및 논리 회로부의 흐름도 및/또는 블록도를 참조하여 설명된다. 흐름도 및/또는 블록도의 각 블록, 그리고 흐름도 및/또는 블록도의 블록들의 조합은 논리 회로부에 의해 구현될 수 있는 것으로 이해될 것이다.
논리 회로부는 프로세서, 다른 프로그램가능 데이터 프로세싱 장치, 또는 다른 디바이스에서 구현되어 일련의 연산 단계들이 프로세서, 다른 프로그램가능 장치 또는 다른 디바이스 상에서 수행되어 컴퓨터 구현 프로세스를 생성할 수 있어서, 컴퓨터, 다른 프로그램가능 장치, 또는 다른 디바이스 상에서 실행되는 명령어들이 흐름도 및/또는 블록도 블록 또는 블록들에 지정된 기능/동작을 구현하도록 한다.
도면에서의 흐름도 및 블록도는 본 개시의 다양한 실시예들에 따른 시스템, 방법, 및 논리 회로부의 가능한 구현예들의 아키텍처, 기능, 및 연산을 나타낸다. 이와 관련하여, 흐름도 또는 블록도에서의 각 블록은 지정된 논리적 기능(들)을 구현하기 위한 하나 이상의 실행가능한 명령어를 포함하는 명령어들의 모듈, 세그먼트, 또는 부분을 나타낼 수 있다. 일부 대안적인 구현예들에서, 블록에 언급된 기능은 도면에서 언급된 순서와 다르게 일어날 수 있다. 예를 들어, 수반되는 기능에 따라, 연속적으로 도시된 두 개의 블록들이 실제로는 실질적으로 동시에 실행될 수 있거나, 블록들이 때때로 역순으로 실행될 수 있다. 또한, 블록도 및/또는 흐름도에서의 각 블록, 및 블록도 및/또는 흐름도에서의 블록들의 조합은 지정된 기능 또는 동작을 수행하거나 특수 목적 하드웨어와 컴퓨터 명령어의 조합을 수행하거나 수행하는 특수 목적 하드웨어 기반 시스템에 의해 구현될 수 있다는 것에 유의한다.
본 개시는 그 구현예들을 참조하여 구체적으로 제시되고 설명되었지만, 하기의 청구항들의 사상 및 범위로부터 벗어나지 않고 형태 및 세부사항들에 있어서 다양한 변경이 이루어질 수 있는 것으로 이해될 것이다. 따라서, 본 명세서에서 설명된 구현예들은 제한의 목적이 아니라 단지 설명적인 의미로 고려되어야 한다. 본 개시는 상세한 설명이 아닌 첨부된 청구항들에 의해 정의되고, 그 범위 내에서의 모든 차이는 본 개시에 포함되는 것으로서 해석되어야 한다.

Claims (20)

  1. 니어 메모리 컴퓨팅(near-memory computing)을 사용하여 복합 연산들(complex operations)에 대한 원자성(atomicity)을 제공하는 방법으로서,
    순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하는 단계 ― 상기 순차적 연산들은 복합 원자 연산(complex atomic operation)의 성분 연산들(component operations)임 ―;
    상기 복합 원자 연산을 발행하라는 요청을 수신하는 단계; 및
    상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 복합 원자 연산에 대응하는 상기 순차적 연산들의 세트를 저장하라는 요청을 수신하는 단계를 더 포함하며, 상기 복합 원자 연산은 사용자 정의 복합 원자 연산인, 방법.
  3. 제2항에 있어서, 상기 사용자 정의 복합 원자 연산에 대한 상기 순차적 연산들의 세트를 저장하라는 요청은 호스트 시스템 소프트웨어 또는 호스트 애플리케이션으로부터 애플리케이션 프로그래밍 인터페이스(application programming interface, API) 호출을 통해 수신되는, 방법.
  4. 제1항에 있어서, 순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하는 단계 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 는:
    복수의 복합 원자 연산들에 제각기 대응하는 복수의 순차적 연산들의 세트들을 저장하는 단계; 및
    특정 복합 원자 연산을 상기 니어 메모리 명령어 저장소에서의 대응하는 순차적 연산들의 세트의 위치에 매핑하는 테이블을 저장하는 단계를 포함하는, 방법.
  5. 제1항에 있어서, 상기 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계는:
    메모리 제어기에 의해, 상기 니어 메모리 명령어 저장소로부터 상기 순차적 연산들의 세트에서의 각 연산을 판독하는 단계 ― 상기 니어 메모리 명령어 저장소는 상기 메모리 제어기에 결합됨 ―; 및
    상기 메모리 제어기에 의해, 각 연산을 상기 니어 메모리 컴퓨트 유닛에 발행하는 단계를 포함하는, 방법.
  6. 제1항에 있어서, 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 단계는 메모리 제어기에 의해 메모리 디바이스로, 상기 순차적 연산들의 세트를 실행하라는 커맨드를 발행하는 단계를 포함하며, 상기 니어 메모리 명령어 저장소는 상기 메모리 디바이스에 결합되는, 방법.
  7. 제6항에 있어서, 상기 메모리 제어기는 일련의 트리거들을 통해 상기 니어 메모리 컴퓨트 유닛 상의 상기 성분 연산들의 실행을 오케스트레이팅(orchestrating)하는, 방법.
  8. 제1항에 있어서, 상기 니어 메모리 명령어 저장소와 상기 니어 메모리 컴퓨트 유닛은 메모리 디바이스와 인터페이싱하는 메모리 제어기에 밀접하게 결합되는, 방법.
  9. 제1항에 있어서, 상기 순차적 연산들의 세트는 하나 이상의 산술 연산을 포함하는, 방법.
  10. 제1항에 있어서, 메모리 제어기가, 다른 메모리 액세스를 스케줄링하기 전에, 상기 순차적 연산들의 세트에서의 모든 연산들이 개시될 때까지 대기하는, 방법.
  11. 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하기 위한 컴퓨팅 디바이스로서,
    순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하도록 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ―;
    상기 복합 원자 연산을 발행하라는 요청을 수신하도록; 그리고
    상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하도록 구성된 로직을 포함하는, 컴퓨팅 디바이스.
  12. 제11항에 있어서, 상기 컴퓨팅 디바이스는 상기 복합 원자 연산에 대응하는 상기 순차적 연산들의 세트를 저장하라는 요청을 수신하도록 구성된 로직을 더 포함하며, 상기 복합 원자 연산은 사용자 정의 복합 원자 연산인 것인, 컴퓨팅 디바이스.
  13. 제12항에 있어서, 상기 사용자 정의 복합 원자 연산에 대한 상기 순차적 연산들의 세트를 저장하라는 요청은 호스트 시스템 소프트웨어 또는 호스트 애플리케이션으로부터 애플리케이션 프로그래밍 인터페이스(API) 호출을 통해 수신되는 것인, 컴퓨팅 디바이스.
  14. 제11항에 있어서, 순차적 연산들의 세트를 니어 메모리 명령어 저장소에 저장하는 것 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ― 은:
    복수의 복합 원자 연산들에 제각기 대응하는 복수의 순차적 연산 세트들을 저장하는 것; 그리고
    특정 복합 원자 연산을 상기 니어 메모리 명령어 저장소에서의 대응하는 순차적 연산 세트의 위치에 매핑하는 테이블을 저장하는 것을 포함하는, 컴퓨팅 디바이스.
  15. 제11항에 있어서, 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 것은:
    메모리 제어기에 의해, 상기 니어 메모리 명령어 저장소로부터 상기 순차적 연산들의 세트에서의 각 연산을 판독하는 것 ― 상기 니어 메모리 명령어 저장소는 상기 메모리 제어기에 결합됨 ―; 그리고
    상기 메모리 제어기에 의해, 각 연산을 상기 니어 메모리 컴퓨트 유닛에 발행하는 것을 포함하는, 컴퓨팅 디바이스.
  16. 제11항에 있어서, 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 것은 메모리 제어기에 의해 메모리 디바이스로, 상기 순차적 연산들의 세트를 실행하라는 커맨드를 발행하는 것을 포함하며, 상기 니어 메모리 명령어 저장소는 상기 메모리 디바이스에 결합되는 것인, 컴퓨팅 디바이스.
  17. 제11항에 있어서, 상기 니어 메모리 명령어 저장소와 상기 니어 메모리 컴퓨트 유닛은 메모리 디바이스와 인터페이싱하는 메모리 제어기에 밀접하게 결합되는 것인, 컴퓨팅 디바이스.
  18. 니어 메모리 컴퓨팅을 사용하여 복합 연산들에 대한 원자성을 제공하기 위한 시스템으로서,
    메모리 디바이스;
    상기 메모리 디바이스에 결합된 니어 메모리 컴퓨트 유닛;
    순차적 연산들의 세트를 저장하는 니어 메모리 명령어 저장소 ― 상기 순차적 연산들은 복합 원자 연산의 성분 연산들임 ―; 및
    메모리 제어기를 포함하며, 상기 메모리 제어기는:
    상기 복합 원자 연산을 발행하라는 요청을 수신하도록; 그리고
    상기 저장된 순차적 연산들의 세트의 실행을 상기 니어 메모리 컴퓨트 유닛 상에서 개시하도록 구성된 것인, 시스템.
  19. 제18항에 있어서, 상기 저장된 순차적 연산들의 세트의 실행을 상기 니어 메모리 컴퓨트 유닛 상에서 개시하는 것은:
    메모리 제어기에 의해, 상기 니어 메모리 명령어 저장소로부터 상기 순차적 연산들의 세트에서의 각 연산을 판독하는 것 ― 상기 니어 메모리 명령어 저장소는 메모리 제어기에 결합됨 ―; 그리고
    상기 메모리 제어기에 의해, 각 연산을 상기 니어 메모리 컴퓨트 유닛에 발행하는 것을 포함하는 것인, 시스템.
  20. 제18항에 있어서, 상기 저장된 순차적 연산들의 세트의 실행을 니어 메모리 컴퓨트 유닛 상에서 개시하는 것은:
    메모리 제어기에 의해 상기 메모리 디바이스로, 상기 저장된 순차적 연산들의 세트를 실행하라는 커맨드를 발행하는 것을 포함하며, 상기 니어 메모리 명령어 저장소는 상기 메모리 디바이스에 결합되고, 상기 메모리 제어기는 일련의 트리거들을 통해 상기 니어 메모리 컴퓨트 유닛 상의 상기 성분 연산들의 실행을 오케스트레이팅하는 것인, 시스템.
KR1020247003215A 2021-06-28 2022-06-27 니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공 KR20240025019A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/360,949 US20220413849A1 (en) 2021-06-28 2021-06-28 Providing atomicity for complex operations using near-memory computing
US17/360,949 2021-06-28
PCT/US2022/035118 WO2023278323A1 (en) 2021-06-28 2022-06-27 Providing atomicity for complex operations using near-memory computing

Publications (1)

Publication Number Publication Date
KR20240025019A true KR20240025019A (ko) 2024-02-26

Family

ID=82656448

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020247003215A KR20240025019A (ko) 2021-06-28 2022-06-27 니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공

Country Status (5)

Country Link
US (1) US20220413849A1 (ko)
EP (1) EP4363991A1 (ko)
KR (1) KR20240025019A (ko)
CN (1) CN117501254A (ko)
WO (1) WO2023278323A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11922068B2 (en) * 2021-12-10 2024-03-05 Samsung Electronics Co., Ltd. Near memory processing (NMP) dual in-line memory module (DIMM)

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6658659B2 (en) * 1999-12-16 2003-12-02 Cisco Technology, Inc. Compatible version module loading
GB2399899B (en) * 2003-03-27 2005-06-22 Micron Technology Inc Active memory command engine and method
US20070150671A1 (en) * 2005-12-23 2007-06-28 Boston Circuits, Inc. Supporting macro memory instructions
US8583898B2 (en) * 2009-06-12 2013-11-12 Cray Inc. System and method for managing processor-in-memory (PIM) operations
US8572573B2 (en) * 2012-03-09 2013-10-29 Nvidia Corporation Methods and apparatus for interactive debugging on a non-preemptible graphics processing unit
US9218204B2 (en) * 2012-12-21 2015-12-22 Advanced Micro Devices, Inc. Processing engine for complex atomic operations
KR102402672B1 (ko) * 2015-09-01 2022-05-26 삼성전자주식회사 컴퓨팅 시스템 및 컴퓨팅 시스템에서 연산들을 처리하는 방법
US10642617B2 (en) * 2015-12-08 2020-05-05 Via Alliance Semiconductor Co., Ltd. Processor with an expandable instruction set architecture for dynamically configuring execution resources
GB2553102B (en) * 2016-08-19 2020-05-20 Advanced Risc Mach Ltd A memory unit and method of operation of a memory unit to handle operation requests
US10599441B2 (en) * 2017-09-04 2020-03-24 Mellanox Technologies, Ltd. Code sequencer that, in response to a primary processing unit encountering a trigger instruction, receives a thread identifier, executes predefined instruction sequences, and offloads computations to at least one accelerator
US10713046B2 (en) * 2017-12-20 2020-07-14 Exten Technologies, Inc. System memory controller with atomic operations
US11119766B2 (en) * 2018-12-06 2021-09-14 International Business Machines Corporation Hardware accelerator with locally stored macros
US11620358B2 (en) * 2019-05-14 2023-04-04 Intel Corporation Technologies for performing macro operations in memory

Also Published As

Publication number Publication date
EP4363991A1 (en) 2024-05-08
CN117501254A (zh) 2024-02-02
US20220413849A1 (en) 2022-12-29
WO2023278323A1 (en) 2023-01-05

Similar Documents

Publication Publication Date Title
US11907105B2 (en) Backward compatibility testing of software in a mode that disrupts timing
CN106406849B (zh) 提供向后兼容性的方法和系统、非暂态计算机可读介质
US9195786B2 (en) Hardware simulation controller, system and method for functional verification
US11403099B2 (en) Backward compatibility by restriction of hardware resources
US20140375658A1 (en) Processor Core to Graphics Processor Task Scheduling and Execution
CN109564546B (zh) 通过绕过加载存储单元来跟踪存储和加载
KR20090045944A (ko) 종속 명령 스레드 스케줄링
US9471307B2 (en) System and processor that include an implementation of decoupled pipelines
US10255075B2 (en) System, method, and computer program product for managing out-of-order execution of program instructions
CN114610394B (zh) 指令调度的方法、处理电路和电子设备
KR20240025019A (ko) 니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공
KR20160113677A (ko) 다수의 스트랜드들로부터 명령어들을 디스패칭하기 위한 프로세서 로직 및 방법
US11593115B2 (en) Processor, device, and method for executing instructions
US20210089305A1 (en) Instruction executing method and apparatus
CN114035847A (zh) 用于并行执行核心程序的方法和装置
US11847462B2 (en) Software-based instruction scoreboard for arithmetic logic units
US11977896B2 (en) Issuing a sequence of instructions including a condition-dependent instruction
US6711655B1 (en) Finding available memory space by finding its associated memory transfer controller
CN117931293A (zh) 指令处理方法、装置、设备及存储介质