KR20080104073A - 처리 유닛의 동적 로드 및 언로드 - Google Patents

처리 유닛의 동적 로드 및 언로드 Download PDF

Info

Publication number
KR20080104073A
KR20080104073A KR1020087026005A KR20087026005A KR20080104073A KR 20080104073 A KR20080104073 A KR 20080104073A KR 1020087026005 A KR1020087026005 A KR 1020087026005A KR 20087026005 A KR20087026005 A KR 20087026005A KR 20080104073 A KR20080104073 A KR 20080104073A
Authority
KR
South Korea
Prior art keywords
program module
module
program
code
execution
Prior art date
Application number
KR1020087026005A
Other languages
English (en)
Inventor
다츠야 이와모토
Original Assignee
가부시키가이샤 소니 컴퓨터 엔터테인먼트
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 가부시키가이샤 소니 컴퓨터 엔터테인먼트 filed Critical 가부시키가이샤 소니 컴퓨터 엔터테인먼트
Publication of KR20080104073A publication Critical patent/KR20080104073A/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • G06F40/169Annotation, e.g. comment data or footnotes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • G06F40/177Editing, e.g. inserting or deleting of tables; using ruled lines
    • G06F40/18Editing, e.g. inserting or deleting of tables; using ruled lines of spreadsheets
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/251Local memory within processor subsystem
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/253Centralized memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명에 따르면, 처리 환경에서의 향상된 명령 조작을 위한 방법들과 장치들이 제공된다. 프로그램 레퍼런스는 하나 이상의 프로그램 모듈들과 관련되어 있다. 프로그램 모듈들은 로컬 메모리에 로드될 수 있고 코드 또는 데이터와 같은 정보가 프로그램 레퍼런스에 근거하여 프로그램 모듈들로부터 획득되어질 수 있다. 신규 프로그램 모듈들이 현재의 프로그램 모듈들에 근거하여 형성될 수 있다. 프로그램 모듈 내에서 직접 레퍼런스들을 생성하는 것과 프로그램 모듈들 사이에서 간접 레퍼런스들을 방지하는 것이 신규 프로그램 모듈들을 최적화할 수 있다. 프로그램 모듈은 삽입 시점에 근거하여 로컬 메모리에 사전 로드될 수 있다. 삽입 시점은 통계적으로 판단될 수 있다. 본 발명은 제한된 용량의 메모리를 가진 멀티프로세서 시스템들에 대해 특히 도움이 된다.
레퍼런스, 로컬 메모리, 프로그램 모듈, 삽입 시점

Description

처리 유닛의 동적 로드 및 언로드{DYNAMIC LOADING AND UNLOADING FOR PROCESSING UNIT}
본 발명은 일반적으로 컴퓨터 프로그램 실행에 관한 것이다. 더욱 상세하게는, 본 발명은 목적 모듈에 근거하여 프로세서의 로컬 저장 장치에서 컴퓨터 모듈을 조작하고 컴퓨터 모듈을 로드함으로써 프로그램 실행을 개선하는 것에 관한 것이다.
컴퓨터 시스템은 점차로 더욱 복잡해지고 있고, 구성부품의 사이즈(size)를 축소시키고 제조 비용을 절감시키면서 동일한 시간 동안 보다 높은 처리 속도를 달성하고 있다. 이러한 진보는, 실시간의 멀티미디어 게임 및 다른 컴퓨터 사용 집중 애플리케이션(application)과 같은 많은 애플리케이션의 성공에 중요하다. 때때로, 컴퓨터 시스템은 처리 효율을 향상시키기 위하여, 병렬로(또는 일제히) 동작하는 멀티프로세서를 통합시킨다.
기본적인 레벨(level)에서, 프로세서 또는 복수의 프로세서는 코드(code) 및/또는 데이터(총칭하여 "정보")를 조작한다. 정보는 전형적으로 메인 메모리(main memory)에 저장된다. 예를 들어, 메인 메모리는, 프로세서(들)를 포함하는 칩(chip)으로부터 물리적으로 분리된 동적 임의 액세스 메모리(Dynamic Random Access Memory; "DRAM") 칩일 수 있다. 메인 메모리가 프로세서로부터 물리적으로나 논리적으로 분리된 경우, 메인 메모리에 포함된 정보에 액세스(access)하는데 요구되는 부가적인 시간에 있어서, 예를 들어, 수십 또는 수백 밀리세컨드(millisecond)일 수 있는 상당한 지연이 존재할 수 있다. 필수 정보가 메인 메모리로부터 전송될 때까지, 프로세서는 동작을 대기하거나 중지해야만 할 것이기 때문에, 높은 지연은 처리에 악영향을 준다.
이러한 높은 지연 문제를 해결하기 위하여, 많은 컴퓨터 시스템이 캐시 메모리(cache memory)를 구현한다. 캐시 메모리는 프로세서와 메인 메모리 사이에 위치되는 일시적인 저장 장치이다. 일반적으로, 캐시 메모리는 메인 메모리와 비교하여 작은 액세스 지연("낮은 지연")을 갖지만, 더욱 매우 작은 사이즈의 저장 장치를 갖는다. 이용 시, 캐시 메모리는 반복된 액세스에 대한 데이터를 일시적으로 저장함으로써, 프로세서의 성능을 개선한다. 캐시 메모리의 효율성은 액세스의 집약성에 의존한다. 예를 들어, "9 대 1" 규칙을 이용하여, 90%의 시간이 10%의 데이터를 액세스하는데 소비되는 경우, 많은 시간이 소량의 데이터를 액세스하는데 소비되기 때문에, 메인 메모리 또는 외부 저장 장치로부터 소량의 데이터를 검색하는 것은 상당히 효과적이지 않다. 이에 따라, 자주 이용되는 데이터는 캐시에 저장되어야 한다.
종래의 하드웨어 캐시 시스템은 저장 장치 관리의 기본적인 유닛인 "캐시 라인(cache line)"을 포함한다. 캐시 라인은 캐시 메모리와 메인 메모리 사이에서 최 적의 사이즈의 데이터 전송이 이루어지도록 선택된다. 이 기술 분야에서 공지된 기술로서, 캐시 시스템은 메인 메모리에 캐시 라인을 매핑(mapping)하는 일정 규칙을 가지고 동작한다. 예를 들면, 캐시 "태그(tag)"는, 메인 메모리의 어느 부분(들)이 캐시 라인 상에 저장되는지와, 메인 메모리의 그 부분의 상태를 나타내는데 사용된다.
프로그램 실행에 악영향을 줄 수 있는 메모리 액세스 이외의 다른 제한은, 메모리 사이즈이다. 메인 메모리는 필요한 동작을 수행하기에 지나치게 작을 수 있다. 이러한 경우, 외부 저장 장치를 사용함으로써 메인 메모리에 물리적으로 존재하는 어드레스 영역보다 큰 시스템 어드레스 영역을 제공하기 위하여, "가상 메모리"가 이용될 수 있다. 한편, 전형적으로, 외부 저장 장치는 메인 메모리보다 매우 높은 지연을 가질 수 있다.
가상 메모리를 구현하기 위하여, 프로세서의 메모리 관리 유닛(Memory Management Unit; "MMU")을 이용하는 것이 보통인데, MMU는 CPU 또는 개별 요소의 일부일 수 있다. MMU는 메모리의 물리적 어드레스로 가상 어드레스(프로그램 소프트웨어에 의해 이용되는 어드레스)를 매핑하는 것을 관리한다. MMU는 액세스가 물리적 어드레스에 연결지어지지 않은 가상 어드레스로 이루어지는 경우를 검출할 수 있다. 이러한 경우, 가상 메모리 관리자 소프트웨어가 호출된다. 가상 어드레스가 외부 저장 장치에 저장되어 있는 경우, 메인 메모리로 로드될 것이며, 매핑이 가상 어드레스에 대하여 이루어질 것이다.
고도의 프로세서 아키텍처(architecture), 특히 멀티프로세서(multiprocessor) 아 키텍처에 있어서, 각각의 처리 유닛은 로컬 메모리를 갖는데, 로컬 메모리는 메인 메모리의 저장 장치를 보충할 수 있다. 로컬 메모리는 때때로 고속이지만, 제한된 저장 용량을 갖는다. 소프트웨어에 의해 이용되는 어드레스(address)와 로컬 메모리의 물리적 어드레스 사이에 가상화는 없다. 이는, 처리 유닛이 이용할 수 있는 메모리의 양을 제한한다. 처리 유닛은 직접 메모리 액세스 제어기(DMA(Direct Memory Accss) Controller; "DMAC") 또는 다른 하드웨어를 통하여 메인 메모리에 액세스할 수 있지만, 시스템 어드레스 공간과 로컬 메모리 어드레스 공간을 링크시키는 하드웨어 메커니즘은 없다.
그러나 높은 지연 메인 메모리는 처리 효율을 감소시키는데 기여하고, 멀티프로세서 시스템에 있어서 성능의 심각한 병목 현상(bottleneck)을 발생시킨다. 이에 따라, 이러한 문제를 극복하기 위한 향상된 정보 조작에 대한 요구가 존재한다. 본 발명은 이러한 그리고 다른 문제를 해결하고, 특히 엄격한 메모리 제한을 갖는 멀티프로세서 아키텍처에 적합하다.
본 발명의 일 실시예에 따른 처리 시스템에서의 동작 처리 방법은, 프로그램 모듈을 저장하는 것이 가능하며, 캐시가 아닌 로컬 메모리와, 상기 로컬 메모리에 접속되는 프로세서와, 상기 로컬 메모리와 메인 메모리 사이의 DMA 전송을 제어하는 DMA 제어부를 구비하는 처리 시스템에서의 동작 처리 방법으로, 상기 로컬 메모 리에 로드된 제1 프로그램모듈을 실행하는 단계, 제 2 프로그램 모듈의 삽입 시점을 판단하는 단계, 상기 제 1 프로그램 모듈의 실행 중에, 하드웨어 캐시 시스템에 의하지 않고 상기 DMA 제어부에 의한 DMA 전송에 의해 상기 로컬 메모리에 상기 제 2 프로그램 모듈을 로드하는 단계, 상기 제 2 프로그램 모듈의 실행을 개시하기 위하여 예측 실행 시간을 판단하는 단계, 상기 제 2 프로그램 모듈의 로드가 완료되는지의 여부를 판단하는 단계; 및 상기 제 1 프로그램 모듈의 실행이 종료된 후에, 상기 제 2 프로그램 모듈을 실행하는 단계를 포함하며, 상기 제2 프로그램 모듈의 삽입 시점은 상기 제1 프로그램 모듈의 분기 연산 뒤에 위치하는 것을 특징으로 한다.
여기서, 제2 프로그램 모듈의 로드가 완료되지 않는 경우, 제 2 프로그램 모듈의 실행을 지연시키는 단계를 더 포함할 수 있다. 이와 같은 실행을 지연시키는 단계는 로드가 완료될 때까지 하나 이상의 NOP들을 수행하는 단계를 포함하는 것이 바람직하다.
한편, 삽입 시점은 통계적으로 판단되는 것이 바람직하며, 삽입 시점의 유효성은 실행 상태에 기반을 두고 판단되는 것이 바람직하다.
본 발명의 일 실시예에 따른 처리 시스템은, 프로그램 모듈을 저장하는 것이 가능하며, 캐시가 아닌 로컬 메모리와, 상기 로컬 메모리에 접속된 프로세서와, 상기 로컬 메모리와 메인 메모리 사이의 DMA 전송을 제어하는 DMA 제어부를 포함하는 처리 시스템으로서, 상기 프로세서는, 제 1 프로그램 모듈의 삽입 시점을 판단하는 기능, 상기 프로세서에 의한 제 2 프로그램 모듈의 실행 중에 상기 제 1 프로그램 모듈을, 하드웨어 캐시 시스템에 의하지 않고 상기 DMA 제어부에 의한 DMA 전송에 의해 상기 로컬 메모리에 로드하는 기능 및 상기 제 2 프로그램 모듈의 실행이 종료되고 로드가 완료된 후에 상기 제 1 프로그램 모듈을 실행하는 기능을 포함하는 관리 기능을 수행할 논리를 포함하며, 상기 제1 프로그램 모듈의 삽입 시점은 상기 제2 프로그램 모듈의 분기 연산 뒤에 위치하는 것을 특징으로 한다.
또한, 본 발명의 일 실시예에 따른 프로그램을 저장하는 저장 매체는, 프로세서에 의한 이용을 위해 프로그램을 저장하는 저장 매체로서, 상기 프로그램은 상기 프로세서가, 상기 프로세서와 관련된 로컬 메모리에 로드된 제 1 프로그램 모듈을 실행하고, 제 2 프로그램 모듈의 삽입 시점을 판단하고, 상기 제 1 프로그램 모듈의 실행 중에, 하드웨어 캐시 시스템에 의하지 않고 DMA 제어부에 의한 DMA 전송에 의해 상기 로컬 메모리에 상기 제 2 프로그램 모듈을 로드하고, 상기 제 2 프로그램 모듈의 실행을 개시하기 위하여 예측 실행 시간을 판단하고, 상기 제 2 프로그램 모듈의 로드가 완료되는지의 여부를 판단하며, 상기 제 1 프로그램 모듈의 실행이 종료된 후에 상기 제 2 프로그램 모듈을 실행하도록 하며, 상기 제2 프로그램 모듈의 삽입 시점은 상기 제1 프로그램 모듈의 분기 연산 뒤에 위치하는 것을 특징으로 한다.
본 발명은 프로그램 모듈의 로딩 및 언로딩에 소요되는 시간을 최소화시키는 효과를 제공한다.
첨부된 도면에 도시된 본 발명의 바람직한 실시예들을 기술함에 있어서, 특정한 용어는 명료성을 위하여 이용될 것이다. 한편, 본 발명은 이용되는 특정한 사항으로 한정되지 않으며, 각각의 특정한 사항은 유사한 목적을 달성하기 위하여 유사한 규칙으로 동작하는 모든 기술적 동등함을 포함하는 것으로 이해될 것이다.
도 1을 참조하면, 본 발명의 실시형태에 따라 사용될 수 있는 기본적인 처리 모듈 또는 처리 요소(Processing Element; "PE"; 100)의 블록도를 도시한다. 이러한 도면에 도시된 바와 같이, PE(100)는 입출력 인터페이스(102), 처리 유닛(Processing Unit; "PU"; 104), 직접 메모리 액세스 제어기(Direct Memory Access Controller; "DMAC"; 106) 및 다수개의 부처리 유닛(Sub-Processing Unit; "SPU"; 108), 즉 SPU들(108a 내지 108d)을 포함하는 것이 바람직하다. 네 개의 SPU(108a 내지 108d)가 도시되고 있으나, PE(100)는 임의의 개수의 이러한 디바이스를 포함할 수 있다. 로컬(또는 내부) PE 버스(120)는 PU(104), SPU(108), 입출력 인터페이스(102), DMAC(106) 및 메모리 인터페이스(110) 사이에서 데이터 및 애플리케이션을 전송한다. 예를 들어, 로컬 PE 버스(120)는 통상의 아키텍처를 갖거나 패킷 교환 네트워크(packet switch network)로서 실현될 수 있다. 패킷 교환 네트워크로서의 실현은, 많은 하드웨어를 요구하기 때문에, 이용가능한 대역폭을 증가시킨다. 입출력 인터페이스(102)는 입출력 버스(124)를 통하여, 프레임 버퍼, 디스크 드라이브 등과 같은 하나 이상의 외부 입출력 디바이스(도시되지 않음)에 접속할 수 있다.
PE(100)는 디지털 논리를 실현하는 다양한 방법을 이용하여 구성될 수 있다. 한편, PE(100)는 실리콘 기판 상의 CMOS를 사용하는 단일 집적 회로로서 구성되는 것이 바람직하다. PE(100)는 높은 대역폭 메모리 접속부(122)를 통하여 메모리(130)와 밀접하게 관련된다. 메모리(130)는 PE(100)의 메인 메모리로서 기능하는 것이 바람직하다. 실제의 구현에 있어서, 메모리(130)는, PE(100)를 포함하는 프로세서 칩의 일부로서 통합되거나, 그렇지 않은 경우, 분리되지 않은 외부의 "오프칩(off chip)"의 메모리일 수 있다. 예를 들면, 메모리(130)는, 정적 랜덤 액세스 메모리(Static Random Access Memory; "SRAM"), 마그네틱 랜덤 액세스 메모리(Magnetic Random Access Memory; "MRAM"), 광학 메모리, 홀로그래픽 메모리 등과 같은 다른 수단을 사용하여 구현될 수 있다. DMAC(106) 및 메모리 인터페이스(110)는 메모리(130) 및 PE(100)의 SPU(108)와 PU(104) 사이에서의 데이터의 전송을 용이하게 한다.
예를 들면, PU(104)는 데이터 및 애플리케이션의 독립적인 처리가 가능한 표준적인 프로세서일 수 있다. 동작에 있어서, PU(104)는 SPU(108)에 의한 데이터 및 애플리케이션의 처리를 예정하고 지휘한다. 다른 구성에 있어서, PE(100)는 다중 PU(104)를 포함할 수 있다. PU(104) 각각은 지정된 SPU(108) 그룹 중 하나, 모두 또는 일부를 제어할 수 있다. SPU(108)는, 단일 명령, 다중 데이터(Single Instruction, Multiple Data; "SIMD") 프로세서인 것이 바람직하다. PU(104)의 제어 하에서, SPU(108)는 병렬이면서 독립된 방식으로 데이터 및 애플리케이션의 처리를 수행할 수 있다. DMAC(106)는 공유 메모리(130)에 저장된 데이터 및 애플리케이션으로의 PU(104) 및 SPU(108)에 의한 액세스를 제어한다. 바람직하게는, PE(100)과 같은 복수개의 PE는, 향상된 처리 능력을 제공하기 위하여, 함께 연결되거나 묶이고, 또는 그렇지 않은 경우, 서로 논리적으로 관련될 수 있다.
도 2는, 이하에서 기술되는 바와 같이, 본 발명의 실시형태에 따라 동작될 수 있는 다중 PE들(200; PE1, PE2, PE3, PE4)을 포함하는 처리 아키텍처를 도시한다. 바람직하게는, PE(200)는 단일 칩 상에 존재한다. PE(200)는, 도 1의 PE(100)에 대하여 전술한 바와 같이, PU 및/또는 SPU와 같은 하부시스템을 포함할 수도 있고, 포함하지 않을 수도 있다. PE(200)는, 요구되는 처리의 타입에 따라서, 동일한 타입일 수도 있고 다른 타입일 수도 있다. 예를 들어, 하나 이상의 PE(200)들은 일반적인 마이크로프로세서, 디지털 신호 프로세서, 그래픽 프로세서, 마이크로제어기 등일 수 있다. PE1과 같은 PE(200)들 중 어느 하나는 PE2, PE3, 및 PE4에 의한 처리의 일부 또는 모두를 제어하거나 감독할 수 있다.
PE(200)들은 공유 버스(202)로 연락되는 것이 바람직하다. 메모리 제어기 또는 DMAC(206)는 메모리 버스(204)를 통하여 공유 버스(202)에 접속될 수 있다. DMAC(206)는 메모리(208)에 접속되는데, 메모리(208)는, 메모리(130)에 대하여 전술한 바와 같은 타입 중 어느 하나일 수 있다. 실제의 구현에 있어서, 메모리(208)는, 하나 이상의 PE(200)를 포함하는 프로세서 칩의 일부로서 통합되거나, 그렇지 않은 경우, 분리되지 않은 외부의 오프칩의 메모리일 수 있다. 예를 들어, 메모리(208)는, 칩 상의 분리된 위치에 있거나 하나 이상의 PE(200)와 통합될 수 있다. 또한, 입출력 제어기(212)는 입출력 버스(210)를 통하여 공유 버스(202)에 접속될 수 있다. 입출력 제어기(212)는, 프레임 버퍼, 디스크 드라이브 등과 같은 하나 이 상의 입출력 디바이스(214)에 접속할 수 있다.
전술한 처리 모듈 및 아키텍처는 단지 예들에 불과하며, 본 발명의 다양한 실시형태는, 2003년 2월 25일 등록된 "Memory Protection System and Method for Computer Architecture for Broadband Networks"란 명칭의 미국특허 제6,526,491호 및 2001년 3월 22일에 출원된 "Computer Architecture and Software Cells for Broadband Networks"란 명칭의 미국출원 제09/816,004호에 기재된 타입의 멀티프로세서 시스템으로 한정되지 않고, 이들을 포함하는 다른 구조와 함께 사용될 수 있다.
도 3은 본 발명의 실시형태에 따라 사용될 수 있는 SPU(300)를 도시한다. 하나 이상의 SPU(300)가 PE(100) 내에 통합될 수 있다. PERK 다중 PU(104)들을 포함하는 경우, PU(104) 각각은 지정된 SPU(300) 그룹 중 하나, 모두 또는 일부를 제어할 수 있다.
SPU(300)는 로컬 저장 장치(Local Store; "LS"; 302), 레지스터(304), 하나 이상의 부동 소수점 유닛(Floating Point Unit; "FPU"; 306) 및 하나 이상의 정수 유닛(Integer Unit; "IU"; 308)을 포함하거나, 논리적으로 관계되는 것이 바람직하다. 그리고, SPU(300)의 구성요소들은, 이하에서 기술될 것과 같이, 하부구성요소들을 포함한다. 요구되는 처리 능력에 따라서, 보다 많은 또는 보다 적은 수의 FPU(306)들 및 IU(308)들이 사용될 수 있다. 바람직한 실시예에 있어서, LS(302)는 적어도 128 킬로바이트의 저장 용량을 포함하고, 레지스터(304)의 수용량은 128×128 비트이다. FPU(306)들은 1 초당 적어도 320억 부동 소수점 연산(32 GFLOPS)의 속도로 동작하는 것이 바람직하며, IU(308)는 1 초당 적어도 320억 연산(32 GOPS)의 속도로 동작하는 것이 바람직하다.
LS(302)는 캐시 메모리가 아닌 것이 바람직하다. SPU(300)에 대한 캐시 일관성 지지는 불필요하다. 대신에, LS(302)는 SRAM으로서 구성되는 것이 바람직하다. PU(104)는 PU(104)에 의해 초기화된 직접 메모리 액세스에 대한 캐시 일관성 지지를 요구할 수 있다. 한편, 캐시 일관성 지지는, SPU(300)에 의해 초기화된 직접 메모리 액세스에 대하여 또는 외부 디바이스, 예컨대 입출력 디바이스(214)로나 입출력 디바이스(214)로부터의 액세스에 대하여 요구되지 않는다. LS(302)는, 예를 들어 특정한 SPU(300)와 관련된 물리적 메모리, SPU(300)과 관련된 가상 메모리 영역, 물리적 메모리 및 가상 메모리의 조합, 또는 동등한 하드웨어, 소프트웨어 및/또는 펌웨어(firmware) 구조로서 실행될 수 있다. LS(302)가 SPU(300)의 외부에 있다면, SPU-특정 로컬 버스를 경유하거나 또는 로컬 PE 버스(120)와 같은 시스템 버스를 경유하는 것과 같이 SPU(300)에 결합될 수 있다.
SPU(300)는 버스 인터페이스(버스 I/F;312)를 통하여 SPU(300)로 그리고 SPU(300)로부터 애플리케이션들과 데이터를 전송하기 위한 버스(310)를 포함한다. 바람직한 실시형태에서, 버스(310)는 1024 비트 폭을 가진다. SPU(300)는 내부 버스들(314, 316 및 318)을 더 포함한다. 바람직한 실시형태에서, 버스(314)는 256 비트의 폭을 가지고 로컬 저장 장치(302)와 레지스터(304) 사이의 통신을 제공한다. 버스들(316 및 318)은 각각, 레지스터(304)와 FPU(306), 및 레지스터(304)와 정수 유닛(308) 사이의 통신들을 제공한다. 바람직한 실시형태에서, 레지스터(304) 로부터 FPU(306) 또는 IU(308)로의 버스들(316 및 318)의 폭은 384 비트이고, 버스들(316 및 318)의 폭은 FPU(306) 또는 IU(308)로부터 레지스터(304)로의 버스들(316 및 318)의 폭은 128 비트이다. 레지스터(304)로부터 FPU(306) 또는 IU(308)로의 버스들의 더 큰 폭은, 처리 동안 레지스터(304)로부터의 더 큰 데이터 흐름을 도모한다. 일 실시예에서, 각각의 계산에서 최대 3 단어가 필요하다. 그러나, 각각의 계산 결과는 통상적으로 1 단어이다.
본 발명을 이용하여, 가상화의 결여와 로컬 메모리 어드레스 공간과 시스템 어드레스 공간 사이의 다른 병목 현상을 극복하는 것이 가능하다. LS(302)에서의 데이터 로드 및 언로드가 소프트웨어를 통해 바람직하게 수행되기 때문에, 데이터 및/또는 코드가 특정 시간에서 로드되어야 하는지 여부를 판단할 수 있다는 사실을 이용할 수 있다. 이것은 프로그램 모듈들을 이용하여 성취된다. 본 명세서에서 사용되는 용어 "프로그램 모듈"은 메모리에 할당된 임의의 논리군의 프로그램 자원들을 포함한다. 예를 들어, 프로그램 모듈은 컴파일러와 같은 논리 수단에 의해 그룹화될 수 있는 데이터 및/또는 코드를 포함할 수 있다. 프로그램 또는 다른 계산 작업들이 하나 이상의 프로그램 모듈들을 이용하여 실행될 수 있다.
도 4A는 프로그램 모듈들을 이용한 본 발명의 일 실시형태에 따른 저장 장치 관리 도(400)를 나타낸다. 메인 메모리, 예를 들어, 메모리(130)는 하나 이상의 프로그램 모듈들을 포함한다. 도 4A에서, 제 1 프로그램 모듈(프로그램 모듈 A; 402), 및 제 2 프로그램 모듈(프로그램 모듈 B; 404)은 메인 메모리(130)에 저장된다. 바람직한 실시예에서, 프로그램 모듈은 "*.o" 파일로 알려진 컴파일타임 목적 모듈(compile-time object module)일 수 있다. 목적 모듈들은 프로그램 부분들 사이의 매우 분명한 논리 분할을 제공한다. 목적 모듈이 컴파일 동안 생성되기 때문에, 목적 모듈은, 모듈 내에서 만들어 지든지(직접 레퍼런싱;direct referencing) 또는 밖에서 만들어 지든지(외부 레퍼런싱(external referencing) 또는 간접 레퍼런싱(indirect referencing))에 상관없이 정확한 어드레스 레퍼런싱(address referencing)을 제공한다. 간접 레퍼런싱은 이하에서 기술되듯이 관리 루틴을 호출함으로써 바람직하게 실행된다.
바람직하게는, 프로그램들은 프로그램 모듈에 의하여 LS(302)로 로드된다. 더욱 바람직하게는, 프로그램들은 목적 모듈에 의하여 LS(302)로 로드된다. 도 4A에 도시된 것처럼, 프로그램 모듈 A는 제 1 프로그램 모듈(406)로서 LS(302)에 로드될 수 있고, 프로그램 모듈 B는 제 2 프로그램 모듈(408)로서 로드될 수 있다. 직접 레퍼런싱이 프로그램 모듈(406) 내에서 데이터 또는 코드를 액세스하도록 화살표(410)에 의해 표시된 것처럼 수행되어질 때, 레퍼런스들(즉, 코드 및/또는 데이터에 대한 포인터(pointer)들) 모두 오버헤드(overhead) 없이 액세스될 수 있다. 간접 레퍼런싱이 점선 화살표들(412 및 413)에 의해 도시된 것처럼 프로그램 모듈(406)로부터 프로그램 모듈(408)로 모듈 밖에서 행해질 때, 관리 루틴(414)이 바람직하게 호출된다. 프로세서의 논리에 의해 바람직하게 실행된 관리 루틴(414)은 필요하다면 프로그램 모듈을 로드할 수 있고, 이미 로드되었다면 프로그램 모듈을 액세스할 수 있다. 예를 들어, 간접 레퍼런스(점선 화살표; 412)가 제 1 프로그램 모듈(프로그램 모듈 A; 406)에서 행해진다고 가정하자. 게다가, 로컬 저장 장 치(302)에서 발견되지 않는 프로그램 모듈 B로 간접 레퍼런스(점선 화살표; 412)가 행해진다고 가정하자. 그러면, 관리 루틴(414)은 주 메모리(130) 내에 프로그램 모듈(404)로서 있는 프로그램 모듈 B를 프로그램 모듈(408)로서 로컬 저장 장치(302)에 로드할 수 있다.
도 4B는 본 발명의 바람직한 실시형태에 따른 저장 장치 관리를 나타내는 논리 순서도(440)이다. 저장 장치 관리는 단계 S442에서 시작된다. 그 다음에 단계 S444에서, 레퍼런스가 어느 프로그램 모듈에 속해 있는 지를 판단하는 검사가 수행된다. 관리 루틴(414; 도 4A)은 검사를 수행하거나 또는 검사의 결과들이 예를 들어 또 다른 처리, 애플리케이션 또는 장치에 의해 관리 루틴(414)으로 제공된다. 레퍼런스가 판단되면, 프로그램 모듈이 LS(302)로 로드되었는 지 여부를 판단하는 검사가 단계 S446에서 수행된다. 프로그램 모듈이 LS(302)에 로드되면, 프로그램 모듈로부터 레퍼런스된 값(데이터)이, 단계 S448에서 도 4A의 프로그램 모듈(406)과 같은 요구 엔티티(requesting entity)에 복귀된다. 프로그램 모듈이 LS(302)에 로드되지 않는다면, 레퍼런스된 모듈은 단계 S450에서 LS(302)로 로드된다. 로드가 이루어지면, 단계 S448에서 데이터가 요구 엔티티에 복귀되는 처리가 진행된다. 저장 장치 관리 루틴은 단계 S452에서 종료한다. 관리 루틴(414)은 도(400)의 저장 장치 관리를 수행하거나 검사한다.
프로그램 모듈들이 컴파일 동안 형성된 목적 모듈들을 이용하여 실행된다면, 목적 모듈들이 어떻게 만들어지는 지가 저장 장치 관리 처리의 유효성에 영향을 끼칠 수 있다. 예를 들어, 코드 함수의 데이터가 코드 함수와 관련하여 적절하지 않 다면, 처리 병목(processing bottleneck)이 일어난다. 따라서, 프로그램들 및/또는 데이터를 다중 소스 파일들로 분리할 때 주의하여야 한다.
이러한 문제점은, 코드 및 데이터를 포함하여 프로그램을 분석함으로써 방지될 수 있다. 일 실시형태에서, 코드 및/또는 데이터는 바람직하게는 분리된 모듈들로 분할된다. 또 다른 실시형태에서, 코드 및/또는 데이터는 사용에 따라 데이터의 함수들 또는 그룹들로 분할된다. 컴파일러 또는 다른 처리 도구가 데이터의 함수들과 그룹들 사이에서 만들어진 레퍼런스들을 분석할 수 있다. 그 다음에, 프로그램 모듈 그룹화를 최적화하기 위해, 존재하는 프로그램 모듈들이 분석에 근거하여 데이터 및/또는 코드를 그룹화함으로써 신규 프로그램 모듈들로 재분할될 수 있다. 이것은 외부 모듈 액세스에 의해 생성된 오버헤드(overhead)를 최소화할 것이다. 모듈을 어떻게 분할할 것인가를 판단하는 처리가 모듈의 코드를 함수들에 의해 분할함으로써 바람직하게 시작된다. 예를 들어, 트리 구조가 함수들의 "호출" 관계들로부터 추출될 수 있다. 외부 호출이 없는 함수, 또는 외부에서 레퍼런스되지 않는 함수는 "로컬" 함수로서 식별될 수 있다. 외부 레퍼런스들을 갖는 함수들은 레퍼런스 타겟 모듈들에 의해 그룹화될 수 있고, 외부 레퍼런스를 갖는 것으로 식별된다. 유사한 그룹화들이 외부에서 레퍼런스되는 함수들에 대해 실행될 수 있고, 그러한 함수들은 외부 레퍼런스에 의해 식별된다. 모듈의 데이터 부분(들)은 동등한 분석을 받는 것이 바람직하다. 모듈 그룹화들은 "최적합(best fit)" 조합을 선택하도록 비교/매치(match)되는 것이 바람직하다. 예를 들어, LS(302)의 크기, 선호되는 전송 크기, 및/또는 할당에 근거하여 최적합이 선택되어진다. 바람직하게는, 레퍼런 스가 더욱 가능성 있게 사용되어질 거라면, 레퍼런스는 최적합 분석에서 더욱 가중치가 부여될 것이다. 도구들은 또한 최적화된 그룹화를 자동화하는 데에 사용되어질 수 있다. 예를 들어, 컴파일러 및/또는 링커(linker)는 최적합 실행가능 파일을 생성하기 위해 하나 이상의 컴파일/링크 반복들을 수행한다. 레퍼런스들은 또한 실행시간 프로파일링(runtime profiling)에 의해 통계적으로 분석될 수 있다.
바람직한 실시형태에서, 재그룹화 처리를 위한 입력은 프로그램을 형성하기 위해 함께 링크될 다중 목적 파일들을 포함한다. 이러한 실시형태에서, 요망되는 출력은 로드 완성에 대한 대기 지연을 최소화하도록 그룹화되는 다중 로드 모듈들을 포함한다.
도 5A는, SPU의 LS(302)에 로드되는 제 1 프로그램 모듈(502) 및 제 2 프로그램 모듈(504)를 갖는 프로그램 모듈 그룹(500)을 도시한다. 다중스레드 처리(multithreaded process)에서 다른 스레드(thread)들 사이에서 동일 코드 모듈을 공유하는 것이 가능하기 때문에, 제 1 프로그램 모듈(502)을 제 1 로컬 저장 장치에 로드하는 것과 제 2 프로그램 모듈을 제 2 로컬 저장 장치에 로드하는 것이 가능하다. 선택적으로, 전체 프로그램 모듈 그룹(500)이 한 쌍의 로컬 저장 장치에 로드된다. 그러나, 데이터 모듈들은 분리된 인스턴스(instance)들을 필요로 한다. 관리 루틴이 공유된 코드 모듈과 관련된 분할된 데이터 모듈들을 관리하는 동안 공유된 코드 모듈이 사용되어질 수 있도록 동적 로드 및 언로드의 방법을 확장하는 것이 가능하다. 도 5A에 도시된 것처럼, 제 1 프로그램 모듈(502)은 코드 함수들(506 및 508)과 데이터 그룹들(510 및 512)을 포함한다. 코드 함수(506)는 작 업(A)에 대한 코드를 포함한다. 코드 함수(508)는 작업(B 및 C)에 대한 코드를 포함한다. 데이터 그룹(510)은 데이터 군(data set; A)를 포함한다. 데이터 그룹(512)은 데이터 군들(B, C 및 D)을 포함한다. 유사하게, 제 2 프로그램 모듈(504)은 코드 함수들(514, 516) 및 데이터 그룹들(518, 520)을 포함한다. 코드 함수(514)는 작업들(D 및 E)에 대한 코드를 포함한다. 코드 함수(516)는 작업(F)에 대한 코드를 포함한다. 데이터 그룹(518)은 데이터 군들(D 및 E)를 포함한다. 데이터 그룹(520)은 데이터 군들(F 및 G)을 포함한다.
도 5A의 실시예에서, 코드 함수(506)는 데이터 그룹(510)을 직접 레퍼런스할 수 있고(화살표; 521), 코드 함수(514)를 간접적으로 레퍼런스할 수 있다. 코드 함수(508)는 데이터 그룹(512)을 직접적으로 레퍼런스할 수 있다(화살표; 523). 코드 함수(514)는 데이터 그룹(520)을 직접적으로 레퍼런스한다(화살표; 524). 마지막으로, 코드 함수(516)는 데이터 그룹(518)을 직접 레퍼런스한다(화살표; 526). 코드 함수들(506 및 514) 사이의 간접 레퍼런스(점선 화살표; 522)는 원하지 않는 오버헤드를 생성한다. 그러므로, 코드 함수들 및 데이터 그룹들을 재그룹화하는 것이 바람직하다.
도 5B는 도 5A의 프로그램 모듈 그룹(500)의 예시적인 재그룹화를 도시한다. 도 5B에서, 신규 프로그램 모듈들(530, 532 및 534)이 생성된다. 프로그램 모듈(530)은 코드 함수들(536, 538)과 데이터 그룹들(540, 542)을 포함한다. 코드 함수(536)는 작업(A)에 대한 코드를 포함한다. 코드 함수(538)는 작업들(D 및 E)에 대한 코드를 포함한다. 데이터 그룹(540)은 데이터 군(A)을 포함한다. 데이터 그 룹(542)은 데이터 군들(F 및 G)을 포함한다. 프로그램 모듈(532)은 코드 함수(544) 및 데이터 그룹(546)을 포함한다. 코드 함수(544)는 작업들(B 및 C)에 대한 코드를 포함한다. 데이터 그룹(546)은 데이터 군들(B, C 및 D)을 포함한다. 프로그램 모듈(534)은 코드 함수(548) 및 데이터 그룹(550)을 포함한다. 코드 함수(548)는 작업(F)에 대한 코드를 포함한다. 데이터 그룹(550)은 데이터 군들(D 및 E)을 포함한다.
도 5B의 그룹화에서, 코드 함수(536)는 데이터 그룹(540)을 직접 레퍼런스하고(화살표; 521'), 코드 함수(538)를 직접 레퍼런스한다(화살표; 522'). 코드 함수(544)는 데이터 그룹(546)을 직접 레퍼런스한다(화살표; 523'). 코드 함수(538)는 데이터 그룹(542)을 직접 레퍼런스한다(화살표; 524'). 마지막으로, 코드 함수(548)는 데이터 그룹(550)을 직접 레퍼런스한다(화살표; 526'). 간접 레퍼런싱이 제거되는 동안 직접 레퍼런싱이 최대가 되기 때문에 그룹화가 도 5B에서 최적화가 된다.
더욱 상세한 실시예에서, 도 6A는 SPU의 LS(302)에 로드될 수 있는 제 1 모듈(602), 제 2 모듈(604), 제 3 모듈(606) 및 제 4 모듈(608)을 갖는 함수 호출 트리(600)를 도시한다. 도 6A에 도시된 것처럼, 제 1 모듈(602)은 코드 함수들(610, 612, 614, 616 및 618)을 포함한다. 코드 함수(610)는 작업(A)에 대한 코드를 포함한다. 코드 함수(612)는 작업(B)에 대한 코드를 포함한다. 코드 함수(614)는 작업(C)에 대한 코드를 포함한다. 코드 함수(616)는 작업(D)에 대한 코드를 포함한다. 코드 함수(618)는 작업(E)에 대한 코드를 포함한다. 제 1 모듈(602)은 코드 함 수들(610, 612, 614, 616 및 618) 각각과 관련된 데이터 그룹들(620, 622, 624, 626 및 628)을 또한 포함한다. 데이터 그룹(620)은 데이터 군(또는 그룹)(A)을 포함한다. 데이터 그룹(622)은 데이터 군(B)을 포함한다. 데이터 그룹(624)은 데이터 군(C)을 포함한다. 데이터 그룹(626)은 데이터 군(D)을 포함한다. 데이터 그룹(628)은 데이터 군(E)을 포함한다.
제 2 모듈(604)은 코드 함수들(630 및 632)을 포함한다. 코드 함수(630)는 작업(F)에 대한 코드를 포함한다. 코드 함수(632)는 작업(G)에 대한 코드를 포함한다. 제 2 모듈(604)은 코드 함수들(630 및 632)과 각각 관련된 데이터 그룹들(634 및 636)을 포함한다. 데이터 그룹(638)은 제 2 모듈(604)에 또한 포함된다. 데이터 그룹(634)은 데이터 군 (또는 그룹)(F)을 포함한다. 데이터 그룹(636)은 데이터 군(G)을 포함한다. 데이터 그룹(638)은 데이터 군(FG)을 포함한다.
제 3 모듈(606)은 코드 함수들(640 및 642)을 포함한다. 코드 함수(640)는 작업(H)에 대한 코드를 포함한다. 코드 함수(642)는 작업(I)에 대한 코드를 포함한다. 제 3 모듈(606)은 코드 함수들(640 및 642)과 각각 관련된 데이터 그룹들(644 및 646)을 포함한다. 데이터 그룹(648)은 제 3 모듈(606)에 또한 포함된다. 데이터 그룹(644)은 데이터 군(또는 그룹)(H)을 포함한다. 데이터 그룹(646)은 데이터 군(I)을 포함한다. 데이터 그룹(648)은 데이터 군(IE)을 포함한다.
제 4 모듈(608)은 코드 함수들(650 및 652)을 포함한다. 코드 함수(650)는 작업(J)에 대한 코드를 포함한다. 코드 함수(652)는 작업(K)에 대한 코드를 포함한다. 제 4 모듈(608)은 코드 함수들(640 및 642)과 각각 관련된 데이터 그룹들(654 및 656)을 포함한다. 데이터 그룹(654)은 데이터 군(또는 그룹)(J)을 포함한다. 데이터 그룹(656)은 데이터 군(K)을 포함한다.
도 6A의 실시예에서, 제 1 코드 모듈(602)과 관련하여, 코드 함수(610)는 코드 함수(612)(화살표; 613), 코드 함수(614)(화살표; 615), 코드 함수(616)(화살표; 617), 및 코드 함수(618)(화살표; 619)를 직접 레퍼런스한다. 코드 함수(614)는 코드 함수(630)(점선 화살표; 631) 및 코드 함수(632)(점선 화살표; 633)를 간접적으로 레퍼런스한다. 코드 함수(616)는 코드 함수(640)(점선 화살표; 641) 및 코드 함수(642)(점선 화살표; 643)를 간접적으로 레퍼런스한다. 코드 함수(618)는 코드 함수(642)(점선 화살표; 645) 및 데이터 그룹(648)(점선 화살표; 647)을 간접적으로 레퍼런스한다.
제 2 코드 모듈(604)과 관련하여, 코드 함수(630)는 데이터 그룹(638)을 직접 레퍼런스한다(화살표; 637). 코드 함수(632)는 또한 데이터 그룹(638)을 직접 레퍼런스한다(화살표; 639). 제 3 코드 모듈(606)과 관련하여, 코드 함수(640)는 코드 함수(650)를 간접적으로 레퍼런스한다(점선 화살표; 651). 코드 함수(640)는 또한 코드 함수(652)를 간접적으로 레퍼런스한다(점선 화살표; 653). 코드 함수(642)는 데이터 그룹(648)을 직접 레퍼런스한다(화살표; 649). 제 4 코드 모듈(608)과 관련하여, 코드 함수(650)는 직접 코드 함수(652)를 레퍼런스한다(화살표; 655).
함수 호출 트리(600)에서, 8개의 로컬 호출들(직접 레퍼런스들)과 8개의 외부 호출들(간접 레퍼런스들)이 있다. 8개의 외부 호출들은 상당한 양의 원하지 않 는 오버헤드를 생성한다. 그러므로, 간접 레퍼런스들을 최소화하기 위해 호출 트리(600)의 요소들을 재그룹화하는 것이 바람직하다.
도 6B는 SPU의 LS(302)에 로드된 제 1 모듈(662), 제 2 모듈(664), 제 3 모듈(666) 및 제 4 모듈(668)을 갖는 재그룹화된 함수 호출 트리(660)를 도시한다. 도 6B에 도시된 것처럼, 제 1 모듈(662)은 데이터 그룹들(620 및 622)뿐만 아니라, 코드 함수들(610 및 612)을 포함한다. 제 2 모듈(664)은 코드 함수들(614, 630 및 632)을 포함한다. 제 2 모듈(604)은 데이터 그룹들(634, 636 및 638)을 포함한다. 제 3 모듈(666)은 코드 함수들(616, 618 및 642)을 포함한다. 제 3 모듈(666)은 데이터 그룹들(626, 628, 646 및 648)을 포함한다. 제 4 모듈(668)은 데이터 그룹들(644, 654 및 656)뿐만 아니라, 코드 함수들(640, 650 및 652)을 포함한다.
도 6B의 실시예에서, 제 1 코드 모듈(662)과 관련하여, 코드 함수(610)는 코드 함수(612)를 직접 레퍼런스한다(화살표; 613). 그러나, 재그룹화에 기인하여, 제 1 코드 모듈(662)은 코드 함수(614)(점선 화살표; 615'), 코드 함수(616)(점선 화살표; 617') 및 코드 함수(618)(점선 화살표; 619')를 간접적으로 레퍼런스한다.
제 2 코드 모듈(664)과 관련하여, 코드 함수(614)는 코드 함수(630)(화살표; 631') 및 코드 함수(632)(화살표; 633')를 직접 레퍼런스한다. 코드 함수(630)는 데이터 그룹(638)을 직접 레퍼런스하고(화살표; 637), 코드 함수(632)는 데이터 그룹(638)을 직접 레퍼런스 한다(화살표; 639).
제 3 코드 모듈(666)과 관련하여, 코드 함수(616)는 코드 함수(640)를 간접적으로 레퍼런스하지만(점선 화살표; 641), 코드 함수(642)를 직접 레퍼런스한다 (화살표; 643'). 코드 함수(618)는 코드 함수(642)(화살표; 645') 및 데이터 그룹(648)(화살표; 647')을 직접 레퍼런스한다. 코드 함수(642)는 데이터 그룹(648)을 직접 레퍼런스한다(화살표; 649).
제 4 코드 모듈(668)과 관련하여, 코드 함수(640)는 코드 함수(650)를 직접 레퍼런스한다(화살표; 651'). 코드 함수(640)는 코드 함수(652)를 직접 레퍼런스한다(화살표; 653'). 코드 함수(650)는 코드 함수(652)를 직접 레퍼런스한다(화살표; 655).
함수 호출 트리(660)에는 12개의 로컬 호출들(직접 레퍼런스들)과 4개의 외부 호출들(간접 레퍼런스들)이 있다. 간접 레퍼런스들의 개수를 절반으로 감소시킴으로써 원하지 않는 오버헤드의 양이 최소화된다.
LS(302)에 로드될 수 있는 모듈들의 개수는 LS(302)의 크기와 모듈들 자체의 크기에 의해 제한된다. 그러나, 레퍼런스들이 어떻게 어드레스(address)되는 지에 대한 코드 분석은, 필요하기 전에 LS(302)에의 프로그램 모듈들의 로드 또는 언로드를 가능하게 하는 강력한 도구를 제공한다. 코드 분석이 프로그램 모듈이 필요하게 될 프로그램 내의 특정 포인트에서 결정될 수 있다면, 모듈들을 로드하는 대기 시간을 감소시키기 위해 로드가 미리 수행되어질 수 있다. 주어진 모듈이 사용되어질 것이 확실하지 않더라도, 많은 경우들에서, 사용되어질 것이 (75% 이상) 가능성이 있다면 모듈을 미리 로드하는 것이 더욱 효율적이다.
레퍼런스가 실제 사용되어질 가능성에 따라, 레퍼런스들은 정확하게 행해질 수 있거나, 또는 즉시 회답 검사(on-demand checking)가 허용될 수 있다. 이러한 로드 루틴들에 대한 프로그램에서의 삽입 시점은 컴파일러 또는 동등한 도구를 이용하여 통계적으로 판단될 수 있다. 모듈이 생성되기 전에 삽입 시점은 또한 통계적으로 판단되어질 수 있다. 삽입 시점의 타당성은 실행시간 조건들에 근거하여 판단되어질 수 있다. 예를 들어, 로드가 수행되어야 하는지 여부를 판단하는 로드 루틴이 이용되어질 수 있다. 바람직하게는, 실행시간에 로드되는 1 군의 프로그램 모듈들에 대해 로드 및 언로드의 양이 최소화된다. 실행시간 프로파일링 분석은 로드될 각각의 모듈의 위치들을 판단하기 위해 날짜 정보까지 제공할 수 있다. 전형적인 스택(stack) 관리 때문에, 임의의 로드 위치들이 추가적인 호출들을 가지고 있지 않은 모듈들에 대해 선택되어져야 한다. 예를 들어, 통상의 스택 관리 처리에서, 스택 프레임(frame)들이 복귀 포인터(return pointer)들에 의해 구성된다. 함수가 복귀할 때, 호출 모듈을 가지는 모듈은 호출될 때와 동일한 위치에 위치되어야 한다. 모듈이 복귀할 때 같은 위치에 로드되는 한, 모듈이 새로 호출될 때마다 모듈을 다른 위치에 로드하는 것이 가능하다. 그러나, 외부 함수 호출로부터 복귀시킬 때, 관리 루틴은 호출 모듈을 원 위치로 로드한다.
도 7A는 단계 S702에서 시작하는 사전 로드 처리를 도시하는 순서도(700)이다. 단계 S704에서, 삽입 시점이 프로그램 모듈에 대해 판단된다. 위에서 논의된 것처럼, 삽입 시점은, 예를 들어 컴파일러 또는 프로파일링 분석에 의해 판단된다. 실행 분기의 경로가 트리 구조에 의해 나타내어질 수 있다. 레퍼런스가, 예를 들어 0% 내지 100%의 확률의 범위에 근거하여 사용되어지거나 사용되어질 가능성이 있는 지 여부를 판단하는 것이 트리 구조에서의 위치이다. 100%의 확률은 레퍼런스가 명 확히 사용되어질 것이라는 것을 의미하고 0%의 확률은 레퍼런스가 사용되어지지 않을 것이라는 것을 의미한다. 삽입 시점들은 분기 이후에 위치되어야 한다. 그 다음에, 단계 S706에서, 모듈 또는 모듈들은 DMA 전송에 의해 로드된다. 코드 실행에서 지연을 최소화하기 위해 로드가 배경 처리에서 바람직하게 수행된다. 그 다음에, 단계 S708에서 로드가 완료되었는 지 여부가 판단된다. 처리가 완료되지 않는다면, 단계 S710에서 코드 실행이 프로그램 모듈들의 전체 로드를 할 수 있도록 중단될 수 있다. 로드가 완료되면, 처리는 단계 S712에서 종료된다.
도 7B는 도 7A에 따른 프로그램 모듈 사전 로드의 일 실시예를 도시한다. 도면에 도시된 것처럼, 코드 실행(722)은 프로세서, 예를 들어 SPU(300)에 의해 수행된다. 처음에는 제 1 함수(A)가 프로세서에 의해 실행되어 질 수 있다. 위에서 논의된 것처럼, 삽입 시점(724)이 제 2 함수(B)에 대해 판단되어진다면, 함수(B)를 가지는 프로그램 모듈은, 예를 들어 DMA 전송(726)에 의해 로드된다. DMA 전송(726)은 TLOAD로 도시된 것처럼 일정 기간의 시간이 걸린다. 프로세서가, 예를 들어 함수(A)의 프로그램 점프(728)에 기인하여 함수(B)를 수행할 준비가 되어 있다면, 프로그램 모듈(B)의 로드가 단계S708에서 완료되었는 지 여부가 판단된다. 도 7B에 도시된 것처럼, 전송(726)은 점프(728)가 일어난 시간까지 완료되지 않는다. 그러므로, 대기 기간(TWAIT)은 전송(726)이 완료될 때까지 생긴다. 프로세서는, 예를 들어 TWAIT 동안 하나 이상의 "NOPs(no operations)"를 수행한다. TWAIT 가 종료한다면, 프로세서는 포인트(730)에서 함수(B)를 처리하기 시작한다. 그러므로, 대기 시 간(TWAIT)을 고려하면서, 모듈의 사전 로드는 시간(DT)을 절약한다는 것을 볼 수 있다.
본 발명에 따른 프로그램 모듈 최적화의 중요한 이익은 모듈들의 로드 및 언로드의 대기에 소비되는 시간의 최소화이다. 실행시키는 하나의 요소는 모듈 전송들의 지연 및 대역폭이다. 실제 전송 동안 소비되는 시간은 다음 요소들과 직접 관련된다: (a) 레퍼런스가 행해지는 횟수; (b) 전송 설정에 대한 지연; (c) 전송 크기; 및 (d) 전송 대역폭. 또 다른 요소는 이용가능한 메모리 공간의 크기
정적 분석이 코드 구조 처리의 일부분으로서 사용되어질 지라도, 일반적으로 함수들 사이의 관계들을 제공하는 데에 제한되고 호출들이 한 주기의 시간 동안 주어진 함수에 대해 얼마나 많은 호출들이 행해지는 지에 대한 정보를 제공하지 않는다. 바람직하게는, 이러한 통계 데이터에 대한 레퍼런스는 재그룹화의 요소로서 이용된다. 코드에 대한 추가적인 분석이 함수 호출들이 함수 내에서 행해지는 주파수 및 횟수에 대한 일정 레벨의 정보를 제공하는 데에 이용되어질 수 있다. 일 실시형태에서, 최적화는 통계 분석만을 이용하여 얻어질 수 있는 정보에 제한된다.
최적화 알고리즘에 포함될 수 있는 또 다른 요소는 모듈들의 크기와 예상되는 구조이다. 예를 들어, 호출자 모듈이 피호출자 모듈을 로드하기 위해 언로드되어야 한다면, 언로드는 함수 호출을 완료하기 위해 더 많은 지연을 추가한다.
최적화 알고리즘 설계에 있어서, 바람직하게는 하나 이상의 요소들(예를 들어, 가중치 요소들)이 포함되어, 최적화를 정량화하는 데에 이용된다. 하나의 요소 에서, 함수의 레퍼런스들이 바람직하게는 호출들의 주파수, 모듈이 호출되는 횟수, 및 모듈의 크기와 관련하여 가중치가 생긴다. 예를 들어, 모듈이 호출되는 횟수는 모듈의 크기가 곱해질 수 있다. 정적 분석 모드에서, 하위 호출 트리를 호출하는 함수는 호출이 더욱 빈번히 일어난다는 것을 가리키도록 가중치가 더욱 부여된다.
또 다른 요소에서, 호출이 모듈 내에 있는 경우(로컬 레퍼런스), 가중치가 감소되거나 0의 가중치가 주어진다. 또 다른 요소에서, 다른 가중치들이 코드 구조의 분석을 가진 함수로부터 호출하기 위해 설정될 수 있다. 예를 들어, 1회만 행해진 호출은 루프의 일부로서 여러 번 행해진 호출보다 낮게 가중치가 부여되는 것이 바람직하다. 게다가, 루프 반복 횟수가 결정되는 경우, 상기 횟수는 루프 호출에 대한 가중치 요소로서 이용되어질 수 있다. 또 다른 요소에서, 단일 함수에 의해 이용되어진 정적 데이터 레퍼런스는 상기 함수에 첨부되어 고려되어야 한다. 또 다른 요소에서, 정적 데이터가 다른 함수들과 공유된다면, 단일 모듈에서 상기 함수들을 포함하는 것이 바람직하다.
또 다른 요소에서, 전체 프로그램이 충분히 작다면, 프로그램은 단일 모듈 내에 배치되는 것이 바람직하다. 그렇지 않으면, 프로그램은 다중 모듈로 분할되어야 한다. 또 다른 요소에서, 프로그램 모듈이 다중 모듈들로 분할된다면, 호출자와 피호출자 모듈들이 서로 메모리에 맞게 모듈들을 구성하는 것이 바람직하다. 프로그램을 모듈로 분할하는 것과 관련된 전술한 2개의 요소들은 바람직한 최적화 알고리즘을 달성하기 위해 다른 요소들의 관점에서 평가되어야 한다. 위에서 논의된 도면들은 하나 이상의 선택된 요소들에 따른 다양한 재조직화를 도시한다.
도 8은 본 발명에 따른 홀로 또는 네트워크 구성에서 사용되어질 수 있는 다양한 컴퓨팅(computing) 장치들을 도시하는 컴퓨터 네트워크 구성도이다. 컴퓨팅 장치들은, 전형적인 PC들, 랩탑들, 서버들, 게임 콘솔들, PDA들 등과 같은 다양한 유형들의 사용자 입력들, 표시들, 메모리들 및 프로세서들을 이용하는 컴퓨터형 장치들을 포함할 수 있다. 예를 들어, 도 8은 LAN, WAN, 인터넷 등과 같은 통신 네트워크(870)를 경유하여 연결되고, 유선, 무선 또는 이들의 조합으로 될 수 있는 복수의 컴퓨터 처리 시스템들(810, 820, 830, 840, 850 및 860)을 가진 컴퓨터 네트워크(800)를 도시한다.
각각의 컴퓨터 처리 시스템은 키보드(811)와 마우스(812) (및 펜-인풋(pen-input), 조이스틱(joystick), 버튼(button), 터치 스크린(touch screen) 등과 같은 공지된 입력 장치들)와 같은 사용자 입력 장치들, 예를 들어, CRT, LCD, 또는 플라즈마 스크린 모니터(plasma screen monitor), TV, 프로젝터 등을 포함하는 디스플레이(display)에 연결된 표시 인터페이스(display interface)(813)를 가지는 하나 이상의 컴퓨팅 장치들을 포함할 수 있다. 각각의 컴퓨터는 또한 컴퓨터 처리 시스템 내에 위치된 하나 이상의 메모리들 및 하나 이상의 프로세서들과 같은 장치들 내에 발견된 통상의 처리 구성요소들을 포함하는 것이 바람직하다. 이러한 컴퓨팅 장치 내의 메모리들과 프로세서들은 본 발명의 다양한 실시형태들에 따라 프로그램 레퍼런스들을 이용하여 프로그램 모듈들의 처리를 수행하도록 되어 있다. 메모리들은, 본 발명에 따라 코드 함수들 및 데이터 그룹들을 저장하기 위한 로컬 및 외부 메모리들을 포함할 수 있다.
본 발명은 특정 실시형태들과 관련하여 기술되었을 지라도, 이러한 실시형태들은 본 발명의 원리들과 응용예들을 예시한다. 많은 변형예들이 예시적인 실시형태들에 행해지고, 첨부된 청구범위에 의해 정해진 본 발명의 사상과 범위로부터 벗어나지 않고 다른 배열들이 행해질 수 있다.
도 1은 본 발명의 실시형태에 따라 이용될 수 있는 처리 요소의 전형적인 구조를 나타내는 도이다.
도 2는 본 발명의 실시형태와 함께 이용가능한 처리 요소의 멀티처리 시스템의 전형적인 구조를 나타내는 도이다.
도 3은 부처리 유닛의 전형적인 구조를 나타내는 도이다.
도 4a 및 4b는 본 발명의 바람직한 실시형태에 따른 메인 메모리와 로컬 저장 장치 사이의 저장 장치 관리 도 및 관련된 논리 순서도를 나타낸다.
도 5a 및 5b는 본 발명의 바람직한 실시형태에 따른 프로그램 모듈 재그룹화 도를 나타낸다.
도 6a 및 6b는 본 발명의 바람직한 실시형태에 따른 호출 트리 재그룹화 도를 나타낸다.
도 7a 및 7b는 본 발명의 바람직한 실시형태에 따른 프로그램 모듈 사전 로드 논리 및 다이어그램(diagram)을 나타낸다.
도 8은 본 발명의 실시형태에 따른 컴퓨팅 네트워크(computing network)를 나타낸다.

Claims (7)

  1. 프로그램 모듈을 저장하는 것이 가능하며, 캐시가 아닌 로컬 메모리와, 상기 로컬 메모리에 접속되는 프로세서와, 상기 로컬 메모리와 메인 메모리 사이의 DMA 전송을 제어하는 DMA 제어부를 구비하는 처리 시스템에서의 동작 처리 방법으로,
    상기 로컬 메모리에 로드된 제1 프로그램모듈을 실행하는 단계;
    제 2 프로그램 모듈의 삽입 시점을 판단하는 단계;
    상기 제 1 프로그램 모듈의 실행 중에, 하드웨어 캐시 시스템에 의하지 않고 상기 DMA 제어부에 의한 DMA 전송에 의해 상기 로컬 메모리에 상기 제 2 프로그램 모듈을 로드하는 단계;
    상기 제 2 프로그램 모듈의 실행을 개시하기 위하여 예측 실행 시간을 판단하는 단계;
    상기 제 2 프로그램 모듈의 로드가 완료되는지의 여부를 판단하는 단계; 및
    상기 제 1 프로그램 모듈의 실행이 종료된 후에, 상기 제 2 프로그램 모듈을 실행하는 단계;를 포함하며,
    상기 제2 프로그램 모듈의 삽입 시점은 상기 제1 프로그램 모듈의 분기 연산 뒤에 위치하는 것을 특징으로 하는 방법.
  2. 제 1항에 있어서,
    로드가 완료되지 않는 경우, 상기 제 2 프로그램 모듈의 실행을 지연시키는 단계;를 더 포함하는 것을 특징으로 하는 방법.
  3. 제 2항에 있어서,
    상기 실행을 지연시키는 단계는 로드가 완료될 때까지 하나 이상의 NOP들을 수행하는 단계를 포함하는 것을 특징으로 하는 방법.
  4. 제 1항 내지 제 3항 중 어느 한 항에 있어서,
    상기 삽입 시점은 통계적으로 판단되는 것을 특징으로 하는 방법.
  5. 제 1항 내지 제 3항 중 어느 한 항에 있어서,
    상기 삽입 시점의 유효성은 실행 상태에 기반을 두고 판단되는 것을 특징으로 하는 방법.
  6. 프로그램 모듈을 저장하는 것이 가능하며, 캐시가 아닌 로컬 메모리와, 상기 로컬 메모리에 접속된 프로세서와, 상기 로컬 메모리와 메인 메모리 사이의 DMA 전송을 제어하는 DMA 제어부를 포함하는 처리 시스템으로서,
    상기 프로세서는,
    제 1 프로그램 모듈의 삽입 시점을 판단하는 기능, 상기 프로세서에 의한 제 2 프로그램 모듈의 실행 중에 상기 제 1 프로그램 모듈을, 하드웨어 캐시 시스템에 의하지 않고 상기 DMA 제어부에 의한 DMA 전송에 의해 상기 로컬 메모리에 로드하 는 기능 및 상기 제 2 프로그램 모듈의 실행이 종료되고 로드가 완료된 후에 상기 제 1 프로그램 모듈을 실행하는 기능을 포함하는 관리 기능을 수행할 논리를 포함하며,
    상기 제1 프로그램 모듈의 삽입 시점은 상기 제2 프로그램 모듈의 분기 연산 뒤에 위치하는 것을 특징으로 하는 처리 시스템.
  7. 프로세서에 의한 이용을 위해 프로그램을 저장하는 저장 매체로서,
    상기 프로그램은 상기 프로세서가:
    상기 프로세서와 관련된 로컬 메모리에 로드된 제 1 프로그램 모듈을 실행하고,
    제 2 프로그램 모듈의 삽입 시점을 판단하고,
    상기 제 1 프로그램 모듈의 실행 중에, 하드웨어 캐시 시스템에 의하지 않고 DMA 제어부에 의한 DMA 전송에 의해 상기 로컬 메모리에 상기 제 2 프로그램 모듈을 로드하고,
    상기 제 2 프로그램 모듈의 실행을 개시하기 위하여 예측 실행 시간을 판단하고,
    상기 제 2 프로그램 모듈의 로드가 완료되는지의 여부를 판단하며,
    상기 제 1 프로그램 모듈의 실행이 종료된 후에 상기 제 2 프로그램 모듈을 실행하도록 하며,
    상기 제2 프로그램 모듈의 삽입 시점은 상기 제1 프로그램 모듈의 분기 연산 뒤에 위치하는 것을 특징으로 하는 저장 매체.
KR1020087026005A 2004-10-01 2005-09-29 처리 유닛의 동적 로드 및 언로드 KR20080104073A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/957,158 US20060075394A1 (en) 2004-10-01 2004-10-01 Dynamic loading and unloading for processing unit
US10/957,158 2004-10-01

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020067018235A Division KR20070032294A (ko) 2004-10-01 2005-09-29 처리 유닛의 동적 로드 및 언로드

Publications (1)

Publication Number Publication Date
KR20080104073A true KR20080104073A (ko) 2008-11-28

Family

ID=35517186

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087026005A KR20080104073A (ko) 2004-10-01 2005-09-29 처리 유닛의 동적 로드 및 언로드

Country Status (6)

Country Link
US (2) US20060075394A1 (ko)
EP (1) EP1794674A1 (ko)
JP (1) JP2006107497A (ko)
KR (1) KR20080104073A (ko)
CN (1) CN1914597A (ko)
WO (1) WO2006038664A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170125471A (ko) * 2016-05-04 2017-11-15 에스케이하이닉스 주식회사 데이터 처리 시스템 및 데이터 처리 시스템의 동작 방법

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006080897A1 (en) * 2005-01-26 2006-08-03 Infineon Technologies Ag Improvements in and relating to memory updating
US20080005473A1 (en) * 2006-06-30 2008-01-03 Tong Chen Compiler assisted re-configurable software implemented cache
KR100866627B1 (ko) * 2007-01-29 2008-11-03 삼성전자주식회사 컨트롤 플로우를 이용한 페이지 프리로드 방법 및 그시스템
CN101193452B (zh) * 2007-03-15 2011-03-16 中兴通讯股份有限公司 自动交换光网络中控制模块注册的方法及其应用方法
JP4339371B2 (ja) * 2007-03-22 2009-10-07 株式会社ソニー・コンピュータエンタテインメント 情報処理装置および情報処理方法
GB2456019A (en) * 2007-12-31 2009-07-01 Symbian Software Ltd Loading dynamic link libraries in response to an event
JP5187944B2 (ja) * 2008-03-05 2013-04-24 インターナショナル・ビジネス・マシーンズ・コーポレーション コンピュータ使用可能コードを実行する装置及び方法
US8312254B2 (en) * 2008-03-24 2012-11-13 Nvidia Corporation Indirect function call instructions in a synchronous parallel thread processor
KR101670916B1 (ko) * 2009-03-03 2016-10-31 삼성전자 주식회사 실행 파일 생성 방법 및 그 방법을 이용하는 시스템 장치
KR101633484B1 (ko) * 2009-12-11 2016-06-27 삼성전자주식회사 선택적 부팅 방법 및 이를 이용한 방송 수신 장치
US9710355B2 (en) * 2010-01-14 2017-07-18 Microsoft Technology Licensing, Llc Selective loading of code elements for code analysis
US8640115B2 (en) * 2010-04-30 2014-01-28 Oracle International Corporation Access control in modules for software development
KR102087395B1 (ko) * 2013-01-16 2020-03-10 삼성전자주식회사 전자 장치에서 응용프로그램을 실행하기 위한 장치 및 방법
US10360005B2 (en) * 2016-10-24 2019-07-23 International Business Machines Corporation Local function call tailoring for function pointer calls
US10268465B2 (en) * 2016-10-24 2019-04-23 International Business Machines Corporation Executing local function call site optimization
US10534593B2 (en) * 2016-10-24 2020-01-14 International Business Machines Corporation Optimized entry points and local function call tailoring for function pointers
US10725838B2 (en) * 2017-03-29 2020-07-28 Microsoft Technology Licensing, Llc Application startup control
US10776133B2 (en) * 2018-01-25 2020-09-15 Salesforce.Com, Inc. Preemptive loading of code dependencies for improved performance
CN113821272B (zh) * 2021-09-23 2023-09-12 武汉深之度科技有限公司 一种应用程序运行方法、计算设备及存储介质

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5123098A (en) * 1989-02-28 1992-06-16 Hewlett-Packard Company Method for executing programs within expanded memory of a computer system using MS or PC DOS
US5317718A (en) * 1990-03-27 1994-05-31 Digital Equipment Corporation Data processing system and method with prefetch buffers
IL100990A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher
EP0535265B1 (de) * 1991-09-30 1998-03-18 Siemens Aktiengesellschaft Verfahren zur Erstellung einer ablauffähigen Konfiguration eines in einen Systemspeicherbereich eines Prozessorsystems ladbaren Systemprogramms
US5625822A (en) * 1992-06-26 1997-04-29 Digital Equipment Corporation Using sorting to do matchup in smart recompilation
US5566324A (en) * 1992-12-24 1996-10-15 Ncr Corporation Computer apparatus including a main memory prefetch cache and method of operation thereof
US5452457A (en) * 1993-01-29 1995-09-19 International Business Machines Corporation Program construct and methods/systems for optimizing assembled code for execution
US5475840A (en) * 1993-04-13 1995-12-12 Sun Microsystems, Inc. High performance dynamic linking through caching
US5751982A (en) * 1995-03-31 1998-05-12 Apple Computer, Inc. Software emulation system with dynamic translation of emulated instructions for increased processing speed
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
JPH10116229A (ja) * 1996-10-09 1998-05-06 Toshiba Corp データ処理装置
US5901291A (en) * 1996-10-21 1999-05-04 International Business Machines Corporation Method and apparatus for maintaining message order in multi-user FIFO stacks
US6080204A (en) * 1997-10-27 2000-06-27 Altera Corporation Method and apparatus for contemporaneously compiling an electronic circuit design by contemporaneously bipartitioning the electronic circuit design using parallel processing
JP3638770B2 (ja) * 1997-12-05 2005-04-13 東京エレクトロンデバイス株式会社 テスト機能を備える記憶装置
US6175957B1 (en) * 1997-12-09 2001-01-16 International Business Machines Corporation Method of, system for, and computer program product for providing efficient utilization of memory hierarchy through code restructuring
US7143421B2 (en) * 1998-09-09 2006-11-28 Microsoft Corporation Highly componentized system architecture with a demand-loading namespace and programming model
US6330623B1 (en) * 1999-01-08 2001-12-11 Vlsi Technology, Inc. System and method for maximizing DMA transfers of arbitrarily aligned data
US6718543B2 (en) * 1999-11-08 2004-04-06 Hewlett-Packard Development Company, L.P. Method and apparatus for optimization of the performance of an application program in a computer system while preserving the system behavior
DE10035270A1 (de) * 2000-07-20 2002-01-31 Siemens Ag Verfahren zur Auswahl, Bearbeitung und Anzeige von Daten oder Datenobjekten
JP2002063042A (ja) * 2000-08-21 2002-02-28 Nec Microsystems Ltd プログラム・モジュール管理システム、その管理方法及びその管理プログラムを記録した記録媒体
US20020069263A1 (en) * 2000-10-13 2002-06-06 Mark Sears Wireless java technology
US6457023B1 (en) * 2000-12-28 2002-09-24 International Business Machines Corporation Estimation of object lifetime using static analysis
WO2003034229A1 (en) * 2001-10-19 2003-04-24 Telefonaktiebolaget Lm Ericsson Data prefecthing in a computer system
US7580972B2 (en) * 2001-12-12 2009-08-25 Valve Corporation Method and system for controlling bandwidth on client and server

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170125471A (ko) * 2016-05-04 2017-11-15 에스케이하이닉스 주식회사 데이터 처리 시스템 및 데이터 처리 시스템의 동작 방법

Also Published As

Publication number Publication date
JP2006107497A (ja) 2006-04-20
CN1914597A (zh) 2007-02-14
US20080313624A1 (en) 2008-12-18
WO2006038664A1 (en) 2006-04-13
EP1794674A1 (en) 2007-06-13
US20060075394A1 (en) 2006-04-06

Similar Documents

Publication Publication Date Title
KR20080104073A (ko) 처리 유닛의 동적 로드 및 언로드
Vijaykumar et al. A case for core-assisted bottleneck acceleration in GPUs: enabling flexible data compression with assist warps
US8091078B2 (en) Dynamically partitioning processing across a plurality of heterogeneous processors
US8327109B2 (en) GPU support for garbage collection
JP4987882B2 (ja) スレッドに最適化されたマルチプロセッサアーキテクチャ
US8639730B2 (en) GPU assisted garbage collection
US20050081182A1 (en) System and method for balancing computational load across a plurality of processors
US11360809B2 (en) Multithreaded processor core with hardware-assisted task scheduling
US7680972B2 (en) Micro interrupt handler
US8595747B2 (en) Efficient task scheduling by assigning fixed registers to scheduler
CN114610394B (zh) 指令调度的方法、处理电路和电子设备
CN114035847B (zh) 用于并行执行核心程序的方法和装置
CN114218152B (zh) 流处理方法、处理电路和电子设备
Vijaykumar et al. A Framework for Accelerating Bottlenecks in GPU Execution with Assist Warps
Kawano et al. Fine-grain multi-thread processor architecture for massively parallel processing
KR20070032294A (ko) 처리 유닛의 동적 로드 및 언로드
US7500088B2 (en) Methods and apparatus for updating of a branch history table
Raju et al. Performance enhancement of CUDA applications by overlapping data transfer and Kernel execution
Amamiya et al. Datarol: a parallel machine architecture for fine-grain multithreading
Jog et al. A Case for Core-Assisted Bottleneck Acceleration in GPUs: Enabling Flexible Data Compression with Assist Warps
Nguyen et al. Input/output processing using on-chip memory for Cyber Physical System
Jog et al. A Framework for Accelerating Bottlenecks in GPU Execution with Assist Warps
JP2002268897A (ja) スレッド管理方法及び情報処理装置
Rin-ichiro et al. Fine-grain Multi-thread Processor Architecture for Massively Parallel Processing

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application