KR20190070981A - 데이터 프리페칭 방법, 장치, 및 시스템 - Google Patents

데이터 프리페칭 방법, 장치, 및 시스템 Download PDF

Info

Publication number
KR20190070981A
KR20190070981A KR1020197015445A KR20197015445A KR20190070981A KR 20190070981 A KR20190070981 A KR 20190070981A KR 1020197015445 A KR1020197015445 A KR 1020197015445A KR 20197015445 A KR20197015445 A KR 20197015445A KR 20190070981 A KR20190070981 A KR 20190070981A
Authority
KR
South Korea
Prior art keywords
functions
global variable
start address
data
variable
Prior art date
Application number
KR1020197015445A
Other languages
English (en)
Other versions
KR102353213B1 (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 KR20190070981A publication Critical patent/KR20190070981A/ko
Application granted granted Critical
Publication of KR102353213B1 publication Critical patent/KR102353213B1/ko

Links

Images

Classifications

    • 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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/602Details relating to cache prefetching
    • 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/6028Prefetching based on hints or prefetch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • 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)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 출원의 실시예는, 컴퓨터 시스템에 적용되는 데이터 프리페칭 방법 및 장치를 개시하고, 컴퓨터 시스템은 프리페치 엔진, 메모리, 및 컴파일러를 포함한다. 데이터 프리페칭 방법은, 컴파일러가 컴파일 과정에서: 프리페치 엔진이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수와 N개의 함수의 제1 전역 변수를 획득하고 - N은 1보다 크거나 같은 정수임 -; N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하는 연산을 수행하는 것을 포함한다. 따라서, 데이터 프리페칭 유연성이 향상될 수 있다.

Description

데이터를 프리페칭하기 위한 방법, 장치, 및 시스템
본 출원은 2016년 11월 8일에 중국 특허청에 출원된 중국 특허출원 제201610979946.6호("DATA PREFETCHING METHOD, APPARATUS, AND SYSTEM")에 대해 우선권을 주장하는 바이며, 그 전체 내용이 원용에 의해 본 명세서에 포함된다.
본 출원의 실시예는 컴퓨터 분야에 관한 것으로, 상세하게는 컴퓨터 분야에서의 데이터 프리페칭 방법, 장치, 및 시스템에 관한 것이다.
마이크로프로세서 기술이 빠르게 발전함에 따라, 중앙처리장치(CPU)의 클럭 속도가 향상되고, 코어 수가 증가되며, CPU 성능이 크게 향상되었다. 하지만, CPU가 스토리지에서 데이터를 가져오는 데 따른 지연으로 인해 컴퓨터의 전반적인 성능 향상이 대개 제한받게 된다. CPU가 스토리지에서 데이터를 가져오는 데 따른 지연을 줄이기 위해, CPU와 스토리지 사이에는 캐시(cache)가 추가되고, CPU에서 자주 사용되는 데이터가 캐시에 프리페칭(prefetch)된다. CPU가 메모리의 데이터에 액세스할 필요가 있으면, CPU는 CPU에 의해 액세스될 필요가 있는 데이터가 캐시에 있는지 여부 및 액세스될 필요가 있는 데이터가 만료되었는지 여부를 먼저 질의한다. 액세스될 필요가 있는 데이터가 캐시에 있으면서 또한 만료되지 않았으면, 데이터가 캐시로부터 판독된다. CPU에 의해 액세스될 필요가 있는 데이터를 캐시에 저장하는 것을 히트(hit)라고 하며, CPU에 의해 액세스될 필요가 있는 데이터가 캐시에 있지 않은 것을 미스(miss)라고 한다.
종래 기술에서는, 소프트웨어 프리페치 명령이 함수에 삽입되어 있다. 소프트웨어 프리페치 명령이 프로그램의 실행 중에 실행되면, 메모리 내의 데이터가 소프트웨어 프리 페치 명령에 따라 캐시에 프리페칭된다. 소프트웨어 프리페치 명령의 사용 범위는 일반적으로 함수 범위로 제한된다. 소프트웨어 프리페치 명령에 따라 데이터를 프리페칭하는 시간이 프로그램 개발자에 의해 지정되어 있으며, 데이터를 프리페칭하기 위한 시간이 어느 정도 제한되어 있다.
본 출원의 실시예에서 제공되는 데이터 프리페칭 방법, 장치, 및 시스템에 따르면, 데이터 프리페칭 유연성이 향상된다.
제1 양태에 따르면, 데이터 프리페칭 방법이 제공된다. 상기 데이터 프리페칭 방법은, N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계 - N은 1보다 크거나 같은 정수임 -; 및 프리페치 엔진이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하는 단계를 포함한다.
일부 실시 형태에서, 전술한 방법은 컴퓨터 시스템에 적용되다. 상기 컴퓨터 시스템은 프리페치 엔진, 메모리, 및 컴파일러를 포함한다. 상기 컴파일러는 전술한 방법을 수행할 수 있다. 구체적으로, 상기 컴파일러는 컴파일 과정에서 전술한 방법을 수행할 수 있다.
일부 실시 형태에서, N개의 함수의 시작 주소는 N개의 함수에 의해 공유되는 시작 주소일 수 있다. N개의 함수의 시작 주소는 메모리 내의 데이터를 캐시에 프리페칭하기 위한 프리페칭 시간일 수 있다. 상기 프리페칭 시간은 N개의 함수 중 하나의 시작 주소일 수 있다. 상기 프리페칭 시간은 일반적으로 컴파일러에 의해 N개의 함수로부터 파싱된 함수로서 맨 앞의 주소를 갖는 함수의 시작 주소일 수 있거나, 또는 확실히 특정 위치에서 함수의 시작 주소일 수 있다. 프리페치 엔진이 N개의 함수의 시작 주소를 판독하는 우, N개의 함수의 시작 주소는 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하도록 프리페치 엔진을 트리거하기 위해 사용된다.
일부 실시 형태에서, 제1 전역 변수의 시작 주소는 컴파일러에 의해 파싱되는 제1 전역 변수의 시작 주소일 수 있다. 컴파일러에 의해 파싱되는 제1 전역 변수의 시작 주소와 메모리에 있는 시작 주소로서 제1 전역 변수와 연관된 데이터가 저장되는 시작 주소 사이에는 주소 매핑 관계가 존재한다. 컴파일러에 의해 파싱되는 제1 전역 변수의 시작 주소를 획득하는 경우, 프리페치 엔진은 주소 매핑 관계 및 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 시작 주소로서 제1 전역 변수와 연관된 데이터가 저장된 시작 주소를 결정한다. 또한, 프리페치 엔진은 메모리에 있는 시작 주소로서 제1 전역 변수와 연관된 데이터가 저장된 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수의 데이터를 캐시에 저장한다. 제1 전역 변수의 시작 주소는 대안적으로, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터의 시작 주소일 수 있으며, 상기 시작 주소는 컴파일러에 의해 직접 컴파일된다.
본 출원의 본 실시예에서, 컴파일러는 N개의 함수와 N개의 함수의 제1 전역 변수를 먼저 획득한 다음, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정한다. 프리페치 엔진은 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭한다. N개의 함수의 시작 주소는, 데이터를 프리페칭하기 위한 프리페칭 시간이라고 이해할 수 있을 것이다. 프리페치 엔진과 컴파일러는 병렬로 실행을 수행할 수 있다. 프리페칭 유연성이 향상될 수 있도록, 프리페칭 시간은 N개의 함수의 시작 주소이고 또한 종래 기술에서의 소프트웨어 프리페치 명령에 의존하지 않는다.
일부 실시 형태에서, 프리페치 엔진이 N개의 함수의 시작 주소를 판독하는 때, 또는 프리페치 엔진이 N개의 함수의 시작 주소를 판독한 후 제2 시구간 이후에, 또는프리페치 엔진이 N개의 함수의 시작 주소 판독하기 전 제1 시구간에서, 프리페치 엔진은 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하고, N개의 함수의 시작 주소에 따라 프리페칭 시간을 유연하게 결정할 수 있다.
일부 실시 형태에서, 컴파일러는 2가지 방식으로 N개의 함수의 시작 주소를 결정할 수 있다. 방식 1: 컴파일러가 N개의 함수를 파싱할 때 N개의 함수의 시작 주소를 파싱한다. 방식 2: 컴파일러가 초기 컴파일 단계에서 모든 함수의 시작 주소를 파싱하고, 컴파일러가, N개의 함수를 파싱할 때 이전에 파싱된 시작 주소를 검색하여 N개의 함수의 시작 주소를 결정한다. 이렇게 하면, 프로그램 실행 시간이 줄어들 수 있다. 마찬가지로, 컴파일러가 2가지 방식으로 제1 전역 변수의 시작 주소를 결정할 수 있다. 방식 1: 컴파일러가 제1 전역 변수를 파싱할 때 제1 전역 변수의 시작 주소를 파싱한다. 방식 2: 컴파일러가 초기 컴파일 단계에서 모든 전역 변수의 시작 주소를 파싱하고, 컴파일러는 제1 전역 변수를 파싱할 때 이전에 파싱된 전역 변수의 시작 주소를 검색하여 제1 전역 변수의 시작 주소를 결정한다.
N이 1이면, 즉 하나의 함수가 하나의 시작 주소에 대응하면, 컴파일러는 함수의 제1 전역 변수와 연관된 데이터를 프리페칭한다.
N이 1보다 크면, 즉 복수의 함수가 하나의 시작 주소를 공유할 수 있으면, 프리페치 엔진은 메모리에 있는 데이터로서 하나의 함수의 제1 전역 변수에 대응하는 데이터를 캐시에 프리페칭할 수 있을 뿐만 아니라, 메모리에 있는 데이터로서 복수의 함수의 제1 전역 변수에 대응하는 데이터도 캐시에 프리페칭할 수 있다. 선택적으로, 복수의 함수는 특정 서비스와 관련된 복수의 함수일 수 있다. 예를 들어, 특수한 서비스를 구현하기 위해, 특정 서비스는 복수의 함수를 사용할 필요가 있다. 이렇게 하면, 메모리에 있는 데이터로서 복수의 함수의 제1 전역 변수에 대응하고 있는 데이터가 하나의 시작 주소를 이용하여 캐시에 프리페칭됨으로써, 데이터 프리페칭 효율이 더 향상될 수 있다.
일부 실시 형태에서, 프리페치 엔진이 메모리 내의 데이터를 캐시에 프리페칭할 수 있도록, 컴파일러는 결정된 N개의 함수의 시작 주소와 결정된 제1 전역 변수의 시작 주소를 프리페치 엔진에 직접 송신한다. 또한, 프리페치 엔진이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독할 수 있도록, 컴파일러는 텍스트의 형태 또는 바이너리 툴의 형태로 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 저장할 수 있다. 선택적으로, 프리페치 엔진이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 프리페칭 시간의 식별 정보를 판독할 수 있도록, 컴파일러는 텍스트의 형태로 또는 바이너리 형태로 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 프리페칭 시간의 식별 정보를 저장할 수 있다. 예를 들어, 프리페칭 시간의 식별 정보는 제1 식별자, 또는 제2 식별자, 또는 제3 식별자일 수 있다. 제1 식별자는, N개의 함수의 시작 주소를 판독하는 경우 프리페치 엔진이 제1 전역 변수와 연관된 데이터를 캐시에 프리패칭하는 것을 나타내는 데 사용된다. 제2 식별자는, 프리페치 엔진이 N개의 함수의 시작 주소를 판독하는 제1 시구간 이전에, 프리페치 엔진이 제1 전역 변수와 연관된 데이터를 캐시에 프리패칭하는 것을 나타내는 데 사용된다. 제3 식별자는, 프리페치 엔진이 N개의 함수의 시작 주소를 판독하는 제2 시구간 이후에, 프리페치 엔진이 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 것을 나타내는 데 사용된다.
일부 실시 형태에서, N개의 함수와 N개의 함수의 제1 전역 변수는 동시에 획득될 수 있거나, 또는 개별적으로 획득될 수 있다.
일부 실시 형태에서, 제1 전역 변수는 M개의 구조체 멤버 변수를 포함하고, M은 1보다 크거나 같은 정수이다.
이렇게 하면, 프리페치 명령이 함수에 삽입됨으로써, M개의 구조체 멤버 변수와 연관된 데이터를 프리페칭하는 종래 기술의 연산이 방지될 수 있다. 또한, 종래 기술에서, M개의 프리페치 명령은 메모리에 있는 데이터로서 M개의 구조체 멤버 변수와 연관된 데이터를 프리페칭하는 데 필요하다. 이렇게 하면, 프로그램 실행 시간이 증가된다. 또한, M개의 구조체 멤버 변수의 프리페칭 시간이 프로그래머에 의해 지정될 뿐이며, 컴파일러의 컴파일 및 스케줄링 시간을 프로그래머에 의해 지정된 M개의 구조체 멤버 변수의 프리페칭 시간과 일치시키도록 보장하는 것이 어렵다. 따라서, 캐시의 히트 레이트가 보장될 수 없다. 예를 들어, M개의 구조체 멤버 변수의 프리페치 명령이 과도하게 일찍 삽입되고 또한 데이터가 캐시에 과도하게 일찍 프리페칭되면, CPU가 캐시에 액세스하기 전에 데이터가 대체될 수 있다. M개의 구조체 멤버 변수의 프리페치 명령이 과도하게 늦게 삽입되면, CPU가 캐시에 접근하는 때 지연이 초래된다.
일부 실시 형태에서, 상기 프리페치 엔진이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하는 단계는, N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱하는 단계 - M개의 구조체 멤버 변수는 적어도 하나의 구조체 멤버 변수를 포함하고 있음 -; 및 프리페치 엔진이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계를 포함한다.
이렇게 하면, N개의 함수에 사용되는 구조체 멤버 변수가 N개의 함수의 실제 요구사항에 따라 파싱될 수 있다. 프리페칭 효율이 향상될 수 있고 또한 캐시의 히트 레이트가 추가로 향상될 수 있도록, 프리페치 엔진은, 제1 전역 변수의 모든 M개의 구조체 멤버 변수와 연관된 데이터를 캐시에 맹목적으로 프리페칭하는 대신에, N개의 함수에 사용되는 구조체 멤버 변수와 연관된 데이터를 프리페칭한다.
일부 실시 형태에서, 상기 프리페치 엔진이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하는 단계는, N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱하는 단계 - M개의 구조체 멤버 변수는 적어도 하나의 구조체 멤버 변수를 포함하고 있음 -; 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계; 및 프리페치 엔진이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 메모리 내의 각각의 구조체 멤버 변수의 캐시 라인 인덱스 번호(cache line cache line index number)에 따라 메모리 내의 데이터를 프리페칭할 수 있도록, 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리 내의 적어도 하나의 구조체 멤버 변수 각각의 캐시 라인 인덱스 번호를 결정하는 단계를 포함한다.
본 출원의 본 실시예에서, 상기 컴파일러는 각각의 구조체 멤버 변수의 주소 오프셋을 캐시 라인 인덱스 번호에 추가로 매핑할 수 있다. 상기 컴파일러는 텍스트 또는 바이너리 툴에 있는 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 캐시 라인 인덱스 번호를 저장하고 있다. 프리페치 엔진은 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 캐시 라인 인덱스 번호에 따라, 메모리에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시에 프리페칭한다.
일부 실시 형태에서, 상기 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계 이전에, 데이터 프리페칭 방법은, 컴파일러가 제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋을 획득하기 위해 M개의 구조체 멤버 변수를 파싱하는 단계를 포함한다. 상기 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계는, 제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋으로부터, 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계를 포함한다.
본 출원의 본 실시예에서, 상기 컴파일러는 제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋을 미리 파싱할 수 있다. M개의 구조체 멤버 변수 중 적어도 하나의 구조체 멤버 변수만이 N개의 함수에 사용된다는 것을 파싱을 통해 학습한 경우, 컴파일러는 적어도 하나의 구조체 멤버 변수의 주소 오프셋에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋을 검색할 수 있다. 물론, N개의 함수에 사용된 적어도 하나의 구조체 멤버 변수를 파싱하는 경우, 상기 컴파일러는 대안적으로, 제1 전역 변수에 대한 적어도 하나의 구조체 멤버 변수의 주소 오프셋을 파싱할 수 있다.
일부 실시 형태에서, N개의 함수와 N개의 함수의 제1 전역 변수를 획득하기 전에, 상기 컴파일러는 컴파일 과정에서, P개의 함수와 P개의 함수 각각의 적어도 하나의 전역 변수를 획득하고 - 여기서, P개의 함수는 N개의 함수를 포함하고, P는 1보다 크거나 같으며, P는 N보다 크거나 같은 정수임 -; P개의 함수 각각의 시작 주소를 파싱하며; P개의 함수 각각의 적어도 하나 전역 변수 각각의 시작 주소를 파싱하는 연산을 수행한다. 상기 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계는, P개의 함수로부터 N개의 함수를 결정하는 단계; 및 N개의 함수 중 적어도 하나의 전역 변수로부터 제1 전역 변수를 결정하는 단계를 포함한다. 상기 N개의 함수의 시작 주소를 결정하는 단계는, P개의 함수 각각의 시작 주소로부터 N개의 함수의 시작 주소를 결정하는 단계를 포함한다. 상기 제1 전역 변수의 시작 주소를 결정하는 단계는, 각각의 전역 변수의 시작 주소로부터 제1 전역 변수의 시작 주소를 결정하는 단계를 포함한다.
본 출원의 본 실시예에서, 전체 프로그램 실행 과정 동안, P개의 함수가 포함될 수 있고, P개의 함수 각각은 적어도 하나의 전역 변수를 포함한다. 상기 컴파일러는 P개의 함수 각각의 시작 주소를 파싱하고, 파싱된 각각의 함수의 시작 주소로부터 N개의 함수의 시작 주소를 결정한다. 상기 컴파일러는 P개의 함수의 적어도 하나의 전역 변수 각각의 N개의 함수의 시작 주소를 더 파싱하고, 매칭을 통해 각각의 전역 변수의 시작 주소로부터 N개의 함수의 시작 주소의 제1 전역 변수를 획득할 필요가 있다. 상기 컴파일러는 초기 컴파일 단계에서, P개의 함수 및 P개의 함수 각각에 대응하는 적어도 하나의 전역 변수의 시작 주소를 파싱하여 매핑 테이블을 구성할 수 있다. N개의 함수를 파싱하는 경우, 컴파일러는 N개의 함수에 사용되는 제1 전역 변수를 파싱하고, 매핑 테이블에서 제1 전역 변수의 시작 주소를 검색한다.
일부 실시 형태에서, 상기 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계는,
상기 컴파일러가 컴파일 과정에서 컴파일 지시 정보를 수신하고, 컴파일 지시 정보에 따라 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계를 포함한다. 여기서, 상기 컴파일 지시 정보는 N개의 함수와 N개의 함수의 제1 전역 변수를 나타내는 데 사용되거나, 및/또는 상기 컴파일 지시 정보는 N개의 함수와 N개의 함수에 사용되지 않는 전역 변수를 나타내는 데 사용된다.
상기 컴파일 지시 정보가 N개의 함수와 N개의 함수의 제1 전역 변수를 나타내면, 상기 컴파일러는 N개의 함수와 N개의 함수의 제1 전역 변수를 파싱한다. 상기 컴파일 지시 정보가 N개의 함수와 N개의 함수에 사용되지 않는 전역 변수를 나타내면, 컴파일러는 N개의 함수와 N개의 함수에 사용되지 않는 전역 변수 이외의 전역 변수를 파싱한다. 상기 컴파일 지시 정보가 N개의 함수를 나타낼 뿐만 아니라 N개의 함수의 제1 전역 변수와 N개의 함수에 사용되지 않는 전역 변수를 나타내면, 상기 컴파일러는 N개의 함수의 제1 전역 변수를 파싱한다. 즉, 상기 컴파일 지시 정보는 N개의 함수에 사용되는 제1 전역 변수를 나타낼 수 있고, N개의 함수에 사용되지 않는 전역 변수를 나타낼 수 있다. 구체적으로, 사용자가 N개의 함수에 사용되는 제1 전역 변수와 N개의 함수에 사용되지 않는 전역 변수를 구성할 수 있다.
선택적으로, 상기 컴파일 지시 정보는 또한 P개의 함수와 P개의 함수 각각에 사용되는 전역 변수를 나타낼 수 있거나, 및/또는 상기 컴파일 지시 정보는 P개의 함수와 P개의 함수 각각에 사용되지 않는 전역 변수를 나타낼 수 있다.
대안적으로, 컴파일 지시 정보는, 함수와 전역 변수 간의 대응 관계를 나타낼 뿐만 아니라 함수와 구조체 멤버 변수 간의 대응 관계도 나타낼 수 있다. 예를 들어, 상기 컴파일 지시 정보는 N개의 함수에 사용되는 구조체 멤버 변수와 N개의 함수에 사용되지 않는 구조체 멤버 변수를 나타낼 수 있다. 이렇게 하면, 상기 컴파일러는 파싱 과정에서, 함수에 사용되는 구조체 멤버 변수로서 전역 변수에 대한 구조체 멤버 변수의 주소 오프셋만을 파싱한다.
선택적으로, 상기 컴파일 지시 정보는 함수 헤더 앞에 명령 행의 형태로 삽입될 수 있다. 예를 들어, 상기 컴파일 지시 정보는 함수 헤더 앞에 삽입되고, 상기 컴파일러에 의해 분석될 필요가 있는 함수와 함수의 전역 변수를 나타내는 데 사용된다. 상기 컴파일 지시 정보는 하나의 함수와 함수의 전역 변수를 나타낼 수 있거나, 또는 복수의 함수에 의해 공유되는 전역 변수를 나타낼 수 있다. 구체적으로, 사용자는 상기 컴파일 지시 정보가 하나의 함수 또는 복수의 함수를 나타내는지 여부를 구성할 수 있다. 사용자가 상기 컴파일 지시 정보가 하나의 함수를 나타낸다는 것을 이와 같이 구성하면, 하나의 함수는 하나의 시작 주소에 대응한다. 사용자가 컴파일 지시 정보가 복수의 함수를 나타낸다는 것을 이렇게 구성하면, 복수의 함수는 하나의 시작 주소에 대응한다.
또한, 상기 컴파일 지시 정보는 또한 함수와 전역 변수 간의 대응 관계를 나타내거나 또는 함수와 구조체 멤버 변수 간의 대응 관계를 나타낼 수 있다. 예를 들어, 하나의 함수에 대해 하나 이상의 전역 변수가 구성되거나, 또는 하나의 함수에 대해 하나 이상의 구조체 멤버 변수가 구성되거나, 또는 하나의 전역 변수에 대해 하나 이상의 구조체 멤버 변수가 구성된다. 상기 컴파일러는 대응 관계에 따라, 상기 함수와 상기 함수에 대응하는 전역 변수 또는 상기 함수에 대응하는 구조체 멤버 변수를 파싱한다. 선택적으로, 상기 컴파일 지시 정보는 사용자에 의해 결정될 수 있다.
일부 실시 형태에서, 상기 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 것은,
컴파일러가 컴파일 과정에서 텍스트 파일로부터 제1 대응 관계 및/또는 제2 대응 관계를 판독하고, 제1 대응 관계 및/또는 제2 대응 관계에 따라 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 것을 포함한다. 여기서, 제1 대응 관계는 N개의 함수와 N개의 함수의 제1 전역 변수를 나타내는 데 사용되거나, 및/또는 제2 대응 관계는 N개의 함수와 N개의 함수에 사용되지 않는 전역 변수를 나타내는 데 사용된다.
본 출원의 본 실시예에서, 복수의 함수와 분석될 필요가 있는 복수의 함수의 전역 변수가 목록의 형태로 텍스트 파일에 저장될 수 있다. 분석될 필요가 있는 전역 변수와 상기 함수 간의 대응 관계가 존재하거나 또는 분석될 필요가 없는 전역 변수가 존재할 수 있다. 분석될 필요가 있는 N개의 함수의 제1 전역 변수는 제1 대응 관계를 이용하여 표현되고, 분석될 필요가 없는 N개의 함수의 변수는 제2 대응 관계를 이용하여 표현된다. N개의 함수를 파싱할 때, 컴파일러는 제1 대응 관계 및/또는 제2 대응 관계에 따라 텍스트 파일 내의 목록에서 N개의 함수의 제1 전역 변수를 검색한다. 물론, 상기 컴파일러는 상기 목록에 있는 복수의 함수의 시작 주소와 복수의 함수에 대응하는 전역 변수의 시작 주소를 미리 파싱할 수 있다. N개의 함수의 실행 중에, 미리 파싱된 시작 주소가 N개의 함수의 시작 주소에서 검색된다. 이러한 방식으로, 중앙 집중식 관리가 구현될 수 있고 또한 연산 복잡도가 줄어들 수 있다.
선택적으로, 함수와 전역 변수 간의 대응 관계 및 전역 변수와 구조체 멤버 변수 간의 대응 관계가 또한 목록의 형태로 텍스트 파일에 저장될 수 있다. 즉, N개의 함수의 제1 전역 변수와 제1 전역 변수의 구조체 멤버 변수로서 N개의 함수에 사용되는 구조체 멤버 변수는 모두 목록의 형태로 텍스트 파일에 미리 저장될 수 있다. N개의 함수를 파싱할 때, 컴파일러는 텍스트 파일로부터 N개의 함수, N개의 함수의 제1 전역 변수, 및 제1 전역 변수의 구조체 멤버 변수로서 N개의 함수에 사용되는 구조체 멤버 변수를 판독한다.
구체적으로, 상기 제1 대응 관계는 함수에 사용되는 전역 변수를 포함하는 목록일 수 있다. 예를 들어, 전역 변수 a가 제1 함수에 사용되고, 전역 변수 a는 제2 함수에 사용된다. 제1 함수와 제2 함수에 사용되는 변수는 목록의 형태로 저장된다. 프리페치 엔진은 메모리에 있는 데이터로서 제1 함수와 제2 함수에 사용되는 전역 변수 a와 연관된 데이터를 캐시에 프리페칭할 필요가 있다. 예를 들어, a는 제1 전역 변수일 수 있다. 컴파일러는 목록을 검색하여 제1 함수, 제2 함수, 및 2개의 함수의 전역 변수를 찾는다. 유사하게, 상기 제2 대응 관계는 함수에 사용되지 않는 전역 변수를 포함하는 목록일 수 있다. 이렇게 하면, 집중화된 관리가 구현될 수 있고 또한 연산 복잡도가 줄어들 수 있다.
일부 실시 형태에서, 제1 전역 변수의 시작 주소를 결정하는 단계 이후에, 데이터 프리페칭 방법은, 프리페치 엔진이 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하고, 프리페치 엔진이 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, 컴파일러가 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 텍스트 파일 또는 바이너리 툴에 출력하는 단계를 더 포함한다.
상기 컴파일러는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 텍스트 파일 또는 바이너리 툴에 저장한다. 프리페치 엔진은 텍스트 파일 또는 바이너리 툴로부터 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하고, N개의 함수의 시작 주소에 따라 데이터 프리페칭 시간을 결정하며, 결정된 프리페칭 시간에, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에 대응하고 있는 데이터를 프리페칭한다. 물론, 프리페치 엔진이 텍스트 파일 또는 바이너리 툴에 있는 프리페칭 정보에 따라 메모리 내의 데이터를 프리페칭할 수 있도록, 구조체 멤버 변수의 캐시 라인 인덱스 번호 또는 주소 오프셋과 같은 프리페칭 정보가 텍스트 파일 또는 바이너리 툴에 저장된다.
일부 실시 형태에서, 상기 프리페치 엔진이 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭한다는 것은, N개의 함수의 시작 주소를 판독할 때, 프리페치 엔진이 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하거나; 또는 프리페치 엔진이 N개의 함수의 시작 주소를 판독하는 제1 시구간 이전에, 프리페치 엔진이 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하거나; 또는 프리페치 엔진이 N개의 함수의 시작 주소를 판독하는 제2 시구간 이후에, 프리페치 엔진이 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 것을 포함한다.
프리페치 엔진이 제1 전역 변수의 시작 주소를 판독할 때, 또는 프리페치 엔진이 제1 전역 변수의 시작 주소를 판독하기 이전의 제1 시구간에서, 또는 프리페치 엔진이 전역 변수의 시작 주소를 판독한 이후의 제2 시구간에서, 데이터 프리페칭 유연성이 추가로 향상될 수 있도록, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터가 캐시에 프리페칭될 수 있다.
일부 실시 형태에서, 상기 N개의 함수의 제1 전역 변수를 획득하는 단계는, N개의 함수의 파티션을 파싱하는 단계 - N개의 함수의 파티션은 핫 파티션과 콜드 파티션을 포함하고 있음 -; 및 핫 파티션으로부터 제1 전역 변수를 획득하는 단계를 포함한다.
본 출원의 본 실시예에서, 상기 컴파일러는 N개의 함수의 파티션을 파싱할 수 있고, N개의 함수의 파티션은 핫 파티션과 콜드 파티션을 포함한다. 상기 컴파일러는 콜드 파티션을 차단할 수 있고, 핫 파티션에 있는 제1 전역 변수를 획득한다. 이렇게 하면, 데이터 프리페칭 효율이 향상될 수 있다. 함수의 자주 사용되는 파티션에 있는 전역 변수에 대응하는 데이터만이 캐시에 프리페칭될 필요가 있으며, 따라서 데이터 프리페칭 효율이 더 향상될 수 있다.
선택적으로, 핫 파티션은 N개의 기능의 파티션이 자주 액세스된다는 것을 나타내는 데 사용되고, 콜드 파티션은 N개의 기능의 파티션이 상대적으로 적은 양의 시간 동안 액세스된다는 것을 나타내는 데 사용된다. 예를 들어, 특정 시구간에서, N개의 함수의 제1 파티션이 액세스되는 횟수가 사전 설정된 임계값을 초과하는 경우, 제1 파티션이 핫 파티션이라고 간주된다. 특정 시구간에서, N개의 함수의 제2 파티션이 액세스되는 횟수가 사전 설정된 임계값보다 작으면, 제2 파티션이 콜드 파티션이라고 간주된다.
일부 실시 형태에서, N개의 함수의 제1 전역 변수가 획득된 후에, 상기 컴파일러는 컴파일 과정에서, N개의 함수의 제2 전역 변수를 획득하고; 프리페치 엔진이 접근 순서에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, 제1 전역 변수와 제2 전역 변수의 접근 순서를 결정하는 연산을 수행한다.
본 출원의 본 실시예에서, 상기 컴파일러는 제1 전역 변수와 N개의 함수의 제2 전역 변수를 파싱할 수 있을 뿐만 아니라, 컴파일 제어 정보 흐름을 참조하여 프로그램 실행 과정에서 제1 전역 변수와 제2 전역 변수의 시퀀스도 파싱할 수 있다. 프리페치 엔진은 상기 시퀀스에 따라 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있다. 제1 전역 변수가 제2 전역 변수보다 먼저 액세스되면, 프리페치 엔진은 제1 전역 변수와 연관된 데이터를 캐시에 먼저 프리페칭하고; 제1 전역 변수가 제2 전역 변수보다 나중에 액세스되면, 프리페치 엔진은 제2 전역 변수와 연관된 데이터를 캐시에 먼저 프리페칭한 다음, 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭한다. 이렇게 하면, 프리페칭 효율이 향상될 수 있고, 캐시의 저장 효율이 추가로 향상될 수 있으며, 캐시에 먼저 저장된 데이터가 CPU에 의해 먼저 액세스됨으로써 캐시의 히트 레이트 또한 향상될 수 있다.
일부 실시 형태에서, 상기 컴파일러는 컴파일 과정에서, 프리페치 엔진이 캐시 라인 인덱스 번호에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터와, 메모리에 있는 데이터로서 제3 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수의 제3 전역 변수를 획득하고; 메모리 내의 제1 전역 변수의 캐시 라인 인덱스 번호와 메모리 내의 제3 전역 변수의 캐시 라인 인덱스 번호를 결정하는 연산을 수행한다.
2개의 전역 변수가 하나의 캐시 라인 인덱스 번호에 속하면, 2개의 전역 변수와 연관한 데이터를 프리페칭하기 위해 단 하나의 캐시 라인이 필요하다. 하지만, 종래 기술에서는, 2개의 전역 변수가 하나의 캐시 라인 인덱스 번호에 속하더라도, 2개의 전역 변수와 연관된 데이터를 프리페칭하기 위해서는 2개의 캐시 라인이 필요하다. 따라서, 프리페칭 시간의 양이 추가로 감소될 수 있고 또한 프리페칭 효율이 향상될 수 있다.
일부 실시 형태에서, N개의 함수는 핫스폿 함수이고, 제1 전역 변수는 핫스폿 전역 변수이다.
본 출원의 본 실시예에서, 핫스폿 함수는 자주 사용되는 함수를 나타내는 데 사용된다. 예를 들어, 특정 시구간에서, N개의 함수가 호출되는 횟수가 제1 임계값을 초과하면, N개의 함수가 핫스폿 함수라고 간주된다. 핫스폿 전역 변수는 자주 사용되는 전역 변수를 나타내는 데 사용된다. 예를 들어, 특정 시구간에서, 제1 전역 변수가 호출되는 횟수가 제2 임계값을 초과허면, 제1 전역 변수가 핫스폿 전역 변수라고 간주된다. 즉, 본 출원의 본 실시예에서, 컴파일러는 핫스폿 함수와 핫스폿 전역 변수를 파싱한다. 이렇게 하면, 프리페치 엔진에 의해 프리페칭되는 데이터가 핫스폿 함수 내의 자주 호출되는 핫스폿 전역 변수와 연관된 데이터이므로, 프리페칭 효율이 향상될 수 있고 또한 캐시의 히트 레이트가 더 향상될 수 있다.
일부 실시 형태에서, 프리페치 엔진은 프리페치 명령을 실행할 수 있다. 예를 들어, 상기 컴파일러는 코드 생성 과정에서 프리페칭 주소를 결정하고, 텍스트 파일 또는 바이너리 툴에 프리페칭 주소를 출력할 수 있다. 프리페칭 주소를 판독하는 경우, 프리페치 엔진은 메모리에 있는 데이터로서 프리페칭 주소에 대응하고 있는 데이터를 프리페칭한다. 이렇게 하면, 컴파일러는 프리페치 엔진에 프리페칭 주소를 통지하고, 프리페치 엔진은 프리페칭 주소에 따라 메모리 내의 데이터를 정밀하게 프리페칭할 수 있다. 컴파일러와 프리페칭 엔진은 병렬로 실행을 수행하며, 하드웨어와 함께 소프트웨어를 사용하여 데이터를 프리페칭한다. 이렇게 하면, 컴파일러의 실행 복잡도를 줄일 수 있고, 데이터 프리 페치 효율이 향상될 수 있으며, 캐시의 히트 레이트가 추가로 향상될 수 있다.
제2 양태에 따르면, 데이터 프리페칭 방법 제공된다. 상기 데이터 프리페칭 방법은, N개의 함수의 시작 주소와 N개의 함수의 시작 주소의 제1 전역 변수를 획득하는 단계 - 상기 시작 주소는 컴파일러에 의해 결정되고, N은 1보다 크거나 같은 정수임 -; 및 N개의 함수의 시작 주소와 N개의 함수의 시작 주소의 제1 전역 변수에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계를 포함한다.
일부 실시 형태에서, 상기 N개의 함수의 시작 주소와 N개의 함수의 제1 전역 변수의 시작 주소를 획득하는 단계는, 컴파일러에 의해 텍스트 파일 또는 바이너리 툴에 입력되는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하는 단계; 및 N개의 함수의 시작 주소와 N개의 함수의 시작 주소의 제1 전역 변수에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계는, 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계를 포함한다.
일부 실시 형태에서, 상기 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계는, 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독될 때, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계; 또는 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독되는 제1 시구간 이전에, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계; 또는 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독되는 제2 시구간 이후에, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계를 포함한다.
일부 실시 형태에서, 상기 프리페치 엔진은 더 구체적으로, N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시에 프리페칭하도록 구성된다.
일부 실시 형태에서, 상기 프리페치 엔진은 구체적으로, 메모리 내의 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 각각의 구조체 멤버 변수의 캐시 라인 인덱스 번호에 따라 메모리 내의 데이터를 프리페칭하도록 구성된다.
일부 실시 형태에서, 상기 프리페치 엔진은 더 구체적으로, 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하고, 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하도록 구성된다.
일부 실시 형태에서, 상기 프리페치 엔진은 더 구체적으로, 접근 순서에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하도록 구성된다. 여기서, 상기 접근 순서는 컴파일러에 의해 결정되는 제1 전역 변수와 제2 전역 변수의 접근 순서이다.
제3 양태에 따르면, 데이터 프리페칭 방법이 제공된다. 상기 데이터 프리페칭 방법은, 컴파일러가 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계 - N은 1보다 크거나 같은 정수임 -; 컴파일러가 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하는 단계; 및 프리페치 엔진이 컴파일러에 의해 결정된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 획득하고, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계를 포함한다.
일부 실시 형태에서, 상기 프리페치 엔진은 하드웨어를 이용하여 구현된 엔진으로서 메모리에서 캐시로 데이터를 프리페칭하도록 구성된 엔진이다.
일부 실시 형태에서, 상기 컴파일러가 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계는, 컴파일러가 N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱하는 단계 - M개의 구조체 멤버 변수는 적어도 하나의 구조체 멤버 변수를 포함하고 있음 -; 및 컴파일러가 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계를 포함한다. 상기 프리페치 엔진이 컴파일러에 의해 결정된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 획득하고, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계는, 프리페치 엔진이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시에 프리페칭하는 단계를 포함한다.
일부 실시 형태에서, 상기 컴파일러는 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하고, N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱하며 - 여기서, M개의 구조체 멤버 변수는 적어도 하나의 구조체 멤버 변수를 포함하고 있음 -; 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하고; 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리 내의 적어도 하나의 구조체 멤버 변수 각각의 캐시 라인 인덱스 번호를 결정한다. 상기 프리페치 엔진이 컴파일러에 의해 결정된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 획득하고, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계는, 프리페치 엔진이 메모리 내의 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 각각의 구조체 멤버 변수의 캐시 라인 인덱스 번호에 따라, 메모리에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시에 프리페칭하는 단계를 포함한다.
일부 실시 형태에서, 상기 컴파일러가 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하는 단계 이후에, 상기 데이터 프리페칭 방법은, 컴파일러가 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 텍스트 파일 또는 바이너리 툴에 출력하고, 프리페치 엔진이 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하고, 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계를 더 포함한다.
일부 실시 형태에서, 상기 데이터 프리페칭 방법은, 컴파일러가 컴파일 과정에서, N개의 함수의 제2 전역 변수를 획득하고; 제1 전역 변수와 제2 전역 변수의 접근 순서를 결정하는 연산을 수행하는 것을 더 포함한다. 상기 프리페치 엔진은 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 접근 순서에 따라 캐시에 프리페칭한다.
제4 양태에 따르면, 데이터 프리페칭 장치가 제공된다. 상기 테이터 프리페칭 장치는 제1 양태 또는 제1 양태의 가능한 실시 형태 중 어느 하나에 따른 데이터 프리페칭 방법을 수행한다.
제5 양태에 따르면, 데이터 프리페칭 장치가 제공된다. 상기 데이터 프리페칭 장치는 제2 양태 또는 제2 양태의 가능한 실시 형태 중 어느 하나에 따른 데이터 프리페칭 방법을 수행한다.
제6 양태에 따르면, 데이터 프리페칭 시스템이 제공된다. 상기 데이터 프리페칭 시스템은, 제1 양태 또는 제1 양태의 가능한 실시 형태 중 어느 하나에 따른 데이터 프리페칭 장치와 제2 양태 또는 제2 양태의 가능한 실시 형태 중 어느 하나에 따른 데이터 프리페칭 장치를 포함한다.
제6 양태의 가능한 제1 실시 형태에서, 상기 프리페치 엔진은 하드웨어를 이용하여 구현된 엔진으로서 메모리에서 캐시로 데이터를 프리페칭하도록 구성된 엔진이다.
일부 실시 형태에서, 상기 프리페치 엔진은 구체적으로, 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독될 때, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하거나; 또는 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독되는 제1 시구간 이전에, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하거나; 또는 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독되는 제2 시구간 이후에, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하도록 구성된다.
제7 양태에 따르면, 데이터 프리페칭 장치가 제공된다. 상기 데이터 프리페칭 장치는 적어도 하나의 프로세서, 스토리지, 및 통신 인터페이스를 포함한다. 상기 데이터 프리페칭 장치가 통신 인터페이스를 이용하여 다른 장치와 데이터를 교환하여 제1 양태 또는 제1 양태의 가능한 실시 형태 중 어느 하나에 따른 데이터 프리페칭 방법을 수행할 수 있도록, 적어도 하나의 프로세서, 스토리지, 및 통신 인터페이스가 모두 버스를 이용하여 연결되고, 스토리지가 컴퓨터 실행 가능한 명령을 저장하도록 구성되며, 적어도 하나의 프로세서가 스토리지에 저장된 컴퓨터 실행 가능한 명령을 실행하도록 구성된다.
제8 양태에 따르면, 데이터 프리페칭 장치가 제공된다. 상기 데이터 프리페칭 장치는 적어도 하나의 프로세서, 스토리지, 및 통신 인터페이스를 포함한다. 상기 데이터 프리페칭 장치가 통신 인터페이스를 이용하여 다른 장치와 데이터를 교환하여 제2 양태 또는 제2 양태의 가능한 실시 형태 중 어느 하나에 따른 데이터 프리페칭 방법을 수행할 수 있도록, 적어도 하나의 프로세서, 스토리지, 및 통신 인터페이스가 모두 버스를 이용하여 연결되고, 스토리지가 컴퓨터 실행 가능한 명령을 저장하도록 구성되며, 적어도 하나의 프로세서가 스토리지에 저장된 컴퓨터 실행 가능한 명령을 실행하도록 구성된다.
제9 양태에 따르면, 컴퓨터 판독가능 매체가 제공된다. 상기 컴퓨터 판독가능 매체는 컴퓨터 프로그램을 저장하고, 상기 컴퓨터 프로그램은 제1 양태 또는 제1 양태의 가능한 실시 형태 중 어느 하나에 따른 데이터 프리페칭 방법을 수행하는 데 사용되는 명령을 포함한다.
제10 양태에 따르면, 컴퓨터 판독가능 매체가 제공된다. 상기 컴퓨터 판독가능 매체는 컴퓨터 프로그램을 저장하고, 상기 컴퓨터 프로그램은 제2 양태 또는 제2 양태의 가능한 실시 형태 중 어느 하나에 따른 데이터 프리페칭 방법을 수행하는 데 사용되는 명령을 포함한다.
상기 컴파일러가 N개의 함수와 N개의 함수의 제1 전역 변수를 먼저 획득한 다음, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정한다는 것을 알 수 있다. 상기 프리페치 엔진은 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭한다. N개의 함수의 시작 주소는 데이터를 프리페칭하기 위한 프리페칭 시간이라고 이해할 수 있을 것이다. 프리페치 엔진과 컴파일러는 병렬로 실행을 수행할 수 있다. 프리페칭 유연성이 향상될 수 있도록, 프리페칭 시간은 N개의 함수의 시작 주소이고 또한 종래 기술의 소프트웨어 프리페치 명령에 의존하지 않는다.
도 1은 본 출원의 일 실시예에 따른 컴퓨터 시스템 아키텍처의 개략도이다.
도 2는 본 출원의 일 실시예에 따른 적용 시나리오의 개략도이다.
도 3은 본 출원의 일 실시예에 따른 데이터 프리페칭 방법의 개략도이다.
도 4는 본 출원의 일 실시예에 따른 데이터 프리페칭 장치의 개략도이다.
도 5는 본 출원의 일 실시예에 따른 다른 데이터 프리페칭 장치의 개략도이다.
도 6은 본 출원의 일 실시예에 따른 데이터 프리페칭 시스템의 개략도이다.
도 7은 본 출원의 일 실시예에 따른 데이터 프리페칭 장치의 개략도이다.
도 8은 본 출원의 일 실시예에 따른 다른 데이터 프리페칭 장치의 개략도이다. 및
도 9는 본 출원의 실시예에 따른 다른 데이터 프리페칭 시스템의 개략도이다.
본 출원의 실시예의 데이터 프리페칭 방법(data prefetching method)이 단일 코어 또는 멀티 코어 컴퓨터 시스템에 적용될 수 있으며, 멀티 코어 컴퓨터 시스템이 범용 멀티 코어 컴퓨터 시스템일 수 있다고 이해해야 한다. 멀티 코어 컴퓨터 시스템 내의 CPU가 복수의 코어를 포함할 수 있으며, 복수의 코어는 시스템 버스 또는 크로스바(crossbar)를 이용하여 서로 통신할 수 있다. 멀티 코어 컴퓨터 시스템은 CPU 내의 복수의 코어에 의해 공유되는 캐시(cache)를 포함할 수 있다.
도 1은 본 출원의 일 실시예에 따른 컴퓨터 시스템 아키텍처(100)의 개략도이다. 컴퓨터 시스템 아키텍처(100)는 중앙처리장치(Central Processing Unit, "CPU")(110), 캐시(120), 및 메모리(130)를 포함한다.
CPU(110)는 처리를 위해 캐시(120)로부터 자주 사용되는 데이터를 획득하도록 구성되거나, 처리를 위해 메모리(130)로부터 직접 데이터를 획득할 수 있다. CPU가 메모리 내의 데이터에 액세스할 필요가 있으면, CPU는 CPU에 의해 액세스될 필요가 있는 데이터가 캐시(120)에 있는지 여부 및 액세스될 필요가 있는 데이터가 만료되었는지의 여부를 먼저 질의한다. 액세스될 필요가있는 데이터가 캐시(120)에 있고 만료되지 않았으면, 캐시(120)로부터 데이터가 판독된다. CPU에 의해 액세스될 필요가 있는 데이터가 캐시(120)에 있는 것을 히트(hit)라고 하며, CPU에 의해 액세스될 필요가 있는 데이터가 캐시(120)에 있지 않은 것을 미스(miss)라고 한다.
CPU(110)가 메모리(130)로부터 데이터를 획득하는 데 있어서 지연이 줄어들 수 있도록, 캐시(120)는 메모리(130)로부터 프리페칭된 데이터를 저장하도록 구성된다.
메모리(130)는 데이터를 저장하도록 구성되고, 메모리(130) 내에서 자주 사용되는 데이터가 캐시(120)에 저장된다.
캐시(120)의 히트 레이트가 높다는 것은, 데이터 프리페칭 효과가 더 좋다는 것을 나타낸다. 또한, 캐시는 명령 캐시와 데이터 캐시를 포함할 수 있다.
도 2는 본 출원의 일 실시예에 따른 적용 시나리오(200)의 개략도이다. 적용 시나리오(200)는 컴파일러(210), 텍스트 파일 또는 바이너리 툴(220), 프리페치 엔진(230), 및 메모리(130)를 포함한다.
컴파일러(210)는 함수와 상기 함수의 전역 변수를 획득하고, 상기 함수의 시작 주소와 상기 함수의 전역 변수의 시작 주소를 파싱하도록 구성된다. 컴파일러(210)는 추가적으로, 함수의 콜드 파티션(cold partition)과 핫 파티션(hot partition)을 파싱할 수 있다. 컴파일러(210)는 추가적으로, 상기 함수의 변수의 접근 순서(access sequence)를 파싱할 수 있다. 컴파일러에 의해 파싱되는 시작 주소, 콜드 파티션과 핫 파티션, 및 접근 순서와 같은 정보를 프리페칭 정보라고 할 수 있다. 프리페치 엔진(230)이 프리페칭 정보에 따라 메모리(130) 내의 데이터를 캐시(120)에 프리페칭할 수 있도록, 컴파일러(210)는 프리페칭 정보를 텍스트 파일 또는 바이너리 툴(220)에 출력할 수 있거나, 또는 물론, 컴파일러(210)는 프리페칭 정보를 프리페치 엔진(230)에 직접 출력할 수 있다.
프리페치 엔진(230)이 프리페칭 정보를 판독할 수 있도록, 텍스트 파일 또는 바이너리 툴(220)은 컴파일러(210)에 의해 출력된 프리페칭 정보를 수신하여 저장하도록 구성된다.
프리페치 엔진(230)은, 텍스트 파일 또는 바이너리 툴(220)에 저장된 프리페칭 정보를 판독하고, 판독된 프리페칭 정보에 따라 메모리(130)로부터 데이터를 프리페칭하도록 구성된다.
프리페치 엔진(230)이 데이터를 판독할 수 있도록, 메모리(130)는 변수와 연관된 데이터를 저장하도록 구성된다.
따라서, 본 출원의 본 실시예에서, 컴파일러(210)는 함수의 프리페칭 정보를 분석하고, 프리페치 엔진(230)은 프리페칭 정보에 따라 메모리(130) 내의 데이터를 프리페칭한다. 데이터 프리페칭 효율이 더 향상될 수 있도록, 컴파일러(210)와 프리페치 엔진(230)은 병렬로 실행을 수행할 수 있다. 또한, 데이터 프리페칭 시간은 컴파일러(210)에 의해 파싱되는 프리페칭 정보이다. 이렇게 하면, 프리페칭 시간이 종래 기술에서에서의 소프트웨어 프리페치 명령에 의존하지 않으며, 프리페칭 유연성이 향상된다.
도 3은 본 출원의 일 실시예에 따른 데이터 프리페칭 방법(300)의 개략도이다. 데이터 프리페칭 방법(300)은 컴퓨터 시스템에 적용된다. 예를 들어, 컴퓨터 시스템은 임베디드 시스템(embedded system)일 수 있다. 컴퓨터 시스템은 프리페치 엔진(230), 메모리(130), 및 컴파일러(210)를 포함한다. 데이터 프리페칭 방법(300)은 S310, S320, 및 S330을 포함한다. 컴파일러(210)는 컴파일 과정에서 S310과 S320를 수행하고, 프리페치 엔진(230)은 S330를 수행한다. 세부사항은 다음과 같다.
S310. N개의 함수와 N개의 함수의 제1 전역 변수를 획득한다. 여기서, N은 1보다 크거나 같은 정수이다.
S320. N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정한다.
S330. 프리페치 엔진(230)이 컴파일러(210)에 의해 결정된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다.
선택적으로, S310과 S320은 링킹 과정(linking process)에서 완료될 수 있다. S310에서, N개의 함수와 N개의 함수의 제1 전역 변수가 동시에 획득될 수 있거나 또는 개별적으로 획득될 수 있다. 마찬가지로, S320에서, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소가 동시에 결정될 수 있거나 또는 개별적으로 결정될 수 있다. N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소가 개별적으로 결정되면, N개의 함수의 시작 주소가 먼저 결정된 후 제1 전역 변수의 시작 주소가 결정될 수 있거나, 또는 제1 전역 변수의 시작 주소가 먼저 결정된 후 N개의 함수의 시작 주소가 결정된다. 본 출원의 본 실시예에서는 이에 대해 제한하지 않는다.
N개의 함수의 시작 주소가 N개의 함수에 의해 공유되는 시작 주소일 수 있다고 이해해야 하며, N개의 함수의 시작 주소가 N개의 함수 중 하나의 시작 주소라고 이해될 수 있다. N개의 함수의 시작 주소는 데이터 프리페칭 시간으로서 사용되어, 메모리(130) 내의 데이터를 캐시(120)에 프리페치하도록 프리페치 엔진(230)을 트리거한다. 제1 전역 변수의 시작 주소는, 프리페치 엔진이 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭하기 위해 사용하는 주소이다. 즉, 제1 전역 변수의 시작 주소는 컴파일러에 의해 파싱되는, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터의 시작 주소일 수 있거나, 또는 프로그램 내의 제1 전역 변수의 시작 주소로서 컴파일러에 의해 파싱된 시작 주소일 수 있다. 프로그램 내의 제1 전역 변수의 시작 주소와 제1 전역 변수와 연관된, 데이터의 메모리 내의 시작 주소 사이에는 매핑 관계가 존재한다. 프리페치 엔진(230)은 프로그램 내의 제1 전역 변수의 시작 주소 및 상기 매핑 관계에 따라, 제1 전역 변수와 연관된 데이터의 메모리(130) 내의 시작 주소를 결정하고, 그런 다음 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다.
구체적으로, 프로그램 요원이 개발 과정에서, N개의 함수가 특정 서비스와 관련된 함수일 수 있다는 것을 결정할 수 있다. 따라서, N개의 함수의 모든 변수가 데이터 프리페칭 과정에서 메모리(130)에서 캐시(120)로 프리페칭될 수 있다. 컴파일러(210)는 컴파일 과정에서 N개의 함수와 N개의 함수의 제1 전역 변수를 획득할 수 있다. 그런 다음, 컴파일러(210)는 N개의 함수와 제1 전역 변수에 따라 메모리(130) 내의 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 획득한다. N개의 함수의 시작 주소가 프리페치 엔진(Prefetch Engine)(230)의 프리페칭 시간이라고 이해될 수 있다. 프리페치 엔진(230)과 컴파일(210)은 병렬로 실행을 수행할 수 있다. 프리페칭 시간은 N개의 함수의 시작 주소에 의해 결정될 수 있다. 이렇게 하면, 프리페칭 시간이 종래 기술에서의 소프트웨어 프리페치 명령에 의존하지 않으며, 프리페칭 유연성이 향상된다.
N개의 함수의 시작 주소를 판독하기 전에 또는 판독한 후에, 프리페치 엔진(230)은 제1 전역 변수의 시작 주소에 따라 메모리(130) 내의 데이터를 프리페칭하여, 프리페치 명령을 이용하여 함수로부터 프리페칭을 수행하여 유발되는 제한을 방지한다. 또한, 종래 기술에서는, 프리페치 명령에서의 데이터 프리페칭 시간이 개발자에 의해 함수 내에 명시된다. 본 출원의 본 실시예에서, 상기 데이터는 함수의 실행 이전에 사전 설정된 시간 내에 프리페칭될 수 있거나, 또는 상기 데이터는 N개의 함수의 주소가 파싱될 때 프리페칭될 수 있거나, 데이터는 N개의 함수의 주소가 파싱된 후 사전 설정된 시간 내에 프리페칭될 수 있다. 상기 프리페칭 시간은 함수에 제한되지 않으며, 특정 프리페칭 시간은 특정 규칙에 따라 결정될 수 있다. 이렇게 하면, 데이터 프리페칭 유연성이 추가로 향상될 수 있다.
더 구체적으로, 일단 프리페치 엔진(230)이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 획득하면, 프리페치 엔진(230)은 메모리(130) 내의 데이터를 캐시(120)에 프리페칭할 수 있다. 예를 들어, 프리페치 엔진(230)은 현재 프로그램 실행 속도에 따라 프리페칭 시간을 결정할 수 있다. 현재 프로그램 실행 속도가 상대적으로 빠르면, 데이터는 N개의 함수의 시작 주소가 판독되는 제1 시구간 이전에 프리페칭되기 시작할 수 있거나; 또는 현재 프로그램 실행 속도가 상대적으로 느리면, 데이터는 N개의 함수의 시작 주소가 판독되는 제2 시구간 이후에 프리페칭되기 시작할 수 있거나; 또는 프리페치 엔진(230)은 N개의 함수의 시작 주소가 판독될 때 데이터를 프리페칭하기 시작할 수 있다. 다른 예를 들면, 프리페치 엔진(230)은 캐시(120)의 크기와 캐시(120) 내의 데이터의 수명에 따라 데이터 프리페칭 시간을 결정할 수 있다. 다른 예를 들면, 컴파일러(210)는 프리페치 엔진(230)에 프리페칭 시간을 통지할 수 있고, 프리페치 엔진(230)은 컴파일러(210)에 의해 송신된 프리페칭 시간에 따라 데이터를 프리페칭한다. 따라서, 종래 기술과 비교할 때, 프리페칭 유연성이 더 향상될 수 있다.
선택적으로, N이 1이면, 즉 하나의 함수가 하나의 시작 주소에 대응하면, 프리페치 엔진(230)은 하나의 함수의 제1 전역 변수와 연관된 데이터를 프리페칭한다. N이 1보다 크면, 즉 복수의 함수가 하나의 시작 주소를 공유할 수 있으면, 프리페치 엔진(230)은 복수의 함수의 제1 전역 변수와 연관된 데이터를 프리페칭한다. 즉, 프리페치 엔진(230)은 메모리(130)에 있는 데이터로서 하나의 함수의 전역 변수에 대응하고 있는 데이터를 캐시(120)에 프리페칭할 수 있을 뿐만 아니라 메모리(130)에 있는 데이터로서 복수의 함수의 전역 변수에 대응하고 있는 데이터도 캐시(120)에 프리페칭할 수 있다. 선택적으로, 복수의 함수는 특정 서비스와 관련된 복수의 함수일 수 있다. 예를 들어, 특수한 서비스를 구현하기 위해, 서비스는 복수의 함수를 사용할 필요가 있다. 이렇게 하면, 메모리(130)에 있는 데이터로서 복수의 함수의 제1 전역 변수에 대응하고 있는 데이터가 하나의 시작 주소를 이용하여 캐시(120)에 프리페칭됨으로써 프리페칭 효율이 더 향상될 수 있다.
또한, S320은, N개의 함수를 파싱할 때 컴파일러(210)가 N개의 함수의 시작 주소를 파싱한다는 것을 포함한다. 대안적으로, S320은, 컴파일러(210)가 초기 컴파일 단계에서 모든 함수의 시작 주소를 파싱하고, 제1 함수를 파싱할 때, 컴파일러(210)가 이전에 파싱된 시작 주소를 검색하여 N개의 함수의 시작 주소를 결정한다는 것을 포함한다. 이렇게 하면, 프로그램 실행 시간이 줄어들 수 있다. S320은, 제1 전역 변수를 파싱할 때 컴파일러(210)가 제1 전역 변수의 시작 주소를 파싱한다는 것을 포함한다. 대안적으로, S320은, 컴파일러(210)가 초기 컴파일 단계에서 모든 전역 변수의 시작 주소를 파싱하고, 제1 전역 변수를 파싱할 때, 컴파일러(210)가 이전에 파싱된 시작 주소를 검색하여 제1 전역 변수의 시작 주소를 결정한다는 것을 포함한다.
선택적인 실시예에서, 상기 제1 전역 변수의 시작 주소를 결정하는 단계 이후에, 데이터 프리페칭 방법(300)은, 컴파일러(210)가 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 텍스트 파일 또는 바이너리 툴(220)에 출력하고, 프리페치 엔진(230)이 텍스트 파일 또는 바이너리 툴(220)에 있는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하며, 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다는 것을 더 포함한다.
컴파일러(210)는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 텍스트 파일 또는 바이너리 툴(220)에 저장한다. 프리페치 엔진(230)은 텍스트 파일 또는 바이너리 툴(220)로부터 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하고, N개의 함수의 시작 주소에 따라 데이터 프리페칭 시간을 결정하며, 메모리(130)에 있는 데이터로서 제1 전역 변수의 시작 주소에 대응하고 있는 데이터를 결정된 프리페칭 시간에 프리페칭한다. 물론, 프리페치 엔진(230)이 텍스트 파일 또는 바이너리 툴(220)에 있는 프리페칭 정보에 따라 메모리(130) 내의 데이터를 프리페칭할 수 있도록, 구조체 멤버 변수(structure member variable)의 캐시 라인 인덱스 번호(cache line index number) 또는 주소 오프셋과 같은 프리페칭 정보가 텍스트 파일 또는 바이너리 툴에 저장된다.
선택적인 실시예에서, 프리페치 엔진(230)이 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다는 것은, 텍스트 파일 또는 바이너리 툴(220)에 있는 N개의 함수의 시작 주소를 판독할 때, 프리페치 엔진(230)이 메모리(130)에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다는 것; 또는 프리페치 엔진(230)이 텍스트 파일 또는 바이너리 툴(220)에 있는 N개의 함수의 시작 주소를 판독하는 제1 시구간 이전에, 프리페치 엔진(230)이 메모리(130)에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다는 것; 또는 프리페치 엔진(230)이 텍스트 파일 또는 바이너리 툴(220)에 있는 N개의 함수의 시작 주소를 판독하는 제2 시구간 이후에, 프리페치 엔진(230)이 메모리(130)에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다는 것을 포함한다.
구체적으로, 컴파일러(210)는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 출력하고, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 텍스트의 형태로 또는 바이너리 툴에 저장할 수 있다. 프리페치 엔진(230)이 텍스트 또는 바이너리 툴로부터 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 획득하고 또한 프리페치 엔진(230)이 N개의 함수의 시작 주소를 판독할 때, 프리페치 엔진(230)은 제1 전역 변수의 시작 주소에 따라, 제1 전역 변수와 연관된 데이터를 메모리(130)에서 캐시(120)로 프리페칭한다. 따라서, 소프트웨어를 이용하여 해석을 수행하고 하드웨어를 이용하여 획득을 수행하는 협력적 프리페칭 방식(coordinative prefetching manner)으로, 데이터 프리페칭 유연성을 향상시킬 수 있다. 하드웨어가 실제 프로그램 실행 상태를 판독할 수 있도록, 소프트웨어는 실제 프로그램 실행 상태를 파싱한 후에 실제 프로그램 실행 상태를 텍스트 또는 바이너리 툴에 출력한다. 상기 하드웨어는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라 메모리(130) 내의 데이터를 프리페칭한다. 또한, 상기 하드웨어는 캐시(120)의 메모리(130)를 확장할 수 있다. 이렇게 하면, 캐시(120)의 히트 레이트가 추가로 향상될 수 있다.
또한, 컴파일러(210)는 프리페칭 시간의 식별 정보를 텍스트 파일 또는 바이너리 툴(230)에 저장할 수 있다. 프리페칭 시간의 식별 정보를 판독할 때, 프리페치 엔진(230)은 프리페칭 시간의 식별 정보에 따라, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다. 예를 들어, 상기 프리페칭 시간의 식별 정보는 제1 식별자, 또는 제2 식별자, 또는 제3 식별자일 수 있다. 제1 식별자는, N개의 함수의 시작 주소를 판독할 때 프리페치 엔진(230)이 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다는 것을 나타내는 데 사용된다. 제2 식별자는, 프리페치 엔진(230)이 N개의 함수의 시작 주소를 판독하는 제1 시구간 이전에 프리페치 엔진(230)이 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다는 것을 나타내는 데 사용된다. 제3 식별자는, 프리페치 엔진(230)이 N개의 함수의 시작 주소를 판독하는 제2 시구간 이후에 프리페치 엔진(230)이 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다는 것을 나타내는 데 사용된다.
본 출원의 본 실시예에서, 컴파일러(210)가 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정한 후에, 프리페칭 시간이 컴파일러(210)에 의해 결정될 수 있거나 또는 프리페치 엔진(230)에 의해 결정될 수 있거나, 또는 특정 규칙에 따라 결정될 수 있거나 또는 프로토콜에 따라 지정될 수 있다고 이해해야 한다. 본 출원의 본 실시예에서는 이에 대해 제한하지 않는다.
또한, N개의 함수의 제1 전역 변수가 하나의 전역 변수이거나 또는 복수의 전역 변수일 수 있다고 이해해야 하다. 본 출원의 본 실시예에서는 이에 대해 제한하지 않는다. 물론, 제1 전역 변수는 N개의 함수의 전역 변수에만 제한되지 않는다. 즉, 2개의 서로 다른 함수가 동일한 전역 변수를 가질 수 있거나, 또는 2개의 서로 다른 함수가 서로 다른 전역 변수를 가질 수 있다. 본 출원의 본 실시예에서는 이에 대해 제한하지 않는다.
또한, 메모리(130)에 있는 데이터로서 제1 전역 변수에 대응하는 데이터가 프리페칭되고, 제1 전역 변수가 N개의 함수 이외의 제2 함수에서 호출되면, CPU가 캐시(120)로부터 제1 전역 변수에 대응하는 데이터를 직접 획득함으로써, 다른 함수가 데이터를 필요로 할 때 데이터가 다시 획득될 필요가 있는 종래 기술의 문제를 방지할 수 있고 또한 시그널링 오버헤드를 줄일 수 있다.
본 출원의 본 실시예에서, N개의 함수의 제1 전역 변수가 획득될 수 있고, 메모리(130)에 있는 데이터로서 N개의 함수의 제1 전역 변수에 대응하고 있는 데이터가 프리페칭되거나; 또는 N개의 함수만이 획득될 수 있고, 메모리(130)에 있는 데이터로서 N개의 함수의 모든 변수에 대응하고 있는 데이터가 프리페칭되거나; 또는 제1 전역 변수만이 획득될 수 있고, 메모리(130)에 있는 데이터로서 제1 전역 변수에 대응하고 있는 데이터가 프리페칭된다. 본 출원의 본 실시예에서는 이에 대해 제한하지 않는다.
예를 들어, 실제 적용 과정에서, 사용자가 컴파일러(210)의 인터페이스를 이용하여, 분석될 필요가 있는 함수를 컴파일러(210)에 통지할 수 있다. 하드웨어가 캐시 라인 정보 및 함수를 판독할 수 있도록, 컴파일러(210)는 컴파일러(210)가 사용자 및 하드웨어와 상호 작용하는 것을 이용하여 상호작용 인터페이스를 지정하고, 함수에 사용되는 전역 변수를 파싱하며, 식별된 전역 변수의 데이터가 속한 캐시 라인에 대해 통계적인 분류를 수행하고, 전역 심볼을 자동적으로 생성하며, 캐시 라인 정보 및 함수를 심볼에 저장할 수 있다. 하드웨어는 프리페치 엔진(230)의 주변 장치를 커스터마이징하고, 프리페치 엔진(230)의 주변 장치는 데이터를 캐시(120)에 프리페칭하도록 구성된다. 대안적으로, 하드웨어는 프리페칭을 수행하도록 프리페치 엔진(230)을 트리거하기 위해 컴파일 명령을 커스터마이징할 수 있고, 프리페치 엔진(230)은 컴파일러(210)에 의해 자동으로 생성된 전역 심볼로부터 프리페칭 정보를 판독한다.
선택적인 실시예에서, 제1 전역 변수는 M개의 구조체 멤버 변수를 포함하고, M은 1보다 크거나 같다.
구체적으로, 제1 전역 변수가 전역 구조체 멤버 변수인 경우, 전역 구조체 멤버 변수는 M개의 구조체 멤버 변수를 포함한다. 프리페치 엔진(230)은 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리(130)에 있는 데이터로서 M개의 구조체 멤버 변수와 연관된 데이터를 메모리(130)에 미리 프리페칭할 수 있다. 이렇게 하면, 프리페치 명령을 함수에 삽입함으로써, M개의 구조체 멤버 변수와 연관된 데이터를 프리페칭하는 종래 기술의 연산이 방지될 수 있다. 또한, 종래 기술에서, 복수의 프리페치 명령은 메모리(130)에 있는 데이터로서 M개의 구조체 멤버 변수와 연관된 데이터를 프리페칭할 필요가 있다. 이렇게 하면, 프로그램 실행 시간이 증가된다. 또한, M개의 구조체 멤버 변수의 프리페칭 시간이 프로그래머에 의해서만 지정되고, 컴파일러(210)의 컴파일 및 스케줄링 시간이 프로그래머에 의해 지정된 M개의 구조체 멤버 변수의 프리페칭 시간과 일치하도록 보장하는 것이 어렵다. 따라서, 캐시의 히트 레이트(120)도 보장될 수 없다. 예를 들어, M개의 구조체 멤버 변수의 프리페치 명령이 과도하게 일찍 삽입되고 또한 데이터가 캐시(120)에 과도하게 일찍 프리페칭된 경우, CPU가 캐시(120)에 액세스하기 전에 데이터가 대체될 수 있다. M개의 구조체 멤버 변수의 프리페치 명령이 과도하게 늦게 삽입되면, CPU가 캐시(120)에 액세스할 때 지연이 초래된다.
선택적인 실시예에서, S320은 N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱하는 단계를 포함한다. 여기서, M개의 구조체 멤버 변수는 적어도 하나의 구조체 멤버 변수를 포함한다. S330은, 프리페치 엔진(230)이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리(130)에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시(120)에 프리페칭한다는 것을 포함한다.
구체적으로, 제1 전역 변수는 M개의 구조체 멤버 변수를 포함하지만, M개의 구조체 멤버 변수 중 적어도 하나가 N개의 함수에 사용될 수 있다. 따라서, 컴파일러(210)는 N개의 함수에 사용되는 구조체 멤버 변수를 파싱할 필요가 있다. 프리페치 엔진(230)이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 제1 전역 변수의 시작 주소에 대한 각각의 구조체 멤버 변수의 주소 오프셋을 판독할 수 있도록, 컴파일러(210)는 파싱을 통해, M개의 구조체 멤버 변수 중 적어도 하나가 N개의 함수에 사용된다는 것을 학습하고, 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하며, N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 각각의 제1 전역 변수의 시작 주소에 대한 구조체 멤버 변수의 주소 오프셋을 텍스트 또는 바이너리 툴에 저장한다. N개의 함수의 시작 주소를 판독할 때, 프리페치 엔진(230)은 제1 전역 변수의 시작 주소에 대한 주소 오프셋에 따라, 각각의 구조체 멤버 변수와 연관된 데이터를 캐시(120)에 프리페칭할 수 있다. 이렇게 하면, N개의 함수에 사용되는 구조체 멤버 변수가 N개의 함수의 실제 요구사항에 따라 파싱될 수 있다. CPU가 캐시(120)에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터에 액세스하기 전에, 프리페칭 효율이 향상될 수 있도록, 프리페치 엔진(230)은 N개의 함수에 사용되는 구조체 멤버 변수와 연관된 데이터를 캐시(120)에 프리페칭할 수 있고, CPU가 캐시(120)에 액세스할 때, 캐시의 히트 레이트(120)가 더 향상될 수 있도록, 캐시(120)는 구조체 멤버 변수에 대응하고 있는 데이터로서 CPU에 필요한 데이터를 저장한다.
선택적인 실시예에서, N개의 함수는 핫스폿 함수이고, 제1 전역 변수는 핫스폿 전역 변수이다.
핫스폿 함수가 자주 사용되는 함수를 나타내는 데 사용된다고 이해해야 한다. 예를 들어, 특정 시구간에서, N개의 함수가 호출되는 횟수가 제1 임계값을 초과하면, N개의 함수가 핫스폿 함수라고 간주된다. 핫스폿 전역 변수는 자주 사용되는 전역 변수를 나타내는 데 사용된다. 예를 들어, 특정 시구간에서, 제1 전역 변수가 호출되는 횟수가 제2 임계값을 초과허면, 제1 전역 변수가 핫스폿 전역 변수라고 간주된다. 즉, 본 출원의 본 실시예에서, 컴파일러(210)는 핫스폿 함수와 핫스폿 전역 변수를 파싱한다. 이렇게 하면, 프리페치 엔진(230)에 의해 프리페칭된 데이터는 핫스폿 함수 내의 자주 호출되는 핫스폿 전역 변수와 연관된 데이터이므로, 프리페칭 효율이 향상될 수 있고 또한 캐시의 히트 레이트(120)가 더 향상될 수 있다.
선택적으로, 컴파일러(210)는 파싱을 통해, 함수가 핫 함수 또는 콜드 함수인지 여부를 학습할 수 있다. 핫 함수는 컴파일러(210)에 의해 자주 컴파일될 필요가 있는 함수일 수 있으며, 콜드 함수는 컴파일러(210)에 의해 비교적 작은 양의 시간 동안 컴파일된 함수일 수 있다. 예를 들어, 콜드 함수와 핫 함수의 분류는 다음과 같을 수 있다. 특정 시간 범위 내에서, 지정된 제3 임계값보다 큰 양의 시간 동안 컴파일된 함수가 핫 함수이고, 지정된 제3 임계값보다 작은 양의 시간 동안 컴파일된 함수가 콜드 함수이다.
선택적인 실시예에서, S320은, 변수가 적어도 하나의 구조체 멤버 변수를 포함하고; 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계; 및 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리(130) 내의 적어도 하나의 구조체 멤버 변수 각각의 캐시 라인(cache line) 인덱스 번호를 결정하는 단계를 포함한다. S330은 프리페치 엔진(230)이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 메모리(130) 내의 각각의 구조체 멤버 변수의 캐시 라인 인덱스 번호에 따라 메모리(130) 내의 데이터를 프리페칭하는 것을 포함한다.
구체적으로, 컴파일러(210)가 제1 전역 변수에 대한 제1 전역 변수의 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 획득한 후에, 컴파일러(210)는 칩의 캐시 라인 길이, 각각의 구조체 멤버 변수의 오프셋 주소, 및 제1 전역 변수의 시작 주소를 참조하여 메모리(130) 내의 각각의 구조체 멤버 변수의 캐시 라인 인덱스 번호를 매핑할 수 있다. 컴파일러(210)는 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 캐시 라인 인덱스 번호를 텍스트 또는 바이너리 툴에 저장한다. 2개의 구조체 멤버 변수가 동일한 캐시 라인 인덱스 번호를 가지고 있으면, 컴파일러(210)는 하나의 캐시 라인 인덱스 번호를 프리페치 엔진(230)에 반환한다. 프리페칭 효율이 추가로 향상될 수 있도록, 프리페치 엔진(230)은 캐시 라인 인덱스 번호에 따라 메모리(130) 내의 데이터를 프리페칭하고, 특정 데이터만이 프리페치 명령을 이용하여 한 번에 페칭될 수 있고 또한 2개의 구조체 멤버 변수의 데이터가 한 번에 프리페칭될 수 없는 종래 기술의 문제가 방지된다.
예를 들어, 8개의 구조체 멤버 변수(개별적으로 1, 2, 3, 4, 5, 6, 7, 및 8로 번호가 부여됨)가 N개의 함수에 사용되면, 메모리(130) 내의 8개의 구조체 멤버 변수에 대응하는 데이터의 캐시 라인 인덱스 번호가 제1 전역 변수의 시작 주소에 대한 각각의 구조체 멤버 변수의 오프셋 주소에 따라 결정된다. 1과 2로 번호가 부여된 구조체 멤버 변수의 캐시 라인 인덱스 번호가 1이고, 3, 4, 5,및 6으로 번호가 부여된 구조체 멤버 변수의 캐시 라인 인덱스 번호가 2이며, 7로 번호가 부여된 구조체 멤버 변수의 캐시 라인 인덱스 번호가 3이며, 8로 번호가 매겨진 구조체 멤버 변수의 캐시 라인 인덱스 번호가 4이다. 컴파일러(210)는 인덱스 번호가 1, 2, 3, 및 4인, 메모리 내의 캐시 라인의 시작 주소를 텍스트 파일 또는 바이너리 툴(220)에 출력한다. 프리페치 엔진(230)은 텍스트 파일 또는 바이너리 툴(220)에 있는 인덱스 번호를 판독한다. 프리페치 엔진(230)은 4개의 캐시 라인을 이용하여, 메모리(130)로부터 제8 구조체 멤버 변수에 대응하는 데이터를 프리페칭할 수 있다. 하지만, 종래 기술에서는, 8개의 캐시 라인이 8개의 구조체 멤버 변수에 대응하는 데이터를 프리페칭할 필요가 있다. 따라서, 본 출원의 본 실시예에서, 데이터 프리페칭 시간의 양이 감소될 수 있고, 데이터 프리페칭 효율이 향상될 수 있으며, 데이터 프리페칭 지연이 감소될 수 있다.
선택적인 실시예에서, 데이터 프리페칭 방법(300)은, 프리페치 엔진(230)이 캐시 라인 인덱스 번호에 따라, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터와 메모리(130)에 있는 데이터로서 제3 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭할 수 있도록, 컴파일러(210)가 컴파일 과정에서, N개의 함수의 제3 전역 변수를 획득하고; 메모리(130) 내의 제1 전역 변수의 캐시 라인(cache line) 인덱스 번호와 메모리(130) 내의 제3 전역 변수의 캐시 라인 인덱스 번호를 결정하는 연산을 수행하는 것을 더 포함한다.
구체적으로, 복수의 전역 변수가 존재하면, 컴파일러(210)는 복수의 전역 변수에 따라 메모리(130) 내의 각각의 전역 변수의 캐시 라인 인덱스 번호를 결정하고, 프리페치 엔진(230)은 메모리(130) 내의 각각의 전역 변수의 캐시 라인 인덱스 번호에 따라 메모리(130) 내의 데이터를 프리페칭한다.
선택적인 실시예에서, 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계 이전에, 데이터 프리페칭 방법(300)은, 컴파일러(210)가 제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋을 획득하기 위해 M개의 구조체 멤버 변수를 파싱하는 단계를 더 포함한다. 상기 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계는, 제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋으로부터, 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계를 포함한다.
구체적으로, 제1 전역 변수가 M개의 구조체 멤버 변수를 포함하면, 컴파일러(210)는 제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋을 파싱할 필요가 있다. M개의 구조체 멤버 변수 중 적어도 하나만이 N개의 함수에 사용된다는 것을 파싱을 통해 학습하는 경우, 컴파일러(210)는 적어도 하나의 구조체 멤버 변수의 주소 오프셋에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋을 검색할 수 있다.
선택적으로, 컴파일러(210는 주소를 파싱할 뿐만 아니라 전역 구조체 멤버 변수 중 적어도 하나의 구조체 멤버 변수의 계층, 예를 들어, 구조체 멤버 변수가 제1 전역 변수의 제1-계층 구조체 멤버 변수인지 또는 제2-계층 구조체 멤버 변수인지 여부 등도 파싱할 수 있다. 예를 들어, 전역 변수 A가 3개의 구조체 멤버 변수(A1, A2, 및 A3)를 포함하고, A1은 또한 구조 변수이며 4개의 구조체 멤버 변수(A11, A12, A13, 및 A14)를 포함한다. A11을 파싱할 때, 컴파일러(210)는 A11이 제2-계층 구조체 멤버 변수라는 정보를 텍스트 파일 또는 바이너리 툴에 출력할 수 있다.
선택적인 실시예에서, N개의 함수와 N개의 함수의 제1 전역 변수를 획득하기 전에, 컴파일러(210)는 컴파일 과정에서, P개의 함수와 P개의 함수 각각의 적어도 하나 전역 변수를 획득하고 - 여기서, P개의 함수는 N개의 함수를 포함하고, P는 1보다 크거나 같으며, P는 N보다 크거나 같음 -; P개의 함수 각각의 시작 주소를 파싱하며; 각각의 함수의 적어도 하나의 전역 변수 각각의 시작 주소를 파싱하는 연산을 수행한다. 상기 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계는, P개의 함수로부터 N개의 함수를 결정하는 단계; 및 N개의 함수 중 적어도 하나의 전역 변수로부터 제1 전역 변수를 결정하는 단계를 포함한다. 상기 N개의 함수의 시작 주소를 결정하는 단계는, P개의 함수 각각의 시작 주소로부터 N개의 함수의 시작 주소를 결정하는 단계를 포함한다. 상기 제1 전역 변수의 시작 주소를 결정하는 단계는, 각각의 시작 주소 전역 변수로부터 제1 전역 변수의 시작 주소를 결정하는 단계를 포함한다.
구체적으로, 전체 프로그램 실행 과정에서, P개의 함수가 포함될 수 있고, P개의 함수 각각이 적어도 하나의 전역 변수를 포함하다. 컴파일러(210)는 P개의 함수 각각의 시작 주소를 파싱하고, 파싱 이후 획득되는 적어도 하나의 시작 주소로부터 N개의 함수의 시작 주소를 결정한다. 컴파일러(210)는 N개의 함수 중 적어도 하나의 전역 변수의 각각의 시작 주소를 추가로 파싱할 필요가 있고, 매칭을 통해 각각의 시작 주소 전역 변수로부터 제1 전역 변수의 시작 주소를 획득한다. 컴파일러(210)는 초기 컴파일 단계에서, P개의 함수 및 P개의 함수 각각에 대응하는 적어도 하나의 전역 변수의 시작 주소를 파싱하여 매핑 테이블을 형성할 수 있다. N개의 함수를 파싱할 때, 컴파일러(210)는 N개의 함수에 사용되는 제1 전역 변수를 파싱하고, 매핑 테이블에서 제1 전역 변수의 시작 주소를 검색한다.
선택적으로, 프로그램 개발자가 사용자 동작 습관에 따라 P개의 함수와 P개의 함수 각각의 적어도 하나 전역 변수를 결정할 수 있다. P개의 함수와 P개의 함수 각각의 적어도 하나 전역 변수가 표의 형태로 저장될 수 있다. 예를 들어, 전역 변수 라이브러리가 생성된다. 또한, P개의 함수와 P개의 함수 각각의 적어도 하나 전역 변수가 키워드를 이용하여 지정될 수 있다. 예를 들어, P개의 함수와 P개의 함수 각각의 적어도 하나 전역 변수가 키워드 속성(attribute smar_prefetch_var)를 이용하여 지정된다.
예를 들어, 다수의 전역 구조체 멤버 변수가 무선 L2 서비스에 사용된다. 예를 들어, 코드 1382에서의 MUM_RefreshRlcSharePam 함수에 사용되는 전역 구조체 멤버 변수(g_dMACUserTable)의 구조체 멤버 변수의 주소 오프셋 정보가 다음과 같다
q_dMACUserTable→stDmacPublicInfo→dMACCfgCommonPara→u8MacActiveFlag→offset 26080
q_dMACUserTable→stDmacPublicInfo→stCaCfgPara→ucSCellIndex→offset 1184
q_dMACUserTable→stDmacPublicInfo→dMACCfgCommonPara→u8CellId→offset 26112
q_dMACUserTable→stDmacPerformanceUsrInfo→dMACMeasAllowInfo→ulDlUserTpRbNum→offset 214464
q_dMACUserTable→stDmacDlschUsrInfo→DlFluxInnerPara→ulAmbrSumBytes→offset 165408
q_dMACUserTable→stDmacPublicInfo→dMACCfgCommonPara→ucActiveDrbNum→offset 26328
q_dMACUserTable→stDmacDlschUsrInfo→DlFluxInnerPara→adMacRlcFluxInner→ulSendDataBytes→offset 165440
q_dMACUserTable→stDmacDlschUsrInfo→stDlschUsrInfo→astDMACRlcInfo→stMacRlcMeasureStru→ulTPWinByteNum→offset 134368
전술한 구조체 멤버 변수는 메모리(130) 내의 다른 위치에 분산되어 있다. 데이터가 함수를 이용하여 호출될 때, 데이터는 상대적으로 분리되어 메모리(130)에 저장되고, 서로 다른 함수는 서로 다른 구조체 멤버 변수를 액세스한다. 전술한 구조체 멤버 변수와 연련된 데이터가 종래 기술에 따라 프리페칭될 때, 프리페치 명령이 각각의 함수에 삽입될 필요가 있고, 따라서 복수의 구조체 멤버 변수가 복수의 프리페치 명령을 필요로 한다. 또한, 각각의 구조체 멤버 변수의 데이터 프리페칭 시간이 프로그램 개발자에 의해 지정되고, 컴파일러(210)의 컴파일 및 스케줄링 시간이 프로그램 개발자에 의해 지정된 시간과 일치하도록 보장될 수 없다. CPU가 캐시(120) 내의 데이터에 액세스할 필요가 있으면, 데이터는 캐시(120)에 프리페칭되지 않았을 수 있거나; 또는 데이터는 캐시(120)에 과도하게 일찍 프리페칭되고 또한 데이터는 CPU에 의해 액세스되기 전에 대체되며, 따라서 캐시의 히트 레이트(120)가 감소된다. 본 출원의 본 실시예에서, 함수가 실행되기 시작하는 때 상기 함수에 의해 사용되는 데이터가 캐시(120)에 프리페칭되거나, 또는 데이터가 사용되기 전에 구조체 멤버 변수의 데이터가 캐시(120)에 프리페칭된다. 또한, 컴파일러(210)는 구조체 멤버 변수의 시퀀스를 파싱할 수 있고, 데이터 프리페칭 효율을 더 향상시키고 또한 캐시의 히트 레이트(120)를 향상시킬 수 있도록, 데이터가 구조체 멤버 변수의 내림차순으로 캐시(120)에 프리페칭된다.
선택적인 실시예에서, N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계는,
컴파일러(210)가 컴파일 과정에서 컴파일 지시 정보를 수신하고, 컴파일 지시 정보에 따라 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계를 포함한다. 여기서, 컴파일 지시 정보는 N개의 함수 및 N개의 함수의 제1 전역 변수를 나타내는 데 사용되거나, 및/또는 컴파일 지시 정보는 N개의 함수 및 N개의 함수에 사용되지 않는 전역 변수를 나타내는 데 사용된다.
구체적으로, N개의 함수와 N개의 함수의 제1 전역 변수는 컴파일 지시 정보를 설정하여 나타낸다. 예를 들어, 컴파일 지시 정보는 N개의 함수 중에 있는 함수로서 프로그램 앞에 있는 함수의 함수 헤더 앞에 준비될 수 있다. 컴파일 지시 정보는 N개의 함수와 N개의 함수의 제1 전역 변수를 나타낸다. 이와 같이, 단 하나의 컴파일 지시 정보를 이용하여 N개의 함수와 N개의 함수의 제1 전역 변수를 나타낼 수 있다. 구체적으로, 컴파일 지시 정보는 키워드 속성(attribute smar_prefetch_var)일 수 있다.
물론, 컴파일 지시 정보는 또한 N개의 함수와 N개의 함수에 사용되지 않는 전역 변수를 나타내는 데 사용될 수 있다. 이렇게 하면, N개의 함수의 전역 변수를 파싱하는 경우, 파싱을 위한 자원 오버헤드가 줄어들 수 있도록, 컴파일러(210)가 N개의 함수에 사용되지 않는 전역 변수를 파싱하지 않는다. 컴파일 지시 정보는 대안적으로, N개의 함수에 사용되는 전역 변수와 N개의 함수에 사용되지 않는 전역 변수를 나타낼 수 있다.
선택적으로, 컴파일 지시 정보는 명령 라인의 형태로 함수 헤더 앞에 삽입될 수 있다.
선택적으로, 컴파일 지시 정보는 적어도 하나의 전역 변수를 나타낼 뿐만 아니라 적어도 하나의 전역 변수 각각에 포함된 구조체 멤버 변수를 나타낼 수 있다. 즉, 특별한 초점이 필요한 전역 변수가 컴파일 지시 정보를 이용하여 식별된다. 컴파일러(210)는 컴파일 지시 정보가 나타내는 구조체 멤버 변수를 파싱할 수 있다.
예를 들어, 다음의 프로그램이 함수 헤더 앞에 프리페칭 컴파일 지시 정보로서 사용될 수 있다. 예를 들어, 컴파일 지시 정보는 키워드일 수 있고, 전역 변수가 키워드를 이용하여 지정된다.
_attribute_((smart_prefetch_var("qx_aDLSynUsrLink")))
_attribute_((smart_prefetch_var("q_dMACUserTable")))
Void MUX_RefreshRlcSharePam(UINT32 ulCellId)
선택적인 실시예에서, 상기 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계는, 컴파일러(210)가 컴파일 과정에서, 텍스트 파일로부터 제1 대응 관계 및/또는 제2 대응 관계를 판독하고, 제1 대응 관계 및/또는 제2 대응 관계에 따라 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계를 포함한다. 여기서, 제1 대응 관계는 N개의 함수와 N개의 함수의 제1 전역 변수를 나타내는 데 사용되거나, 및/또는 제2 대응 관계는 N개의 함수와 N개의 함수에 사용되지 않는 전역 변수를 나타내는 데 사용된다.
본 출원의 본 실시예에서, 복수의 함수와 분석될 필요가 있는 복수의 함수의 전역 변수가 목록의 형태로 텍스트 파일에 저장될 수 있다. 분석될 필요가 있는 전역 변수와 함수 간의 대응 관계 또는 분석될 필요가 없는 전역 변수가 있을 수 있다. 분석될 필요가 있는 N개의 함수의 제1 전역 변수는 제1 대응 관계를 이용하여 표현되고, 분석될 필요가 없는 N개의 함수의 변수는 제2 대응 관계를 이용하여 표현된다. N개의 함수를 파싱할 때, 컴파일러(210)는 제1 대응 관계 및/또는 제2 대응 관계에 따라 텍스트 파일 내의 목록에 있는 N개의 함수의 제1 전역 변수를 검색한다. 물론, 컴파일러는 목록 내의 복수의 함수의 시작 주소와 복수의 함수에 대응하는 전역 변수의 시작 주소를 사전에 파싱할 수 있다. N개의 함수의 실행 중에, 미리 파싱된 시작 주소가 N개의 함수의 시작 주소에서 검색된다. 제1 전역 변수가 M개의 구조체 멤버 변수를 포함하고, M개의 구조체 멤버 변수 중 일부만이 N개의 함수에 사용되는 경우, 컴파일러(210)가 대응 관계를 획득할 수 있도록, 일부 구조체 멤버 변수와 N개의 함수 간의 대응 관계가 또한 텍스트 파일에 저장될 수 있다. 이렇게 하면, 컴파일러가 N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱할 필요가 없지만, 텍스트 파일 내의 대응 관계에 따라 적어도 하나의 구조체 멤버 변수를 직접 검색한다. 이와 같이, 집중화된 제어가 구현될 수 있고 또한 연산 복잡도가 감소될 수 있다.
구체적으로, 제1 대응 관계는 함수에 사용되는 전역 변수를 포함하는 목록일 수 있다. 예를 들어, 전역 변수 a가 제1 함수에 사용되고, 전역 변수 a가 제2 함수에 사용된다. 제1 함수와 제2 함수에 사용되는 변수는 목록의 형태로 사용된다. 프리페치 엔진은 메모리에 있는 데이터로서 제1 함수와 제2 함수에 사용되는 전역 변수 a와 연관된 데이터를 캐시에 프리페칭할 필요가 있다. 예를 들어, a는 제1 전역 변수일 수 있다. 컴파일러는 목록을 검색하여 제1 함수, 제2 함수, 및 2개의 함수의 전역 변수를 찾는다. 유사하게, 제2 대응 관계는 함수에 사용되지 않는 전역 변수를 포함하는 목록일 수 있다. 이렇게 하면, 집중화된 관리가 구현될 수 있고 또한 연산 복잡도가 감소될 수 있다.
선택적인 실시예에서, N개의 함수의 제1 전역 변수를 획득하는 단계는, N개의 함수의 파티션을 파싱하는 단계 - 상기 파티션은 핫 파티션과 콜드 파티션을 포함하고 있음 -; 및 핫 파티션으로부터 제1 전역 변수를 획득하는 단계를 포함한다.
구체적으로, 컴파일러(210)는 컴파일 중에 N개의 함수의 콜드 파티션과 핫 파티션을 파싱할 수 있다. N개의 함수의 콜드 파티션을 파싱하는 경우, 컴파일러(210)는 실행되지 않는 콜드 파티션에 의해 액세스되는 전역 변수 정보를 차단할 수 있다. 이렇게 하면, 핫 파티션 내의 전역 변수에 대응하는 데이터가 프리페칭될 수 있고 또한 콜드 파티션 내의 전역 변수에 대응하는 데이터가 캐시(120)에 프리페칭되는 것이 방지된다. 따라서, 불필요한 프리페칭이 방지될 수 있고 또한 프리페칭 효율이 향상될 수 있다.
또한, 핫 파티션은 N개의 함수의 파티션이 자주 액세스되는 것을 나타내는 데 사용되고, 콜드 파티션은 비교적 작은 양의 시간 동안 N개의 함수의 파티션이 액세스되는 것을 나타내는 데 사용된다. 예를 들어, 특정 시구간에서, N개의 함수의 제1 파티션이 액세스되는 횟수가 사전 설정된 임계값을 초과하는 경우, 제1 파티션이 핫 파티션이라고 간주된다. 특정 시구간에서, N개의 함수의 제2 파티션이 액세스되는 회수가 사전 설정된 임계값보다 작으면, 제2 파티션이 콜드 파티션이라고 간주된다.
선택적인 실시예에서, N개의 함수의 제1 전역 변수를 획득하는 단계 이후에, 데이터 프리페칭 방법(300)은, 컴파일러(210)가 컴파일 과정에서, N개의 함수의 제2 전역 변수를 획득하고; 제1 전역 변수와 제2 전역 변수의 접근 순서를 결정하는 연산을 수행하는 것을 더 포함한다. S330은, 프리페치 엔진(230)이 접근 순서에 따라, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭하는 것을 포함한다.
구체적으로, 컴파일러(210)는 제1 전역 변수와 N개의 함수의 제2 전역 변수를 파싱할 뿐만 아니라 컴파일 제어 정보 흐름을 참조하여 프로그램 실행 과정에서 제1 전역 변수와 제2 전역 변수의 시퀀스도 파싱할 수 있다. 프리페치 엔진(230)은 상기 시퀀스에 따라 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭할 수 있다. 캐시(120)에 먼저 저장된 데이터가 CPU에 의해 먼저 액세스된다. 예를 들어, 컴파일러(210)가 제1 전역 변수가 제2 전역 변수 앞에 있다는 것을 파싱을 통해 학습하면, 프리페치 엔진(230)이 메모리(130)에 있는 데이터로서 제1 전역 변수에 대응하는 데이터를 먼저 프리페칭한다. 컴파일러(210)가 제2 전역 변수가 제1 전역 변수 앞에 있다는 것을 파싱을 통해 학습하는 경우, 프리페치 엔진(230)은 메모리(130)에 있는 데이터로서 제2 전역 변수에 대응하고 있는 데이터를 먼저 프리페칭하고, 그런 다음 제1 전역 변수에 대응하는 데이터를 프리페칭한다. 이렇게 하면, 불필요한 데이터를 과도하게 일찍 캐시(120)에 프리페칭하는 것으로 인한 불필요한 저장 공간의 점유를 방지하고, 나중에 실행될 데이터가 과도하게 일찍 프리페칭되고 또한 CPU에 의해 판독되기 전에 데이터가 과도하게 대체되는 경우를 방지하기 위해 프리페치 엔진(230)의 프리페칭 시퀀스가 프로그램 실행 시퀀스이다. 따라서, 캐시의 히트 레이트(120)가 더 향상되고 또한 시스템 성능이 향상된다.
선택적으로, 제1 전역 변수가 M개의 구조체 멤버 변수를 포함하고, M개의 구조체 멤버 변수 중 적어도 하나가 N개의 함수에 사용되며, 컴파일러(210)는 컴파일 제어 정보 흐름을 참조하여 적어도 하나의 구조체 멤버 변수 각각의 실행 랭킹을 파싱할 수 있다. 프리페치 엔진(230)은 각각의 구조체 멤버 변수의 실행 랭킹에 따라, 메모리(130)에 있는 데이터로서 구조체 멤버 변수에 대응하고 있는 데이터를 프리페칭한다.
선택적으로, 제1 전역 변수와 제2 전역 변수는 N개의 함수에서 호출된다. 제1 전역 변수가 M개의 구조체 멤버 변수를 포함하고 또한 제2 전역 변수가 Q개의 구조체 멤버 변수를 포함하면, 컴파일러(210)는 N개의 함수에 사용되는 L개의 구조체 멤버 변수를 파싱할 수 있고, L개의 구조체 멤버 변수는 M개의 구조체 멤버 변수 중 일부와 Q개의 구조체 멤버 변수 중 일부를 포함한다. 이렇게 하면, 컴파일러(210)는 제1 전역 변수의 시작 주소에 대한 L개의 구조체 멤버 변수 각각의 오프셋 또는 제2 전역 변수의 시작 주소에 대한 L개의 구조체 멤버 변수 각각의 오프셋을 파싱할 수 있다. 프리페치 엔진(230)이 L개의 구조체 멤버 변수와 연관된 데이터를 캐시(120)에 프리페칭할 수 있도록, 컴파일러(210)는 또한 L개의 구조체 멤버 변수의 호출 순서를 파싱하고, L개의 구조체 멤버 변수의 호출 시퀀스를 텍스트 파일 또는 바이너리 툴(220)에 저장할 수 있다. Q는 1보다 크거나 같은 정수이고, L은 1보다 크거나 같은 정수이며 M+Q보다 작거나 같다. 즉, N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수는 하나의 전역 변수로부터 유래하거나 또는 서로 다른 전역 변수로부터 유래한다. 본 출원의 본 실시예에서는 이에 대해 제한하지 않는다.
선택적인 실시예에서, S330은, 텍스트 파일 또는 바이너리 툴(220)에 있는 N개의 함수의 시작 주소를 판독할 때, 프리페치 엔진(230)이 메모리(130)에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭하는 단계; 또는
텍스트 파일 또는 바이너리 툴(220)에 있는 N개의 함수의 시작 주소가 판독되는 제1 시구간 이전에, 메모리(130)에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭하는 단계; 또는
텍스트 파일 또는 바이너리 툴(220)에 있는 N개의 함수의 시작 주소가 판독되는 제2 시구간 이후에, 메모리(130)에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭하는 단계를 포함한다.
선택적인 실시예에서, 프리페치 엔진(230)은 프리페치 명령을 실행할 수 있다. 예를 들어, 컴파일러(210)는 코드 생성 과정에서 프리페칭 주소를 결정하고, 프리페칭 주소를 텍스트 파일 또는 바이너리 툴(220)에 출력할 수 있다. 프리페칭 주소를 판독할 때, 프리페치 엔진(230)은 메모리(130)에 있는 데이터로서 프리페칭 주소에 대응하고 있는 데이터를 프리페칭한다. 이렇게 하면, 컴파일러(210)가 프리페치 엔진(230)에 프리페칭 주소를 통지하며, 프리페치 엔진(230)이 프리페칭 주소에 따라 메모리(130) 내의 데이터를 정밀하게 프리페칭할 수 있다. 컴파일러(210)와 프리페치 엔진(230)은 병렬로 실행을 수행하고, 데이터가 하드웨어와 함께 소프트웨어를 이용하여 프리페치된다. 이렇게 하면, 컴파일러(210)의 실행 복잡도가 감소될 수 있고, 데이터 프리페칭 효율이 향상될 수 있으며, 캐시의 히트 레이트(120)가 더 향상될 수 있다.
선택적인 실시예에서, 본 출원의 본 실시예는 멀티 코어 컴퓨터 시스템에 적용될 수 있다. 종래 기술의 데이터 프리페칭 방법이 사용되면, 소프트웨어 명령은, 사용자가 데이터 프리페칭 과정에서 메모리(130) 내의 복수의 코어 각각에 대응하는 코어 번호를 통지할 필요가 있고, 그런 다음 메모리(130)에 있는 데이터로서 코어 번호에 대응하는 데이터가 프리페칭된다는 것을 나타낸다. 본 출원의 본 실시예에서, 복수의 컴퓨터 시스템에서, 각각의 코어가 프리페치 엔진(230)을 가질 수 있고, 각각의 코어의 프리페치 엔진(230)이 코어의 코어 번호를 획득할 수 있다. 즉, 사용자는 데이터 프리페칭 과정에서 특정 코어 번호를 통지할 필요가 없고, 프리페치 엔진(230)이 메모리(130) 내의 대응하는 위치에서 데이터를 획득할 수 있다.
본 출원의 본 실시예에서 언급된 캐시(120)가 레벨 1 캐시, 또는 레벨 2 캐시, 또는 레벨 3 캐시 등일 수 있거나, 또는 레벨 1 캐시, 또는 레벨 2 캐시, 또는 레벨 3 캐시 중 적어도 하나일 수 있다. 본 출원의 본 실시예에서는 이에 대해 제한하지 않는다.
선택적인 실시예에서, 다음은 본 출원의 본 실시예에 따른 데이터 프리페칭 방법을 나타내며, 상기 데이터 프리페칭 방법은 다음의 단계를 포함한다.
단계 1: 컴파일러(210)가 P개의 함수와 P개의 함수 각각의 적어도 하나 전역 변수를 획득한다.
선택적으로, P개의 함수와 P개의 함수 각각의 적어도 하나 전역 변수는 컴파일 지시 정보를 이용하여 획득될 수 있거나, 또는 P개의 함수와 P개의 함수 각각의 적어도 하나 전역 변수는 P개의 함수 각각의 적어도 하나 전역 변수와 P개의 함수 간의 사전 설정된 대응 관계(예를 들어, 텍스트 파일 내의 전술한 제1 대응 관계 및/또는 제2 대응 관계)에 따라 획득될 수 있다.
단계 2: 컴파일러(210)가 각각의 함수의 시작 주소를 획득하기 위해 P개의 함수 각각을 파싱한다.
단계 3: 컴파일러(210)가 각각의 함수의 적어도 하나의 전역 변수의 시작 주소를 파싱한다(적어도 하나의 전역 변수가 전역 구조체 멤버 변수이면, 컴파일러(210)가 전역 변수에 대한 전역 구조체 멤버 변수의 주소 오프셋을 파싱한다).
선택적으로, 단계 2와 단계 3의 순서가 제한되지 않는다. 단계 2가 단계 3 앞에 있을 수 있으며, 단계 3이 단계2 앞에 있을 수 있다. 본 출원의 본 실시예에서는 이에 대해 제한하지 않는다.
단계 4: 지정된 N개의 함수를 분석할 때, 컴파일러(210)가 P개의 함수에서 N개의 함수를 검색하고, 단계 2에서 획득된 시작 주소로부터 N개의 함수의 시작 주소를 결정한다.
물론, 단계 1 내지 단계 3이 필요하지 않을 수 있다. N개의 함수를 분석할 때, 컴파일러가 N개의 함수의 시작 주소를 직접 파싱할 수 있다.
단계 5: 컴파일러(210)가 N개의 함수의 파티션을 파싱하고, 콜드 파티션을 차단하며, 핫 파티션을 유지하고, 컴파일러(210)가 제1 전역 변수와 N개의 함수에 사용되는 제2 전역 변수를 파싱하며, 핫 파티션 내의 제1 전역 변수와 제2 전역 변수를 파싱한다(제1 전역 변수와 제2 전역 변수가 전역 구조체 멤버 변수이면, 컴파일러(210)가 N개의 함수에 사용되는 제1 구조체 멤버 변수와 제2 구조체 멤버 변수를 파싱한다).
단계 6: 컴파일러(210)가 컴파일 제어 흐름 정보를 참조하여 제1 전역 변수와 제2 전역 변수의 호출 순서를 결정하다(제1 전역 변수와 제2 전역 변수가 전역 구조체 멤버 변수이면, 컴파일러(210)가 제1 구조체 멤버 변수와 제2 구조체 멤버 변수의 접근 순서를 결정한다).
단계 7: 단계 3에서 획득된 시작주소로서 적어도 하나의 전역 변수의 시작 주소로부터 제1 전역 변수의 시작 주소와 제2 전역 변수의 시작 주소를 획득한다(제1 전역 변수와 제2 전역 변수가 전역 구조체 멤버 변수이면, 전역 변수에 대한 제1 구조체 멤버 변수의 주소 오프셋과 전역 변수에 대한 제2 구조체 멤버 변수의 주소 오프셋이 획득되거나, 또는 메모리(130) 내의 제1 구조체 멤버 변수의 캐시 라인 인덱스 번호와 메모리(130) 내의 제2 구조체 멤버 변수의 캐시 라인 인덱스 번호가 획득된다).
물론, 단계 1 내지 단계 3이 필요하지 않을 수 있다. N개의 함수를 분석하는 경우, 컴파일러는 제1 전역 변수의 시작 주소와 제2 전역 변수의 시작 주소를 직접 파싱하여 시작 주소를 획득할 수 있다.
단계 8: 컴파일러(210)가 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 제2 전역 변수의 시작 주소, 및 제1 전역 변수와 제2 전역 변수의 접근 순서를 파일 또는 바이너리 툴에 저장한다(제1 전역 변수가 구조체 멤버 변수를 포함하면, 컴파일러(210)가 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 제1 구조체 멤버 변수와 제2 구조체 멤버 변수의 호출 시퀀스, 전역 변수에 대한 제1 구조체 멤버 변수의 주소 오프셋, 및 전역 변수에 대한 제2 구조체 멤버 변수의 주소 오프셋)을 텍스트 또는 바이너리 툴에 저장한다.
단계 9: 프리페치 엔진(230)이 텍스트 또는 바이너리 툴에 저장된 정보에 따라 메모리(130) 내의 데이터를 캐시(120)에 프리페칭한다.
이렇게 하면, 컴파일러(210)가 사전 설정된 컴파일 지시 정보 또는 대응 관계에 따라, P개의 함수와 P개의 함수 각각에 대응하는 적어도 하나의 전역 변수를 결정할 수 있다. 적어도 하나의 전역 변수가 전역 구조체 멤버 변수이면, 각각의 전역 구조체 멤버 변수의 구조체 멤버 변수가 결정된다. 또한, 컴파일러(210)가 P개의 함수 각각의 시작 주소, 또는 각각의 함수에 대응하는 전역 변수의 시작 주소, 또는 각각의 구조체 멤버 변수의 주소 오프셋을 파싱하여 매핑 테이블을 형성한다. 특정 N개의 함수를 파싱할 때, 컴파일러(210)는 먼저 N개의 함수의 파티션을 파싱하고, 콜드 파티션을 차단하며, 핫 파티션에서, 전역 변수 또는 N개의 함수에 사용되는 전역 구조체 멤버 변수를 파싱하고, 매칭 테이블 내의 N개의 함수와 매칭함으로써 N개의 함수의 시작 주소를 얻고, N개의 함수에 사용되는 제1 전역 변수와 매칭함으로써 제1 전역 변수의 시작 주소를 얻거나, 또는 N개의 함수에 사용되는 구조체 멤버 변수와 매칭함으로써 구조체 멤버 변수의 주소 오프셋을 얻는다. 그런 다음, 컴파일러(210)는 N개의 함수에 사용되는 전역 변수의 시퀀스를 파싱하거나, 또는 N개의 함수에 사용되는 구조체 멤버 변수의 시퀀스를 파싱한다. 프리페치 엔진(230)이 데이터를 캐시(120)에 프리페칭할 수 있도록, 컴파일러(210)는 시작 주소 정보 및 시퀀스 정보를 텍스트로 또는 바이너리 툴에 저장한다.
본 출원의 실시예에서 제공되는 데이터 프리페칭 방법에 대해 도 3을 참조하여 설명하였다. 본 출원의 실시예에서 제공되는 데이터 프리페칭 장치와 시스템에 대해 도 4 내지 도 6를 참조하여 후술한다.
도 4는 본 출원의 실시예에 따른 데이터 프리페칭 장치(400)를 나타낸다. 예를 들어, 데이터 프리페칭 장치(400)는 컴파일러(210)일 수 있다. 컴퓨터 시스템이 데이터 프리페칭 장치(400), 프리페치 엔진(230), 및 메모리(130)를 포함한다. 데이터 프리페칭 장치(400)는,
N개의 함수와 N개의 함수의 제1 전역 변수를 획득하도록 구성된 획득 모듈 - N은 1보다 크거나 같은 정수임 -; 및
프리페치 엔진이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭할 수 있도록, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하도록 구성된 결정 모듈(420)을 포함한다.
선택적인 실시예에서, 제1 전역 변수는 M개의 구조체 멤버 변수를 포함하고, M은 1보다 크거나 같다.
선택적인 실시예에서, 결정 모듈(420)는 구체적으로, 프리페치 엔진(230)이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리(130)에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시(120)에 프리페칭할 수 있도록, N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱하고 - 여기서, M개의 구조체 멤버 변수는 적어도 하나의 구조체 멤버 변수를 포함하고 있음 -; 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하도록 구성된다.
선택적인 실시예에서, 결정 모듈(420)은 더 구체적으로, 프리페치 엔진(230)이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 메모리(130) 내의 각각의 구조체 멤버 변수의 캐시 라인 인덱스 번호에 따라, 메모리(130)에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시(120)에 프리페칭할 수 있도록, N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱하고 - 여기서, M개의 구조체 멤버 변수는 적어도 하나의 구조체 멤버 변수를 포함하고 있음 -; 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하며; 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리(130) 내의 적어도 하나의 구조체 멤버 변수 각각의 캐시 라인 인덱스 번호를 결정하도록 구성된다.
선택적인 실시예에서, 데이터 프리페칭 장치(400)는 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋이 결정되기 전에, 제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋을 획득하기 위해 M개의 구조체 멤버 변수를 파싱하도록 구성된 파싱 모듈을 더 포함한다. 결정 모듈(420)은 더 구체적으로, 제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋으로부터 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하도록 구성된다.
선택적인 실시예에서, 획득 모듈(410)는 추가적으로, N개의 함수와 N개의 함수의 제1 전역 변수를 획득하기 전에 P개의 함수와 P개의 함수 각각의 적어도 하나 전역 변수를 획득하도록 구성된다. 여기서, P개의 함수는 N개의 함수를 포함하고, P는 1보다 크거나 같으며, P는 N보다 크거나 같다. 파싱 모듈은 추가적으로, P개의 함수 각각의 시작 주소를 파싱하고, P개의 함수 각각의 적어도 하나 전역 변수 각각의 시작 주소를 파싱하도록 구성된다. 획득 모듈(410)는 구체적으로, P개의 함수로부터 N개의 함수를 결정하고, N개의 함수 중 적어도 하나의 전역 변수로부터 제1 전역 변수를 결정하도록 구성된다. 결정 모듈(420)은 더 구체적으로, P개의 함수 각각의 시작 주소로부터 N개의 함수의 시작 주소를 결정하고, 각각의 전역 변수의 시작 주소로부터 제1 전역 변수의 시작 주소를 결정하도록 구성된다.
선택적인 실시예에서, 획득 모듈(410)은 구체적으로, 데이터 프리페칭 장치(400)의 컴파일 과정에서, 컴파일 지시 정보를 수신하고, 컴파일 지시 정보에 따라 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하도록 구성된다. 여기서, 컴파일 지시 정보는 N개의 함수 및 N개의 함수의 제1 전역 변수를 나타내는 데 사용되거나, 및/또는 컴파일 지시 정보는 N개의 함수 및 N개의 함수에 사용되지 않는 전역 변수를 나타내는 데 사용된다.
선택적인 실시예에서, 획득 모듈(410)은 더 구체적으로, 데이터 프리페칭 장치(400)의 컴파일 과정에서, 텍스트 파일로부터 제1 대응 관계 및/또는 제2 대응 관계를 판독하고, 제1 대응 관계 및/또는 제2 대응 관계에 따라 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하도록 구성된다. 여기서, 제1 대응 관계는 N개의 함수 및 N개의 함수의 제1 전역 변수를 나타내는 데 사용되거나, 및/또는 제2 대응 관계는 N개의 함수 및 N개의 함수에 사용되지 않는 전역 변수를 나타내는 데 사용된다.
선택적인 실시예에서, 데이터 프리페칭 장치(400)는, 프리페치 엔진(230)이 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하고, 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭할 수 있도록, 제1 전역 변수의 시작 주소가 결정된 후에, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 텍스트 파일 또는 바이너리 툴(220)에 출력하도록 구성된 출력 모듈을 더 포함한다.
선택적인 실시예에서, 획득 모듈(410)은 구체적으로, N개의 함수의 파티션을 파싱하고 - 여기서, 상기 파티션은 핫 파티션과 콜드 파티션를 포함하고 있음 -; 및 핫 파티션으로부터 제1 전역 변수를 획득하도록 구성된다.
선택적인 실시예에서, 획득 모듈(410)는 추가적으로, N개의 함수의 제2 전역 변수를 획득하도록 구성된다. 결정 모듈(420)는 추가적으로, 프리페치 엔진(230)이 접근 순서에 따라, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭할 수 있도록, 제1 전역 변수와 제2 전역 변수의 접근 순서 를 결정하도록 구성된다.
선택적인 실시예에서, 획득 모듈(410)은 추가적으로, N개의 함수의 제3 전역 변수를 획득하도록 구성된다. 결정 모듈(420)는 추가적으로, 프리페치 엔진(230)이 캐시 라인 인덱스 번호에 따라, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭할 수 있도록, 메모리(130) 내의 제1 전역 변수의 캐시 라인 인덱스 번호와 메모리(130) 내의 제3 전역 변수의 캐시 라인 인덱스 번호를 결정하도록 구성된다.
선택적인 실시예에서, N개의 함수는 핫스폿 함수이고, 제1 전역 변수는 핫스폿 전역 변수이다.
여기서, 데이터 프리페칭 장치(400)가 기능 모듈의 형태로 구현된다고 이해해야 한다. 여기서, "모듈"이라는 용어는 ASIC, 전자 회로, 하나 이상의 소프트웨어 또는 펌웨어 프로그램을 실행하도록 구성된 프로세서(예를 들어, 공유 프로세서, 또는 전용 프로세서, 또는 그룹 프로세서), 스토리지, 또는 전술한 기능을 지원하는 조합 논리 회로 및/또는 다른 적절한 구성 요소일 수 있다. 선택적인 예에서, 당업자라면 장치(400)가 구체적으로 전술한 실시예의 컴파일러(210)일 수 있고, 데이터 프리페칭 장치(400)가 전술한 방법 실시예의 컴파일러(210)에 대응하는 절차 및/또는 단계를 실행하도록 구성될 수 있다는 것을 이해할 수 있을 것이다. 중복을 피하기 위하여, 여기서는 세부사항에 대해 다시 설명하지 않는다.
도 5는 본 출원의 일 실시예에 따른 데이터 프리페칭 장치(500)를 나타낸다. 예를 들어, 데이터 프리페칭 장치(500)는 프리페치 엔진(230)일 수 있다. 데이터 프리페칭 장치(500)는,
N개의 함수의 시작 주소와 N개의 함수의 시작 주소의 제1 전역 변수를 획득하도록 구성된 획득 모듈(510) - N은 1보다 크거나 같은 정수임 -; 및
N개의 함수의 시작 주소와 N개의 함수의 시작 주소의 제1 전역 변수에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하도록 구성된 프리페칭 모듈(520)을 포함한다.
선택적인 실시예에서, 획득 모듈(510)은 구체적으로, 컴파일러에 의해 텍스트 파일 또는 바이너리 툴에 입력된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하도록 구성된다. 프리페칭 모듈(520)은 구체적으로, 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하도록 구성된다.
선택적인 실시예에서, 프리페칭 모듈(510)은 더 구체적으로, 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독될 때, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하거나; 또는 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독되는 제1 시구간 이전에, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하거나; 또는 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독되는 제2 시구간 이후에, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하도록 구성된다.
도 6은 본 출원의 일 실시예에 따른 데이터 프리페칭 시스템(600)을 나타낸다. 데이터 프리페칭 시스템(600)은 데이터 프리페칭 장치(400)와 데이터 프리페칭 장치(500)를 포함한다. 데이터 프리페칭 장치(500)는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭하도록 구성된다.
선택적인 실시예에서, 데이터 프리페칭 장치(500)는 구체적으로, 텍스트 파일 또는 바이너리 툴(220)에 있는 N개의 함수의 시작 주소가 판독될 때, 메모리(130)에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭하거나; 또는
텍스트 파일 또는 바이너리 툴(220)에 있는 N개의 함수의 시작 주소가 판독되는 제1 시구간 이전에, 메모리(130)에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭하거나; 또는
텍스트 파일 또는 바이너리 툴(220)에 있는 N개의 함수의 시작 주소가 판독되는 제2 시구간 이후에, 메모리(130)에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭하도록 구성된다.
따라서, 데이터 프리페칭 장치(400)는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하고, 데이터 프리페칭 장치(400)는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 텍스트 파일 또는 바이너리 툴(220)에 출력한다. 데이터 프리페칭 장치(500)는 텍스트 파일 또는 바이너리 툴(220)에 있는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독한다. 데이터 프리페칭 장치(400)와 데이터 프리페칭 장치(500)는 N개의 함수의 시작 주소에 따라 데이터 프리페칭 시간을 결정하기 위해 서로 협력할 수 있다. 예를 들어, N개의 함수의 시작 주소를 판독하기 전 제1 시구간에서, 또는 데이터 프리페칭 장치(500)가 N개의 함수의 시작 주소를 판독할 때, 또는 데이터 프리페칭 장치(500)가 N개의 함수의 시작 주소를 판독한 후 제2 시구간에서, 데이터가 프리페칭된다. 예를 들어, 제1 시구간은 3개의 사이클이고, 제2 시구간은 4개의 사이클이다. N개의 함수의 시작 주소 이전의 3개의 사이클에서 데이터가 프리페칭되는 이벤트가 제1 식별 정보를 이용하여 식별되고, N개의 함수의 시작 주소 이후의 4개의 사이클에서 데이터가 프리페칭되는 이벤트가 제2 식별 정보를 이용하여 식별되며, N개의 함수의 시작 주소가 판독될 때 데이터가 프리페칭되는 이벤트가 제3 식별 정보를 이용하여 식별된다. 3개의 식별 정보 중 하나가 텍스트 파일 또는 바이너리 툴(220)에 저장된다. 데이터 프리페칭 유연성이 더 향상될 수 있도록, 데이터 프리페칭 장치(500)는 상기 식별 정보에 따라 데이터 프리페칭 시간을 결정한다.
선택적인 실시예에서, 데이터 프리페칭 장치(500)는 더 구체적으로, N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리(130)에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시(120)에 프리페칭하도록 구성된다.
선택적인 실시예에서, 데이터 프리페칭 장치(500)는 더 구체적으로, N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 메모리(130) 내의 각각의 구조체 멤버 변수의 캐시 라인 인덱스 번호에 따라 메모리(130) 내의 데이터를 프리페칭하도록 구성된다.
선택적인 실시예에서, 데이터 프리페칭 장치(500)는 더 구체적으로, 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하고, 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리(130)에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭하도록 구성된다.
선택적인 실시예에서, 데이터 프리페칭 장치(500)는 더 구체적으로, 접근 순서 번호에 따라, 메모리(130)에 있는 데이터로서 더 높은 액세스 랭킹을 갖는 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭하도록 구성된다.
데이터 프리페칭 장치(400)는 또한 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 메모리(130)에 있는 캐시 라인 인덱스 번호로서 N개의 함수에 사용되는 복수의 전역 변수에 대응하는 데이터의 캐시 라인 인덱스 번호를 바이너리 툴 또는 텍스트 파일에 출력할 수 있다. 데이터 프리페칭 장치(500)는 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 메모리(130) 내의 전역 변수의 캐시 라인 인덱스 번호에 따라, 메모리(130)에 있는 데이터로서 복수의 전역 변수와 연관된 데이터를 캐시(120)에 프리페칭한다. 데이터 프리페칭 장치(400)는 복수의 전역 변수의 접근 순서를 대안적으로 파싱하고, N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 복수의 전역 변수의 접근 순서에 관한 정보를 텍스트 파일 또는 바이너리 툴(220)에 출력할 수 있다. 데이터 프리페칭 장치(500)는 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 복수의 전역 변수의 접근 순서에 따라, 메모리 내의 데이터를 캐시(120)에 프리페칭한다.
제1 전역 변수가 구조적인 멤버 변수인 경우, 데이터 프리페칭 장치(400)는 N개의 함수의 시작 주소, 제1 풀 오피스 변수(full office variable)의 시작 주소, 및 N개의 함수에 사용되는 구조체 멤버 변수의 주소 오프셋을 텍스트 파일 또는 바이너리 툴(220)에 출력할 수 있고, 프리페치 엔진(230)은 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 텍스트 파일 또는 바이너리 툴(220)에 있는 구조체 멤버 변수의 주소 오프셋에 따라 메모리(130) 내의 데이터를 캐시(120)에 프리페칭한다. 데이터 프리페칭 장치(400)는 대안적으로, N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 메모리(130)에 있는 캐시 라인 인덱스 번호로서 N개의 함수에 사용되는 구조체 멤버 변수의 캐시 라인 인덱스 번호를 텍스트 파일 또는 바이너리 툴(220)에 출력할 수 있다. 데이터 프리페칭 장치(500)는 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 텍스트 파일 또는 바이너리 툴(220)에 있는 캐시 라인 인덱스 번호에 따라, 메모리(130) 내의 데이터를 캐시(120)에 프리페칭한다. 데이터 프리페칭 장치(400)는 대안적으로, 복수의 구조체 멤버 변수의 접근 순서를 파싱하고, 복수의 구조체 멤버 변수의 접근 순서에 관한 정보, N개의 함수의 시작 주소, 및 제1 전역 변수의 시작 주소를 텍스트 파일 또는 바이너리 툴(220)에 출력할 수 있다. 프리페치 엔진(230)은 복수의 구조체 멤버 변수의 접근 순서, N개의 함수의 시작 주소, 및 제1 전역 변수의 시작 주소에 따라, 메모리(130)에 있는 데이터로서 복수의 구조체 멤버 변수와 연관된 데이터를 캐시(120)에 프리페칭한다.
텍스트 파일 또는 바이너리 툴(220)이 또한 복수의 전역 변수의 접근 순서에 관한 정보, 복수의 구조체 멤버 변수의 접근 순서, 복수의 전역 변수의 캐시 라인 인덱스 번호, 복수의 구조체 멤버 변수의 캐시 라인 인덱스 번호, 복수의 구조체 멤버 변수의 주소 오프셋 중 적어도 하나, N개의 함수의 시작 주소, 및 제1 전역 변수의 시작 주소를 저장할 수 있다고 이해해야 한다. 데이터 프리페칭 장치(500)는 상기 정보에 따라 메모리(130) 내의 데이터를 캐시(120)에 프리페칭한다. 대안적으로, 텍스트 파일 또는 바이너리 툴(220)은 함수와 시작 주소 간의 대응 관계를 저장할 수 있다. 예를 들어, 하나의 시작 주소가 하나의 함수에 사용되거나, 또는 하나의 시작 주소가 복수의 함수에 사용된다. 본 출원의 본 실시예에서는 이에 대해 제한하지 않는다.
도 7은 본 출원의 일 실시예에 따른 데이터 프리페칭 장치(700)를 나타낸다. 예를 들어, 데이터 프리페칭 장치(700)는 컴퓨터일 수 있다. 컴퓨터는 전술한 실시예의 컴파일러의 기능을 구현하도록 구성될 수 있다.
구체적으로, 데이터 프리페칭 장치(700)는 프로세서(710)와 스토리지(720)를 포함한다. 선택적으로, 데이터 프리페칭 장치(700)는 통신 인터페이스(730)를 더 포함한다. 프로세서(710), 스토리지(720), 및 통신 인터페이스(730)는 버스(740)를 이용하여 연결된다. 스토리지(720)는 메모리(130), 및 외부 스토리지 등을 포함한다. 하나 이상의 프로세서(710)가 있을 수 있고, 각각의 프로세서(710)는 하나 이상의 프로세서 코어를 포함한다.
버스 연결 방식은 단지 예일 뿐이며, 프로세서와 스토리지 같은 장치는 또한 다른 연결 방식으로 연결될 수 있다. 예를 들어, 프로세서는 중심이고, 스토리지와 같은 다른 장치가 프로세서에 연결된다.
스토리지(720)는 컴퓨터 실행 가능한 명령을 저장하도록 구성되고, 프로세서(710)는, 컴퓨터 판독가능 명령을 판독하고, 본 출원의 전술한 실시예에서 제공된 데이터 프리페칭 방법을 구현하도록 구성된다. 구체적으로, 프로세서(710)는, 프리페치 엔진이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수와 N개의 함수의 제1 전역 변수를 획득하고 - 여기서, N은 1보다 크거나 같은 정수임 -; N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하도록 구성된다. N은 1보다 크거나 같은 정수이다. 여기서, 상기 캐시가 프로세서(710)와 통합되어 있을 수 있거나, 또는 독립적으로 배치될 수 있다는 것을 유의해야 한다.
더 많은 구체적인 방법 실시 형태에 대해서는, 전술한 방법 실시예를 참조하라. 여기서는 세부사항에 대해 다시 설명하지 않는다. 본 출원의 본 실시예에서는 프리페치 엔진의 구체적인 데이터 프리페칭 방법에 대해 제한하지 않는다는 것을 유의해야 한다.
도 8은 본 출원의 일 실시예에 따른 데이터 프리페칭 장치(800)를 나타낸다. 데이터 프리페칭 장치(800)는 컴퓨터일 수 있다. 데이터 프리페칭 장치(800)는 적어도 하나의 프로세서(810), 스토리지(820), 및 프리페치 엔진(230)를 포함한다. 선택적으로, 데이터 프리페칭 장치(800)는 통신 인터페이스(830)를 더 포함한다. 적어도 하나의 프로세서(810), 스토리지(820), 프리페치 엔진(230), 및 통신 인터페이스(830)는 버스(840)를 이용하여 연결된다.
버스 연결 방식은 단지 예일 뿐이며, 프로세서와 스토리지 같은 장치는 또한 다른 연결 방식으로 연결될 수 있다. 예를 들어, 프로세서는 중심이고, 스토리지와 같은 다른 장치가 프로세서에 연결된다.
스토리지(820)은 컴퓨터 실행 가능한 명령, 예를 들어 전술한 실시예의 컴파일러를 저장하도록 구성된다. 프로세서(810)는 스토리지(820)에 저장된 컴퓨터 실행가능 명령을 판독하여 N개의 함수의 시작 주소와 N개의 함수의 시작 주소의 제1 전역 변수를 결정하고, 그런 다음 N개의 함수의 시작 주소와 N개의 함수의 시작 주소의 제1 전역 변수를 획득하도록 프리페치 엔진(230)에 지시한다. 프리페치 엔진(230)은 함수의 시작 주소와 N개의 함수의 시작 주소의 제1 전역 변수에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭한다. N은 1보다 크거나 같은 정수이다.
프리페치 엔진(230)의 더 구체적인 구현에 대해서는, 전술한 방법 실시예를 참조하라. 여기서는 세부사항에 대해 다시 설명하지 않는다. 본 출원의 본 실시예에서는 컴파일러 또는 다른 프로그램 또는 하드웨어 모듈이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 획득하는 방법에 대해 제한하지 않는다는 것을 유의해야 한다.
도 9는 본 출원의 일 실시예에 따른 데이터 프리페칭 컴퓨터 시스템(900)을 나타낸다. 데이터 프리페칭 컴퓨터 시스템(900)은 프로세서(910), 외부 스토리지(920), 프리페치 엔진(940), 캐시(950), 메모리(960), 및 버스(930)를 포함한다. 예를 들어, 프로세서(910), 프리페치 엔진(940), 외부 스토리지(920), 캐시(950), 및 메모리(960)는 버스(930)를 이용하여 연결된다. 외부 스토리지(920)은 컴파일러의 소프트웨어 프로그램을 저장한다. 프로세서(910)는 소프트웨어 프로그램을 메모리(960)에 판독하여, 전술한 실시예에서 설명된 컴파일러에 의해 구현되는 데이터 프리페칭 방법을 구현한다.
구체적으로, 컴파일러는 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하고, N은 1보다 크거나 같은 정수이다. 컴파일러는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정한다. 프리페치 엔진은 컴파일러에 의해 결정된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 획득하고, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭한다. 당업자라면 컴파일러가 소프트웨어로서 구현된 경우 컴파일러에 의해 수행되는 연산이 프로세서(910)에 의해 실제로 수행된다고 이해해야 한다.
버스 연결 방식은 단지 예일 뿐이며, 프로세서와 스토리지 같은 장치는 또한 다른 연결 방식으로 연결될 수 있다. 예를 들어, 프로세서는 중심이고, 스토리지와 같은 다른 장치가 프로세서에 연결된다.
다른 일부 실시 형태에서, 외부 스토리지(920)와 메모리(960)를 집합적으로 스토리지라고 할 수 있으며, 스토리지는 캐시(950)를 포함할 수도 있다. 도 9에 도시된 방식 외에, 캐시(950)는 또한 프로세서(910)에 통합되어 있을 수 있다.
다른 구체적인 실시 형태에 대해서는, 전술한 실시예를 참조하라. 여기서는 세부사항에 대해 다시 설명하지 않는다.
따라서, 본 출원의 본 실시예에서, 컴파일러는 함수의 프리페칭 정보를 분석하고, 프리페치 엔진은 프리페칭 정보에 따라 메모리 내의 데이터를 프리페칭한다. 컴파일러와 프리페치 엔진은 병렬로 실행을 수행하여, 데이터 프리페칭 효율을 더 향상시킬 수 있다. 또한, 데이터 프리페칭 시간이 컴파일러(210)에 의해 파싱된 프리페칭 정보이다. 이렇게 하면, 프리페칭 시간은 종래 기술의 소프트웨어 프리페치 명령에 의존하지 않으며, 프리페칭 유연성이 향상된다.
본 명세서에서의 용어 "및/또는"은 연관된 객체를 설명하기 위한 연관 관계만을 설명하고 3가지 관계가 존재할 수 있다는 것을 나타낸다고 이해해야 한다. 예를 들어, A 및/또는 B는 A만 존재하는 경우, A와 B가 모두 존재하는 경우, 및 B만 존재하는 경우를 나타낼 수 있다. 또한, 본 설명의 기호 "/"는 일반적으로 관련된 대상 사이의 "또는(or)" 관계를 나타낸다.
당업자라면, 본 명세서에서 개시된 실시예에서 설명된 예와 결합하여,방법 단계 및 유닛이 전자 하드웨어, 또는 컴퓨터 소프트웨어, 또는 이들의 조합에 의해 구현될 수 있다는 것을 알 수 있다. 하드웨어와 소프트웨어 간의 호환성을 명확하게 설명하기 위해, 앞에서는 기능에 따라 각 실시예의 단계와 구성을 일반적으로 설명하였다. 이러한 기능이 하드웨어에 의해 수행되는지 또는 소프트웨어에 의해 수행되는지 여부는 구체적인 적용과 기술적 해결방안의 설계 제한 조건에 따라 달라진다. 당업자라면 다른 방법을 이용하여 각각의 구체적인 적용을 위해 전술한 기능을 구현할 수 있지만, 이러한 실시 형태가 본 출원의 범위를 벗어나는 것으로 간주해서는 안 된다.
편리하고 간략하게 설명하기 위해, 전술한 시스템, 장치, 및 유닛의 상세한 작동 과정에 대해서는, 전술한 방법 실시예의 대응하는 과정을 참조하고, 여기서는 세부사항에 대해 다시 설명하지 않는다는 것을 당업자라면 명확하게 이해할 수 있을 것이다.
본 출원에서 제공된 몇몇 실시예에서, 개시된 시스템, 장치, 및 방법이 다른 방식으로 구현될 수 있다고 이해해야 한다. 예를 들어, 전술한 장치 실시예는 단지 예일 뿐이다. 예를 들어, 유닛 구분은 단지 논리적인 기능 구분으로, 실제 구현에서는 이와 다르게 구분될 수 있다. 예를 들어, 복수의 유닛 또는 컴포넌트가 다른 시스템으로 결합되거나 통합될 수 있거나, 또는 몇몇 특징이 무시되거나 수행되지 않을 수도 있다. 또한, 표시되거나 또는 논의된 상호 연결 또는 직접 연결 또는 통신 연결은 일부 인터페이스, 또는 장치나 유닛 간의 간접 연결이나 통신 연결, 또는 전기적 연결, 또는 기계적인 연결, 또는 다른 형태의 연결을 통해 구현될 수 있다.
별도의 부분으로 설명된 유닛이 물리적으로 분리되어 있거나 또는 분리되어 있지 않을 수 있고, 유닛으로 표시된 부분이 물리적 유닛이거나 또는 물리적 유닛이 아닐 수 있으며, 하나의 위치에 놓여 있을 수 있거나, 또는 복수의 네트워크 유닛 상에 분산되어 있을 수 있다. 이러한 유닛 중 일부 또는 전부가 실제 요구사항에 따라 선택되어 본 출원의 실시예의 해결책의 목적을 달성할 수 있다.
또한, 본 출원의 실시예의 기능 유닛이 하나의 처리 유닛에 통합되어 있을 수 있거나, 또는 이러한 유닛 각각이 물리적으로 단독으로 존재할 수 있거나, 또는 2개 이상의 유닛이 하나의 유닛으로 통합되어 있을 수 있다. 통합 유닛은 하드웨어의 형태로 구현될 수 있거나, 또는 소프트웨어 기능 유닛의 형태로 구현될 수 있다.
통합 유닛이 소프트웨어 기능 유닛 형태로 구성되어 독립적인 제품으로서 판매되거나 또는 사용되는 경우, 통합 유닛은 컴퓨터 판독가능 저장매체에 저장될 수 있다. 이러한 이해를 바탕으로, 본 출원의 기술적 해결책이 기본적으로, 또는 종래 기술에 기여하는 부분이, 또는 기술적 해결책의 전부 또는 일부가 소프트웨어 제품의 형태로 구현될 수 있다. 소프트웨어 제품은 저장 매체에 저장되고, 본 출원의 실시예에서 설명된 방법의 단계 중 전부나 일부를 수행하도록 컴퓨터 장치(개인용 컴퓨터, 서버, 또는 네트워크 장치일 수 있음)에 지시하기 위한 여러 명령을 포함하다. 전술한 저장 매체는 프로그램 코드를 저장할 수 있는 임의의 저장 매체, 예를 들어 USB 플래쉬 드라이브, 또는 착탈식 하드디스크(removable hard disk), 또는 읽기 전용 메모리(read-only memory, ROM), 또는 랜덤 액세스 메모리(random access memory, RAM), 또는 자기 디스크, 또는 광 디스크를 포함한다.
전술한 설명은 본 출원의 구체적인 실시예일 뿐이며, 본 출원의 보호 범위를 제한하려는 것은 아니다. 본 출원에 개시된 기술적인 범위 안에서 당업자에 의해 즉시 파악되는 어떠한 변경이나 대체도 본 출원의 보호 범위에 속할 것이다. 그러므로, 본 출원의 보호 범위는 청구항의 보호 범위를 따른다.

Claims (33)

  1. 데이터 프리페칭 방법(data prefetching method)으로서,
    N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계 - N은 1보다 크거나 같은 정수임 -; 및
    프리페치 엔진이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하는 단계
    를 포함하는 데이터 프리페칭 방법.
  2. 제1항에 있어서,
    상기 제1 전역 변수는 M개의 구조체 멤버 변수(structure member variable)를 포함하고, M은 1보다 크거나 같은 정수인, 데이터 프리페칭 방법.
  3. 제2항에 있어서,
    상기 프리페치 엔진이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하는 단계는,
    N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱하는 단계 - M개의 구조체 멤버 변수는 적어도 하나의 구조체 멤버 변수를 포함하고 있음 -; 및
    프리페치 엔진이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계
    를 포함하는, 데이터 프리페칭 방법.
  4. 제2항에 있어서,
    상기 프리페치 엔진이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하는 단계는,
    N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱하는 단계 - M개의 구조체 멤버 변수는 적어도 하나의 구조체 멤버 변수를 포함하고 있음 -;
    제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계; 및
    프리페치 엔진이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 메모리 내의 각각의 구조체 멤버 변수의 캐시 라인 인덱스 번호(cache line index number)에 따라, 메모리에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라 메모리 내의 적어도 하나의 구조체 멤버 변수 각각의 캐시 라인 인덱스 번호를 결정하는 단계
    를 포함하는, 데이터 프리페칭 방법.
  5. 제3항 또는 제4항에 있어서,
    상기 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계 이전에, 상기 데이터 프리페칭 방법은,
    제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋을 획득하기 위해 M개의 구조체 멤버 변수를 파싱하는 단계
    를 더 포함하고;
    상기 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계는,
    제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋으로부터 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하는 단계
    를 포함하는, 데이터 프리페칭 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계는,
    컴파일 지시 정보를 수신하고, 컴파일 지시 정보에 따라 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계 - 컴파일 지시 정보는 N개의 함수와 N개의 함수의 제1 전역 변수를 나타내는 데 사용되거나, 및/또는 컴파일 지시 정보는 N개의 함수와 N개의 함수에 사용되지 않는 전역 변수를 나타내는 데 사용됨 -
    를 포함하는, 데이터 프리페칭 방법.
  7. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계는,
    텍스트 파일로부터 제1 대응 관계 및/또는 제2 대응 관계를 판독하고, 제1 대응 관계 및/또는 제2 대응 관계에 따라 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계 - 제1 대응 관계는 N개의 함수와 N개의 함수의 제1 전역 변수를 나타내는 데 사용되거나, 및/또는 제2 대응 관계는 N개의 함수와 N개의 함수에 사용되지 않는 전역 변수를 나타내는 데 사용됨 -
    를 포함하는, 데이터 프리페칭 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하는 단계 이후에, 상기 데이터 프리페칭 방법은,
    프리페치 엔진이 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하고, 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 텍스트 파일 또는 바이너리 툴에 출력하는 단계
    를 더 포함하는 데이터 프리페칭 방법.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서,
    상기 N개의 함수의 제1 전역 변수를 획득하는 것은,
    N개의 함수의 파티션을 파싱하는 것 - N개의 함수의 파티션은 핫 파티션과 콜드 파티션을 포함하고 있음 -; 및
    핫 파티션으로부터 제1 전역 변수를 획득하는 것
    을 포함하는, 데이터 프리페칭 방법.
  10. 제1항 내지 제10항 중 어느 한 항에 있어서,
    상기 데이터 프리페칭 방법은,
    N개의 함수의 제2 전역 변수를 획득하는 단계; 및
    프리페치 엔진이 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 접근 순서(access sequence)에 따라 캐시에 프리페칭할 수 있도록, 제1 전역 변수와 제2 전역 변수의 접근 순서를 결정하는 단계
    를 더 포함하는 데이터 프리페칭 방법.
  11. 제1항 내지 제10항 중 어느 한 항에 있어서,
    상기 데이터 프리페칭 방법은,
    N개의 함수의 제3 전역 변수를 획득하는 단계; 및
    프리페치 엔진이 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터와 메모리에 있는 데이터로서 제3 전역 변수와 연관된 데이터를 캐시 라인 인덱스 번호에 따라 캐시에 프리페칭할 수 있도록, 메모리 내의 제1 전역 변수의 캐시 라인 인덱스 번호와 메모리 내의 제3 전역 변수의 캐시 라인 인덱스 번호를 결정하는 단계
    를 더 포함하는 데이터 프리페칭 방법.
  12. 제1항 내지 제11항 중 어느 한 항에 있어서,
    상기 N개의 함수는 핫스폿 함수이고, 제1 전역 변수는 핫스폿 전역 변수인, 데이터 프리페칭 방법.
  13. 데이터 프리페칭 방법(data prefetching method)으로서,
    N개의 함수의 시작 주소와 N개의 함수의 제1 전역 변수의 시작 주소를 획득하는 단계 - N개의 함수의 시작 주소와 N개의 함수의 시작 주소는 컴파일러에 의해 결정되고, N은 1보다 크거나 같은 정수임 -; 및
    N개의 함수의 시작 주소와 N개의 함수의 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계
    를 포함하는 데이터 프리페칭 방법.
  14. 제13항에 있어서,
    상기 N개의 함수의 시작 주소와 N개의 함수의 제1 전역 변수의 시작 주소를 획득하는 단계는,
    컴파일러에 의해 텍스트 파일 또는 바이너리 툴에 입력된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하는 단계
    를 포함하고;
    상기 N개의 함수의 시작 주소와 N개의 함수의 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계는,
    판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계
    를 포함하는, 데이터 프리페칭 방법.
  15. 제14항에 있어서,
    상기 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계는,
    텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독될 때, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계; 또는
    텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독되는 제1 시구간 이전에, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계; 또는
    텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독되는 제2 시구간 이후에, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계
    를 포함하는, 데이터 프리페칭 방법.
  16. 데이터 프리페칭 방법(data prefetching method)으로서,
    컴파일러가 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하는 단계 - N은 1보다 크거나 같은 정수임 -;
    컴파일러가 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하는 단계; 및
    프리페치 엔진이 컴파일러에 의해 결정된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 획득하고, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하는 단계
    를 포함하는 데이터 프리페칭 방법.
  17. 제16항에 있어서,
    상기 프리페치 엔진은 하드웨어를 이용하여 구현된 엔진으로서 메모리에서 캐시로 데이터를 프리페칭하도록 구성된 엔진인, 데이터 프리페칭 방법.
  18. 데이터 프리페칭 장치(data prefetching apparatus)로서,
    N개의 함수와 N개의 함수의 제1 전역 변수를 획득하도록 구성된 획득 모듈 - N은 1보다 크거나 같은 정수임 -; 및
    프리페치 엔진이 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 결정하도록 구성된 결정 모듈
    을 포함하는 데이터 프리페칭 장치.
  19. 제18항에 있어서,
    상기 제1 전역 변수는 M개의 구조체 멤버 변수(structure member variable)를 포함하고, M은 1보다 크거나 같은 정수인, 데이터 프리페칭 장치.
  20. 제19항에 있어서,
    상기 결정 모듈은 구체적으로,
    N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱하고 - 여기서, M개의 구조체 멤버 변수는 적어도 하나의 구조체 멤버 변수를 포함하고 있음 -;
    프리페치 엔진이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라, 메모리에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하도록 구성된, 데이터 프리페칭 장치.
  21. 제19항에 있어서,
    상기 결정 모듈은 더 구체적으로,
    N개의 함수에 사용되는 적어도 하나의 구조체 멤버 변수를 파싱하고 - 여기서, M개의 구조체 멤버 변수는 적어도 하나의 구조체 멤버 변수를 포함하고 있음 -;
    제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하며;
    프리페치 엔진이 N개의 함수의 시작 주소, 제1 전역 변수의 시작 주소, 및 메모리 내의 각각의 구조체 멤버 변수의 캐시 라인 인덱스 번호(cache line index number)에 따라, 메모리에 있는 데이터로서 적어도 하나의 구조체 멤버 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋에 따라 메모리 내의 적어도 하나의 구조체 멤버 변수 각각의 캐시 라인 인덱스 번호를 결정하도록 구성된, 데이터 프리페칭 장치.
  22. 제20항 또는 제21항에 있어서,
    상기 데이터 프리페칭 장치는,
    제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋이 결정되기 전에, 제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋을 획득하기 위해 M개의 구조체 멤버 변수를 파싱하도록 구성된 파싱 모듈
    을 더 포함하고;
    상기 결정 모듈은 더 구체적으로,
    제1 전역 변수의 시작 주소에 대한 M개의 구조체 멤버 변수 각각의 주소 오프셋으로부터 제1 전역 변수의 시작 주소에 대한 적어도 하나의 구조체 멤버 변수 각각의 주소 오프셋을 결정하도록 구성된, 데이터 프리페칭 장치.
  23. 제18항 내지 제22항 중 어느 한 항에 있어서,
    상기 획득 모듈은 구체적으로,
    컴파일 지시 정보를 수신하고, 컴파일 지시 정보에 따라 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하도록 구성되고, 컴파일 지시 정보는 N개의 함수와 N개의 함수의 제1 전역 변수를 나타내는 데 사용되거나, 및/또는 컴파일 지시 정보는 N개의 함수와 N개의 함수에 사용되지 않는 전역 변수를 나타내는 데 사용되는, 데이터 프리페칭 장치.
  24. 제18항 내지 제22항 중 어느 한 항에 있어서,
    상기 획득 모듈은 더 구체적으로,
    텍스트 파일로부터 제1 대응 관계 및/또는 제2 대응 관계를 판독하고, 제1 대응 관계 및/또는 제2 대응 관계에 따라 N개의 함수와 N개의 함수의 제1 전역 변수를 획득하도록 구성되고, 제1 대응 관계는 N개의 함수와 N개의 함수의 제1 전역 변수를 나타내는 데 사용되거나, 및/또는 제2 대응 관계는 N개의 함수와 N개의 함수에 사용되지 않는 전역 변수를 나타내는 데 사용되는, 데이터 프리페칭 장치.
  25. 제18항 내지 제22항 중 어느 한 항에 있어서,
    상기 데이터 프리페칭 장치는,
    프리페치 엔진이 텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하고, 판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭할 수 있도록, N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소가 결정된 후에 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 텍스트 파일 또는 바이너리 툴에 출력하도록 구성된 출력 모듈
    을 더 포함하는 데이터 프리페칭 장치.
  26. 제18항 내지 제25항 중 어느 한 항에 있어서,
    상기 획득 모듈은 구체적으로,
    N개의 함수의 파티션을 파싱하고 - 여기서, N개의 함수의 파티션은 핫 파티션과 콜드 파티션을 포함하고 있음 -; 및
    핫 파티션으로부터 제1 전역 변수를 획득하도록 구성된, 데이터 프리페칭 장치.
  27. 제18항 내지 제26항 중 어느 한 항에 있어서,
    상기 획득 모듈은 추가적으로,
    N개의 함수의 제2 전역 변수를 획득하도록 구성되고;
    상기 결정 모듈은 추가적으로, 프리페치 엔진이 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 접근 순서(access sequence)에 따라 캐시에 프리페칭할 수 있도록, 제1 전역 변수와 제2 전역 변수의 접근 순서를 결정하도록 구성된, 데이터 프리페칭 장치.
  28. 제18항 내지 제27항 중 어느 한 항에 있어서,
    상기 획득 모듈은 추가적으로,
    N개의 함수의 제3 전역 변수를 획득하도록 구성되고;
    상기 결정 모듈은 추가적으로, 프리페치 엔진이 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터와 메모리에 있는 데이터로서 제3 전역 변수와 연관된 데이터를 캐시 라인 인덱스 번호에 따라 캐시에 프리페칭할 수 있도록, 메모리 내의 제1 전역 변수의 캐시 라인 인덱스 번호와 메모리 내의 제3 전역 변수의 캐시 라인 인덱스 번호를 결정하도록 구성된, 데이터 프리페칭 장치.
  29. 제18항 내지 제28항 중 어느 한 항에 있어서,
    상기 N개의 함수는 핫스폿 함수이고, 상기 제1 전역 변수는 핫스폿 전역 변수인, 데이터 프리페칭 장치.
  30. 데이터 프리페칭 장치(data prefetching apparatus)로서,
    N개의 함수의 시작 주소와 N개의 함수의 제1 전역 변수의 시작 주소를 획득하도록 구성된 획득 모듈 - N은 1보다 크거나 같은 정수임 -; 및
    N개의 함수의 시작 주소와 N개의 함수의 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하도록 구성된 프리페칭 모듈
    을 포함하는 데이터 프리페칭 장치.
  31. 제30항에 있어서,
    상기 획득 모듈은 구체적으로,
    컴파일러에 의해 텍스트 파일 또는 바이너리 툴에 입력된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소를 판독하도록 구성되고;
    상기 프리페칭 모듈은 구체적으로,
    판독된 N개의 함수의 시작 주소와 제1 전역 변수의 시작 주소에 따라, 메모리에 있는 데이터로서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하도록 구성된, 데이터 프리페칭 장치.
  32. 제31항에 있어서,
    상기 프리페칭 모듈은 더 구체적으로,
    텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독될 때, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하거나; 또는
    텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독되는 제1 시구간 이전에, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하거나; 또는
    텍스트 파일 또는 바이너리 툴에 있는 N개의 함수의 시작 주소가 판독되는 제2 시구간 이후에, 메모리에 있는 데이터로서 제1 전역 변수의 시작 주소에서 제1 전역 변수와 연관된 데이터를 캐시에 프리페칭하도록 구성된, 데이터 프리페칭 장치.
  33. 데이터 프리페칭 시스템(data prefetching system)으로서,
    제18항 내지 제29항 중 어느 한 항에 따른 데이터 프리페칭 장치, 및
    제30항 내지 제32항 중 어느 한 항에 따른 데이터 프리페칭 장치
    를 포함하는 데이터 프리페칭 시스템.
KR1020197015445A 2016-11-08 2017-11-06 데이터 프리페칭 방법, 장치, 및 시스템 KR102353213B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201610979946.6A CN108073525B (zh) 2016-11-08 2016-11-08 预取数据的方法、装置和系统
CN201610979946.6 2016-11-08
PCT/CN2017/109536 WO2018086494A1 (zh) 2016-11-08 2017-11-06 预取数据的方法、装置和系统

Publications (2)

Publication Number Publication Date
KR20190070981A true KR20190070981A (ko) 2019-06-21
KR102353213B1 KR102353213B1 (ko) 2022-01-18

Family

ID=62110160

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197015445A KR102353213B1 (ko) 2016-11-08 2017-11-06 데이터 프리페칭 방법, 장치, 및 시스템

Country Status (8)

Country Link
US (1) US20190266094A1 (ko)
EP (1) EP3534266B1 (ko)
JP (1) JP6830534B2 (ko)
KR (1) KR102353213B1 (ko)
CN (1) CN108073525B (ko)
CA (1) CA3043127C (ko)
RU (1) RU2019117778A (ko)
WO (1) WO2018086494A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110765034B (zh) 2018-07-27 2022-06-14 华为技术有限公司 一种数据预取方法及终端设备
CN110413327B (zh) * 2019-07-16 2022-07-19 创新先进技术有限公司 一种基于硬件抽象层的硬件驱动方法和装置
CN115686522A (zh) * 2021-07-31 2023-02-03 华为技术有限公司 一种程序源码的编译优化方法及相关产品
CN113741411B (zh) * 2021-11-08 2022-02-01 西安热工研究院有限公司 一种分散控制系统全局变量点产物文件生成方法和系统
CN116955223B (zh) * 2023-09-18 2024-01-23 浪潮电子信息产业股份有限公司 一种数据预取方法、系统、电子设备及计算机存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5127103A (en) * 1987-10-14 1992-06-30 North American Philips Corporation Real-time tracing of dynamic local data in high level languages in the presence of process context switches
US20040117557A1 (en) * 2002-12-16 2004-06-17 Paulraj Dominic A Smart-prefetch
US20080256302A1 (en) * 2007-04-10 2008-10-16 Maron William A Programmable Data Prefetching

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6311260B1 (en) * 1999-02-25 2001-10-30 Nec Research Institute, Inc. Method for perfetching structured data
US8438365B2 (en) * 2006-10-06 2013-05-07 Calos Fund Limited Liability Company Efficient data loading in a data-parallel processor
JP5205777B2 (ja) * 2007-03-14 2013-06-05 富士通株式会社 プリフェッチ処理装置、プリフェッチ処理プログラムおよびプリフェッチ処理方法
TW201015319A (en) * 2008-09-17 2010-04-16 Panasonic Corp Cache memory, memory system, data copying method and data rewriting method
CN101667159B (zh) * 2009-09-15 2012-06-27 威盛电子股份有限公司 传送请求区块的高速缓存系统及方法
US8255633B2 (en) * 2009-11-13 2012-08-28 International Business Machines Corporation List based prefetch
CN102981883B (zh) * 2012-10-29 2016-01-13 无锡江南计算技术研究所 一种编译器数据预取方法和装置
CN105426322B (zh) * 2015-12-31 2019-05-28 华为技术有限公司 一种数据的预取方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5127103A (en) * 1987-10-14 1992-06-30 North American Philips Corporation Real-time tracing of dynamic local data in high level languages in the presence of process context switches
US20040117557A1 (en) * 2002-12-16 2004-06-17 Paulraj Dominic A Smart-prefetch
US20080256302A1 (en) * 2007-04-10 2008-10-16 Maron William A Programmable Data Prefetching

Also Published As

Publication number Publication date
EP3534266B1 (en) 2024-02-14
EP3534266A1 (en) 2019-09-04
CN108073525B (zh) 2021-10-19
US20190266094A1 (en) 2019-08-29
CN108073525A (zh) 2018-05-25
CA3043127A1 (en) 2018-05-17
JP6830534B2 (ja) 2021-02-17
WO2018086494A1 (zh) 2018-05-17
RU2019117778A (ru) 2020-12-10
CA3043127C (en) 2023-06-20
JP2020500368A (ja) 2020-01-09
EP3534266A4 (en) 2019-10-30
KR102353213B1 (ko) 2022-01-18

Similar Documents

Publication Publication Date Title
KR20190070981A (ko) 데이터 프리페칭 방법, 장치, 및 시스템
KR102168017B1 (ko) 확장 메모리에 대한 액세스 방법, 디바이스 및 시스템
US7424578B2 (en) Computer system, compiler apparatus, and operating system
US7571432B2 (en) Compiler apparatus for optimizing high-level language programs using directives
CN104854560B (zh) 一种软硬件协同预取的方法及装置
US20180300258A1 (en) Access rank aware cache replacement policy
US7243195B2 (en) Software managed cache optimization system and method for multi-processing systems
EP1349063A2 (en) Program simulation with just-in-time compilation
US8645910B2 (en) Compiler capable of partitioning program and program partitioning method
US8266605B2 (en) Method and system for optimizing performance based on cache analysis
CN114238167B (zh) 信息预取方法、处理器、电子设备
JP5625809B2 (ja) 演算処理装置、情報処理装置及び制御方法
GB2531395A (en) Descriptor ring management
US6260191B1 (en) User controlled relaxation of optimization constraints related to volatile memory references
CN108874691B (zh) 数据预取方法和内存控制器
US10083125B2 (en) Method to efficiently implement synchronization using software managed address translation
Haque et al. Susesim: a fast simulation strategy to find optimal l1 cache configuration for embedded systems
US20050086651A1 (en) Compiler apparatus and linker apparatus
CN117251387A (zh) 一种数据预取方法、编译方法及相关装置
CN114924793A (zh) 处理单元、计算设备和指令处理方法
CN114281720A (zh) 处理器、用于处理器的地址翻译方法、电子设备
CN1326036C (zh) 数据处理装置、数据处理方法和编译装置及编译方法
US20200409746A1 (en) Information processing apparatus and recording medium
Balasundaram et al. Reducing Energy Consumption by Code Repositioning for Memory Levels
US20150227352A1 (en) Profiling binary code based on density

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