KR100456507B1 - 소프트웨어 데이터 프리펫치의 오버헤드 감소 방법 - Google Patents

소프트웨어 데이터 프리펫치의 오버헤드 감소 방법 Download PDF

Info

Publication number
KR100456507B1
KR100456507B1 KR10-2001-7015144A KR20017015144A KR100456507B1 KR 100456507 B1 KR100456507 B1 KR 100456507B1 KR 20017015144 A KR20017015144 A KR 20017015144A KR 100456507 B1 KR100456507 B1 KR 100456507B1
Authority
KR
South Korea
Prior art keywords
register
prefetch
circular
array
predicate
Prior art date
Application number
KR10-2001-7015144A
Other languages
English (en)
Other versions
KR20020022056A (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 인텔 코오퍼레이션
Publication of KR20020022056A publication Critical patent/KR20020022056A/ko
Application granted granted Critical
Publication of KR100456507B1 publication Critical patent/KR100456507B1/ko

Links

Classifications

    • 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
    • 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
    • G06F9/383Operand prefetching
    • 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
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • G06F9/30127Register windows
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

본 발명은 루프 내로부터 어레이 데이터를 효율적으로 프리펫치하는 메커니즘을 제공한다. 프리펫치 명령은 순환 레지스터 세트로부터 레지스터에 의해 매개변수화된다. 각각의 루프 반복시, 프리펫치는 매개변수화된 프리펫치 명령에 따라 구현되고, 프리펫치 명령이 지정한 주소가 조절된다. 레지스터는 각각의 루프 반복에 대해 순환되고, 순환 레지스터에 매개변수화된 프리펫치 명령은 대응하여 조절된다. 주어진 어레이에 대한 프리펫치 사이의 반복 횟수는 순환 레지스터 세트 내의 요소(element)의 수로 결정된다.

Description

소프트웨어 데이터 프리펫치의 오버헤드 감소 방법 {MECHANISM TO REDUCE THE OVERHEAD OF SOFTWARE DATA PREFETCHES}
현재 구입 가능한 프로세서는 관련 메모리가 동작하는 클록 속도(clock speed)보다 훨씬 빠른 클록 속도로 동작한다. 메모리와 프로세서간의 속도 차를 커버하고, 데이터가 공급되는 프로세서의 실행 자원을 유지하는 것이 메모리 시스템의 기능이다. 이런 이유로, 메모리 시스템은 주 메모리에 더하여 예를 들어 L0, L1, L2의 캐시 계층(hierarchy of cache)을 포함한다. 캐시는 대부분의 프로그램 코드가 나타내는 시간 및 공간적 지역성(locality)을 활용하여 프로세서가 요청하기 쉬운 데이터를 유지한다. 예를 들면, 프로그램은 인접한 메모리 지역(공간적 지역성)에서 데이터에 액세스하는 경향이 있으므로, "캐시 라인(cache line)"이라 불리는 블록 단위로 데이터는 캐시에 적재된다. 유사하게, 최근에 액세스되지 않은 데이터는 우선적으로 캐시에서 밀려나는데, 이는 최근에 액세스되었던 데이터에 액세스하려는 경향 때문이다(시간적 지역성).
캐시에 데이터를 저장하는 이점은 비교적 작은 크기 및 빠른 액세스 속도에있다. 캐시는 데이터를 프로세서에 신속하게 제공할 수 있는 빠른 메모리 구조를 갖는다. 캐시의 기억 용량은 프로세서로 데이터를 회귀시키는 계층 구조의 연속 캐시가 필요로 하는 시간에 따라, L0에서 L2로 증가한다. 데이터가 위치되거나 캐시가 고갈될 때까지, 가장 작으면서 가장 빠른 구조에서 시작하여 캐시 구조를 통해 데이터 요청(data request)은 전달된다. 캐시가 고갈되는 경우, 요청받은 데이터는 주 메모리로 회귀한다.
메모리 시스템의 설계 상의 이점에도 불구하고, 일정 형태의 프로그래밍 구조는 프로세서에 데이터를 제공하는 능력에 여전히 중점을 둘 수 있다. 예를 들면, 대용량의 데이터에 액세스하는 코드 세그멘트(code segment)는 다중 캐시 미스(multiple cache miss)를 신속하게 발생시킬 수 있다. 각각의 캐시 미스로 인해 상위 수준 캐시 또는 주 메모리로부터 목적 데이터(target data)를 검색하기 위해서는 대기 시간이 긴 액세스를 필요로 한다. 이런 액세스는 컴퓨터 시스템의 성능을 상당히 감소시킬 수 있다.
프리펫치는 주 메모리에서 하위 수준 캐시(프로세서의 실행 자원에 가장 가까운 것)로의 데이터의 이동에 관련된 대기 시간을 커버하는 공지의 기술이다. 프리펫치 명령은 목적된 데이터가 요구되는 시간 훨씬 이전에 발생된다. 이는 액세스와 다른 연산을 중첩시켜 이러한 연산에 의해 액세스 대기 시간을 감추는 것이다. 하지만, 프리펫치 명령은 다른 연산과 함께 자체의 잠재적인 성능 손실을 가져온다. 프리펫치 요청은 프로세서 메모리 채널에 트래픽(traffic)을 더하고, 이는 적재(load)의 대기 시간을 증가시킬 수 있다. 이런 문제는 연속적인 루프 반복시 다중 어레이에서 데이터를 적재하는 루프에 대해 악화될 수 있다. 이런 루프는 주기적인 프리펫치 요청을 발생시켜 대응하는 적재가 실행되는 경우에 하위 수준 캐시에서 어레이 데이터가 확실하게 사용 가능하도록 한다. 이하에서 설명하는 바와 같이, 각각의 루프 반복 시에 단순히 요청을 발생시키는 것은 불필요한, 즉 여분의 메모리 트래픽을 발생시키고 상대적으로 짧은 주기로 프리펫치를 묶게 된다(bunche).
프리펫치는 하나 이상의 캐시로 요청받은 주소를 포함한 데이터 라인을 반환한다. 각각의 캐시 라인은 다중 루프 반복에 대해 어레이 요소를 제공하기 위한 충분한 데이터를 통상 포함한다. 그 결과, 프리펫치를 모든 루프 반복 시에 발생시킬 필요가 없다. 또한, 짧은 주기로 너무 많은 프리펫치 요청을 발생시키는 것은 시스템 성능을 열화시킬 수 있다. 각각의 프리펫치 요청은 프로세서와 메모리간 통신 채널의 대역폭을 소비하여, 요구 페치에 대한 대기 시간 및 이 채널에 사용되는 다른 연산을 증가시킨다. 또한, 다중 어레이가 루프 내부에서 조작되는 경우, 프리펫치 연산은 각각의 어레이에 대해 제공된다. 이러한 프리펫치에 대한 캐시 미스는 동시에 발생하는 경향이 있으며, 더욱이 동시 다발적인 활동으로 인해 보조 시스템에 부담을 준다. 이러한 문제를 다루는 한 방법은 루프 전개(loop unrolling)이다.
예시적인 루프(Ⅰ) 부분이 이하에 도시된다. 루프는 각각의 루프 반복시 5개의 어레이, A, B, C, D 및 E에서 데이터를 적재하고 조작한다.
(Ⅰ)
Orig_Loop:
적재 A(I)
적재 B(I)
적재 C(I)
적재 D(I)
적재 E(I)
...
분기 Orig_Loop
도 1은 루프(Ⅰ) 다음에 이어지는 프리펫치를 포함하는 변형을 나타낸다. 여기서, 각각의 어레이 요소는 8바이트이고 각각의 캐시 라인은 64바이트를 반환하여, 이 경우 프리펫치는 루프의 매 8번째 반복시의 어레이에 대해서만 요구된다. 이는 도 1에서와 같이 루프(Ⅰ)를 8번 전개시키고 연속적인 어레이 요소에 대한 명령 그룹과 함께 각 어레이에 대한 프리펫치 요청을 발생시켜 달성된다. 한편, 루프 전개는 메모리 내의 프로그램 풋프린트(footprint)(크기)를 심각하게 확장시켜, 메모리 채널을 압도할 수 있는 프리펫치 동작의 버스트(burst)를 어드레스(address)하지 못할 수 있다.
여분의 프리펫치를 제거하는 다른 접근은 프리펫치를 서술하고(predicate), 연속 반복 시의 술어값을 계산하여 적절한 프리펫치를 출입(gate on or off)시키는 것이다. 술어 계산(predicate calculation)을 구현하는 데 필요한 명령은 코드 크기를 확장시키고, 결정되는 조건에 따라 루프를 감속시킬 수 있다.
본 발명은 루프로부터 프리펫치를 구현하는 것에 관한 이러한 그리고 다른 문제를 기재하는 것이다.
본 발명은 데이터를 프리펫치하는 방법에 관한 것으로서, 특히 루프 내에서 프리펫치를 실행하는 방법에 관한 것이다.
도 1은 루프 내로부터 프리펫치를 구현하는 종래 방법에 따라 전개한 루프를 나타낸다.
도 2는 본 발명을 구현할 수 있는 시스템의 일 실시예의 블록도이다.
도 3은 루프 내로부터 프리펫치를 처리하는 본 발명에 따른 방법을 나타내는 흐름도이다.
본 발명은 명령 오버헤드(instruction overhead)를 감소시키고 소프트웨어 데이터 프리펫치에 대한 일정(scheduling)을 개선시킨다. 레지스터 순환(register rotation)은 선택된 루프 반복(loop iteration)에 대한 프리펫치를 분산시키는데 이용되어 임의의 주어진 반복에서 생긴 프리펫치의 수를 감소시킨다. 특히, 루프 내의 대량의 데이터에 액세스하는 프로그램에 대해 유용하다.
본 발명에 따라서, 레지스터 내의 값에 의해 매개변수화된(parameterized) 프리펫치 연산(prefetch operation)에 의해 루프 내로 데이터가 프리펫치된다. 프리펫치 연산에 의해 목적된 데이터는 레지스터 내로 새로운 값을 순환시켜 조절된다.
본 발명의 일 실시예에서, 프리펫치 연산을 매개변수화하는 레지스터는 프리펫치될 주소를 지정하는 순환 레지스터이다. 레지스터 내에 새로운 값을 순환시키면 연속적인 루프 반복 동안에 프리펫치 목적(prefetch target)을 변경시킨다. 본 발명의 다른 실시예에서, 레지스터는 기억된 현재의 술어값에 따라 프리펫치 연산을 활성화 또는 비활성화시키는 순환 술어 레지스터(rotating predicate register)이다. 레지스터 내로 새로운 값을 순환시키면 루프의 다음 반복에 대한 프리펫치 연산을 활성화 또는 비활성화시킨다.
이하에서는 여러 소정 실시예를 기재하여 본 발명의 완전한 이해를 제공한다. 하지만, 당업자는 이러한 소정 실시예 없이도 본 발명을 실시할 수 있음을 인식할 것이다. 또한, 공지의 방법, 절차, 구성요소 및 회로는 본 발명에 대한 초점을 맞추기 위해 상세히 설명하지 않았다.
본 발명은 명령 오버헤드를 감소시키고 소프트웨어 데이터 프리펫치 일정을 개선하여 효과적인 프리펫칭을 지원한다. 루프 연산 중에 데이터 프리펫칭을 구현하는 곳에 특히 유용하다. 본 발명에 따른 방법은 루프 반복 주기(loop iteration interval)가 아니라 요청받은 캐시 라인 크기(cache line size) 및 데이터 크기(data size)로 결정되는 주기로 루프 내에 프리펫치가 발생되게 한다. 본 방법은 루프 내에 코드 크기를 확장하거나 고가의 계산(명령 오버헤드)을 추가하지 않고 그렇게 한다. 오히려, 루프 내의 프리펫치 연산은 순환 레지스터 세트로부터 선택된 레지스터에 기억된 값에 의해 매개변수화된다. 프리펫치는 각각의 루프 반복에 대해 선택된 레지스터 내로 새로운 값을 순환시켜 조절된다.
일 실시예에서, 레지스터 값은 프리펫치 연산에 의해 목적된(targeted) 주소를 나타낸다. 루프가 다중 어레이에 대한 적재(load)를 포함하는 경우, 프리펫치 명령은 각각의 루프 반복에 대하여 상이한 어레이의 데이터를 프리펫치하는 것을 목적한다. 순환 레지스터 세트의 크기는 데이터를 프리펫치할 루프 내의 어레이 수로 결정된다. 프리펫치될 어레이 수, 데이터 구성요소의 크기[스트라이드(stride)] 및 캐시 라인 크기에 따라, 루프 반복 당 하나 이상의 프리펫치 명령을 사용하는 것이 바람직하다. 각각의 어레이에 대한 프리펫치의 빈도(frequency)를 조절하는 것 외에, 다중 어레이에 대한 프리펫치 명령을 재사용하여 메모리 내 프로그램 코드의 풋프린트(footprint)를 감소시킨다.
다른 실시예에서 레지스터는 술어 레지스터이며 프리펫치 명령은 레지스터가보유하는 값에 따라 출입된다(gated on or off). 루프가 데이터가 적재되는 단일 어레이를 포함하는 경우, 순환 술어 레지스터를 적절하게 초기화시켜 선택된 루프 반복에 대해 프리펫치 명령을 활성화시킬 수 있다. 이는 캐시 라인이 다중 루프 반복에 대해 충분한 데이터를 회귀시키는 경우에 발생될 수 있는 여분의 프리펫치 요청을 제거할 수 있다. 루프가 다중 어레이를 포함하는 경우, 다중 프리펫치 명령은 관련된 술어 레지스터로 매개변수화될 수 있다. 레지스터 순환은 어느 어레이에 대해 어느 프리펫치 명령을 각각의 루프 반복에 대해 활성화시킬지 결정한다.
당업자는 예시적인 실시예를 변형하고 결합하여 소정 컴퓨터 시스템에 이용 가능한 자원 및 프로그램 코드의 특질을 수용할 수 있음을 인식할 것이다.
본 발명은 레지스터 순환을 지원하는 시스템에 구현될 수 있다. 이러한 목적을 달성하기 위하여, 레지스터 순환은 레지스터 재명명(register renaming)을 구현하는 방법을 인용한다. 레지스터 순환에서, 특정 레지스터 세트에 기억된 값을 레지스터 사이에서 주기적으로 시프트(shift)시킨다. 순환은 루프 분기 명령(loop branch instruction)과 같은 명령의 제어 하에 통상 행해진다. 예를 들면, 현재 루프 반복 상의 레지스터[r(n)]에 기억된 값은, 루프 분기 명령이 다음 루프 반복을 트리거(trigger)할 경우에 레지스터[r(n+1)]로 시프트된다. 레지스터 순환은, 예를 들어 인텔사 발행 IA-64 Application Instruction Set Architecture Guide에 설명되어 있다. 보다 상세한 설명은 Rau, B.R., Lee, M., Tirumalai, P., 및 Schlansker, M.S. 등의 SIGNPALN'92 Conference On Programming Language Design and Implementation(San Francisco, 1992)의 회의록인Register Allocation For Software Pipelined Loops에서 알 수 있다.
순환에 이용 가능한 레지스터의 수와 종류는 레지스터의 종류에 따라 변할 수 있다. 예를 들면, 인텔의 IA-64 명령 세트 구조(instruction set architecture)(ISA)는 64개의 순환 술어 레지스터, 96개의 순환 부동 소수점 레지스터(rotating floating point register) 및 여러 개의 순환 범용 레지스터를 제공한다. IA-64 ISA에서, 128개 중 96개의 범용 레지스터는 순환용으로 정해질 수 있다. 순환 범용 레지스터는 8의 배수로 정해진다.
도 2는 본 발명을 구현할 수 있는 시스템(200)의 일 실시예의 블록도이다. 시스템(200)은 시스템 버스(280)와 메모리 버스(284)를 통해 시스템 로직(system logic)(290)에 연결된 프로세서(processor)(202) 및 주 메모리(main memory)(270)를 포함한다. 시스템(200)은 통상적으로 시스템 로직(290)을 통해 통신하는 그래픽 시스템 및 주변 장치(도시하지 않음)를 포함한다.
기재된 프로세서(202)의 실시예는 실행 자원(execution resource)(210), 제1 캐시(L0)(220), 제2 캐시(L1)(230), 제3 캐시(L2), 캐시 제어기(250) 및 버스 제어기(260)를 포함한다. 프로세서는 또한 명령을 검색하고 처리하며 명령이 회수되었을 때 구조적인 상태를 갱신시키는 로직 요소(logic element)(도시하지 않음)를 포함한다. 버스 제어기(260)는 프로세서(202)와 주 메모리(270) 사이의 데이터 흐름을 관리한다. L2 캐시(240)는 프로세서(202) 이외의 다른 칩 상에 있을 수 있으며, 이 경우 버스 제어기(260)는 L2 캐시(240)와 프로세서(202) 사이의 데이터 흐름을 관리할 수 있다. 본 발명은 메모리 시스템이나 프로세서의 세부적인 구조에 의존하지 않는다.
L0 캐시(220), L1 캐시(230), L2 캐시(240) 및 주 메모리(270)는 데이터 및 명령을 실행 자원(210)에 제공하는 메모리 계층(memory hierarchy)을 형성한다. 명령은 레지스터 파일(214)에서 제공되거나 메모리 계층의 여러 구성요소로부터 실행 자원(210)으로 바이패스(bypass)되는 데이터[오퍼랜드(operand)]를 연산시킨다. 술어 레지스터 파일(218)은 선택된 명령을 프로그램 내에 조건적으로 실행시키는데 사용될 수 있다. 오퍼랜드 데이터는 각각 적재 및 저장 연산을 통해 레지스터 파일(214)로부터 입출력된다. 적재 연산은 소정 메모리 주소에서 데이터에 대한 메모리 계층을 검색하고, 요청받은 데이터를 발견한 계층의 제1 수준에서부터 레지스터 파일(214)로 데이터를 회귀시킨다. 저장(store)은 레지스터 파일(214)로부터 메모리 계층의 하나 이상의 수준까지 데이터를 기입(write)하는 것이다.
본 발명에서, 레지스터 파일의 일부(214, 218)는 레지스터 재명명 장치(216)에 의해 순환될 수 있다.
실행 자원이 본 발명에 따라서 프리펫치를 관리하는 루프를 구현하는 경우, 프리펫치 연산은 레지스터의 순환으로 메모리(270)의 데이터 영역(274) 내의 상이한 위치로 향한다. 이러한 프리펫치 연산은 대응하는 루프 반복이 도달한 경우에 루프의 적재 명령에 의해 신속하게 액세스될 수 있는 하나 이상의 하위 수준 캐시(220, 230)로 어레이 데이터를 이동시킨다. 데이터의 프리펫치, 적재 및 조작을 구현하는 명령은 실행 중에 메모리(270)의 명령 영역(278)에 보통 저장된다. 데이터는 불휘발성 메모리 구조(하드 디스크, 플로피 디스크, CD 등)에서 주 메모리로 제공될 수 있다.
본 발명의 실시예는 이해를 돕기 위하여 소정의 코드 세그멘트(code segment)로 설명하며, 당업자는 본 발명의 사상과 범위 내에 있는 이러한 코드 세그멘트의 여러 변형을 인식할 것이다.
본 발명의 일 실시예는 다음의 코드 세그멘트로 설명한다.
(Ⅱ) r41 = 주소 E(1+X)
r42 = 주소 D(1+X)
r43 = 주소 C(1+X)
r44 = 주소 B(1+X)
r45 = 주소 A(1+X)
(Ⅱa) 루프:
프리펫치[r45]
r40= r45 + INCR
....
적재 A(J)
적재 B(J)
적재 C(J)
적재 D(J)
적재 E(J)
....
J=J+1
분기 루프
A, B, C, D 및 E는 어레이를 나타내며, 어레이의 구성요소는 대응하는 적재 명령에 의해 코드 세그멘트의 루프 부분내로부터 액세스된다. 프리펫치가 적절히 동기화되는 경우, 적재에 의해 지정된 데이터 요소는 하위 수준 캐시에서 이용할 수 있으며, 낮은 액세스 순환 대기 시간(low access latency), 예를 들어 1 또는 2 주기(cycle)를 갖는 프로세서의 실행 자원에 제공될 수 있다. 코드 세그멘트(Ⅱ)에서, 이는 적절한 값을 주소 오프셋(offset)인 X와 주소 증가인 INCR를 선택함으로써 달성될 수 있다.
기재된 루프에서, 현재 루프 반복이 어레이의 요소(J) 상에서 연산된다면, 프리펫치는 어레이의 요소(J+X)를 지정한다. 여기서, X는 현재 요소 다음에 오는지정 어레이의 번호를 나타낸다. 사실상, X는 J+X를 지정한 적재가 실행되는 경우에 요소 J+X가 캐시 내에 확실히 있도록 하는데 필요한 리드 타임(lead time)을 나타낸다. X 값은 코드 세그멘트(Ⅱ) 각각의 반복 및 주 메모리로 데이터를 회귀시시키기 위한 순환 대기 시간을 구현하는데 필요한 주기 횟수에 의존한다. 예를 들면, 코드 세그멘트(Ⅱ)가 10 클록 주기로 반복을 완료하고 주 메모리로 캐시 라인을 회귀시키는데 100 클록 주기가 걸린다면, 현재의 루프 반복 내의 프리펫치는 그보다 적어도 10 요소 이전의 요소를 지정해야 한다.
코드 세그멘트(Ⅱ) 각각의 반복에 있어서, 프리펫치 명령은 r45로 특정된 주소를 지정한다. 여기서, r45는 물리 레지스터(physical register)의 값을 가리키는 가상 레지스터 식별기(virtual register identifier)이다. 물리 레지스터와 가상 레지스터 식별기의 대응 관계는 레지스터 재명명 알고리즘으로 제공되며, 이 경우에는 레지스터 순환이다. 코드 세그멘트(Ⅱ)에서, r41 내지 r45는 각각 어레이 E 내지 A의 요소의 주소로 초기화된다. 이러한 레지스터의 값은 루프 분기 명령이 실행되는 경우 각각의 루프 반복에 대해 순환된다. 레지스터 순환은 프리펫치 명령이 코드 세그멘트(Ⅱ)의 각각의 반복에 대해 적용되는 어레이를 조절한다. 이는 각 어레이에 대한 프리펫치 명령을 분리할 필요를 없애며 프리펫치 묶음(bunched prefetch)과 관련된 대역폭 문제를 제거한다. 또한, 소정 어레이에 대해 발생하는 프리펫치의 빈도를 조절하여 프리펫치 및 어레이 스트라이드(array stride)에 회귀되는 캐시 라인의 크기를 반영할 수 있도록 한다.
할당 명령(assignment instruction) r40 = r45 + INCR는 다음 프리펫치를 위해 지정된 어레이의 주소를 증가시키고 순환 레지스터 세트 내의 시작 레지스터(starting register)로 회귀시킨다. 코드 세그멘트(Ⅱ)에서, 프리펫치는 r40에서 r45까지 증가된 어레이 주소를 이동시키는데 필요한 루프 반복 회수인 주어진 5개의 모든 반복 요소를 지정한다. 그 결과, 프리펫치는 연속적인 5번의 반복 시에 어레이 A, B, C, D 및 E 내의 모든 요소를 지정하고, 이 후 주기를 반복하며, 6번째 반복 시 어레이 A로 시작한다.
할당 명령의 증가값은 다음의 매개변수 즉, 각 프리펫치 상에서 회귀되는 캐시 라인의 크기(L), 라인 펫치 사이의 반복 횟수, 즉 프리펫치를 필요로 하는 어레이의 수(N) 및 어레이 요소의 크기(스트라이드)(M)에 의존한다. 캐시 라인 크기를 스트라이드로 나눈 것은 단일 라인 펫치가 데이터를 제공하는 반복 횟수이다. 예를 들면, 캐시 라인이 64바이트(byte)(L = 64)이고, 데이터는 5개 어레이(N = 5)에 필요한 경우, 각 어레이 요소는 8바이트(M = 8)이다.
INCR = N*L/M
상기 예에서, INCR = 5*64/8 = 40이다.
소정 ISA, 예를 들어 IA-64 ISA는 소정 값, 예를 들어 프리펫치[목적 주소] 및 주소 증가에 의해 프리펫치될 주소를 자동적으로 증가시키는 프리펫치 명령을 제공한다. 이러한 ISA에서, 프리펫치 및 할당 명령은 자동 증가 프리펫치 명령 및 MOV 명령으로 대체될 수 있다. 예를 들면, 루프(Ⅱa)의 처음 2개 명령은 프리펫치[r45], 40 및 mov r40 = r45로 대체될 수 있다.
표 1은 어레이(A)의 요소가 프리펫치되는 루프(Ⅱ)의 반복, 프리펫치가 시작되는 경우의 A의 현재 요소, 프리펫치될 요소의 주소 및 프리펫치에 의해 회귀되는 어레이의 요소를 나타낸다. 표에 기재된 사항은 X = 20인 경우에 적합하다.
표 1
코드 세그멘트(Ⅱ)로 구체화된 방법은 여분의 프리펫치를 발생시킨다. 예를들면, 10번째, 25번째, 35번째 및 50번째 반복 시에 실행된 프리펫치는 5번째, 20번째, 30번째 및 45번째 반복 시에 실행된 프리펫치와 동일한 캐시 라인을 지정한다. 여분의 프리펫치는 캐시 라인에 회귀되는 어레이 요소의 숫자가 프리펫치 사이의 반복 횟수와 비례하지 않는 경우에 발생된다. 하지만, 여분의 수준은 프리펫치가 모든 반복에 대해 실행되는 경우에 획득되는 것보다 훨씬 적다. 또한, 프로세서는 여분의 프리펫치를 식별하고 제거하는 로직을 포함할 수 있다.
본 발명의 다른 실시예를 다음의 코드 세그멘트로 설명한다.
(Ⅲ)
p41 = 참
p42 = 거짓
p43 = 거짓
p44 = 거짓
p45 = 거짓
p46 = 거짓
p47 = 거짓
p48 = 거짓
r4 = 주소 A(1+X)
r5 = 주소 B(1+X)
r6 = 주소 C(1+X)
r7 = 주소 D(1+X)
r8 = 주소 E(1+X)
(Ⅲa) 루프:
(p41) 프리펫치 [r4], 64
(p42) 프리펫치 [r5], 64
(p43) 프리펫치 [r6], 64
(p44) 프리펫치 [r7], 64
(p45) 프리펫치 [r8], 64
p40 = p48
적재 A(J)
적재 B(J)
적재 C(J)
적재 D(J)
적재 E(J)
...
J=J+1
분기 루프
루프(Ⅲa)로 들어가기 이전에, 순환 술어 레지스터 세트(p41 내지 p48)는 적어도 하나의 술어가 논리 참값을 나타내도록 초기화된다. 또한, 비순환 레지스터 세트(r4 내지 r8)의 각 레지스터는 어레이(A 내지 E) 중 하나에 대한 프리펫치 주소로 초기화된다. 여기서, X는 어레이의 제1 주소부터 오프셋을 나타낸다. 이전실시예와 동일하게 프리펫치 데이터가 실행되는 적재 지정 이전에 캐시로 회귀되는 충분한 시간을 제공하도록 선택된다.
루프(Ⅲa)는 각 어레이에 대한 술어 프리펫치 명령을 포함한다. 술어 레지스터가 연속적인 루프 반복 상에 순환함에 따라 참 술어값(true predicate value)은 연속적인 술어 레지스터로 이동한다. 각각의 반복 시, 현재 참값을 보유한 술어 레지스터에 의해 출입되는 프리펫치 명령을 활성화시킨다. 다른 프리펫치 명령은 불활성화된다. 세트 내의 8개 술어 레지스터 중에, 오직 5개만이 프리펫치 명령을 출입시킨다. 나머지 3개는 어레이에 대한 프리펫치 빈도가 캐시 라인 크기 및 어레이 스트라이드와 동기되도록 하는 더미(dummy)이다. 기재된 실시예에서, 8개의 순환 술어 레지스터 세트를 통해 참 술어값을 순환시킴으로써 8개의 모든 반복에 대해 한 번씩 활성화된다. 이는 캐시 라인(8)에 의해 회귀되는 어레이 요소의 숫자와 동일한 프리펫치(8) 사이의 반복 횟수를 형성하여 여분의 프리펫치를 제거한다.
기재된 실시예에서, 활성화된 프리펫치 명령은 64바이트, 예를 들어 8개 어레이 요소 만큼 대응 레지스터의 주소를 증가시킨다. 다른 실시예에서, 단순 프리펫치 명령(자동 증가 능력이 없는) 및 코드 세그멘트(Ⅱ)와 같이 할당 명령(r4 = r4 + 64)에 의해 동일한 연산을 이룰 수 있다.
술어 프리펫치 다음의 할당 명령(p40 = p48)은 세트의 마지막 술어 레지스터의 값을 술어 레지스터 세트를 통해 다시 순환하기 시작하는 위치로 순환시킨다. IA-64 ISA에 기초한 코드 세그멘트(Ⅲ)의 실시예는 다음의 비교 명령을 이용하여 할당을 구현할 수 있다.
(p48)comp.eq.unc p40, p0 = r0, r0.
IA-64 ISA는 또한 단일 명령인 pr.rot = 0x20000000000으로 술어 초기화를 구현할 수 있도록 하며, p41을 참으로 초기화하고 나머지 모든 술어 레지스터를 거짓으로 초기화한다.
도 3은 본 발명에 따른 루프 내에서부터 소프트웨어 프리펫치를 실행하는 방법(300)을 나타내는 흐름도이다. 방법(300)의 루프 부분으로 들어가기 이전에, 순환 레지스터 세트는 초기화된다(단계 310). 예를 들면, 순환 범용 레지스터는 코드 세그멘트(Ⅱ)로 나타낸 바와 같이 어레이의 제1 프리펫치 주소로 초기화된다. 이와는 달리, 순환 술어 레지스터는 논리 참 또는 거짓값으로 초기화되어 코드 세그멘트(Ⅲ)로 나타낸 바와 같이 선택된 프리펫치 명령을 활성화시킨다. 이 경우, 비순환 범용 레지스터는 어레이의 제1 프리펫치 주소로 초기화된다.
초기화 단계(310) 이 후, 방법(300)의 루프 부분이 시작된다. 캐시 라인은 순환 레지스터 세트를 통해 지정되는 어레이에 대해 프리펫치된다(단계 320). 기재된 실시예에서, 이는 하나 이상의 순환 레지스터로 매개변수화된 프리펫치 명령을 통해 달성된다. 코드 세그멘트(Ⅱ)에서, 목적 주소는 매개변수이며 목적 주소를 특정하는 범용 레지스터는 프리펫치를 매개변수화한다. 코드 세그멘트(Ⅲ)에서, 프리펫치 명령에 관련된 술어가 매개변수이며, 이 값을 보유한 술어 레지스터는 관련 프리펫치를 매개변수화한다. 각 경우에 있어서, 지정 레지스터의 값을 변경시켜 프리펫치 연산에 의해 목적된 어레이를 변경시킨다. 프리펫치 단계(320) 이 후, 프리펫치가 실행될 어레이의 주소를 조정하여 어레이에 대해 프리펫치되는다음 요소를 포함하는 캐시 라인을 지정한다.
적재 명령 및 적재된 값을 연산시키는 소정 명령과 같은 루프 내의 임의의 명령은 각각의 루프 반복 시에 실행된다(단계 340). 이를 프리펫치 단계(320)와 조정 단계(330) 다음에 도시하지만, 방법(300)에서 이들의 관련 순서는 중요한 것은 아니다. 현재 어레이 주소를 프리펫치 및 조정하는 단계 이전, 이 후, 또는 동시에 나머지 명령을 실행할 수 있다. 각각이 루프 반복 시, 종결 상태를 체크하고(단계 350), 조건이 맞는 경우 루프를 종료시킨다(단계 370). 추가 반복이 남아있는 경우, 레지스터는 순환되어 다음 반복을 위해 추가 명령을 업데이트(update)하고(단계 360), 루프는 반복된다. 이용되는 컴퓨터 시스템에 따라, 레지스터는 루프 종결 조건을 만족시키는 경우에도 순환될 수 있다.
따라서, 본 발명은 여분의 프리펫치를 감소시키고 여러 루프 반복에 걸쳐 프리펫치 작용을 분산시켜, 루프 내로부터 효율적인 프리펫칭을 지원한다. 이는 루프의 코드 크기를 확장하거나 명령 오버헤드를 증가시키지 않고 이루어진다. 순환 레지스터 세트는 초기화되고, 루프 내의 하나 이상의 프리펫치 명령은 하나 이상의 순환 레지스터로 매개변수화된다. 프리펫치 명령의 연산, 예를 들면 목적 주소와 활성/NOP 상태 등은 레지스터가 연속적인 루프 반복 상에서 순환함에 따라 조절된다. 본 발명은 루프 내로부터 프리펫칭을 구현하는 임의의 코드에 유용하게 이용될 수 있다.
기재된 실시예는 본 발명의 일반적인 특징을 설명하는데 제공되었다. 당업자는 본 발명의 사상 내에 있는 이러한 실시예의 변형 및 변경을 인식할 것이다.발명의 범위는 첨부된 청구범위로만 한정된다.

Claims (35)

  1. 데이터를 프리펫치(prefetch)하는 방법으로서,
    제1 어레이에 대한 프리펫치 연산을 지시하도록 순환 레지스터를 초기화하는 단계,
    상기 제1 어레이에 대해 상기 프리펫치 연산을 개시하는 단계,
    상기 제1 어레이를 포함하는 하나 이상의 어레이에 대한 데이터를 적재(load)하는 단계, 그리고
    새로운 어레이에 대한 프리펫치 연산을 지시하도록 레지스터 순환을 실행하는 단계
    를 포함하는 프리펫치 방법.
  2. 제1항에 있어서,
    상기 순환 레지스터는 어레이 주소를 저장하며, 상기 순환 레지스터를 초기화하는 단계는 상기 순환 레지스터를 상기 제1 어레이의 주소로 초기화하는 단계를 포함하는 프리펫치 방법.
  3. 제2항에 있어서,
    상기 레지스터 순환을 실행하는 단계는,
    상기 제1 어레이의 새로운 요소를 지시하도록 상기 순환 레지스터 내의 상기 주소를 증가시키는 단계, 그리고
    상기 순환 레지스터 내로 새로운 어레이에 관련된 주소를 순환시키는 단계
    를 포함하는 프리펫치 방법.
  4. 제1항에 있어서,
    상기 순환 레지스터는 순환 레지스터 세트 중에서 지정된 레지스터이며, 상기 순환 레지스터를 초기화시키는 단계는 상기 제1 어레이를 지정하도록 상기 지정된 레지스터를 초기화시키고, 대응하는 다른 어레이를 지정하도록 세트 중의 다른 순환 레지스터를 초기화시키는 단계를 포함하는 프리펫치 방법.
  5. 제1항에 있어서,
    제1 어레이에 대한 프리펫치 연산을 지시하도록 순환 레지스터를 초기화시키는 상기 단계는 상기 제1 어레이를 목적으로 하는 프리펫치 연산을 활성화시키도록 상기 순환 레지스터를 초기화시키는 단계를 포함하는 프리펫치 방법.
  6. 제5항에 있어서,
    상기 순환 레지스터는 술어 레지스터(predicate register)이며, 상기 프리펫치 연산은 소정의 논리값을 상기 술어 레지스터에 기입(write)함으로써 활성화되는 프리펫치 방법.
  7. 제6항에 있어서,
    상기 레지스터 순환을 실행하는 단계는 새로운 어레이에 대해 프리펫치 연산을 활성화시키는 술어 레지스터 내로 소정 논리값을 순환시키는 단계를 포함하는 프리펫치 방법.
  8. 복수의 어레이로부터 요소(element)를 프리펫치하는 방법으로서,
    프리펫치 매개변수(parameter)를 통해 특정된 어레이의 요소에 대한 프리펫치를 발생시키는 단계,
    복수의 어레이 각각으로부터 데이터를 적재시키는 단계, 그리고
    루프 분기(loop branch)에 응답하여 상기 프리펫치 매개변수를 조절하는 단계
    를 포함하는 프리펫치 방법.
  9. 제8항에 있어서,
    상기 프리펫치 매개변수는 상기 어레이와 관련된 프리펫치를 출입시키는 제어하는 순환 술어 레지스터에 저장되며, 상기 프리펫치를 발생시키는 단계는 상기 술어 레지스터가 소정 논리값을 보유할 경우에 상기 프리펫치를 발생시키는 단계를 포함하는 프리펫치 방법.
  10. 제9항에 있어서,
    상기 프리펫치 매개변수를 조절하는 단계는 레지스터 순환에 의해 상기 술어 레지스터 내로 새로운 논리값을 이동시키는 단계를 포함하는 프리펫치 방법.
  11. 제8항에 있어서,
    상기 프리펫치 매개변수는 지정된 순환 레지스터에 저장된 어레이 주소이며, 상기 프리펫치를 발생시키는 단계는 상기 주소가 지시하는 상기 어레이의 요소에 대해 상기 프리펫치를 발생시키는 단계를 포함하는 프리펫치 방법.
  12. 제11항에 있어서,
    상기 프리펫치 매개변수를 조절하는 단계는 다른 어레이와 관련된 주소를 상기 지시된 순환 레지스터 내로 순환시키는 단계를 포함하는 프리펫치 방법.
  13. 데이터를 프리펫치하는 방법으로서,
    순환 레지스터에 의해 매개변수화된 프리펫치를 발생시키는 단계,
    상기 프리펫치가 목적하는 주소를 조절하는 단계, 그리고
    다음 프리펫치를 지시하도록 상기 순환 레지스터 내로 새로운 값을 순환시키는 단계
    를 포함하는 프리펫치 방법.
  14. 제13항에 있어서,
    순환 레지스터에 의해 매개변수화된 프리펫치를 발생시키는 단계는 상기 순환 레지스터 내의 값으로 특정된 목적 주소를 갖는 프리펫치를 발생시키는 단계를 포함하는 프리펫치 방법.
  15. 제14항에 있어서,
    상기 순환 레지스터 내로 새로운 값을 순환시키는 단계는 상기 순환 레지스터 내로 새로운 목적 주소를 순환시키는 단계를 포함하는 프리펫치 방법.
  16. 제13항에 있어서,
    상기 순환 레지스터는 순환 술어 레지스터이며, 프리펫치를 발생시키는 단계는 상기 순환 술어 레지스터에 저장된 술어에 의해 출입되는 프리펫치를 발생시키는 단계를 포함하는 프리펫치 방법.
  17. 제16항에 있어서,
    상기 방법은, 순환 술어 레지스터 세트가 논리값 중 적어도 하나는 논리 참값(logic true value)을 나타내는 논리값으로 초기화되는 단계를 추가로 포함하는 프리펫치 방법.
  18. 제17항에 있어서,
    상기 순환 레지스터 내로 새로운 값을 순환시키는 상기 단계는 상기 순환 술어 레지스터 세트 사이에 상기 논리값을 순환시키는 단계를 포함하는 프리펫치 방법.
  19. 제17항에 있어서,
    초기화되는 술어 레지스터의 개수는 상기 발생된 프리펫치가 상기 술어 레지스터에 의해 입력되는(gated on) 빈도에 의해 결정되는 프리펫치 방법.
  20. 제13항에 있어서,
    상기 순환 레지스터는, 저장된 술어값이 참인 경우에는 활성화되고 저장된 술어값이 거짓인 경우에는 무효화되는 술어 레지스터인 프리펫치 방법.
  21. 제13항에 있어서,
    상기 순환 레지스터는 복수의 어레이 중 하나에 대한 목적 주소를 특정하며, 상기 순환 레지스터 내로 새로운 값을 순환시키는 단계는 상기 어레이 중 하나에 대한 목적 주소를 상기 순환 레지스터 내로 순환시키는 단계를 포함하는 프리펫치 방법.
  22. 소정의 방법을 구현하기 위해 프로세서(processor)에 의해 실행될 수 있는 명령을 저장하는 기계로 판독 가능한 매체(machine readable medium)로서,
    상기 방법은,
    순환 레지스터에 의해 매개변수화된 프리펫치 연산을 발생시키는 단계,
    상기 프리펫치 연산이 목적으로 한 주소를 조절하는 단계, 그리고
    다음 프리펫치 연산을 지시하도록 상기 순환 레지스터 내로 새로운 값을 순환시키는 단계를 포함하는
    기계로 판독 가능한 매체.
  23. 제22항에 있어서,
    순환 레지스터에 의해 매개변수화된 프리펫치 연산을 발생시키는 상기 단계는 상기 순환 레지스터에 의해 특정된 목적 주소를 갖는 프리펫치 연산을 발생시키는 단계를 포함하는 기계로 판독 가능한 매체.
  24. 제22항에 있어서,
    상기 순환 레지스터는 술어 레지스터이며, 프리펫치 연산을 발생시키는 단계는 상기 술어 레지스터에 저장된 술어에 의해 출입되는 프리펫치 연산을 발생시키는 단계를 포함하는 기계로 판독 가능한 매체.
  25. 명령을 실행하는 프로세서, 그리고
    소정의 방법을 구현하기 위하여 상기 프로세서에 의해 실행될 수 있는 명령을 저장하는 메모리(memory)
    를 포함하며,
    상기 방법은,
    순환 레지스터에 의해 매개변수화된 프리펫치 연산을 발생시키는 단계,
    상기 프리펫치 연산에 의해 목적된 주소를 조절하는 단계, 그리고
    새로운 프리펫치 연산을 지시하도록 상기 순환 레지스터 내로 새로운 값을 순환시키는 단계를 포함하는
    컴퓨터 시스템.
  26. 제25항에 있어서,
    순환 레지스터에 의해 매개변수화된 프리펫치 연산을 발생시키는 상기 단계는 상기 순환 레지스터에 의해 특정되는 목적 주소를 갖는 프리펫치 연산을 발생시키는 단계를 포함하는 컴퓨터 시스템.
  27. 제25항에 있어서,
    상기 순환 레지스터는 술어 레지스터이며, 상기 프리펫치 연산을 발생시키는 단계는 상기 술어 레지스터에 저장된 술어에 의해 출입되는 프리펫치 연산을 발생시키는 단계를 포함하는 컴퓨터 시스템.
  28. 순환 레지스터 세트를 구비한 프로세서, 그리고
    상기 프로세서에 의해 실행될 수 있는 명령을 포함하는 프로그램을 저장하는 메모리
    를 포함하며,
    상기 명령은,
    선택된 어레이에 대한 프리펫치 연산을 지시하도록 상기 순환 레지스터의 제1 레지스터를 초기화시키며,
    상기 선택된 어레이에 대해 프리펫치를 실행하고,
    새로이 선택된 어레이에 대한 프리펫치 연산을 지시하도록 상기 순환 레지스터 사이로 값을 순환시키는
    컴퓨터 시스템.
  29. 제28항에 있어서,
    상기 순환 레지스터는 상기 선택된 어레이 및 새로이 선택된 어레이를 포함하는 어레이 세트를 지시하는 값으로 초기화되는 범용 순환 레지스터인 컴퓨터 시스템.
  30. 제29항에 있어서,
    상기 순환 레지스터 중 제1 레지스터의 값을 증가시키도록 상기 프로세서에 의해 실행될 수 있는 명령을 추가로 포함하는 컴퓨터 시스템.
  31. 제28항에 있어서,
    상기 순환 레지스터는 논리 참값 또는 논리 거짓값을 나타내는 값으로 초기화되는 술어 레지스터 세트인 컴퓨터 시스템.
  32. 제31항에 있어서,
    대응하는 어레이 세트로부터 데이터를 가져오는(fetch) 프리펫치 연산 세트를 추가로 포함하며, 상기 프리펫치 연산 각각은 상기 술어 레지스터 중 대응하는 하나의 레지스터에 의해 입력되는 컴퓨터 시스템.
  33. 제28항에 있어서,
    상기 순환 레지스터 사이에 값을 순환시키는 상기 명령은 루프 분기 명령(loop branch instruction)을 포함하는 컴퓨터 시스템.
  34. 제33항에 있어서,
    상기 프로세서는 상기 루프 분기 명령을 실행한 후, 상기 새로이 선택된 어레이에 대해 프리펫치를 실행하는 컴퓨터 시스템.
  35. 제34항에 있어서,
    상기 명령은 루프 종결 조건을 검출할 때까지 상기 프로세서에게 실행을 반복시켜 연산을 순환하게 하는 컴퓨터 시스템.
KR10-2001-7015144A 1999-05-28 2000-05-12 소프트웨어 데이터 프리펫치의 오버헤드 감소 방법 KR100456507B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/322,196 1999-05-28
US09/322,196 US6321330B1 (en) 1999-05-28 1999-05-28 Each iteration array selective loop data prefetch in multiple data width prefetch system using rotating register and parameterization to avoid redundant prefetch

Publications (2)

Publication Number Publication Date
KR20020022056A KR20020022056A (ko) 2002-03-23
KR100456507B1 true KR100456507B1 (ko) 2004-11-09

Family

ID=23253840

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2001-7015144A KR100456507B1 (ko) 1999-05-28 2000-05-12 소프트웨어 데이터 프리펫치의 오버헤드 감소 방법

Country Status (8)

Country Link
US (1) US6321330B1 (ko)
EP (1) EP1185925B1 (ko)
KR (1) KR100456507B1 (ko)
CN (1) CN1255723C (ko)
AU (1) AU4847800A (ko)
DE (1) DE60022345T2 (ko)
PL (1) PL351960A1 (ko)
WO (1) WO2000073897A1 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6505345B1 (en) * 2000-01-18 2003-01-07 Intel Corporation Optimization of initialization of parallel compare predicates in a computer system
DE10216240A1 (de) * 2002-04-12 2003-10-30 Infineon Technologies Ag Verfahren und Vorrichtung zur Berechnung eines iterierten Zustands einer rückgekoppelten Schieberegisteranordnung
US6760818B2 (en) * 2002-05-01 2004-07-06 Koninklijke Philips Electronics N.V. Memory region based data pre-fetching
US6981099B2 (en) 2002-12-16 2005-12-27 Sun Microsystems, Inc. Smart-prefetch
US20050066151A1 (en) * 2003-09-19 2005-03-24 Sailesh Kottapalli Method and apparatus for handling predicated instructions in an out-of-order processor
US7290253B1 (en) * 2003-09-30 2007-10-30 Vmware, Inc. Prediction mechanism for subroutine returns in binary translation sub-systems of computers
US7493621B2 (en) * 2003-12-18 2009-02-17 International Business Machines Corporation Context switch data prefetching in multithreaded computer
US7617496B2 (en) 2004-04-23 2009-11-10 Apple Inc. Macroscalar processor architecture
US7395419B1 (en) * 2004-04-23 2008-07-01 Apple Inc. Macroscalar processor architecture
US7937709B2 (en) * 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US7421540B2 (en) * 2005-05-03 2008-09-02 International Business Machines Corporation Method, apparatus, and program to efficiently calculate cache prefetching patterns for loops
KR100662846B1 (ko) * 2005-11-09 2007-01-02 삼성전자주식회사 데이터 처리 시스템 및 데이터 처리방법
US7707388B2 (en) * 2005-11-29 2010-04-27 Xmtt Inc. Computer memory architecture for hybrid serial and parallel computing systems
KR100776802B1 (ko) * 2005-12-08 2007-11-19 한국전자통신연구원 소프트웨어 스트리밍 서비스에서의 요청열 기반 프리페칭제공 방법 및 이를 이용한 소프트웨어 스트리밍 시스템
US8161264B2 (en) * 2008-02-01 2012-04-17 International Business Machines Corporation Techniques for data prefetching using indirect addressing with offset
US8209488B2 (en) * 2008-02-01 2012-06-26 International Business Machines Corporation Techniques for prediction-based indirect data prefetching
CN102736894B (zh) * 2011-04-01 2017-10-24 中兴通讯股份有限公司 一种跳转指令编码的方法和系统
US20130185516A1 (en) * 2012-01-16 2013-07-18 Qualcomm Incorporated Use of Loop and Addressing Mode Instruction Set Semantics to Direct Hardware Prefetching
US9519586B2 (en) * 2013-01-21 2016-12-13 Qualcomm Incorporated Methods and apparatus to reduce cache pollution caused by data prefetching
US9280476B2 (en) 2014-06-04 2016-03-08 Oracle International Corporation Hardware stream prefetcher with dynamically adjustable stride
US9256541B2 (en) 2014-06-04 2016-02-09 Oracle International Corporation Dynamically adjusting the hardware stream prefetcher prefetch ahead distance
US20230004391A1 (en) * 2017-06-28 2023-01-05 Texas Instruments Incorporated Streaming engine with stream metadata saving for context switching
US11048509B2 (en) * 2018-06-05 2021-06-29 Qualcomm Incorporated Providing multi-element multi-vector (MEMV) register file access in vector-processor-based devices

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5889985A (en) * 1996-08-07 1999-03-30 Elbrus International Array prefetch apparatus and method

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5357618A (en) * 1991-04-15 1994-10-18 International Business Machines Corporation Cache prefetch and bypass using stride registers
JP3598139B2 (ja) * 1994-12-28 2004-12-08 株式会社日立製作所 データ処理装置
US5704053A (en) * 1995-05-18 1997-12-30 Hewlett-Packard Company Efficient explicit data prefetching analysis and code generation in a low-level optimizer for inserting prefetch instructions into loops of applications
US5752037A (en) * 1996-04-26 1998-05-12 Hewlett-Packard Company Method of prefetching data for references with multiple stride directions
WO1998006041A1 (en) 1996-08-07 1998-02-12 Sun Microsystems, Inc. Array prefetch apparatus and method
US5854934A (en) * 1996-08-23 1998-12-29 Hewlett-Packard Company Optimizing compiler having data cache prefetch spreading
GB2317464A (en) 1996-09-23 1998-03-25 Advanced Risc Mach Ltd Register addressing in a data processing apparatus
JP3546341B2 (ja) * 1997-04-17 2004-07-28 株式会社日立製作所 多重ループ向けデータプリフェッチ方法およびプログラム生成方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5889985A (en) * 1996-08-07 1999-03-30 Elbrus International Array prefetch apparatus and method

Also Published As

Publication number Publication date
KR20020022056A (ko) 2002-03-23
AU4847800A (en) 2000-12-18
CN1353832A (zh) 2002-06-12
DE60022345D1 (de) 2005-10-06
CN1255723C (zh) 2006-05-10
EP1185925B1 (en) 2005-08-31
PL351960A1 (en) 2003-07-14
WO2000073897A1 (en) 2000-12-07
US6321330B1 (en) 2001-11-20
DE60022345T2 (de) 2006-06-14
EP1185925A1 (en) 2002-03-13

Similar Documents

Publication Publication Date Title
KR100456507B1 (ko) 소프트웨어 데이터 프리펫치의 오버헤드 감소 방법
US7234025B2 (en) Microprocessor with repeat prefetch instruction
US7594102B2 (en) Method and apparatus for vector execution on a scalar machine
JP2725546B2 (ja) デ−タ処理装置
EP0270310A2 (en) Method and apparatus for giving access to instructions in computer systems
US7610469B2 (en) Vector transfer system for packing dis-contiguous vector elements together into a single bus transfer
EP0365188A2 (en) Central processor condition code method and apparatus
JP3518770B2 (ja) 命令をその少なくとも1つの実行装置へ迅速にディスパッチする方法および装置
JPH0588888A (ja) アドレス生成機構及びデータの事前取り出し方法
US20050055536A1 (en) Compiler instructions for vector transfer unit
US5889985A (en) Array prefetch apparatus and method
JP2002149424A (ja) 共有コプロセッサ・リソースに対する複数の論理インタフェース
US11816485B2 (en) Nested loop control
US11442709B2 (en) Nested loop control
US7290119B2 (en) Memory accelerator with two instruction set fetch path to prefetch second set while executing first set of number of instructions in access delay to instruction cycle ratio
JPH1063509A (ja) 浮動レジスタ・スピル・キャッシュ
US6912640B2 (en) Method to partition large code across multiple e-caches
Russell et al. A stack-based register set
WO1998006041A1 (en) Array prefetch apparatus and method
JPH07253882A (ja) 命令制御装置
US20030135717A1 (en) Method and apparatus for transferring vector data
Lin et al. A Multithreading Architecture with Multiple Independent Shared Pipelines
JPS6337416B2 (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
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20091028

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee