KR20150101870A - 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치 - Google Patents

메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR20150101870A
KR20150101870A KR1020140023707A KR20140023707A KR20150101870A KR 20150101870 A KR20150101870 A KR 20150101870A KR 1020140023707 A KR1020140023707 A KR 1020140023707A KR 20140023707 A KR20140023707 A KR 20140023707A KR 20150101870 A KR20150101870 A KR 20150101870A
Authority
KR
South Korea
Prior art keywords
threads
memory
bank
variable latency
load
Prior art date
Application number
KR1020140023707A
Other languages
English (en)
Other versions
KR102205899B1 (ko
Inventor
김원섭
김태송
김도형
이승원
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020140023707A priority Critical patent/KR102205899B1/ko
Priority to CN201580016865.XA priority patent/CN106133709B/zh
Priority to EP15755731.5A priority patent/EP3097492B1/en
Priority to TW104106294A priority patent/TW201539189A/zh
Priority to US15/121,999 priority patent/US10223269B2/en
Priority to PCT/KR2015/001854 priority patent/WO2015130093A1/en
Publication of KR20150101870A publication Critical patent/KR20150101870A/ko
Application granted granted Critical
Publication of KR102205899B1 publication Critical patent/KR102205899B1/ko

Links

Images

Classifications

    • 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
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • 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/36Handling requests for interconnection or transfer for access to common bus or bus system
    • G06F13/368Handling requests for interconnection or transfer for access to common bus or bus system with decentralised access control
    • G06F13/372Handling requests for interconnection or transfer for access to common bus or bus system with decentralised access control using a time-dependent priority, e.g. individually loaded time counters or time slot
    • 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/36Handling requests for interconnection or transfer for access to common bus or bus system
    • G06F13/368Handling requests for interconnection or transfer for access to common bus or bus system with decentralised access control
    • G06F13/376Handling requests for interconnection or transfer for access to common bus or bus system with decentralised access control using a contention resolving method, e.g. collision detection, collision avoidance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • G06F9/4831Task transfer initiation or dispatching by interrupt, e.g. masked with variable priority
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1008Correctness of operation, e.g. memory ordering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/281Single cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/608Details relating to cache mapping

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Multimedia (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치는, 뱅크 충돌이 발생될 것으로 예측되는 제 1 메모리 뱅크에 액세스될 기능 유닛들(function units)의 쓰레드들(threads) 각각의 처리 타이밍을 결정하고, 상기 결정된 처리 타이밍에 따른 상기 쓰레드들의 순차적인 액세스를 위한 상기 쓰레드들 각각의 가변 레이턴시(variable latency)를 설정하고, 상기 결정된 처리 타이밍에 따라 상기 쓰레드들을 데이터 메모리 큐(data memory queue)에 순차적으로 저장하고, 상기 쓰레드들 각각의 상기 가변 레이턴시가 경과할 때마다 상기 데이터 메모리 큐로부터 상기 저장된 쓰레드들을 순차적으로 상기 제 1 메모리 뱅크에 액세스시킴으로써 연산을 수행한다.

Description

메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치 {Method and apparatus for avoiding bank conflict in memory}
메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치에 관한 것으로서, 구체적으로 다중 메모리 뱅크들을 갖는 메모리 시스템에서 뱅크 충돌을 방지하기 위한 방법 및 장치에 관한다.
멀티코어(multi-core) 프로세서나 재구성 가능(reconfigurable) 프로세서 등은 저전력, 연산 능력 향상 등의 높은 효율성을 가지므로, 일반적인 PC, 노트북 등의 컴퓨팅 장치들뿐만 아니라 임베디드 장치들에서도 널리 사용되고 있다. 최근에는 프로세서의 처리 성능의 지표인 연산 속도나 연산량을 증가시키기 위하여 프로세서 코어들의 개수를 더 증가시키거나 또는 재구성 가능 프로세서의 기능 유닛들(function units, FUs)의 개수를 더 늘리려고 하는 추세이다. 그러나, 프로세서 코어들의 개수 또는 기능 유닛들의 개수가 증가함에 따라 메모리 시스템에서 메모리 뱅크로의 액세스들이 증가하여 뱅크 충돌(bank conflict)이 발생될 확률이 증가한다. 빈번한 뱅크 충돌은 프로세서의 성능을 떨어뜨리는 주요 원인이라는 점에서, 뱅크 충돌의 발생을 막을 수 있는 방안이 필요하다.
메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치를 제공하는데 있다. 또한, 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공하는 데 있다. 본 실시예가 해결하려는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 또 다른 기술적 과제들이 존재할 수 있다.
일 측면에 따르면, 메모리의 뱅크 충돌을 방지하기 위한 방법은, 뱅크 충돌이 발생될 것으로 예측되는 제 1 메모리 뱅크에 액세스될 기능 유닛들(function units)의 쓰레드들(threads) 각각의 처리 타이밍을 결정하는 단계; 상기 결정된 처리 타이밍에 따른 상기 쓰레드들의 순차적인 액세스를 위한 상기 쓰레드들 각각의 가변 레이턴시(variable latency)를 설정하는 단계; 상기 결정된 처리 타이밍에 따라 상기 쓰레드들을 데이터 메모리 큐(data memory queue)에 순차적으로 저장하는 단계; 및 상기 쓰레드들 각각의 상기 가변 레이턴시가 경과할 때마다 상기 데이터 메모리 큐로부터 상기 저장된 쓰레드들을 순차적으로 상기 제 1 메모리 뱅크에 액세스시킴으로써 연산을 수행하는 단계를 포함한다.
또한, 상기 설정하는 단계는, 상기 처리 타이밍에 기초하여 상기 쓰레드들마다 상기 가변 레이턴시를 서로 다른 값으로 설정한다.
또한, 상기 설정하는 단계는, 상기 제 1 메모리 뱅크의 고정적인 응답 시간 및 상기 결정된 처리 타이밍에서 상기 데이터 메모리 큐에 저장될 상기 쓰레드들의 스택들의 수에 기초하여 상기 가변 레이턴시를 설정한다.
또한, 상기 설정하는 단계는, 상기 쓰레드들에 관한 인스트럭션들(instructions)에 상기 가변 레이턴시의 값을 지정하는 소정 필드(field)를 추가함으로써 상기 가변 레이턴시를 설정한다.
또한, 상기 설정하는 단계는, 상기 제 1 메모리 뱅크에 상기 쓰레드들 각각에 대한 데이터가 요청된 시점에서부터 상기 제 1 메모리 뱅크의 고정적인 응답 시간만큼 경과한 시점에, 상기 연산이 수행되도록, 상기 가변 레이턴시를 설정한다.
또한, 상기 가변 레이턴시는, 상기 제 1 메모리 뱅크에서 상기 쓰레드들에 의해 발생될 상기 뱅크 충돌의 횟수에 비례하여 설정된다.
또한, 상기 연산을 수행하는 단계는, 상기 데이터 메모리 큐에 저장된 상기 쓰레드들의 우선 순위(priority)를 체크하는 단계; 상기 우선 순위가 높은 순서대로 상기 쓰레드들을 순차적으로 상기 제 1 메모리 뱅크에 액세스시키는 단계; 상기 액세스된 쓰레드들의 처리 결과들을 재정렬 버퍼(reorder buffer)에 저장하는 단계; 및 상기 저장된 처리 결과들을 독출하여 상기 연산을 수행하는 단계를 포함한다.
또한, 상기 데이터 메모리 큐는, 상기 기능 유닛들에 의해 요청된 제 1 사이클의 쓰레드들의 저장이 완료된 상태에서 제 2 사이클의 쓰레드의 저장이 새로 요청된 경우, 상기 제 1 사이클의 쓰레드들 중 우선 순위가 가장 높은 쓰레드를 소거함으로써 제 2 사이클의 쓰레드를 새로 저장한다.
또한, 상기 설정하는 단계는, 상기 기능 유닛들에 의해 요청된 제 1 사이클의 쓰레드들 중 우선 순위가 가장 낮은 쓰레드의 가변 레이턴시와 상기 기능 유닛들에 의해 요청된 제 2 사이클의 쓰레드들 중 우선 순위가 가장 높은 쓰레드의 가변 레이턴시가 같도록, 상기 가변 레이턴시를 설정한다.
또한, 상기 기능 유닛들의 쓰레드들은, 코어스 그레인 어레이(Coarse-Grained Array, CGA) 모드에서 발생된 쓰레드들을 포함한다.
또한, 상기 방법은, 컴파일러(compiler)에 의한 스케쥴링 과정에서 수행된다.
다른 일 측면에 따르면, 상기 메모리의 뱅크 충돌의 방지 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
또 다른 일 측면에 따르면, 메모리의 뱅크 충돌을 방지하기 위한 장치는, 뱅크 충돌이 발생될 것으로 예측되는 제 1 메모리 뱅크에 액세스될 쓰레드들(threads)을 생성하는 복수의 기능 유닛들; 상기 쓰레드들 각각의 처리 타이밍을 결정하여, 상기 결정된 처리 타이밍에 따른 상기 쓰레드들의 순차적인 액세스를 위한 상기 쓰레드들 각각의 가변 레이턴시(variable latency)를 설정하는 메모리 컨트롤러; 및 상기 결정된 처리 타이밍에 따라 상기 쓰레드들을 순차적으로 저장하는 데이터 메모리 큐(data memory queue)를 포함하고, 상기 메모리 컨트롤러는, 상기 쓰레드들 각각의 상기 가변 레이턴시가 경과할 때마다 상기 데이터 메모리 큐로부터 상기 저장된 쓰레드들을 순차적으로 상기 제 1 메모리 뱅크에 액세스시킴으로써 연산을 수행하도록 제어한다.
또한, 상기 메모리 컨트롤러는, 상기 처리 타이밍에 기초하여 상기 쓰레드들마다 상기 가변 레이턴시를 서로 다른 값으로 설정한다.
또한, 상기 메모리 컨트롤러는, 상기 제 1 메모리 뱅크의 고정적인 응답 시간 및 상기 결정된 처리 타이밍에서 상기 데이터 메모리 큐에 저장될 상기 쓰레드들의 스택들의 수에 기초하여 상기 가변 레이턴시를 설정한다.
또한, 상기 메모리 컨트롤러는, 상기 쓰레드들에 관한 인스트럭션들(instructions)에 상기 가변 레이턴시의 값을 지정하는 소정 필드(field)를 추가함으로써 상기 가변 레이턴시를 설정한다.
또한, 상기 메모리 컨트롤러는, 상기 제 1 메모리 뱅크에 상기 쓰레드들 각각에 대한 데이터가 요청된 시점에서부터 상기 제 1 메모리 뱅크의 고정적인 응답 시간만큼 경과한 시점에, 상기 연산이 수행되도록, 상기 가변 레이턴시를 설정한다.
또한, 상기 가변 레이턴시는, 상기 제 1 메모리 뱅크에서 상기 쓰레드들에 의해 발생될 상기 뱅크 충돌의 횟수에 비례하여 설정된다.
또한, 상기 메모리 컨트롤러는, 상기 데이터 메모리 큐에 저장된 상기 쓰레드들의 우선 순위(priority)를 체크하고, 상기 우선 순위가 높은 순서대로 상기 쓰레드들을 순차적으로 상기 제 1 메모리 뱅크에 액세스시키고, 상기 장치는, 상기 액세스된 쓰레드들의 처리 결과들을 저장하는 재정렬 버퍼(reorder buffer)를 더 포함하고, 상기 기능 유닛들은, 상기 저장된 처리 결과들을 독출하여 상기 연산을 수행한다.
또한, 상기 메모리 컨트롤러는, 상기 기능 유닛들에 의해 요청된 제 1 사이클의 쓰레드들 중 우선 순위가 가장 낮은 쓰레드의 가변 레이턴시와 상기 기능 유닛들에 의해 요청된 제 2 사이클의 쓰레드들 중 우선 순위가 가장 높은 쓰레드의 가변 레이턴시가 같도록, 상기 가변 레이턴시를 설정한다.
상기된 바에 따르면, 뱅크 충돌이 발생될 것으로 예측되는 어느 메모리 뱅크에 대해 요청된 프로세서의 쓰레드들 각각에 서로 다른 값을 갖는 가변 레이턴시들을 개별적으로 설정함으로써, 프로세서의 스톨이 발생되지 않고 또한 뱅크 충돌을 방지할 수 있다.
도 1은 일 실시예에 따른 컴퓨팅 디바이스들의 구성도이다.
도 2는 메모리에서 일반적으로 발생될 수 있는 뱅크 충돌(bank conflict)의 경우를 설명하기 위한 도면이다.
도 3은 일 실시예에 따른 메모리의 뱅크 충돌을 방지하기 위한 방법의 흐름도이다.
도 4는 일 실시예에 따른 프로세서 코어의 상세 구성도이다.
도 5는 일 실시예에 따른 메모리 시스템의 상세 구성도이다.
도 6은 일 실시예에 따른 뱅크 충돌을 방지하기 위한 컴파일러의 스케쥴링을 설명하기 위한 도면이다.
도 7은 일 실시예에 따라 데이터 메모리 큐(DMQ)의 쓰레드들의 스택들(stacks)과 가변 레이턴시의 관계를 이용한 가변 레이턴시의 설정 방법을 설명하기 위한 도면이다.
도 8a는 일 실시예에 따른 가변 레이턴시를 이용하여 뱅크 충돌을 방지하는 방법을 설명하기 위한 도면이다.
도 8b는 도 8a의 테이블에서의 가변 레이턴시를 이용한 프로세서 코어의 처리 스케줄을 설명하기 위한 도면이다.
도 9a는 도 7의 가변 레이턴시를 이용하지 않고 고정 레이턴시를 이용할 경우에 발생될 수 있는 뱅크 충돌을 설명하기 위한 도면이다.
도 9b는 도 9a의 테이블에서의 고정 레이턴시를 이용한 프로세서 코어의 처리 스케줄을 설명하기 위한 도면이다.
도 10a는 다른 일 실시예에 따른 가변 레이턴시를 이용하여 뱅크 충돌을 방지하는 방법을 설명하기 위한 도면이다.
도 10b는 도 10a와 달리, 고정 레이턴시를 이용할 경우에 발생될 수 있는 뱅크 충돌을 설명하기 위한 도면이다.
도 11a는 또 다른 일 실시예에 따른 가변 레이턴시를 이용하여 뱅크 충돌을 방지하는 방법을 설명하기 위한 도면이다.
도 11b는 도 11a와 달리, 고정 레이턴시를 이용할 경우에 발생될 수 있는 뱅크 충돌을 설명하기 위한 도면이다.
이하에서는 도면을 참조하여 실시예들을 상세히 설명하도록 한다.
도 1은 일 실시예에 따른 컴퓨팅 디바이스들의 구성도이다.
도 1을 참고하면, 컴퓨팅 디바이스(10)는, 다수의 기능 유닛들(function units, FUs)(113)을 갖는 프로세서 코어(processor core)(110), 메모리 컨트롤러(120) 및 메모리 시스템(130)을 포함한다. 다만, 도 1에는 도시되어 있지 않지만, 컴퓨팅 디바이스(10)는 복수의 프로세서 코어들을 포함할 수 있다. 컴퓨팅 디바이스(20)는 컴파일러(compiler)(200)를 포함한다. 컴퓨팅 디바이스들(10 및 20)은 별도의 독립적인 디바이스들에 해당되거나, 또는 하나의 디바이스 내에서 별도의 모듈들로서 구현될 수 있다. 예를 들어, 컴퓨팅 디바이스(20)는 루프를 포함하는 프로그램 코드를 컴파일하는 PC(personal computer)이고, 실제 컴파일된 인스트럭션들(instructions)은 스마트폰, 태블릿 디바이스 등과 같은 다른 컴퓨팅 장치(10)에 의해 실행될 수도 있다. 컴퓨팅 디바이스들(10 및 20)은 Personal computer(PC), Server computer, Smart phone, PDA, PMP, Navigation, TV, 컨텐트 재생 장치, Communication system, Image processing system, Graphics processing system, 랩탑, 태블릿 PC 등으로 구현되거나 이에 포함될 수 있다.
컴파일러(200)는 주어진 프로그램 코드를 하위레벨 언어로 변환한다. 예를 들면, 컴파일러(200)는 고급언어로 작성된 프로그램 코드를 어셈블리 언어나 기계어로 변환한다. 컴파일러(200)는 변환된 어셈블리 언어나 기계어 언어의 명령어들을 이용하여 기능 유닛들(113)의 동작을 스케줄링한다. 컴파일러(200)는 예를 들어, 프로세서 코어(110)가 재구성 가능 프로세서인 경우, CGA 모드의 스케줄링을 제공할 수 있다. 컴파일러(200)는 작성된 프로그램 코드를 컴파일링하기 위하여, 컴퓨팅 디바이스(20)의 메모리(미도시)에 저장된 정보를 이용할 수 있다.
컴퓨팅 디바이스(20)에는 주어진 프로그램 코드 정보에 대한 정보, 프로그램 코드를 실행할 재구성 가능 프로세서(예를 들어, 프로세서 코어(110))의 아키텍쳐, 기능 유닛들(113)의 사양(details), 기능 유닛들(113) 간의 연결 관계(interconnections), 구성 메모리(configuration memory)의 사양(details), 레지스터 파일의 개수, 기능 유닛들(113)과 레지스터 파일의 연결관계 등에 대한 정보가 미리 저장될 수 있다.
한편, 도 1에 도시된 컴퓨팅 디바이스들(10 및 20)에 대해서는 본 실시예의 특징이 흐려지는 것을 방지하기 위하여 관련된 구성요소들만이 도시되어 있다. 따라서, 도 1에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
도 2는 메모리에서 일반적으로 발생될 수 있는 뱅크 충돌(bank conflict)의 경우를 설명하기 위한 도면이다.
DRAM(dynamic random access memory), SRAM(static random access memory) 등과 같은 일반적인 메모리 디바이스들은, 기억 영역이 소정 개수로 구분되어 독립적으로 액세스될 수 있는 다수의 메모리 뱅크들을 포함할 수 있다. 서로 다른 프로세서 코어들 또는 서로 다른 기능 유닛들(FUs)은 이와 같은 메모리 디바이스로부터, 프로세서 코어들 또는 기능 유닛들(FUs) 각각에서 처리될 서로 다른 쓰레드들에 관한 데이터들을 요청할 수 있다. 도 2를 참고하여, 메모리 디바이스가 메모리 뱅크 1, 메모리 뱅크 2, 메모리 뱅크 3 및 메모리 뱅크 4의 4개의 메모리 뱅크들로 분할된 경우를 예로 들어 설명하도록 한다. 한편, 도 2 및 이하의 도면들에서 T=n (n은 자연수)의 용어는, 프로세서 코어에 세팅된 클럭 수에 따른 한 사이클의 처리 시점으로서, 1 클럭 단위를 의미한다.
먼저, 뱅크 충돌이 발생되지 않는 경우(201)에 대해 설명하면, T=1의 쓰레드들은 메모리 뱅크 1의 주소 5의 데이터를 로드하는 LOAD @5의 쓰레드, 메모리 뱅크 2의 주소 6의 데이터를 로드하는 LOAD @6의 쓰레드, 메모리 뱅크 3의 주소 7의 데이터를 로드하는 LOAD @7의 쓰레드 및 메모리 뱅크 4의 주소 8의 데이터를 로드하는 LOAD @8의 쓰레드를 포함한다. 그리고, T=2의 쓰레드들은 LOAD @5 내지 LOAD @8의 쓰레드들에 의해 독출된 데이터들을 이용한 덧셈 연산들인 ADD 5 내지 ADD 8의 쓰레드들을 포함한다. 동일한 사이클인 T=1에서 프로세서 코어들 또는 기능 유닛들(FUs)이 각각 서로 다른 메모리 뱅크들에 액세스하기 때문에, 뱅크 충돌 없이 병렬적인 데이터 로딩 및 연산이 가능하게 된다.
여기서, 어느 ADD m의 덧셈 연산 (m는 자연수)이 수행되는 시점(또는 사이클)은, LOAD @m의 쓰레드의 독출이 완료된 시점(또는 사이클)에 대응될 수 있다. 예를 들어, LOAD @5는 메모리 뱅크 1의 주소 5로부터 LOAD @5의 쓰레드에 관한 데이터를 요청하는 시점을 나타내고, ADD 5는 LOAD @5의 쓰레드를 이용한 덧셈 연산이 가능한 시점을 나타낼 수 있다. LOAD의 처리와 ADD의 처리는 별개의 기능 유닛들(FUs) 또는 별개의 프로세서 코어에 의해 수행되는 것으로서, 서로 뱅크 충돌이 발생되지 않는 처리들이다.
뱅크 충돌이 발생된 경우(202)의 일 예는, 여러 프로세서 코어들 또는 여러 기능 유닛들(FUs)이 한 사이클 내에서, 하나의 메모리 뱅크(메모리 뱅크 1)에 다수의 쓰레드들에 관한 데이터들을 동시에 요청한 경우이다. T=1의 쓰레드들은 메모리 뱅크 1의 주소 1의 데이터를 로드하는 LOAD @1의 쓰레드, 메모리 뱅크 1의 주소 2의 데이터를 로드하는 LOAD @2의 쓰레드, 메모리 뱅크 1의 주소 3의 데이터를 로드하는 LOAD @3의 쓰레드 및 메모리 뱅크 1의 주소 4의 데이터를 로드하는 LOAD @4의 쓰레드를 포함한다. 메모리 뱅크 1로부터는 주소 1 내지 주소 4의 데이터가 한번에 로드될 수 없기 때문에, 도 2에 도시된 바와 같이, T=2 내지 T=4에서는 프로세서 스톨(stall)이 발생되게 된다. 결국, T=5에서 LOAD @1 내지 LOAD @4의 데이터들의 독출이 완료되고, 이에 따라 T=5에서 ADD 1 내지 ADD 4의 연산이 수행된다.또한, 프로세서 스톨이 발생된 T=2 내지 T=4 동안에 프로세서는 다른 기타의 연산 동작들도 수행할 수 없게 되므로, 연산 속도의 감소와 같이 프로세싱 자원이 비효율적으로 사용되게 될 수 있다. 프로세서는 메모리로부터 많은 데이터를 로드/스토어하여 많은 연산들을 처리하기 때문에, 하나의 메모리 뱅크에 동시에 서로 다른 쓰레드들에 관한 데이터들을 요청하는 뱅크 충돌은 빈번하게 일어날 수 있다.
한편, 본 실시예에 따르면, 하나의 메모리 뱅크(예를 들어, 메모리 뱅크 1)에 동시에 여러 쓰레드들에 관한 데이터들이 요청된다 할지라도, 프로세서의 스톨이 발생되는 현상인 뱅크 충돌을 방지할 수 있다. 이하에서는, 본 실시예에 따른 메모리의 뱅크 충돌을 방지하기 위한 방법 및 컴퓨팅 장치들(10, 20)의 동작에 대해 보다 상세하게 설명하도록 한다.
도 3은 일 실시예에 따른 메모리의 뱅크 충돌을 방지하기 위한 방법의 흐름도이다.
도 3을 참고하면, 메모리의 뱅크 충돌을 방지하기 위한 방법은 도 1에 도시된 컴퓨팅 장치(10)의 컴파일러(200)에 의한 컴필레이션(compilation) 스케쥴에 관한 것일 수 있다.
301 단계에서, 컴파일러(200)는 뱅크 충돌이 발생될 것으로 예측되는 메모리 뱅크를 액세스할 기능 유닛들(FUs)(113)의 쓰레드들 각각의 처리 타이밍을 결정한다.
302 단계에서, 컴파일러(200)는 결정된 처리 타이밍에 따른 쓰레드들의 순차적인 액세스를 위한 상기 쓰레드들 각각의 가변 레이턴시(variable latency)를 설정한다. 이때, 컴파일러(200)는 쓰레드들의 처리 타이밍에 기초하여 쓰레드들마다 레이턴시를 가변적으로 설정할 수 있기 때문에 쓰레드들 각각의 레이턴시는 서로 다른 값을 가질 수 있다. 특히, 컴파일러(200)는 쓰레드들에 포함된 인스트럭션들(instructions)에 레이턴시의 값을 지정하는 소정 필드(field)를 추가함으로써 가변 레이턴시를 설정할 수 있다. 예를 들어, 컴파일러(200)는 LOAD 인스트럭션으로서 LOAD Rdest, Address[Rx, Ry], Rlatency의 인스트럭션을 생성할 수 있다. LOAD Rdest의 필드는 어느 메모리 뱅크(Rdest)로부터 데이터를 로드할 것을 지시하는 필드이고, Address[Rx, Ry]의 필드는 해당 메모리 뱅크(Rdest)로부터 데이터가 로드될 주소를 나타내는 필드이다. 컴파일러(200)는 LOAD 인스트럭션에 Rlatency의 필드를 추가함으로써 가변 레이턴시를 설정할 수 있다.가변 레이턴시는 모든 연산의 수행이 완료되기까지 기능 유닛들(113)의 스톨이 제거되기 위해서 설정되는 것으로서, 메모리 뱅크에서 쓰레드들에 의해 발생될 뱅크 충돌의 횟수에 비례하여 설정될 수 있다.
303 단계에서, 컴파일러(200)는 결정된 처리 타이밍에 따라 쓰레드들에 관한 데이터들이 데이터 메모리 큐(data memory queue, DMQ)에 순차적으로 저장되도록 스케쥴링한다.
304 단계에서, 컴파일러(200)는 쓰레드들 각각의 가변 레이턴시가 경과할 때마다 데이터 메모리 큐(DMQ)로부터 저장된 쓰레드들을 순차적으로 메모리 뱅크에 액세스시킴으로써 연산을 수행한다. 보다 상세하게 설명하면, 컴파일러(200)는 데이터 메모리 큐(DMQ)에 저장된 쓰레드들의 우선 순위(priority)를 체크하고, 우선 순위가 높은 순서대로 쓰레드들을 순차적으로 메모리 뱅크에 액세스시킨다. 그리고 나서, 컴파일러(200)는 액세스된 쓰레드들의 처리 결과들이 재정렬 버퍼(reorder buffer)에 저장되도록 스케쥴링한다. 마지막으로, 컴파일러(200)는 프로세서 코어(110)가 재정렬 버퍼에 저장된 처리 결과들을 독출하여 연산을 수행하도록 스케쥴링한다.
정리하면, 컴파일러(200)는 컴퓨팅 장치(10)에 포함된 각각의 하드웨어들이 301 단계 내지 304 단계와 같이 동작하여 뱅크 충돌을 방지할 수 있도록, 스케쥴링을 수행한다.
한편, 도 3의 메모리의 뱅크 충돌을 방지하기 위한 방법은 컴파일러(200)에 의한 컴필레이션 스케쥴이 임베디드된(embedded), 컴퓨팅 장치(10)의 동작 시퀀스일 수 있다. 컴퓨팅 장치(10)의 측면에서 도 3을 설명하면, 다음과 같다.
301 단계에서, 복수의 기능 유닛들(FUs)(113)은, 뱅크 충돌이 발생될 것으로 예측되는 메모리 뱅크를 액세스할 쓰레드들을 생성한다.
302 단계에서, 메모리 컨트롤러(120)는 쓰레드들 각각의 처리 타이밍을 결정하여, 결정된 처리 타이밍에 따른 쓰레드들의 순차적인 액세스를 위한 쓰레드들 각각의 가변 레이턴시를 설정한다. 이때, 메모리 컨트롤러(120)는 쓰레드들의 처리 타이밍에 기초하여 쓰레드들마다 레이턴시를 가변적으로 설정할 수 있기 때문에 쓰레드들의 레이턴시는 서로 다른 값을 가질 수 있다. 특히, 메모리 컨트롤러(120)는 쓰레드들에 관한 인스트럭션들(instructions)에 레이턴시의 값을 지정하는 소정 필드(field)를 추가함으로써 가변 레이턴시를 설정할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 LOAD 인스트럭션에 관하여 LOAD Rdest, Address[Rx, Ry], Rlatency와 같이 Rlatency의 필드를 추가함으로써 가변 레이턴시를 설정할 수 있다. 가변 레이턴시는 모든 연산의 수행이 완료되기까지 기능 유닛들(113)의 스톨이 제거되기 위해서 설정되는 것으로서, 메모리 뱅크에서 쓰레드들에 의해 발생될 뱅크 충돌의 횟수에 비례하여 설정될 수 있다.
303 단계에서, 데이터 메모리 큐(DMQ)는 결정된 처리 타이밍에 따라 쓰레드들을 순차적으로 저장한다.
304 단계에서, 메모리 컨트롤러(120)는, 쓰레드들 각각의 가변 레이턴시가 경과할 때마다 데이터 메모리 큐(DMQ)로부터 저장된 쓰레드들을 순차적으로 메모리 뱅크에 액세스시킴으로써 연산을 수행하도록 제어한다. 보다 상세하게 설명하면, 메모리 컨트롤러(120)는 데이터 메모리 큐(DMQ)에 저장된 쓰레드들의 우선 순위(priority)를 체크하고, 우선 순위가 높은 순서대로 쓰레드들을 순차적으로 메모리 뱅크에 액세스시킨다. 메모리 컨트롤러(120)는 액세스된 쓰레드들의 처리 결과들을 재정렬 버퍼(reorder buffer)에 저장한다. 마지막으로, 프로세서 코어(110)는 재정렬 버퍼에 저장된 처리 결과들을 독출하여 연산을 수행한다.
도 4는 일 실시예에 따른 프로세서 코어의 상세 구성도이다.
도 4를 참고하면, 프로세서 코어(110)는 특정한 태스크(task), 인스트럭션(instruction) 또는 오퍼레이션(operation) 등을 수행하기 위한 하드웨어로서, 복수의 기능 유닛들(113)을 포함한다. 기능 유닛들(113)은 산술논리연산유닛(arithmetic logic unit, ALU), 곱셈기(multiplier) 또는 로드/스토어 유닛(Load/Store unit) 등에 해당될 수 있으며, 기능 유닛들(113) 간에는 다수의 입출력 경로들이 구비될 수 있다. 또한, 프로세서 코어(110)는 로컬 레지스터 파일(local register file) 등의 다양한 종류의 레지스터 파일들도 포함할 수 있다.
프로세서 코어(110)는 CGA 모드에 따라, 프로세서 코어(110)에 포함된 여러 기능 유닛들(113)을 이용하여 병렬적으로 루프(loop) 연산을 처리할 수 있다. 다시 말하면, 프로세서 코어(110)가 CGA 모드에 따라 동작되는 경우, 프로세서 코어(110)는 Loop Level Parallelism (LLP)을 실행할 수 있다.
도 5는 일 실시예에 따른 메모리 시스템의 상세 구성도이다. 도 5를 참고하면, 메모리 시스템(130)은 메모리 컨트롤러(120)에 의해 메모리 시스템(130)의 로드/스토어 동작이 제어될 수 있다.
메모리 시스템(130)은 N개의 (N은 자연수) 메모리 뱅크들(131, 132, 133 및 134), 데이터 메모리 큐(DMQ)(137) 및 재정렬 버퍼(reorder buffer)(139)를 포함한다. 설명의 편의를 위하여, 도 5에서는 메모리 시스템(130)이 메모리 뱅크 1(131), 메모리 뱅크 2(132), 메모리 뱅크 3(133) 및 메모리 뱅크 4(134)를 포함하는 것으로 도시하였으나, 이에 제한되지 않고 메모리 시스템(130)은 다양한 개수의 메모리 뱅크들을 포함할 수 있다.
이하에서는, 앞서 설명된, 컴퓨팅 장치(10) 및 컴퓨팅 장치(20)의 하드웨어 구성들을 이용하여 도 3의 뱅크 충돌의 방지 방법이 어떻게 구현될 것인지에 대해 보다 상세하게 설명하도록 한다.
도 6은 일 실시예에 따른 뱅크 충돌을 방지하기 위한 컴파일러의 스케쥴링을 설명하기 위한 도면이다.
도 6을 참고하면, 프로세서 코어(110)로부터 요청된 쓰레드들은 Cycle A에서 수행될 LOAD @1, LOAD @2, LOAD @3 및 LOAD @4를 포함한다. 여기서, LOAD @1 내지 LOAD @4는 하나의 메모리 뱅크(예를 들어, 도 2의 메모리 뱅크 1)에 액세스될 쓰레드들인 것으로 가정한다. 앞서 설명된 바와 같이, LOAD @1은 어느 메모리 뱅크(예를 들어, 도 2의 메모리 뱅크 1)의 주소 1의 데이터를 로드하는 쓰레드, LOAD @2은 동일한 메모리 뱅크(메모리 뱅크 1)의 주소 2의 데이터를 로드하는 쓰레드, LOAD @3은 동일한 메모리 뱅크(메모리 뱅크 1)의 주소 3의 데이터를 로드하는 쓰레드 및 LOAD @4은 동일한 메모리 뱅크(메모리 뱅크 1)의 주소 4의 데이터를 로드하는 쓰레드를 의미한다.
먼저, 메모리 컨트롤러(120)가 Cycle A의 LOAD @1 내지 LOAD @4의 쓰레드들에 관한 데이터들을 동시에 메모리 시스템(130)의 메모리 뱅크 1(131)에 요청할 경우, 뱅크 충돌이 발생한다(601).
부연 설명하면, T=1인 시점에서, 메모리 컨트롤러(120)가 LOAD @1 내지 LOAD @4의 쓰레드들에 관한 데이터들을 모두 메모리 뱅크 1(131)에 요청한다 할지라도, 메모리 뱅크 1(131)에는 오로지 하나의 LOAD @1의 쓰레드만이 액세스될 수 있다. 따라서, T=1인 시점에서는 LOAD @2 내지 LOAD @4의 쓰레드들에게는 뱅크 충돌이 발생된다. 마찬가지로, T=2인 시점에서, 메모리 컨트롤러(120)가 LOAD @2 내지 LOAD @4의 쓰레드들에 관한 데이터들을 모두 메모리 뱅크 1(131)에 요청한다 할지라도, 메모리 뱅크 1(131)에는 하나의 LOAD @2의 쓰레드만이 액세스될 수 밖에 없다. 따라서, T=2인 시점에서는 LOAD @3 내지 LOAD @4의 쓰레드들에게는 뱅크 충돌이 발생된다. 결국, T=1 내지 T=3인 시점들에서는 모두 뱅크 충돌이 발생될 수 있다.
이와 달리, 본 실시예에 따라 데이터 메모리 큐(DMQ)(137)를 이용한다면 뱅크 충돌 없이 각각의 쓰레드들을 처리할 수 있다.
보다 상세하게 뱅크 충돌이 발생되지 않는 경우(602)에 대해 설명하면, 메모리 컨트롤러(120)는 Cycle A의 LOAD @1, LOAD @2, LOAD @3 및 LOAD @4의 쓰레드들을 순차적으로 데이터 메모리 큐(DMQ)(137)에 저장하도록 제어한다. 다시 말하면, 쓰레드들은 메모리 뱅크 1(131)를 액세스하기 전, 데이터 메모리 큐(DMQ)(137)에 우선적으로 저장된다.
이후에, T=1인 시점에서, 데이터 메모리 큐(DMQ)(137)에서 우선 순위가 가장 높은 쓰레드인 LOAD @1가 메모리 뱅크 1(131)에 액세스된다. 뒤이어 T=2인 시점에서 LOAD @2, T=3인 시점에서 LOAD @3, T=4인 시점에서 LOAD @4가 메모리 뱅크 1(131)에 액세스된다. 따라서, 각각의 시점에서는 하나의 쓰레드만이 메모리 뱅크 1(131)를 액세스하므로, 뱅크 충돌은 발생되지 않게 된다.
결과적으로, 컴파일러(200)는 프로세서 코어(110), 메모리 컨트롤러(120) 및 데이터 메모리 큐(DMQ)(137)가 위와 같은 시퀀스로 동작될 수 있도록, 스케쥴링을 수행한다.
도 7은 일 실시예에 따라 데이터 메모리 큐(DMQ)의 쓰레드들의 스택들(stacks)과 가변 레이턴시의 관계를 이용한 가변 레이턴시의 설정 방법을 설명하기 위한 도면이다. 이하에서는 도 7을 참고하여, 데이터 메모리 큐(137)의 스택들(stacks)과 가변 레이턴시의 관계를 설명하도록 한다.
도 7을 참고하여, 쓰레드들은 T=1에서 수행될 LOAD @1, LOAD @2, LOAD @3 및 LOAD @4와, T=2에서 수행될 LOAD @5, LOAD @6, LOAD @7 및 LOAD @8을 포함하는 것으로 가정한다.
가변 레이턴시는 다음의 수학식 1을 이용하여 설정될 수 있다.
Figure pat00001
수학식 1을 참고하면, 가변 레이턴시(“Variable Latency”)는 메모리 시스템(130)의 고정적인 응답 시간(“Fixed Memory Response Time”)과 데이터 메모리 큐(DMQ)(137)에 쌓여있는 쓰레드들의 개수(“the number of DMQ Stacks”)의 합에 의해 계산될 수 있다. 도 7 및 이하의 도면들에서는 메모리 시스템(130)의 응답 시간(“Fixed Memory Response Time”)이 고정적인 4 사이클인 것으로 가정하여 설명하도록 한다. 하지만, 이는 설명의 편의를 위한 것일 뿐, 메모리 시스템(130)의 응답 시간은 메모리 시스템(130)의 하드웨어 사양에 따라 변경될 수 있다.
도 7에서 LOAD @1은 우선 순위가 가장 높은 쓰레드로 가정하였으므로, 데이터 메모리 큐(137)에는 아직 어떠한 쓰레드도 저장되어 있지 않은 상태이다. 따라서, Fixed Memory Response Time = 4 및 the number of DMQ Stacks=0 이므로, LOAD @1의 가변 레이턴시는 4의 값으로 설정된다.
LOAD @2의 쓰레드는 LOAD @1의 쓰레드에 뒤이어 액세스될 것이다. 따라서, LOAD @2의 쓰레드에 관한 데이터가 요청되는 시점에서 데이터 메모리 큐(137)에는 LOAD @1의 쓰레드가 이미 저장되어 있다. 그러므로, Fixed Memory Response Time = 4 및 the number of DMQ Stacks=1 이므로, LOAD @2의 가변 레이턴시는 5의 값으로 설정된다.
동일한 방식으로, LOAD @3의 가변 레이턴시는 Fixed Memory Response Time = 4 및 the number of DMQ Stacks=2 이므로, 6의 값으로 설정된다. 또한, LOAD @4의 가변 레이턴시는 Fixed Memory Response Time = 4 및 the number of DMQ Stacks=3 이므로, 7의 값으로 설정된다.
뱅크 충돌로 인하여 T=1의 시점에서는 LOAD @1의 쓰레드 액세스만이 완료될 수 있다. 따라서, LOAD @5의 쓰레드에 관한 데이터가 요청되는 T=2의 시점에서 데이터 메모리 큐(137)에 저장되어 있던 LOAD @1의 쓰레드는 소거된다. 따라서, Fixed Memory Response Time = 4 및 the number of DMQ Stacks=3 이므로, LOAD @5의 가변 레이턴시는 LOAD @4의 가변 레이턴시와 동일하게 7의 값으로 설정된다.
LOAD @6의 쓰레드는 LOAD @5의 쓰레드에 뒤이어 액세스될 것이다. 따라서, LOAD @6의 쓰레드에 관한 데이터가 요청되는 시점에서 데이터 메모리 큐(137)에는 LOAD @2 내지 LOAD @5의 쓰레드들이 저장되어 있다. 그러므로, Fixed Memory Response Time = 4 및 the number of DMQ Stacks=4 이므로, LOAD @6의 가변 레이턴시는 8의 값으로 설정된다.
동일한 방식으로, LOAD @7의 가변 레이턴시는 Fixed Memory Response Time = 4 및 the number of DMQ Stacks=5 이므로, 9의 값으로 설정된다. 또한, LOAD @8의 가변 레이턴시는 Fixed Memory Response Time = 4 및 the number of DMQ Stacks=6 이므로, 10의 값으로 설정된다.
요약하면, 본 실시예에 따른 스케줄링 방법은, 데이터 메모리 큐(137)에 저장된 쓰레드들의 스택들을 고려하여 가변 레이턴시가 설정됨으로써 뱅크 충돌을 방지할 수 있다. 다시 말하면, 컴파일러(200)는 데이터 메모리 큐(137)가 갖는 큐 뎁쓰(queue depth)에 의존하여 가변 레이턴시가 설정되도록 스케줄링할 수 있다.
도 8a는 일 실시예에 따른 가변 레이턴시를 이용하여 뱅크 충돌을 방지하는 방법을 설명하기 위한 도면이다. 도 8a를 참고하면, 메모리 시스템(130)은 4개의 메모리 뱅크들인 메모리 뱅크 1(131), 메모리 뱅크 2(132), 메모리 뱅크 3(133) 및 메모리 뱅크 4(134)를 포함한다.
프로세서 코어(110)의 쓰레드들은 Cycle A에서 수행될 LOAD @1, LOAD @2, LOAD @3 및 LOAD @4와, Cycle B에서 수행될 LOAD @5, LOAD @6, LOAD @7 및 LOAD @8을 포함한다. 여기서, LOAD @1 내지 LOAD @8은 메모리 뱅크 1(131)에 액세스될 쓰레드들이다. 앞서 설명된 바와 같이, LOAD @1은 메모리 뱅크 1(131)의 주소 1의 데이터를 로드하는 쓰레드이고, LOAD @2 내지 LOAD @8은 각각 메모리 뱅크 1(131)의 주소 2 내지 8의 데이터를 로드하는 쓰레드들을 의미한다. 한편, Cycle C에서는 LOAD @1에 의해 독출된 데이터를 이용한 덧셈 연산인 ADD 1, LOAD @2에 의해 독출된 데이터를 이용한 덧셈 연산인 ADD 2, LOAD @3에 의해 독출된 데이터를 이용한 덧셈 연산인 ADD 3, 및 LOAD @4에 의해 독출된 데이터를 이용한 덧셈 연산인 ADD 4가 수행된다. 또한, Cycle D에서도 마찬가지로 덧셈 연산들 ADD 5 내지 ADD 8이 수행된다. Cycle A 내지 Cycle D는 예를 들어, T=1, T=2, T=7 및 T=11과 같이 연속하지 않은 시간의 사이클들에 해당되거나, 또는 예를 들어 T=1 내지 T=4와 같이 연속한 시간의 사이클들에 해당될 수 있다.
도 8a를 참고하면, Cycle A의 LOAD @1 내지 LOAD @4의 4개의 쓰레드들에 관한 데이터들은 메모리 뱅크 1(131)에 동시에 요청될 수 없다. 또한, Cycle B의 LOAD @5 내지 LOAD @8의 4개의 쓰레드들에 관한 데이터들은 메모리 뱅크 1(131)에 동시에 요청될 수 없다.
LOAD @1 내지 LOAD @8의 쓰레드들 각각에 대하여, 앞서 도 7에서 설명되었던 바와 같이 가변 레이턴시들이 설정된 경우, 메모리 뱅크 1(131)로의 요청 타이밍과 메모리 뱅크 1(131)의 응답 타이밍을 나타내는 테이블(801)에 대해 설명하면 다음과 같다.
뱅크 충돌에 의하여 T=1 내지 T=8의 각각의 사이클들에서는 하나의 쓰레드씩 순차적으로 메모리 뱅크 1(131)에 액세스될 수 있다. 테이블(801)에서 “M.Req”는 메모리 뱅크 1(131)로의 메모리 요청(memory request)을 나타낸다.
메모리 뱅크 1(131)은, 앞서 도 7에서 가정한 바와 같이 메모리 뱅크 1(131)의 고정적인 응답 시간(“Fixed Memory Response Time”)이 4 사이클인 것으로 가정하였으므로, T=4 내지 T=11의 사이클들 각각에서 응답이 가능하다. 테이블(801)에서 “M.Rep”는 메모리 뱅크 1(131)에서의 메모리 응답(memory response)을 나타낸다.
결국, LOAD @1 내지 LOAD @8의 요청들에 대한 메모리 뱅크 1(131)의 응답들은 가변 레이턴시가 경과한 시점과 동일하게 되므로, 프로세서 코어(110)는 LOAD @1 내지 LOAD @8의 쓰레드들에 관한 데이터들을 스케줄링된 사이클들에서 바로 독출하여 ADD 1 내지 ADD 8의 덧셈 연산들을 각각 수행할 수 있게 된다. 따라서, 프로세서 코어(110)는 ADD 1 내지 ADD 8의 덧셈 연산들을 프로세서 스톨 없이 처리할 수 있다.
도 8a에서, LOAD (n)@m의 용어는 어느 메모리 뱅크의 주소 m의 데이터를 로드하는 쓰레드로서, 가변 레이턴시의 값이 n 사이클이라는 것을 의미한다.
도 8b는 도 8a의 테이블에서의 가변 레이턴시를 이용한 프로세서 코어의 처리 스케줄을 설명하기 위한 도면이다. 도 8b를 참고하면, 도 8a의 테이블(801)에서 설명된 바와 같이, LOAD @1 내지 LOAD @8의 쓰레드들 각각에 설정된 가변 레이턴시가 경과한 시점에서 ADD 1 내지 ADD 8의 덧셈 연산들이 수행될 수 있다는 점이 도시되어 있다. 즉, LOAD @1 내지 LOAD @8의 쓰레드들에 각각 서로 다른 가변 레이턴시들이 설정된다면, LOAD @1 내지 LOAD @8의 요청들에 대한 메모리 뱅크 1(131)의 응답들 각각이 해당 가변 레이턴시가 경과된 시점에 완료되면서, ADD 1 내지 ADD 8의 연산이 프로세서 스톨 없이 수행될 수 있다.
도 9a는 도 7의 가변 레이턴시를 이용하지 않고 고정 레이턴시를 이용할 경우에 발생될 수 있는 뱅크 충돌을 설명하기 위한 도면이다. 도 9a를 참고하면, 도 7의 4 사이클 내지 10 사이클의 가변 레이턴시들과 달리, 테이블(901)에는 동일한 6 사이클의 고정 레이턴시(fixed latency)가 설정된 경우가 도시되어 있다.
Cycle A의 LOAD @1 내지 LOAD @4의 4개의 쓰레드들은 모두 고정 레이턴시 6 사이클이 설정되어 있으므로, 프로세서 코어(110)는 T=6인 시점에서 LOAD @1 내지 LOAD @4의 쓰레드들에 대한 메모리 뱅크 1(131)의 응답들이 완료될 것으로 예측한다. 하지만, 앞서 도 7에서 가정한 바와 같이 메모리 뱅크 1(131)의 고정적인 응답 시간(“Fixed Memory Response Time”)은 4 사이클이므로, T=4인 시점에서부터 LOAD @1의 쓰레드 요청에 대한 응답이 완료되기 시작하여 T=7인 시점에서 LOAD @1 내지 LOAD @4의 쓰레드들의 응답들이 완료된다. 따라서, 프로세서 코어(110)의 스케줄링에 의해 예측된 T=6인 시점에서 프로세서 코어(110)는 아직 LOAD @4의 쓰레드에 관한 데이터를 독출할 수 없으므로, 프로세서 코어(110)에서는 프로세서 스톨이 발생된다.
마찬가지로, 프로세서 코어(110)는 고정 레이턴시 6 사이클이 설정된 Cycle B의 LOAD @5 내지 LOAD @8의 쓰레드들에 대하여 T=7인 시점에서 메모리 응답들이 완료될 것으로 예측하였으나, T=7인 시점에서는 LOAD @5 내지 LOAD @8의 쓰레드들 중 어떠한 쓰레드에 대한 메모리 응답도 받을 수 없는 상태이다. 결국, LOAD @5 내지 LOAD @8의 쓰레드들에 대한 메모리 응답은 T=11인 시점에서 완료될 수 밖에 없으므로, T=8 내지 T=10의 시점들에서 프로세서 코어(110)에는 프로세서 스톨이 발생된다. 그러므로, 도 8a 및 도 8b에서의 가변 레이턴시가 설정된 경우들과 비교할 때, 도 9a에서와 같이 모든 쓰레드들에 동일한 고정 레이턴시가 설정될 경우에는, 레이턴시가 설정되지 않은 경우와 유사하게 뱅크 충돌이 발생될 수 있다.
도 9b는 도 9a의 테이블에서의 고정 레이턴시를 이용한 프로세서 코어의 처리 스케줄을 설명하기 위한 도면이다. 도 9b를 참고하면, 도 9a의 테이블(901)에 대하여 설명된 바와 같이, LOAD @1 내지 LOAD @8의 쓰레드들 각각에 설정된 고정 레이턴시가 경과한 시점에서 ADD 1 내지 ADD 8의 덧셈 연산들이 수행될 수 없다는 점이 도시되어 있다. 즉, LOAD @1 내지 LOAD @4의 쓰레드들에 대해 설정된 6 사이클의 고정 레이턴시가 경과한 시점인 T=6에서는 LOAD @1 내지 LOAD @4의 쓰레드들에 대한 메모리 응답들이 완료되지 못하였으므로, 프로세서 스톨이 발생된다. 또한, LOAD @5 내지 LOAD @8의 쓰레드들에 대해 설정된 6 사이클의 고정 레이턴시가 경과한 시점인 T=7에서도 LOAD @5 내지 LOAD @8의 쓰레드들에 대한 메모리 응답들이 완료되지 못하였으므로, LOAD @5 내지 LOAD @8의 쓰레드들에 대한 메모리 응답들이 완료되기 이전 시점들인 T=8 내지 T=10 에서 프로세서 스톨이 발생된다.
결국, 도 8a 내지 도 9b에 비추어 볼 때, 뱅크 충돌의 발생이 예측되는 경우, 도 8a 및 도 8b와 같이 가변 레이턴시들을 각각의 쓰레드들에 설정한다면 프로세서의 스톨을 충분히 감소시킬 수 있고, 또한 뱅크 충돌도 제거할 수 있다.
나아가서, 프로세서의 스톨을 충분히 감소시킬 수 있는바, 프로세서 코어(110)는 “△”와 같이 표시된 타이밍들에서 여타의 작업을 병렬적으로 수행할 수 있는 보다 높은 처리 성능을 가질 수 있다.
도 10a는 다른 일 실시예에 따른 가변 레이턴시를 이용하여 뱅크 충돌을 방지하는 방법을 설명하기 위한 도면이다. 도 10a를 참고하면, 도 8a 및 8b와 달리, LOAD @1 내지 LOAD @6의 6개의 쓰레드들 및 ADD 1 내지 ADD 6의 6개의 덧셈 연산들만이 처리되는 경우에 해당된다. LOAD @1 내지 LOAD @6의 쓰레드들 각각에 대해서는 도 7에서 설명되었던 방식에 의한 가변 레이턴시들이 설정된다.
도 10b는 도 10a와 달리, 고정 레이턴시를 이용할 경우에 발생될 수 있는 뱅크 충돌을 설명하기 위한 도면이다. 도 10b를 참고하면, 도 9a 및 9b와 같이 6 사이클의 고정 레이턴시가 설정된 경우이나, 도 9a 및 9b와 달리 LOAD @1 내지 LOAD @6의 6개의 쓰레드들 및 ADD 1 내지 ADD 6의 6개의 덧셈 연산들만이 처리되는 경우에 해당된다.
도 10a와 도 10b를 비교하면, 앞서 도 8a 내지 도 9b에서 설명된 바와 같이, 도 10a에 도시된 처리 스케쥴은 가변 레이턴시의 설정에 의해 프로세서 스톨 없이 수행될 수 있으나, 도 10b에 도시된 처리 스케쥴은 고정 레이턴시로 인하여 T=7 및 T=8인 시점들에서 프로세서 스톨이 발생된다.
나아가서, 도 10a와 도 10b를 비교할 때 평균적인 레이턴시는 6 사이클로서 동일하다 할지라도, 도 10a에서는 총 9 사이클 내에서 모든 처리가 완료될 수 있으나 도 10b에서는 총 11 사이클이 소요된다. 따라서, 가변 레이턴시를 설정함으로써 프로세서 스톨을 제거할 수 있을 뿐만 아니라, 연산 속도도 보다 향상시킬 수 있게 된다.
도 11a는 또 다른 일 실시예에 따른 가변 레이턴시를 이용하여 뱅크 충돌을 방지하는 방법을 설명하기 위한 도면이다. 도 11a를 참고하면, 도 8a 및 8b와 달리, LOAD @1 내지 LOAD @4의 4개의 쓰레드들 및 ADD 1 내지 ADD 4의 4개의 덧셈 연산들만이 처리되는 경우에 해당된다. LOAD @1 내지 LOAD @4의 쓰레드들 각각에 대해서는 도 7에서 설명되었던 방식에 의한 가변 레이턴시들이 설정된다.
도 11b는 도 11a와 달리, 고정 레이턴시를 이용할 경우에 발생될 수 있는 뱅크 충돌을 설명하기 위한 도면이다. 도 11b를 참고하면, 도 9a 및 9b와 같이 6 사이클의 고정 레이턴시가 설정된 경우이나, 도 9a 및 9b와 달리 LOAD @1 내지 LOAD @4의 4개의 쓰레드들 및 ADD 1 내지 ADD 4의 4개의 덧셈 연산들만이 처리되는 경우에 해당된다.
도 11a와 도 11b를 비교하면, 도 11a 및 도 11b에 도시된 처리 스케쥴들은 가변 레이턴시를 설정하거나 고정 레이턴시를 설정한다 할지라도, 프로세서 스톨 없이 수행될 수 있다.
하지만, 도 11a와 도 11b를 비교할 때, 도 11a에서의 평균적인 레이턴시는 5 사이클로서 도 11b에서의 평균적인 레이턴시인 6 사이클보다 적다. 따라서, 가변 레이턴시가 설정된 경우에는, 고정 레이턴시가 설정되었을 경우보다 연산 속도를 향상시킬 수 있게 된다.
한편, 상술한 본 발명의 실시예들은 컴퓨터에서 실행될 수 있는 프로그램으로 작성 가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 또한, 상술한 본 발명의 실시예에서 사용된 데이터의 구조는 컴퓨터로 읽을 수 있는 기록매체에 여러 수단을 통하여 기록될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)와 같은 저장매체를 포함한다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
10: 컴퓨팅 장치 20: 컴퓨팅 장치
110: 프로세서 코어 120: 메모리 컨트롤러
130: 메모리 시스템 113: 기능 유닛들(FUs)
137: 데이터 메모리 큐(DMQ) 200: 컴파일러

Claims (20)

  1. 뱅크 충돌이 발생될 것으로 예측되는 제 1 메모리 뱅크에 액세스될 기능 유닛들(function units)의 쓰레드들(threads) 각각의 처리 타이밍을 결정하는 단계;
    상기 결정된 처리 타이밍에 따른 상기 쓰레드들의 순차적인 액세스를 위한 상기 쓰레드들 각각의 가변 레이턴시(variable latency)를 설정하는 단계;
    상기 결정된 처리 타이밍에 따라 상기 쓰레드들을 데이터 메모리 큐(data memory queue)에 순차적으로 저장하는 단계; 및
    상기 쓰레드들 각각의 상기 가변 레이턴시가 경과할 때마다 상기 데이터 메모리 큐로부터 상기 저장된 쓰레드들을 순차적으로 상기 제 1 메모리 뱅크에 액세스시킴으로써 연산을 수행하는 단계를 포함하는, 메모리의 뱅크 충돌을 방지하기 위한 방법.
  2. 제 1 항에 있어서,
    상기 설정하는 단계는
    상기 처리 타이밍에 기초하여 상기 쓰레드들마다 상기 가변 레이턴시를 서로 다른 값으로 설정하는, 방법.
  3. 제 2 항에 잇어서,
    상기 설정하는 단계는
    상기 제 1 메모리 뱅크의 고정적인 응답 시간 및 상기 결정된 처리 타이밍에서 상기 데이터 메모리 큐에 저장될 상기 쓰레드들의 스택들의 수에 기초하여 상기 가변 레이턴시를 설정하는, 방법.
  4. 제 1 항에 있어서,
    상기 설정하는 단계는
    상기 쓰레드들에 관한 인스트럭션들(instructions)에 상기 가변 레이턴시의 값을 지정하는 소정 필드(field)를 추가함으로써 상기 가변 레이턴시를 설정하는, 방법.
  5. 제 1 항에 있어서,
    상기 설정하는 단계는
    상기 제 1 메모리 뱅크에 상기 쓰레드들 각각에 대한 데이터가 요청된 시점에서부터 상기 제 1 메모리 뱅크의 고정적인 응답 시간만큼 경과한 시점에, 상기 연산이 수행되도록, 상기 가변 레이턴시를 설정하는, 방법.
  6. 제 1 항에 있어서,
    상기 가변 레이턴시는
    상기 제 1 메모리 뱅크에서 상기 쓰레드들에 의해 발생될 상기 뱅크 충돌의 횟수에 비례하여 설정되는, 방법.
  7. 제 1 항에 있어서,
    상기 연산을 수행하는 단계는
    상기 데이터 메모리 큐에 저장된 상기 쓰레드들의 우선 순위(priority)를 체크하는 단계;
    상기 우선 순위가 높은 순서대로 상기 쓰레드들을 순차적으로 상기 제 1 메모리 뱅크에 액세스시키는 단계;
    상기 액세스된 쓰레드들의 처리 결과들을 재정렬 버퍼(reorder buffer)에 저장하는 단계; 및
    상기 저장된 처리 결과들을 독출하여 상기 연산을 수행하는 단계를 포함하는, 방법.
  8. 제 1 항에 있어서,
    상기 데이터 메모리 큐는
    상기 기능 유닛들에 의해 요청된 제 1 사이클의 쓰레드들의 저장이 완료된 상태에서 제 2 사이클의 쓰레드의 저장이 새로 요청된 경우, 상기 제 1 사이클의 쓰레드들 중 우선 순위가 가장 높은 쓰레드를 소거함으로써 제 2 사이클의 쓰레드를 새로 저장하는, 방법.
  9. 제 1 항에 있어서,
    상기 설정하는 단계는
    상기 기능 유닛들에 의해 요청된 제 1 사이클의 쓰레드들 중 우선 순위가 가장 낮은 쓰레드의 가변 레이턴시와 상기 기능 유닛들에 의해 요청된 제 2 사이클의 쓰레드들 중 우선 순위가 가장 높은 쓰레드의 가변 레이턴시가 같도록, 상기 가변 레이턴시를 설정하는, 방법.
  10. 제 1 항에 있어서,
    상기 기능 유닛들의 쓰레드들은
    코어스 그레인 어레이(Coarse-Grained Array, CGA) 모드에서 발생된 쓰레드들을 포함하는, 방법.
  11. 제 1 항에 있어서,
    상기 방법은
    컴파일러(compiler)에 의한 스케쥴링 과정에서 수행되는, 방법.
  12. 제 1 항 내지 제 11 항 중에 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
  13. 뱅크 충돌이 발생될 것으로 예측되는 제 1 메모리 뱅크에 액세스될 쓰레드들(threads)을 생성하는 복수의 기능 유닛들;
    상기 쓰레드들 각각의 처리 타이밍을 결정하여, 상기 결정된 처리 타이밍에 따른 상기 쓰레드들의 순차적인 액세스를 위한 상기 쓰레드들 각각의 가변 레이턴시(variable latency)를 설정하는 메모리 컨트롤러; 및
    상기 결정된 처리 타이밍에 따라 상기 쓰레드들을 순차적으로 저장하는 데이터 메모리 큐(data memory queue)를 포함하고,
    상기 메모리 컨트롤러는, 상기 쓰레드들 각각의 상기 가변 레이턴시가 경과할 때마다 상기 데이터 메모리 큐로부터 상기 저장된 쓰레드들을 순차적으로 상기 제 1 메모리 뱅크에 액세스시킴으로써 연산을 수행하도록 제어하는, 메모리의 뱅크 충돌을 방지하기 위한 장치.
  14. 제 13 항에 있어서,
    상기 메모리 컨트롤러는
    상기 처리 타이밍에 기초하여 상기 쓰레드들마다 상기 가변 레이턴시를 서로 다른 값으로 설정하는, 장치.
  15. 제 14 항에 잇어서,
    상기 메모리 컨트롤러는
    상기 제 1 메모리 뱅크의 고정적인 응답 시간 및 상기 결정된 처리 타이밍에서 상기 데이터 메모리 큐에 저장될 상기 쓰레드들의 스택들의 수에 기초하여 상기 가변 레이턴시를 설정하는, 장치.
  16. 제 13 항에 있어서,
    상기 메모리 컨트롤러는
    상기 쓰레드들에 관한 인스트럭션들(instructions)에 상기 가변 레이턴시의 값을 지정하는 소정 필드(field)를 추가함으로써 상기 가변 레이턴시를 설정하는, 장치.
  17. 제 13 항에 있어서,
    상기 메모리 컨트롤러는
    상기 제 1 메모리 뱅크에 상기 쓰레드들 각각에 대한 데이터가 요청된 시점에서부터 상기 제 1 메모리 뱅크의 고정적인 응답 시간만큼 경과한 시점에, 상기 연산이 수행되도록, 상기 가변 레이턴시를 설정하는, 장치.
  18. 제 13 항에 있어서,
    상기 가변 레이턴시는
    상기 제 1 메모리 뱅크에서 상기 쓰레드들에 의해 발생될 상기 뱅크 충돌의 횟수에 비례하여 설정되는, 장치.
  19. 제 13 항에 있어서,
    상기 메모리 컨트롤러는
    상기 데이터 메모리 큐에 저장된 상기 쓰레드들의 우선 순위(priority)를 체크하고, 상기 우선 순위가 높은 순서대로 상기 쓰레드들을 순차적으로 상기 제 1 메모리 뱅크에 액세스시키고,
    상기 장치는
    상기 액세스된 쓰레드들의 처리 결과들을 저장하는 재정렬 버퍼(reorder buffer)를 더 포함하고,
    상기 기능 유닛들은
    상기 저장된 처리 결과들을 독출하여 상기 연산을 수행하는, 장치.
  20. 제 13 항에 있어서,
    상기 메모리 컨트롤러는
    상기 기능 유닛들에 의해 요청된 제 1 사이클의 쓰레드들 중 우선 순위가 가장 낮은 쓰레드의 가변 레이턴시와 상기 기능 유닛들에 의해 요청된 제 2 사이클의 쓰레드들 중 우선 순위가 가장 높은 쓰레드의 가변 레이턴시가 같도록, 상기 가변 레이턴시를 설정하는, 장치.
KR1020140023707A 2014-02-27 2014-02-27 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치 KR102205899B1 (ko)

Priority Applications (6)

Application Number Priority Date Filing Date Title
KR1020140023707A KR102205899B1 (ko) 2014-02-27 2014-02-27 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치
CN201580016865.XA CN106133709B (zh) 2014-02-27 2015-02-26 用于防止存储器中的存储体冲突的方法和装置
EP15755731.5A EP3097492B1 (en) 2014-02-27 2015-02-26 Method and apparatus for preventing bank conflict in memory
TW104106294A TW201539189A (zh) 2014-02-27 2015-02-26 避免記憶體中記憶庫衝突的方法、裝置及電腦可讀記錄媒體
US15/121,999 US10223269B2 (en) 2014-02-27 2015-02-26 Method and apparatus for preventing bank conflict in memory
PCT/KR2015/001854 WO2015130093A1 (en) 2014-02-27 2015-02-26 Method and apparatus for preventing bank conflict in memory

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140023707A KR102205899B1 (ko) 2014-02-27 2014-02-27 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20150101870A true KR20150101870A (ko) 2015-09-04
KR102205899B1 KR102205899B1 (ko) 2021-01-21

Family

ID=54009347

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140023707A KR102205899B1 (ko) 2014-02-27 2014-02-27 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치

Country Status (6)

Country Link
US (1) US10223269B2 (ko)
EP (1) EP3097492B1 (ko)
KR (1) KR102205899B1 (ko)
CN (1) CN106133709B (ko)
TW (1) TW201539189A (ko)
WO (1) WO2015130093A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102450514B1 (ko) * 2017-09-19 2022-10-05 삼성전자주식회사 메모리 컨트롤러의 동작 방법 및 그것을 포함하는 저장 장치의 동작 방법
CN108920284A (zh) * 2018-06-06 2018-11-30 亚信科技(中国)有限公司 共享内存访问方法及系统
CN109710309B (zh) * 2018-12-24 2021-01-26 安谋科技(中国)有限公司 减少存储体冲突的方法
JP2021170241A (ja) * 2020-04-16 2021-10-28 富士通株式会社 情報処理装置及び制御プログラム

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090260013A1 (en) * 2008-04-14 2009-10-15 International Business Machines Corporation Computer Processors With Plural, Pipelined Hardware Threads Of Execution

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6385708B1 (en) 1998-11-16 2002-05-07 Infineon Technologies Ag Using a timing-look-up-table and page timers to determine the time between two consecutive memory accesses
US7043729B2 (en) * 2002-08-08 2006-05-09 Phoenix Technologies Ltd. Reducing interrupt latency while polling
US7093059B2 (en) 2002-12-31 2006-08-15 Intel Corporation Read-write switching method for a memory controller
US8560795B2 (en) 2005-06-30 2013-10-15 Imec Memory arrangement for multi-processor systems including a memory queue
US8345053B2 (en) * 2006-09-21 2013-01-01 Qualcomm Incorporated Graphics processors with parallel scheduling and execution of threads
US8245232B2 (en) 2007-11-27 2012-08-14 Microsoft Corporation Software-configurable and stall-time fair memory access scheduling mechanism for shared memory systems
US8180975B2 (en) * 2008-02-26 2012-05-15 Microsoft Corporation Controlling interference in shared memory systems using parallelism-aware batch scheduling
US8688964B2 (en) * 2009-07-20 2014-04-01 Microchip Technology Incorporated Programmable exception processing latency
US8819687B2 (en) * 2010-05-07 2014-08-26 Advanced Micro Devices, Inc. Scheduling for multiple memory controllers
US8732711B2 (en) * 2010-09-24 2014-05-20 Nvidia Corporation Two-level scheduler for multi-threaded processing
EP2523120A1 (en) 2011-05-12 2012-11-14 Imec Microcomputer architecture for low power efficient baseband processing
US9645802B2 (en) * 2013-08-07 2017-05-09 Nvidia Corporation Technique for grouping instructions into independent strands
US11354129B2 (en) * 2015-10-09 2022-06-07 Spreadtrum Hong Kong Limited System and method for predicting latency of a variable-latency instruction

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090260013A1 (en) * 2008-04-14 2009-10-15 International Business Machines Corporation Computer Processors With Plural, Pipelined Hardware Threads Of Execution

Also Published As

Publication number Publication date
EP3097492A4 (en) 2017-10-25
KR102205899B1 (ko) 2021-01-21
CN106133709B (zh) 2019-07-05
EP3097492B1 (en) 2018-12-26
US10223269B2 (en) 2019-03-05
TW201539189A (zh) 2015-10-16
US20170068620A1 (en) 2017-03-09
WO2015130093A1 (en) 2015-09-03
CN106133709A (zh) 2016-11-16
EP3097492A1 (en) 2016-11-30

Similar Documents

Publication Publication Date Title
US9354944B2 (en) Mapping processing logic having data-parallel threads across processors
US9734058B2 (en) Optimizing configuration memory by sequentially mapping the generated configuration data by determining regular encoding is possible and functional units are the same in adjacent cycles
US20080059966A1 (en) Dependent instruction thread scheduling
US8615770B1 (en) System and method for dynamically spawning thread blocks within multi-threaded processing systems
US9645802B2 (en) Technique for grouping instructions into independent strands
US9513923B2 (en) System and method for context migration across CPU threads
JP2008529181A (ja) ライン・アクセスおよびワード・アクセスの結合を用いてメモリをアクセスするためのシステムおよび方法
KR102205899B1 (ko) 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치
CN114610394B (zh) 指令调度的方法、处理电路和电子设备
US9690600B2 (en) Reconfigurable processor and method of operating the same
US20170220346A1 (en) Method and apparatus for inter-lane thread migration
Ji et al. Demand layering for real-time DNN inference with minimized memory usage
US8413151B1 (en) Selective thread spawning within a multi-threaded processing system
CN108021563B (zh) 一种指令间数据依赖的检测方法和装置
CN112559403B (zh) 一种处理器及其中的中断控制器
US8959497B1 (en) System and method for dynamically spawning thread blocks within multi-threaded processing systems
Lázaro-Muñoz et al. A tasks reordering model to reduce transfers overhead on GPUs
US20220413849A1 (en) Providing atomicity for complex operations using near-memory computing
KR20150051083A (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
US20120137300A1 (en) Information Processor and Information Processing Method
US11625269B1 (en) Scheduling for locality of reference to memory
KR102168175B1 (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
US10606602B2 (en) Electronic apparatus, processor and control method including a compiler scheduling instructions to reduce unused input ports
JP2023059847A (ja) リソース再設定可能な深層ニューラルネットワーク加速器、システムおよび方法
KR20150051115A (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right