KR101581796B1 - 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 - Google Patents
컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 Download PDFInfo
- Publication number
- KR101581796B1 KR101581796B1 KR1020147036803A KR20147036803A KR101581796B1 KR 101581796 B1 KR101581796 B1 KR 101581796B1 KR 1020147036803 A KR1020147036803 A KR 1020147036803A KR 20147036803 A KR20147036803 A KR 20147036803A KR 101581796 B1 KR101581796 B1 KR 101581796B1
- Authority
- KR
- South Korea
- Prior art keywords
- cpu
- gpu
- shared
- virtual
- platform
- Prior art date
Links
- 230000006870 function Effects 0.000 title claims abstract description 138
- 230000015654 memory Effects 0.000 title claims abstract description 74
- 238000000034 method Methods 0.000 claims description 40
- 230000001427 coherent effect Effects 0.000 claims description 15
- 230000007175 bidirectional communication Effects 0.000 claims description 12
- 230000003068 static effect Effects 0.000 claims description 2
- 238000004026 adhesive bonding Methods 0.000 description 14
- 239000008186 active pharmaceutical agent Substances 0.000 description 11
- 230000006854 communication Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 239000003292 glue Substances 0.000 description 5
- 238000000638 solvent extraction Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000002245 particle Substances 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1072—Decentralised address translation, e.g. in distributed shared memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
- G06F9/548—Object oriented; Remote method invocation [RMI]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Multi Processors (AREA)
- Stored Programmes (AREA)
Abstract
컴퓨팅 플랫폼은 이종 프로세서들(예를 들어, CPU 및 GPU)을 포함해서 이러한 프로세서들 간의 가상 함수들의 공유를 지원할 수 있다. 일 실시예에서, CPU(110)로부터 공유 객체에 액세스하는데 사용된 CPU 측 vtable 포인터는 GPU-측 테이블이 존재하는 경우 GPU vtable을 결정하는데 사용될 수 있다. 다른 실시예에서, 데이터 일관성(data consistency)을 유지하지 않을 수 있는 공유 비간섭성 영역은 공유 가상 메모리 내에서 생성될 수 있다. 공유 비간섭성 영역 내에 저장된 CPU 및 GPU 측 데이터는 CPU 및 GPU 측으로부터 알 수 있는 바와 동일한 어드레스를 가질 수 있다. 그러나, 공유 가상 메모리가 실행 시간 중에 간섭성(coherency)을 유지하지 않을 수 있기에, CPU-측 데이터의 콘텐츠는 GPU-측 데이터의 콘텐츠와 상이할 수 있다. 일 실시예에서, vptr은 공유 가상 메모리에 저장된 CPU vtable 및 GPU vtable을 포인팅하도록 변경될 수 있다.
Description
컴퓨팅 플랫폼들은 중앙 처리 장치(CPU) 및 그래픽 프로세싱 유닛(GPU) 등의 이종 프로세서들, 대칭 및 비대칭 프로세서들을 포함할 수 있다. 클래스 인스턴스들(또는 객체들)은 CPU-GPU 플랫폼의 제1 측(예를 들어, CPU)과 연관된 제1 메모리에 상주할 수 있다. 제2 측(GPU 측)은 CPU-GPU 플랫폼의 제1 측(CPU)과 연관된 제1 메모리에 상주하는 객체들 및 연관된 멤버 함수들을 호출할 수 없을 수 있다. 또한, 제1 측은 제2 측(GPU 측)의 제2 메모리에 상주하는 객체들 및 연관된 멤버 함수들을 호출할 수 없을 수 있다. 클래스 인스턴스들 또는 객체들은 상이한 어드레스 공간들에 저장되기에, 기존 통신 메커니즘들은 클래스 인스턴스 및 연관된 가상 함수들을 호출하기 위해 이종 프로세서들(CPU 및 GPU) 간의 단방향 통신을 단지 허용할 수 있다.
단방향 통신 기법은 이종 프로세서들 간의 클래스 인스턴스들의 자연스러운 기능 분할(a natural functionality partitioning)을 방지한다. 객체는 처리량 지향 멤버 함수들 및 일부 스칼라 멤버 함수들을 포함할 수 있다. 예를 들어, 게임 애플리케이션의 신 클래스(a scene class)는 GPU에 적합할 수 있는 렌더링 함수들을 가질 수 있으며, CPU에서의 실행에 적합할 수 있는 물리학 및 인공 지능(AI) 함수들을 또한 포함할 수 있다. 현재의 단방향 통신 메커니즘에서는, 통상, 각각, CPU(상기 일례에서의 물리학 및 AI) 멤버 함수들 및 GPU(GPU 적합 렌더링 함수들) 멤버 함수들을 포함하는 2개의 상이한 신 클래스들이 있어야 한다. 2개의 상이한 신 클래스들 - 하나는 CPU에 대한 것이고 다른 하나는 GPU에 대한 것임 - 을 갖는 것은, 데이터가 2개의 신 클래스들 간에 서로 왔다 갔다 복사될 것을 요구할 수 있다.
본 명세서에 기술된 본 발명은 첨부 도면들에서 제한이 아니라 일례로서 도시된 것이다. 설명의 단순성 및 명료성을 위해, 도면들에 도시된 요소들은 반드시 일정한 비율로 그려진 것은 아니다. 예를 들어, 일부 요소들의 크기들은 명료성을 위해 다른 요소들에 비해 과장될 수 있다. 또한, 적절하다고 생각되는 경우, 대응하거나 또는 유사한 요소들을 나타내기 위해 참조 부호들은 도면들에서 반복되었다.
도 1은 일 실시예에 따라 컴퓨터 플랫폼에 제공된 이종 프로세서들 간의 공유 가상 메모리에 저장된 가상 함수들의 공유를 지원하는 플랫폼(100)을 도시한다.
도 2는 일 실시예에 따라 컴퓨터 플랫폼에서 제공된 이종 프로세서들 간의 공유 가상 메모리에 저장된 가상 함수들의 공유를 지원하는 플랫폼(100)에 의해 실행되는 동작을 도시하는 흐름도이다.
도 3은 일 실시예에 따라 공유 객체로부터 가상 함수 포인터를 로딩하기 위한 CPU 측 및 GPU 측 코드를 도시한다.
도 4는 제1 실시예에 따라 컴퓨터 플랫폼에서 제공된 이종 프로세서들 간의 공유 가상 메모리에 저장된 가상 함수들의 공유를 지원하기 위해 테이블을 생성하도록 플랫폼(100)에 의해 실행되는 동작을 도시하는 흐름도이다.
도 5는 일 실시예에 따라 이종 프로세서들에 의해 공유될 수 있는 객체의 멤버 함수들을 통해 CPU(110) 및 GPU(180) 간의 양방향 통신을 지원하기 위해 플랫폼(100)에 의해 사용되는 흐름도를 도시한다.
도 6은 제1 실시예에 따라 현 상황에서는 CPU 측에 의해 이루어진 GPU 가상 함수 및 GPU 함수 호출의 프로세싱을 묘사하는 흐름도를 도시한다.
도 7은 일 실시예에 따라 가상 공유 비간섭성 영역을 사용해서 이종 프로세서들 간의 가상 함수 공유를 지원하기 위해 플랫폼(100)에 의해 실행되는 동작을 도시하는 흐름도이다.
도 8은 일 실시예에 따라 이종 프로세서들 간의 가상 함수 공유를 지원하기 위한 가상 공유 비간섭성 영역의 사용을 도시하는 관계 도면이다.
도 9는 일 실시예에 따라 컴퓨터 플랫폼에서 제공된 이종 프로세서들 간의 공유 가상 메모리에 저장된 가상 함수들의 공유의 지원을 제공할 수 있는 컴퓨터 시스템을 도시한다.
도 1은 일 실시예에 따라 컴퓨터 플랫폼에 제공된 이종 프로세서들 간의 공유 가상 메모리에 저장된 가상 함수들의 공유를 지원하는 플랫폼(100)을 도시한다.
도 2는 일 실시예에 따라 컴퓨터 플랫폼에서 제공된 이종 프로세서들 간의 공유 가상 메모리에 저장된 가상 함수들의 공유를 지원하는 플랫폼(100)에 의해 실행되는 동작을 도시하는 흐름도이다.
도 3은 일 실시예에 따라 공유 객체로부터 가상 함수 포인터를 로딩하기 위한 CPU 측 및 GPU 측 코드를 도시한다.
도 4는 제1 실시예에 따라 컴퓨터 플랫폼에서 제공된 이종 프로세서들 간의 공유 가상 메모리에 저장된 가상 함수들의 공유를 지원하기 위해 테이블을 생성하도록 플랫폼(100)에 의해 실행되는 동작을 도시하는 흐름도이다.
도 5는 일 실시예에 따라 이종 프로세서들에 의해 공유될 수 있는 객체의 멤버 함수들을 통해 CPU(110) 및 GPU(180) 간의 양방향 통신을 지원하기 위해 플랫폼(100)에 의해 사용되는 흐름도를 도시한다.
도 6은 제1 실시예에 따라 현 상황에서는 CPU 측에 의해 이루어진 GPU 가상 함수 및 GPU 함수 호출의 프로세싱을 묘사하는 흐름도를 도시한다.
도 7은 일 실시예에 따라 가상 공유 비간섭성 영역을 사용해서 이종 프로세서들 간의 가상 함수 공유를 지원하기 위해 플랫폼(100)에 의해 실행되는 동작을 도시하는 흐름도이다.
도 8은 일 실시예에 따라 이종 프로세서들 간의 가상 함수 공유를 지원하기 위한 가상 공유 비간섭성 영역의 사용을 도시하는 관계 도면이다.
도 9는 일 실시예에 따라 컴퓨터 플랫폼에서 제공된 이종 프로세서들 간의 공유 가상 메모리에 저장된 가상 함수들의 공유의 지원을 제공할 수 있는 컴퓨터 시스템을 도시한다.
이하의 설명은, 컴퓨팅 플랫폼의 이종 프로세서들 간에, 공유 가상 메모리에 저장된, 가상 함수들을 공유하기 위한 기술들을 설명한다. 이하의 설명에서, 논리 구현들, 리소스 분할, 또는 공유, 또는 복제 구현들, 시스템 컴포넌트들의 타입들 및 상호 관계들, 및 논리 분할 또는 통합 선택 사항들 등의 다수의 특정 세부 사항들이 본 발명의 더 철저한 이해를 제공하기 위해 기술된다. 그러나, 이러한 특정 세부 사항들 없이 본 발명이 실시될 수 있음을 당업자는 알 것이다. 다른 실례들에서, 제어 구조들, 게이트 레벨 회로들, 및 풀 소프트웨어 명령 시퀀스들은 본 발명을 모호하게 하지 않기 위해 상세히 도시되지 않았다. 포함된 설명으로, 당업자는 과도한 실험 없이 적합한 기능을 구현할 수 있을 것이다.
본 명세서에서 "one embodiment(일 실시예)", "an embodiment(일 실시예)", "an example embodiment(일례의 실시예)"에 대한 언급은, 기술된 실시예가 특정 특징, 구조, 또는 특성을 포함할 수 있음을 나타내지만, 모든 실시예가 특정 특징, 구조, 또는 특성을 반드시 포함할 필요는 없다. 더욱이, 이러한 구절들은 동일한 실시예를 반드시 나타내지는 않는다. 또한, 특정 특징, 구조, 또는 특성이 일 실시예와 관련해서 설명될 때, 명백하게 설명되든 아니든 간에 다른 실시예들과 관련해서 이러한 특징, 구조, 또는 특성에 영향을 준다는 것을 당업자가 알고 있다고 제기된다.
본 발명의 실시예들은 하드웨어, 펌웨어, 소프트웨어, 또는 그 임의의 조합으로 구현될 수 있다. 본 발명의 실시예들은, 또한, 하나의 또는 그 이상의 프로세서들에 의해 판독 및 실행될 수 있는, 머신 판독 가능 매체에 저장된 명령들로서 구현될 수도 있다. 머신 판독 가능 기억 매체는 머신(예를 들어, 컴퓨팅 디바이스)에 의해 판독 가능한 형태로 정보를 저장 또는 송신하기 위한 임의의 메커니즘을 포함할 수 있다.
예를 들어, 머신 판독 가능 기억 매체는 판독 전용 메모리(ROM); 랜덤 액세스 메모리(RAM); 자기 디스크 기억 매체; 광 기억 매체; 플래시 메모리 디바이스들; 전기, 광 형태들의 신호들을 포함할 수 있다. 또한, 펌웨어, 소프트웨어, 루틴들, 및 명령들은 특정 동작들을 실행하는 것으로 본 명세서에 기술될 수 있다. 그러나, 이러한 설명은 단지 편리성을 위한 것이며, 이러한 동작들은 사실 컴퓨팅 디바이스들, 프로세서들, 제어기들, 및 펌웨어, 소프트웨어, 루틴들, 및 명령들을 실행하는 다른 디바이스들로부터 야기됨을 알아야만 한다.
일 실시예에서, 컴퓨팅 플랫폼은 공유 객체의 미립자 분할(fine grain partitioning)에 의해 공유 객체의 가상 함수들 등의 멤버 함수들을 통해 이종 프로세서들(예를 들어, CPU 및 GPU) 간의 양방향 통신들(함수 호출들)을 가능케 하기 위한 하나의 또는 그 이상의 기술들을 지원할 수 있다. 일 실시예에서, 컴퓨팅 플랫폼은 '테이블-기반' 기술이라고 하는 제1 기술을 사용해서 CPU 및 GPU 간의 양방향 통신을 가능케 할 수 있다. 다른 실시예에서, 컴퓨팅 플랫폼은 가상 공유 비간섭성 영역이 가상 공유 메모리에서 생성될 수 있는 '비간섭성 영역(non-coherent region)' 기술이라고 하는 제2 기술을 사용해서 CPU 및 GPU 간의 양방향 통신을 가능케 할 수 있다.
일 실시예에서, 테이블-기반 기술을 사용하면서, CPU 또는 GPU 측으로부터 공유 객체에 액세스하는데 사용될 수 있는, 공유 객체의 CPU 측 vtable 포인터는, GPU-측 테이블이 존재하는 경우 GPU vtable을 결정하는데 사용될 수 있다. 일 실시예에서, GPU-측 vtable은 <"className", CPU vtable addr, GPU vtable addr>을 포함할 수 있다. 일 실시예에서, GPU-측 vtable 어드레스를 획득하고 GPU-측 테이블을 생성하기 위한 기술이 더 상세히 후술된다.
다른 실시예에서, '비간섭성 영역' 기술을 사용하면서, 공유 비간섭성 영역이 공유 가상 메모리 내에서 생성된다. 일 실시예에서, 공유 비간섭성 영역은 데이터 일관성(data consistency)을 유지하지 않을 수 있다. 일 실시예에서, 공유 비간섭성 영역 내의 CPU-측 데이터 및 GPU-측 데이터는 CPU-측 및 GPU-측으로부터 알 수 있는 바와 같이 동일한 어드레스를 가질 수 있다. 그러나, 공유 가상 메모리가 실행 시간 중에 간섭성(coherency)을 유지하지 않을 수 있기 때문에, CPU-측 데이터의 콘텐츠는 GPU-측 데이터의 콘텐츠와 상이할 수 있다. 일 실시예에서, 공유 비간섭성 영역은 각각의 공유 클래스에 대한 가상 메소드 테이블의 새로운 복사본을 저장하는데 사용될 수 있다. 일 실시예에서, 이러한 기법은 동일한 어드레스에서 가상 테이블을 유지할 수 있다.
CPU 및 GPU 등의 이종 프로세서들 간에 공유될 수 있는 가상 공유 메모리의 가상 함수들을 제공하는 컴퓨팅 플랫폼(100)의 일 실시예가 도 1에 도시되어 있다. 일 실시예에서, 플랫폼(100)은 중앙 처리 장치(CPU)(110), CPU(110)와 연관된 운영 체제(OS)(112), CPU 전용 공간(115), CPU 컴파일러(118), 공유 가상 메모리(또는 멀티-버전 공유 메모리)(130), 그래픽 프로세싱 유닛(GPU)(180), GPU(180)와 연관된 운영 체제(OS)(182), GPU 전용 공간(185), 및 GPU 컴파일러(188)를 포함할 수 있다. 일 실시예에서, OS(112) 및 OS(182)는, 각각, CPU(110) 및 CPU 전용 공간(115), 및 GPU(180) 및 GPU 전용 공간(185)의 리소스들을 관리할 수 있다. 일 실시예에서, 공유 가상 메모리(130)를 지원하기 위해, CPU 전용 공간(115) 및 GPU 전용 공간(185)은 멀티-버전 데이터의 복사본들을 포함할 수 있다. 일 실시예에서, 메모리 일관성을 유지하기 위해, 객체(131) 등의 메타-데이터는 CPU 전용 공간(115) 및 GPU 전용 공간(185)에 저장된 복사본들을 동기화하는데 사용될 수 있다. 다른 실시예에서, 멀티-버전 데이터는 공유 메모리(950)(도 9, 후술됨) 등의 물리적 공유 메모리에 저장될 수 있다. 일 실시예에서, 공유 가상 메모리는 이종 프로세서들 CPU(110) 및 GPU(180)의 CPU 전용 공간(115) 및 GPU 전용 공간(185) 등의 물리적 전용 메모리 공간 또는 이종 프로세서들에 의해 공유되는 공유 메모리(950) 등의 물리적 공유 메모리에 의해 지원될 수 있다.
일 실시예에서, CPU 컴파일러(118) 및 GPU 컴파일러(188)는, 각각, CPU(110) 및 GPU(180)에 연결될 수 있거나, 또는 다른 플랫폼들 또는 컴퓨터 시스템들에서 원격으로도 제공될 수 있다. CPU(110)와 연관된 컴파일러(들)(118)는 CPU(110)에 대해 컴파일링된 코드를 생성할 수 있으며, GPU(180)와 연관된 컴파일러(들)(188)는 GPU(180)에 대해 컴파일링된 코드를 생성할 수 있다. 일 실시예에서, CPU 컴파일러(118) 및 GPU 컴파일러(188)는 객체 지향 언어 등의 고수준 언어로 사용자에 의해 제공된 객체들의 하나의 또는 그 이상의 멤버 함수들을 컴파일링해서 컴파일링된 코드를 생성할 수 있다. 일 실시예에서, 컴파일러(118 및 188)는 객체를 공유 메모리(130)에 저장되게 야기할 수 있으며, 공유 객체(131)는 CPU 측(110) 또는 GPU 측(180)에 할당된 멤버 함수들을 포함할 수 있다. 일 실시예에서, 공유 메모리(130)에 저장된 공유 객체(131)는 가상 함수들 VF 133-A 내지 133-K 및 비가상 함수들 NVF 136-A 내지 136-L 등의 멤버 함수들을 포함할 수 있다. 일 실시예에서, CPU(110) 및 GPU(180) 간의 양방향 통신이 공유 객체(131)의 VF 133 및 NVF 136 등의 멤버 함수들에 의해 제공될 수 있다.
일 실시예에서, 동적 결합(dynamic binding) 목적을 달성하기 위해, VF 133-A(예를 들어, C++ 가상 함수) 등의 가상 함수는 가상 함수 테이블(vtable)의 인덱싱을 통해 CPU(110) 및 GPU(180) 중 하나에 의해 호출될 수 있다. 일 실시예에서, 가상 함수 테이블은 공유 객체(131)의 숨겨진 포인터에 의해 포인팅될 수 있다. 그러나, CPU(110) 및 GPU(180)는 상이한 명령 집합 아키텍처(ISA)를 가질 수 있으며, 한 함수가 상이한 ISA들을 가진 CPU(110) 및 GPU(180)에 대해 컴파일링되는 동안, 컴파일러들(118 및 188)에 의해 컴파일링된 동일한 함수를 나타내는 코드는 상이한 크기들일 수 있다. 동일한 방식으로 GPU 측 및 CPU 측(즉, 공유 클래스의 가상 함수의 CPU 버전 및 공유 클래스의 동일한 가상 함수의 GPU 버전)에서 코드를 레이아웃하는데 도전적일 수 있다. 공유 클래스 Foo()에 3개의 가상 함수들이 있으면, 코드의 CPU 버전에서 함수들은 어드레스 A1, A2, 및 A3에 위치할 수 있다. 그러나, 코드의 GPU 버전에서 함수들은, 어드레스 A1, A2, 및 A3와 상이할 수 있는, 어드레스들 B1, B2, 및 B3에 위치할 수 있다. 공유 클래스의 동일한 함수에 대한 CPU 측 및 GPU 측 코드를 위한 이러한 상이한 어드레스 로케이션들은, 공유 객체(즉, 공유 클래스의 인스턴스)가 2개의 vtable들(제1 vtable 및 제2 vtable)을 요구할 수 있음을 암시할 수 있다. 제1 vtable은 함수들의 CPU 측 버전들의 어드레스들(A1, A2, 및 A3)을 포함할 수 있으며, 객체가 CPU 측에서 사용될 수 있는 동안(또는 CPU 측 함수들을 호출하기 위해) 제1 vtable이 사용될 수 있다. 제2 vtable은 함수들의 GPU 버전들의 어드레스들(B1, B2, 및 B3)을 포함할 수 있으며, 객체가 GPU 측에서 사용될 수 있는 동안(또는 GPU 측 함수들을 호출하기 위해) 제2 vtable이 사용될 수 있다.
일 실시예에서, CPU(110) 및 GPU(180) 간의 공유 가상 메모리에 저장된 가상 함수들의 공유는 제1 vtable 및 제2 vtable을 공유 객체(131)와 연관시킴으로써 가능해질 수 있다. 일 실시예에서, CPU 측 및 GPU 측 둘 다에서 가상 함수 호출에 사용될 수 있는 공통 vtable이 공유 객체(131)의 제1 vtable 및 제2 vtable을 연관시킴으로써 생성될 수 있다.
공유 가상 메모리에 저장된 가상 함수를 공유하는 이종 프로세서들 CPU(110) 및 GPU(180)의 일 실시예가 도 2의 흐름도에 도시되어 있다. 블록(210)에서, CPU(110) 등의 제1 프로세서는 공유 객체(131)의 제1 프로세서 측 vtable 포인터(CPU 측 vtable 포인터)를 식별할 수 있다. 일 실시예에서, 공유 객체(131)가 CPU 측에 의해 액세스될 수 있든 또는 GPU 측에 의해 액세스될 수 있든 간에 무관하게, CPU 측 vtable 포인터는 공유 객체(131)에 대해 존재할 수 있다.
일 실시예에서, CPU 전용 환경과 같은 컴퓨팅 시스템에서의 정상 가상 함수 호출의 경우, 코드 시퀀스는 도 3의 블록(310)에 도시된 바와 같을 수 있다. 일 실시예에서, 이종 프로세서들을 포함할 수 있는, 컴퓨팅 시스템(예를 들어, 100)에서 조차도, 정상 가상 함수 호출에 대한 CPU 측 코드 시퀀스는 도 3의 블록(310)에 도시된 바와 동일할 수 있다. 블록(310)에 도시된 바와 같이, 라인(301)의 코드: Mov r1, [obj]는 변수 r1에 공유 객체(131)의 vtable을 로딩할 수 있다. 라인(305)의 코드: (Call*[r1 + OffsetFunction])은 공유 객체(131)의 VF 133-A 등의 가상 함수를 호출할 수 있다.
블록(250)에서, GPU(180) 등의 제2 프로세서는, 제2 프로세서 측 테이블(GPU 테이블)이 존재하면, 제2 프로세서 측 vtable(GPU 측 vtable)을 결정하기 위해 공유 객체(131)의 제1 프로세서 측 vtable 포인터(CPU 측 vtable 포인터)를 사용할 수 있다. 일 실시예에서, 제2 프로세서 측 테이블(GPU 테이블)은 <"className", 제1 프로세서 측 vtable 어드레스, 제2 프로세서 측 vtable 어드레스>를 포함할 수 있다.
일 실시예에서, GPU 측에서, GPU(180)는 블록(310)에 도시된 코드 시퀀스와 상이할 수 있는 블록(350)에 도시된 코드 시퀀스를 생성할 수 있다. 일 실시예에서, GPU 컴파일러(188)가 타입으로부터 모든 공유 가능한 클래스를 알 수 있기 때문에, GPU(180)는 공유 객체(131) 등의 공유 객체로부터 가상 함수 포인터를 로딩하기 위해 블록(350)에 도시된 코드 시퀀스를 생성할 수 있다. 일 실시예에서, 라인(351)의 코드: Mov r1, [obj]는 CPU vtable 어드레스를 로딩할 수 있으며, 라인(353)의 코드: R2 = getVtableAddress(r1)은 GPU 테이블로부터 GPU vtable을 획득할 수 있다. 일 실시예에서, 라인(358)의 코드: (Call*[r2 + OffsetFunction])은 CPU vtable 어드레스를 사용해서 생성된 GPU vtable에 기초하여 가상 함수를 호출할 수 있다. 일 실시예에서, getVtableAddress 함수는 GPU 측 vtable을 결정하기 위해 GPU 테이블로 인덱싱하는데 CPU 측 vtable 어드레스를 사용할 수 있다.
블록(280)에서, 제1 프로세서(CPU(110)) 및 제2 프로세서(GPU(180))는 공유 객체(131)를 사용해서 양방향 통신이 가능해질 수 있다.
GPU 테이블을 생성하는 일 실시예가 도 4의 흐름도를 사용해서 도시된다. 블록(410)에서, 일 실시예에서, 공유 가능한 클래스(공유 객체(131))의 등록 함수에 대한 함수 포인터를 초기화 섹션(예를 들어, MS C++의 CRT$XCI 섹션)에 포함시킴으로써, 초기화 시간 중에 테이블이 형성될 수 있다. 예를 들어, 공유 가능한 클래스의 등록 함수는 MS CRT$XCI 섹션 초기화 섹션에 포함될 수 있다.
블록(420)에서, 등록 함수는 초기화 시간 중에 실행될 수 있다. 등록 함수에 대한 함수 포인터를 초기화 섹션에 포함시킨 결과로서, 초기화 섹션을 실행하는 동안 등록 함수는 실행될 수 있다.
블록(430)에서, 제1 프로세서 측(CPU 측)에서, 등록 함수는 "className" 및 "CPU vtable addr"을 제1 테이블에 등록할 수 있다. 블록(440)에서, 제2 프로세서 측(GPU 측)에서, 등록 함수는 "className" 및 "GPU vtable addr"을 제2 테이블에 등록할 수 있다.
블록(480)에서, 제1 테이블 및 제2 테이블은 하나의 공통 테이블로 병합될 수 있다. 예를 들어, 제1 및 제2 테이블이 동일한 "className"을 포함하면, 제1 테이블의 제1 엔트리는 제2 테이블의 제1 엔트리와 결합될 수 있다. 병합 결과로서, 제1 및 제2 테이블의 결합된 엔트리들은 단일 className을 갖는 하나의 엔트리로서 나타날 수 있다. 일 실시예에서, 공통 테이블은 GPU 측에 상주할 수 있으며, 공통 테이블 또는 GPU 테이블은 "className", CPU vtable addr, 및 GPU vtable addr을 포함할 수 있다.
일 실시예에서, 공통 테이블 또는 GPU 테이블을 생성하여, CPU 측 및 GPU 측에서 vtable 어드레스들을 일치시키라는 요구 사항을 방지할 수 있다. 또한, GPU 테이블은 동적 연결 라이브러리들(DLLs)을 지원할 수 있다. 일 실시예에서, 공유 객체(131)가 GPU 측에서 초기화 또는 사용될 수 있기 전에 클래스가 CPU 측에서 로딩될 수 있다. 그러나, 애플리케이션이 일반적으로 CPU 측에서 로딩되기 때문에, GPU 테이블은 또한 애플리케이션 및 정적 연결 라이브러리들에서 정의된 클래스들에 대한 CPU(110) 및 GPU(180) 간의 양방향 통신을 가능하게 할 수 있다. DLL들의 경우, DLL은 CPU 측에서 로딩될 수 있으며, GPU 테이블은 또한 DLL들에 대한 양방향 통신에도 사용될 수 있다.
공유 가능 객체(131)는 CPU 측 vtable 포인터를 포함할 수 있으며, GPU 측 vtable에 대한 여분의 vtable 포인터를 갖지 않을 수 있다. 일 실시예에서, 객체내(in-object) CPU vtable을 사용해서, GPU vtable 포인터는 블록(350) 및 도 4에서 상술된 바와 같이 생성될 수 있다. 일 실시예에서, GPU 측의 GPU vtable 포인터가 가상 함수 호출에 사용될 수 있는 바와 같이, CPU 측의 CPU vtable 포인터가 사용될 수 있다. 일 실시예에서, 이러한 기법은 링커/로더의 변경 또는 개입(involvement)을 수반하지 않을 수 있으며, 공유 객체(131)에서 여분의 vptr 포인터 필드를 요구하지 않는다. 이러한 기법은 CPU(110) 및 GPU(180) 간의 객체 지향 언어들로 기록된 애플리케이션의 미립자 분할을 허용할 수 있다.
이종 프로세서들에 의해 공유될 수 있는 객체의 멤버 함수들을 통해 CPU(110) 및 GPU(180) 간의 양방향 통신을 지원하기 위해 컴퓨팅 플랫폼(100)에 의해 사용된 흐름도의 일 실시예가 도 5에 도시되어 있다. 일 실시예에서, GPU 컴파일러(188)는 GPU 함수들을 위한 CPU 스터브(a CPU stub)(510) 및 CPU 측(110)의 CPU 원격 호출 API(520)를 생성할 수 있다. 또한, GPU 컴파일러(188)는 제1 멤버 함수들을 위한 GPU 측(180)에서 GPU 함수들을 위한 GPU 측 글루잉 로직(gluing logic)(530)을 생성할 수 있다. 일 실시예에서, CPU(110)는 제1 경로의 제1 인에이블링 경로(스터브 로직(510), API(520), 및 글루잉 로직(530)을 포함함)를 사용해서 제1 멤버 함수들을 호출할 수 있다. 일 실시예에서, 제1 인에이블링 경로는 CPU(110)가 GPU 측(180)과 따른 원격 호출을 설정하고 CPU 측(110)으로부터 GPU 측(180)으로 정보를 전송하게 할 수 있다. 일 실시예에서, GPU 측 글루잉 로직(530)은 GPU(180)가 CPU 측(110)으로부터 전송된 정보를 수신할 수 있게 할 수 있다.
일 실시예에서, CPU 스터브(510)는 제1 멤버 함수들(즉, 원래의 GPU 멤버 함수들)과 동일한 이름을 포함할 수 있지만, CPU(110)로부터의 호출을 GPU(180)로 향하게 하기 위해 API(520)를 인클로징(enclose)할 수 있다. 일 실시예에서, CPU 컴파일러(118)에 의해 생성된 코드는 제1 멤버 함수들을 호출할 수 있지만, 호출은 CPU 스터브(510) 및 원격 호출 API(520)로 다시 향할 수 있다. 또한, 원격 호출을 하는 동안, CPU 스터브(510)는 호출중인 제1 멤버 함수들을 나타내는 유일한 이름 및 호출된 제1 멤버 함수의 공유 객체 및 다른 인수들에 대한 포인터를 송신할 수 있다. 일 실시예에서, GPU 측 글루잉 로직(530)은 인수들을 수신하고 제1 멤버 함수들 호출을 디스패치할 수 있다. 일 실시예에서, GPU 컴파일러(188)는 제1 파라미터로서 전달된 객체 포인터로 제1 멤버 함수들에 대한 GPU 측 함수 어드레스를 호출함으로써 비가상 함수들을 디스패치할 수 있는 글루잉 로직(또는 디스패처)을 생성할 수 있다. 일 실시예에서, GPU 컴파일러(188)는 CPU 스터브(510)가 GPU 측 글루잉 로직(530)과 통신할 수 있게 하기 위해 GPU 측 글루잉 로직(530)을 등록하도록 GPU 측에서 점프 테이블 등록 호출을 생성할 수 있다.
일 실시예에서, GPU 컴파일러(188)는 CPU 함수들을 위한 GPU 스터브(550), GPU 측(180)의 GPU 원격 호출 API(570), 및 CPU(110)에 할당된 제2 멤버 함수들을 위한 CPU 측 글루잉 로직(580)을 포함하는 제2 인에이블링 경로를 생성할 수 있다. 일 실시예에서, GPU(180)는 제2 인에이블링 경로를 사용해서 CPU 측(110)을 호출할 수 있다. 일 실시예에서, GPU 스터브(560) 및 API(570)는 GPU(180)가 CPU 측(110)과 원격 호출을 설정하고 GPU 측(180)으로부터 CPU 측(110)으로 정보를 전송할 수 있게 할 수 있다. 일 실시예에서, CPU 측 글루잉 로직(580)은 CPU(110)가 GPU 측(180)으로부터 전송된 정보를 수신하게 할 수 있다.
일 실시예에서, 제2 멤버 함수 호출을 지원하기 위해, GPU 컴파일러(188)는 CPU 측 글루잉 로직(580)을 위한 점프 테이블 등록을 생성할 수 있다. 일 실시예에서, 제2 멤버 함수들에 대한 CPU 측 함수 어드레스는 CPU 글루잉 로직(580)에서 호출될 수 있다. 일 실시예에서, CPU 글루잉 로직(580)에 의해 생성된 코드는 CPU 컴파일러(118)에 의해 생성된 다른 코드와 링크될 수 있다. 이러한 기법은 이종 프로세서들(110 및 180) 간의 양방향 통신을 지원하기 위해 경로를 제공할 수 있다. 일 실시예에서, CPU 스터브 로직(510) 및 CPU 측 글루잉 로직(580)은 CPU 링커(590)를 통해 CPU(110)에 연결될 수 있다. 일 실시예에서, CPU 링커(590)는 CPU 스터브(510), CPU 측 글루잉 로직(580), 및 CPU 컴파일러(118)에 의해 생성된 다른 코드를 사용해서 CPU 이그젝큐터블(executables)(595)을 생성할 수 있다. 일 실시예에서, GPU 스터브 로직(560) 및 GPU 측 글루잉 로직(570)은 GPU 링커(540)를 통해 GPU(180)에 연결될 수 있다. 일 실시예에서, GPU 링커(540)는 GPU 글루잉 로직(570), GPU 스터브(560), 및 GPU 컴파일러(188)에 의해 생성된 다른 코드를 사용해서 GPU 이그젝큐터블(545)을 생성할 수 있다.
GPU 가상 함수 및 GPU 비가상 함수가 상술된 테이블 기반 기술을 사용해서 CPU 측(110)에 의해 호출되는 흐름도(600)의 일 실시예가 도 6에 도시되어 있다. 블록(610)은, 가상 함수(예를 들어, VF 133-A) 및 가상 함수 호출 'Virtual void SomeVirtFunc()' 주석을 다는 제1 주석 태그 #Pragma GPU, 및 비가상 함수(예를 들어, NVF 136-A) 및 비가상 함수 호출 'void SomeNonVirtFunc()' 주석을 다는 제2 주석 태그 #Pragma GPU를 포함하는, 공유 클래스 인스턴스 또는 공유 클래스 Foo()라는 제목의 객체를 포함하는 것으로 도시되어 있다.
일 실시예에서, 'pFoo'는 클래스 Foo()의 공유 객체(131)를 포인팅할 수 있으며, 원격 가상 함수 호출은 CPU 측(110)으로부터 GPU 측(180)으로 완료될 수 있다. 일 실시예에서, 'pFoo = new(SharedMemoryAllocator()) Foo();'는 공유 메모리 할당/해제 실행 시간 호출들로 새로운/삭제 오퍼레이터를 오버라이드하는 한가지 가능한 방법일 수 있다. 일 실시예에서, CPU 컴파일러(118)는, 블록(610)의 'pFoo → SomeVirtFunc()'의 컴파일링에 응답해서, 블록(620)에 도시된 태스크를 개시할 수 있다.
블록(620)에서, CPU 측(110)은 GPU 가상 함수를 호출할 수 있다. 블록(630)에서, (GPU 멤버 함수들을 위한) CPU 측 스터브(510) 및 API(520)는 GPU 측(180)에 정보(인수들)를 송신할 수 있다. 블록(640)에서, (GPU 멤버 함수들에 대한) GPU 측 글루잉 로직(530)은 THIS 객체로부터 pGPUVptr(CPU 측 vtable 포인터)를 획득할 수 있으며, GPU vtable을 찾을 수 있다. 블록(650)에서, GPU 측 글루잉 로직(530)(또는 디스패처)은 CPU 측 vtable 포인터를 사용해서 GPU 측 vtable을 획득하기 위해 상술된 블록(350)에 도시된 코드 시퀀스를 가질 수 있다.
일 실시예에서, 블록(610)의 #Pragma GPU 'void SomeNonVirtFunc()'의 컴파일링에 응답해서, GPU 컴파일러(188)는 'pFoo → SomeNonVirtFunc()'을 사용해서 블록(670)에 도시된 태스크를 개시하도록 코드를 생성할 수 있다. 블록(670)에서, CPU 측(110)은 GPU 비가상 함수를 호출할 수 있다. 블록(680)에서, CPU 측 스터브(510) 및 API(520)는 GPU 측(180)에 정보(인수들)를 송신할 수 있다. 블록(690)에서, GPU 측 글루잉 로직(530)은 파라미터들을 푸시할 수 있으며, 함수 어드레스가 이미 인식되었을 수 있기 때문에 어드레스를 직접 호출한다.
가상 공유 비간섭성 영역을 사용해서 이종 프로세서들 간의 가상 함수 공유를 지원하기 위해 컴퓨팅 플랫폼(100)에 의해 실행되는 동작의 일 실시예가 도 7의 흐름도에 도시되어 있다. CPU(110) 및 GPU(180) 등의 이종 프로세서들을 포함하는 컴퓨팅 시스템(100) 등의 컴퓨팅 시스템에서, CPU(110) 및 GPU(180)는 상이한 컴파일러들(예를 들어, 118 및 188)(또는 상이한 목표들을 가진 동일한 컴파일러)에 의해 생성된 상이한 코드들을 실행할 수 있으며, 동일한 가상 함수가 동일한 어드레스에 위치하는 것은 보장되지 않을 수 있다. 가상 함수들의 공유를 지원하기 위해 컴파일러/링커/로더를 변경하는 것이 가능할 수 있지만, 후술되는 '비간섭성 영역' 기법(실행 시간 전용 기법)은 CPU(110) 및 GPU(180) 간의 가상 함수들의 공유를 가능케 하는 더 간단한 기술일 수 있다. 이러한 기법은 MYO(Mine/Yours/Ours) 등의 공유 가상 메모리 시스템들이 쉽게 수용 및 전개될 수 있게 할 수 있다. C++ 객체 지향 언어가 일례로서 사용되더라도, 이하의 기법이 가상 함수들을 지원하는 다른 객체 지향 프로그래밍 언어들에 적용될 수 있다.
블록(710)에서, CPU(110)는 CPU(110) 및 GPU(180)의 공유 클래스들의 vtable들을 저장하기 위해 공유 가상 메모리(130) 내에 공유 비간섭성 영역을 생성할 수 있다. 일 실시예에서, 공유 비간섭성 영역은 공유 가상 메모리(130) 내의 한 영역에 비간섭성 태그를 지정함으로써 생성될 수 있다. 일 실시예에서, MYO 실행 시간은 가상 공유 영역(MYO의 용어로는 "아레나들(arenas)"이라고 하며, 다수의 그러한 아레나들이 MYO에서 생성될 수 있음)을 생성하기 위해 하나의 또는 그 이상의 애플리케이션 프로그래밍 가능 인터페이스(API들) 함수들을 제공할 수 있다. 예를 들어, myoArenaCreate(xxx,...,NonCoherentTag) 또는 myoArenaCreateNonCoherentTag(xxx,...) 등의 태그가 사용될 수 있다. 일 실시예에서, 상기 태그들을 사용해서 간섭성 아레나 또는 비간섭성 아레나를 생성할 수 있다. 그러나, 다른 실시예에서, API 함수는 메모리 청크(또는 일부분)의 속성을 변경하는데 사용될 수 있다. 예를 들어, myoChangeToNonCoherent(addr size)는 비간섭성 영역 또는 아레나로서 제1 영역을 생성하고 간섭성 아레나로서 제2 영역(또는 일부분)을 생성하는데 사용될 수 있다. 일 실시예에서, 제1 영역은 어드레스 크기로 명시될 수 있다.
일 실시예에서, 데이터 일관성을 유지하지 않고 데이터 공유를 가능케 할 수 있는, 메모리 아레나(즉, 관리된 메모리 청크)가 생성될 수 있으며, 이러한 메모리 아레나는 공유 비간섭성 영역이라고 할 수 있다. 일 실시예에서, 공유 비간섭성 영역에 저장된 CPU 데이터 및 GPU 데이터는 CPU(110) 및 GPU(180) 둘 다에 의해 알 수 있는 바와 동일한 어드레스를 가질 수 있다. 그러나, MYO 등의 공유 가상 메모리(130)는 실행 시간에 간섭성을 유지하지 않을 수 있기 때문에, 콘텐츠(CPU 데이터 및 GPU 데이터)는 상이할 수 있다. 일 실시예에서, 공유 비간섭성 영역은 각각의 공유 클래스에 대한 가상 메소드 테이블의 새로운 복사본을 저장하는데 사용될 수 있다. 일 실시예에서, CPU(110) 및 GPU(180)로부터 알 수 있는 가상 함수 테이블 어드레스들은 동일할 수 있지만, 가상 함수 테이블들은 상이할 수 있다.
블록(750)에서, 초기화 시간 중에, 각각의 공유 가능 클래스에 대한 vtable은 CPU 전용 공간(115) 및 GPU 전용 공간(185)으로부터 공유 가상 메모리(130)로 복사될 수 있다. 일 실시예에서, CPU 측 vtable은 공유 가상 메모리(130) 내의 비간섭성 영역으로 복사될 수 있으며, GPU 측 vtable도, 또한, 공유 가상 메모리(130) 내의 비간섭성 영역으로 복사될 수 있다. 일 실시예에서, 공유 공간에서, CPU 측 vtable 및 GPU 측 vtable은 동일한 어드레스에 위치할 수 있다.
일 실시예에서, 툴체인 지원(a toolchain support)이 유효하면, CPU 컴파일러(118) 또는 GPU 컴파일러(188)는 특별 데이터 섹션의 CPU 및 GPU vtable 데이터를 포함할 수 있으며, 로더(540 또는 590)는 공유 비간섭성 영역에 특별 데이터 섹션을 로딩할 수 있다. 다른 실시예에서, CPU 컴파일러(118) 또는 GPU 컴파일러(188)는, 예를 들어, myoChangeToNonCoherent 등의 API 호출을 사용해서, 특별 데이터 섹션이 공유 비간섭성 영역에 생성될 수 있게 할 수 있다. 일 실시예에서, CPU 컴파일러(118) 및 GPU 컴파일러(188)는, CPU vtable 및 GPU vtable이 특별 데이터 섹션 내의 동일한 오프셋 어드레스에(그렇지 않으면 적합한 패딩으로) 위치할 수 있음을 보장할 수 있다. 일 실시예에서, 다중-상속(multiple-inheritance)의 경우에, 객체 레이아웃에 다수의 vtable 포인터들이 있을 수 있다. 일 실시예에서, CPU 컴파일러(118) 및 GPU 컴파일러(188)는, 또한, CPU vtable 및 GPU vtable이 객체 레이아웃의 동일한 오프셋에 위치할 수 있음을 보장할 수 있다.
툴체인 지원이 없을 때, 일 실시예에서, 사용자는 CPU vtable 및 GPU vtable을 공유 비간섭성 영역에 복사할 수 있다. 일 실시예에서, 하나의 또는 그 이상의 매크로들이 공유 비간섭성 메모리 영역으로의 CPU 및 GPU 테이블들의 수동 복사를 용이하게 하기 위해 생성될 수 있다.
실행 시간에, 공유 객체(131) 등의 공유 객체가 생성될 수 있은 후에, 다중 상속을 위한 다수의 "vptr"을 포함할 수 있는 객체 레이아웃(801)이 생성될 수 있다. 일 실시예에서, 객체 테이블(801)의 공유 객체(131)의 가상 테이블 포인터(vptr)는 공유 비간섭성 영역에서의 가상 함수 테이블의 새로운 복사본을 포인팅하기 위해 갱신(패치)될 수 있다. 일 실시예에서, 공유 객체의 가상 테이블 포인터는, 가상 함수들을 포함할 수 있는, 한 클래스의 컨스트럭터를 사용해서 갱신될 수 있다. 일 실시예에서, 클래스가 임의의 가상 함수들을 포함하지 않으면, 이러한 클래스의 데이터 및 함수들은 공유될 수 있으며, 실행 시간 중에 갱신(또는 패치)할 필요가 없을 수 있다.
블록(780)에서, vptr(vtable 포인터)은, 공유 객체(131)를 생성하는 동안, 공유 비간섭성 영역을 포인팅하도록 변경될 수 있다. 일 실시예에서, 디폴트로 전용 vtable들(CPU vtable 및 GPU vtable)을 포인팅하는 vptr은, (도 8에서 실선 802-C로 표시된 바와 같이) 공유 비간섭성 영역(860)을 포인팅하도록 변경될 수 있다. 일 실시예에서, 가상 함수는 다음과 같이 호출될 수 있다:
Mov eax, [ecx] #ecx는 "this" 포인터를 포함하고, eax는 vptr을 포함함;
Call [eax, vfunc] #vfunc는 가상 함수 테이블의 가상 함수 인덱스임.
CPU 측에서, 상기 코드는 가상 함수의 CPU 구현을 호출할 수 있으며; GPU 측에서, 상기 코드는 가상 함수의 GPU 구현을 호출할 수 있다. 이러한 기법은 한 클래스에 대한 데이터 공유 및 가상 함수 공유를 가능케 할 수 있다.
이종 프로세서들 간의 가상 함수 공유를 지원하기 위한 가상 공유 비간섭성 영역의 사용을 도시하는 관계 도면(800)의 일 실시예가 도 8에 도시되어 있다. 일 실시예에서, 객체 레이아웃(801)은 제1 슬롯 801-A의 가상 테이블 포인터(vptr) 및 슬롯들 801-B 및 801-C의 필드 1 및 필드 2 등의 다른 필드들을 포함할 수 있다. 일 실시예에서, CPU 컴파일러(118) 및 GPU 컴파일러(188)는 (점선 802-B에 의해 표시된 바와 같이) CPU vtable 및 GPU vtable을 (점선 802-A로 표시된 바와 같이) 생성하기 위해 슬롯 801-A에 위치한 vtable 포인터(vptr)를 실행한다. CPU 가상 함수 테이블(CPU vtable)은 CPU 전용 어드레스 공간(115) 내의 Address 810에 위치할 수 있으며, GPU vtable은 GPU 전용 어드레스 공간(185) 내의 Address 840에 위치할 수 있다. 일 실시예에서, CPU vtable은 vfunc1 및 vfunc2 등의 함수 포인터들을 포함할 수 있으며, GPU vtable은 vfunc1' 및 vfunc2' 등의 함수 포인터들을 포함할 수 있다. 일 실시예에서, 포인터들이 동일한 함수의 상이한 구현을 포인팅하기 때문에 함수 포인터들(vfunc1 및 vfunc2) 및 (vfunc1' 및 vfunc2')는 또한 상이할 수 있다.
일 실시예에서, (블록(780)에 도시된 바와 같이) vptr을 변경한 결과로서, vptr은 공유 가상 메모리(130) 내의 공유 비간섭성 영역(860)을 포인팅할 수 있다. 일 실시예에서, CPU vtable은 어드레스 Address 870에 위치할 수 있으며, GPU vtable은 동일한 어드레스 Address 870에 위치할 수 있다. 일 실시예에서, CPU vtable은 vfunc1 및 vfunc2 등의 함수 포인터들을 포함할 수 있으며, GPU vtable은 vfunc1' 및 vfunc2' 등의 함수 포인터들을 포함할 수 있다. 일 실시예에서, 함수 포인터들(vfunc1 및 vfunc2) 및 (vfunc1' 및 vfunc2')는 상이할 수 있다. 일 실시예에서, 공유 비간섭성 영역(860)에서 CPU vtable 및 GPU vtable을 저장하여, CPU(110) 및 GPU(180)가, 각각, 동일한 어드레스 로케이션들 Address 870에 있는 CPU vtable 및 GPU vtable을 보게 할 수 있지만, CPU vtable의 콘텐츠(vfunc1 및 vfunc2)는 GPU vtable의 콘텐츠(vfunc1' 및 vfunc2')와 상이할 수 있다.
양방향 통신을 지원하는 이종 프로세서들을 포함하는 컴퓨터 시스템(900)의 일 실시예가 도 9에 도시되어 있다. 도 9를 참조하면, 컴퓨터 시스템(900)은 단일 명령 다중 데이터(SIMD) 프로세서를 포함하는 범용 프로세서(또는 CPU)(902) 및 그래픽 프로세서 유닛(GPU)(905)을 포함할 수 있다. 일 실시예에서, CPU(902)는, 머신 판독 가능 기억 매체(929)에서 강화 동작들을 제공하기 위해, 다른 태스크들을 실행하거나 또는 명령들의 시퀀스를 저장하는 것 외에 강화 동작들을 실행할 수 있다. 그러나, 명령들의 시퀀스는 또한 CPU 전용 메모리(920) 또는 임의의 다른 적합한 기억 매체에 저장될 수 있다. 일 실시예에서, CPU(902)는 CPU 레거시 컴파일러(903) 및 CPU 링커/로더(904)와 연관될 수 있다. 일 실시예에서, GPU(905)는 GPU 사유 컴파일러(906) 및 GPU 링커/로더(907)와 연관될 수 있다.
개별 그래픽 프로세서 유닛(GPU)(905)이 도 9에 도시되어 있지만, 일부 실시예들에서, 프로세서(902)가, 다른 일례로서, 강화 동작들을 실행하는데 사용될 수 있다. 컴퓨터 시스템(900)을 운영하는 프로세서(902)는 로직(930)에 연결된 하나의 또는 그 이상의 프로세서 코어들일 수 있다. 로직(930)은, 컴퓨터 시스템(900)에 인터페이스를 제공할 수 있는, 하나의 또는 그 이상의 I/O 디바이스들(960)에 연결될 수 있다. 로직(930)은, 예를 들어, 일 실시예에서, 칩셋 로직일 수 있다. 로직(930)은, 광, 자기, 또는 반도체 스토리지를 포함하는, 임의의 종류의 스토리지일 수 있는, 메모리(920)에 연결된다. 그래픽 프로세서 유닛(905)은 디스플레이(990)에 프레임 버퍼를 통해 연결된다.
일 실시예에서, 컴퓨터 시스템(900)은 공유 객체의 미립자 분할에 의해 공유 객체의 가상 함수들 등의 멤버 함수들을 통해 이종 프로세서들 CPU(902) 및 GPU(905) 간의 양방향 통신들(함수 호출들)을 가능케 하는 하나의 또는 그 이상의 기술들을 지원할 수 있다. 일 실시예에서, 컴퓨터 시스템(900)은 '테이블-기반' 기술이라고 하는 제1 기술을 사용해서 CPU(902) 및 GPU(905) 간의 양방향 통신을 가능케 할 수 있다. 다른 실시예에서, 컴퓨팅 플랫폼은, 가상 공유 비간섭성 영역이 전용 CPU 메모리(920), 전용 GPU 메모리(930), 또는 공유 메모리(950)에 위치한 가상 공유 메모리에서 생성될 수 있는 '비간섭성 영역' 기술이라고 하는 제2 기술을 사용해서 CPU(902) 및 GPU(905) 간의 양방향 통신들을 가능케 할 수 있다. 일 실시예에서, 공유 메모리(950) 등의 개별 공유 메모리가 컴퓨터 시스템(900)에서 제공되지 않을 수 있으며, 이러한 경우에, 공유 메모리는 CPU 메모리(920) 및 GPU 메모리(930) 등의 전용 메모리들 중 한 메모리 내에서 제공될 수 있다.
일 실시예에서, 테이블-기반 기술을 사용해서, CPU(110) 또는 GPU(180)로부터 공유 객체에 액세스하는데 사용될 수 있는, 공유 객체의 CPU 측 vtable 포인터는, GPU-측 테이블이 존재하는 경우 GPU vtable을 결정하는데 사용될 수 있다. 일 실시예에서, GPU-측 vtable은 <"className", CPU vtable addr, GPU vtable addr>을 포함할 수 있다. 일 실시예에서, GPU-측 vtable 어드레스를 획득하고 GPU-측 테이블을 생성하기 위한 기술은 상술된 바와 같다.
다른 실시예에서, '비간섭성 영역' 기술을 사용하면서, 공유 비간섭성 영역이 공유 가상 메모리 내에서 생성된다. 일 실시예에서, 공유 비간섭성 영역은 데이터 일관성을 유지하지 않을 수 있다. 일 실시예에서, 공유 비간섭성 영역 내의 CPU-측 데이터 및 GPU-측 데이터는 CPU-측 및 GPU-측으로부터 알 수 있는 바와 동일한 어드레스를 가질 수 있다. 그러나, 공유 가상 메모리가 실행 시간 중에 간섭성을 유지하지 않을 수 있기 때문에, CPU-측 데이터의 콘텐츠는 GPU-측 데이터의 콘텐츠와 상이할 수 있다. 일 실시예에서, 공유 비간섭성 영역은 각각의 공유 클래스에 대한 가상 메소드 테이블의 새로운 복사본을 저장하는데 사용될 수 있다. 일 실시예에서, 이러한 기법은 동일한 어드레스에서 가상 테이블을 유지할 수 있다.
본 명세서에 기술된 그래픽 프로세싱 기술들은 각종 하드웨어 아키텍처들로 구현될 수 있다. 예를 들어, 그래픽 기능이 칩셋 내에서 통합될 수 있다. 대안으로, 별개의 그래픽 프로세서가 사용될 수 있다. 또 다른 실시예로서, 그래픽 함수들이, 멀티-코어 프로세서를 포함하는, 범용 프로세서에 의해 또는 머신 판독 가능 매체에 저장된 소프트웨어 명령들의 집합으로서 구현될 수 있다.
Claims (16)
- 플랫폼으로서,
중앙 처리 장치(CPU) 및 그래픽 프로세싱 유닛(GPU)의 조합; 및
상기 GPU 및 CPU 둘 다에 액세스 가능한 공유 물리 메모리 - 상기 플랫폼은 상기 공유 물리 메모리를 상기 CPU 및 GPU 둘 다에 액세스 가능한 공유 가상 메모리에 맵핑할 수 있음 -
를 포함하고, 상기 플랫폼은,
상기 공유 가상 메모리에 복수의 가상 함수들을 포함하는 공유 객체를 저장하고,
상기 복수의 가상 함수들 중 적어도 하나를 상기 CPU와 상기 GPU 간에 공유하는 플랫폼. - 제1항에 있어서,
상기 복수의 가상 함수들을 상기 CPU와 상기 GPU 간에 공유하는 플랫폼은 상기 CPU와 상기 GPU 간의 양방향 통신을 포함하는 플랫폼. - 제1항에 있어서,
상기 공유 객체는 비가상 함수를 더 포함하는 플랫폼. - 제1항에 있어서,
상기 공유 객체는 가상 함수 테이블을 인덱싱하기 위한 가상 테이블 포인터를 포함하는 플랫폼. - 제1항에 있어서,
상기 공유 객체는 CPU 측 가상 테이블 포인터를 포함하는 플랫폼. - 제5항에 있어서,
상기 GPU는 GPU 측 가상 테이블을 결정하기 위해 상기 CPU 측 가상 테이블 포인터를 사용하는 플랫폼. - 제6항에 있어서,
상기 GPU 측 가상 테이블은 클래스 이름, CPU 측 가상 테이블 어드레스, 및 GPU 측 가상 테이블 어드레스를 포함하는 플랫폼. - 제6항에 있어서,
상기 GPU 측 가상 테이블은 동적 연결 라이브러리들 또는 정적 연결 라이브러리들 중 적어도 하나를 지원하는 플랫폼. - 제1항에 있어서,
상기 플랫폼은 또한, 상기 공유 가상 메모리 내에 공유 비간섭성 아레나를 생성하고, CPU 측 가상 테이블 및 GPU 측 가상 테이블을 상기 공유 가상 메모리에 복사하고, 상기 CPU 측 가상 테이블 및 상기 GPU 측 가상 테이블은 상기 공유 가상 메모리 내에서 동일한 어드레스를 갖는 플랫폼. - 제9항에 있어서,
상기 플랫폼은 또한, 가상 테이블 포인터를 동일한 어드레스를 포인팅하도록 변경하고, 상기 CPU 측 가상 테이블은 CPU 측 함수 포인터들을 포함하고, 상기 GPU 측 가상 테이블은 상기 CPU 측 함수 포인터들과는 상이한 GPU 측 함수 포인터들을 포함하는 플랫폼. - 제10항에 있어서,
상기 플랫폼은 CPU 전용 메모리 공간을 더 포함하고, 상기 플랫폼은 상기 CPU 측 가상 테이블을 상기 CPU 전용 메모리 공간으로부터 복사하는 플랫폼. - 플랫폼으로서,
중앙 처리 장치(CPU) 및 그래픽 프로세싱 유닛(GPU)의 조합; 및
상기 GPU 및 CPU 둘 다에 액세스 가능한 공유 물리 메모리 - 상기 플랫폼은 상기 공유 물리 메모리를 상기 CPU 및 GPU 둘 다에 액세스 가능한 공유 가상 메모리에 맵핑할 수 있음 -
를 포함하고, 상기 플랫폼은,
상기 공유 가상 메모리에 복수의 가상 함수들을 포함하는 공유 객체를 저장하고,
상기 복수의 가상 함수들 중 적어도 하나를 상기 CPU와 상기 GPU 간에 공유하고,
CPU 측 가상 테이블 및 GPU 측 가상 테이블을 저장하기 위해 상기 공유 가상 메모리 내에 공유 비간섭성 아레나를 생성하는 플랫폼. - 제12항에 있어서,
상기 CPU 측 가상 테이블 및 상기 GPU 측 가상 테이블은 상기 공유 가상 메모리 내에서 동일한 어드레스를 갖는 플랫폼. - 제13항에 있어서,
상기 플랫폼은 또한, 가상 테이블 포인터를 동일한 어드레스를 포인팅하도록 변경하고, 상기 CPU 측 가상 테이블은 CPU 측 함수 포인터들을 포함하고, 상기 GPU 측 가상 테이블은 상기 CPU 측 함수 포인터들과는 상이한 GPU 측 함수 포인터들을 포함하는 플랫폼. - 제12항에 있어서,
상기 플랫폼은 또한, 상기 CPU 측 가상 테이블 및 상기 GPU 측 가상 테이블을 상기 공유 가상 메모리 내의 상기 공유 비간섭성 아레나로 복사하는 플랫폼. - 제15항에 있어서,
상기 플랫폼은 CPU 전용 메모리 공간을 더 포함하고, 상기 플랫폼은 상기 CPU 측 가상 테이블을 상기 CPU 전용 메모리 공간으로부터 복사하는 플랫폼.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2010/001470 WO2012037706A1 (en) | 2010-09-24 | 2010-09-24 | Sharing virtual functions in a shared virtual memory between heterogeneous processors of a computing platform |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137006592A Division KR101534037B1 (ko) | 2010-09-24 | 2010-09-24 | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157036580A Division KR101761650B1 (ko) | 2010-09-24 | 2010-09-24 | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150006903A KR20150006903A (ko) | 2015-01-19 |
KR101581796B1 true KR101581796B1 (ko) | 2016-01-04 |
Family
ID=45873372
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137006592A KR101534037B1 (ko) | 2010-09-24 | 2010-09-24 | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 |
KR1020147036803A KR101581796B1 (ko) | 2010-09-24 | 2010-09-24 | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 |
KR1020157036580A KR101761650B1 (ko) | 2010-09-24 | 2010-09-24 | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137006592A KR101534037B1 (ko) | 2010-09-24 | 2010-09-24 | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157036580A KR101761650B1 (ko) | 2010-09-24 | 2010-09-24 | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 |
Country Status (7)
Country | Link |
---|---|
US (2) | US8997113B2 (ko) |
EP (2) | EP2619687B1 (ko) |
JP (1) | JP5639274B2 (ko) |
KR (3) | KR101534037B1 (ko) |
CN (1) | CN103109286B (ko) |
TW (1) | TWI573094B (ko) |
WO (1) | WO2012037706A1 (ko) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8997113B2 (en) | 2010-09-24 | 2015-03-31 | Intel Corporation | Sharing virtual functions in a shared virtual memory between heterogeneous processors of a computing platform |
US8806503B2 (en) * | 2011-01-24 | 2014-08-12 | Nec Laboratories America, Inc. | Method and system for memory aware runtime to support multitenancy in heterogeneous clusters |
GB2489278B (en) * | 2011-03-24 | 2019-12-25 | Advanced Risc Mach Ltd | Improving the scheduling of tasks to be performed by a non-coherent device |
US8949777B2 (en) * | 2011-04-22 | 2015-02-03 | Intel Corporation | Methods and systems for mapping a function pointer to the device code |
EP3242213A1 (en) * | 2012-05-09 | 2017-11-08 | Intel Corporation | Execution using multiple page tables |
US9733953B2 (en) * | 2012-06-22 | 2017-08-15 | Microsoft Technology Licensing, Llc | API redirection for limited capability operating systems |
US9405556B2 (en) | 2012-06-28 | 2016-08-02 | Microsoft Technology Licensing, Llc | Dynamic addition and removal of operating system components |
US9830172B2 (en) * | 2012-06-30 | 2017-11-28 | Microsoft Technology Licensing, Llc | Implementing functional kernels using compiled code modules |
US9405561B2 (en) * | 2012-08-08 | 2016-08-02 | Nvidia Corporation | Method and system for memory overlays for portable function pointers |
US9378572B2 (en) * | 2012-08-17 | 2016-06-28 | Intel Corporation | Shared virtual memory |
US9881592B2 (en) | 2013-10-08 | 2018-01-30 | Nvidia Corporation | Hardware overlay assignment |
US20150106587A1 (en) * | 2013-10-16 | 2015-04-16 | Advanced Micro Devices, Inc. | Data remapping for heterogeneous processor |
US9436395B2 (en) | 2014-03-14 | 2016-09-06 | Advanced Micro Devices, Inc. | Mechanisms to save user/kernel copy for cross device communications |
US9720832B2 (en) * | 2015-03-27 | 2017-08-01 | International Business Machines Corporation | Store operations to maintain cache coherence |
US10140104B2 (en) * | 2015-04-14 | 2018-11-27 | Micron Technology, Inc. | Target architecture determination |
US9830676B2 (en) * | 2015-07-28 | 2017-11-28 | Intel Corporation | Packet processing on graphics processing units using continuous threads |
KR101897624B1 (ko) | 2016-01-19 | 2018-10-04 | 서울대학교산학협력단 | 이종 시스템에서의 데이터 분배 기법 |
CN107239315B (zh) | 2017-04-11 | 2019-11-15 | 赛灵思公司 | 面向神经网络异构计算平台的编程模型 |
KR102403379B1 (ko) * | 2017-09-12 | 2022-06-02 | 주식회사 코코링크 | 다중 gpu간 데이터 공유 방법 |
US12086705B2 (en) * | 2017-12-29 | 2024-09-10 | Intel Corporation | Compute optimization mechanism for deep neural networks |
CN109086086B (zh) * | 2018-08-06 | 2021-06-08 | 深圳忆联信息系统有限公司 | 一种非空间共享的多核cpu的启动方法及装置 |
US11900157B2 (en) * | 2018-09-19 | 2024-02-13 | Intel Corporation | Hybrid virtual GPU co-scheduling |
US11256522B2 (en) | 2019-11-22 | 2022-02-22 | Advanced Micro Devices, Inc. | Loader and runtime operations for heterogeneous code objects |
US11467812B2 (en) * | 2019-11-22 | 2022-10-11 | Advanced Micro Devices, Inc. | Compiler operations for heterogeneous code objects |
US11599467B2 (en) * | 2021-05-27 | 2023-03-07 | Arm Limited | Cache for storing coherent and non-coherent data |
DE102022107294A1 (de) * | 2022-03-28 | 2023-09-28 | Bayerische Motoren Werke Aktiengesellschaft | Steuerung eines Fahrzeugs |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3874603B2 (ja) * | 2000-11-21 | 2007-01-31 | 株式会社日立製作所 | 計算機システムの共有メモリ構築方法 |
Family Cites Families (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6184740A (ja) * | 1984-10-03 | 1986-04-30 | Hitachi Ltd | 汎用オブジエクトコ−ド生成方式 |
US5297284A (en) * | 1991-04-09 | 1994-03-22 | Microsoft Corporation | Method and system for implementing virtual functions and virtual base classes and setting a this pointer for an object-oriented programming language |
EP0620520A1 (en) * | 1993-03-30 | 1994-10-19 | AT&T Corp. | Method for making persistent data objects having hidden pointers |
FR2717280B1 (fr) * | 1994-03-10 | 1996-04-05 | Bull Sa | Procédé de gestion de l'héritage multiple d'objets persistants et partagés. |
US5802367A (en) * | 1995-07-07 | 1998-09-01 | Microsoft Corporation | Method and system for transparently executing code using a surrogate process |
US5812852A (en) * | 1996-11-14 | 1998-09-22 | Kuck & Associates, Inc. | Software implemented method for thread-privatizing user-specified global storage objects in parallel computer programs via program transformation |
JPH10207709A (ja) * | 1997-01-20 | 1998-08-07 | Meidensha Corp | オブジェクトの共有方法 |
US6189046B1 (en) * | 1997-03-27 | 2001-02-13 | Hewlett-Packard Company | Mechanism and method for merging cached location information in a distributed object environment |
JPH10320203A (ja) * | 1997-05-22 | 1998-12-04 | Meidensha Corp | 共有メモリシステム |
US6446259B2 (en) * | 1997-09-15 | 2002-09-03 | Compaq Computer Corporation | System and method for generating an object structure at run time in an object-oriented programming language |
US6148438A (en) * | 1998-01-06 | 2000-11-14 | National Instruments Corporation | System and method for creating composite classes for objects having virtual functions for avoidance of user mode/kernel mode transitions |
US6049668A (en) * | 1998-04-13 | 2000-04-11 | Intel Corporation | Method and apparatus for supporting multiple processor-specific code segments in a single executable |
US7409694B2 (en) * | 1998-09-09 | 2008-08-05 | Microsoft Corporation | Highly componentized system architecture with loadable virtual memory manager |
US6704924B1 (en) * | 1999-02-03 | 2004-03-09 | William H. Gates, III | Method and system for implementing virtual functions of an interface |
US6286092B1 (en) * | 1999-05-12 | 2001-09-04 | Ati International Srl | Paged based memory address translation table update method and apparatus |
US6754887B1 (en) * | 1999-10-22 | 2004-06-22 | International Business Machines Corporation | Methods for implementing virtual bases with fixed offsets in object oriented applications |
US6810519B1 (en) * | 2000-09-29 | 2004-10-26 | International Business Machines Corporation | Achieving tight binding for dynamically loaded software modules via intermodule copying |
US6684305B1 (en) * | 2001-04-24 | 2004-01-27 | Advanced Micro Devices, Inc. | Multiprocessor system implementing virtual memory using a shared memory, and a page replacement method for maintaining paged memory coherence |
US7000238B2 (en) * | 2001-10-10 | 2006-02-14 | Borland Software Corporation | Development system providing extensible remoting architecture |
US6842759B2 (en) * | 2002-01-16 | 2005-01-11 | International Business Machines Corporation | Single-instance class objects across multiple JVM processes in a real-time system |
US7093080B2 (en) * | 2003-10-09 | 2006-08-15 | International Business Machines Corporation | Method and apparatus for coherent memory structure of heterogeneous processor systems |
US20060070069A1 (en) * | 2004-09-30 | 2006-03-30 | International Business Machines Corporation | System and method for sharing resources between real-time and virtualizing operating systems |
US7653789B2 (en) * | 2006-02-01 | 2010-01-26 | Sun Microsystems, Inc. | Multiprocessor system that supports both coherent and non-coherent memory accesses |
US20070283336A1 (en) * | 2006-06-01 | 2007-12-06 | Michael Karl Gschwind | System and method for just-in-time compilation in a heterogeneous processing environment |
US7490191B2 (en) | 2006-09-22 | 2009-02-10 | Intel Corporation | Sharing information between guests in a virtual machine environment |
US7941791B2 (en) * | 2007-04-13 | 2011-05-10 | Perry Wang | Programming environment for heterogeneous processor resource integration |
US8156307B2 (en) * | 2007-08-20 | 2012-04-10 | Convey Computer | Multi-processor system having at least one processor that comprises a dynamically reconfigurable instruction set |
US7996628B2 (en) * | 2008-02-14 | 2011-08-09 | International Business Machines Corporation | Cross adapter shared address translation tables |
JP5151559B2 (ja) * | 2008-02-29 | 2013-02-27 | 富士通株式会社 | プログラム実行システム |
US8531471B2 (en) * | 2008-11-13 | 2013-09-10 | Intel Corporation | Shared virtual memory |
US8307350B2 (en) * | 2009-01-14 | 2012-11-06 | Microsoft Corporation | Multi level virtual function tables |
US9117071B2 (en) * | 2009-06-03 | 2015-08-25 | Apple Inc. | Methods and apparatuses for secure compilation |
US8997113B2 (en) | 2010-09-24 | 2015-03-31 | Intel Corporation | Sharing virtual functions in a shared virtual memory between heterogeneous processors of a computing platform |
-
2010
- 2010-09-24 US US13/000,621 patent/US8997113B2/en active Active
- 2010-09-24 WO PCT/CN2010/001470 patent/WO2012037706A1/en active Application Filing
- 2010-09-24 KR KR1020137006592A patent/KR101534037B1/ko active IP Right Grant
- 2010-09-24 EP EP10857421.1A patent/EP2619687B1/en active Active
- 2010-09-24 KR KR1020147036803A patent/KR101581796B1/ko active IP Right Grant
- 2010-09-24 EP EP16158622.7A patent/EP3043269B1/en active Active
- 2010-09-24 CN CN201080069225.2A patent/CN103109286B/zh active Active
- 2010-09-24 JP JP2013529523A patent/JP5639274B2/ja active Active
- 2010-09-24 KR KR1020157036580A patent/KR101761650B1/ko active IP Right Grant
-
2011
- 2011-03-29 TW TW100110745A patent/TWI573094B/zh active
-
2014
- 2014-12-12 US US14/569,454 patent/US20150113255A1/en not_active Abandoned
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3874603B2 (ja) * | 2000-11-21 | 2007-01-31 | 株式会社日立製作所 | 計算機システムの共有メモリ構築方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3043269B1 (en) | 2017-07-26 |
JP5639274B2 (ja) | 2014-12-10 |
KR20150006903A (ko) | 2015-01-19 |
EP2619687A1 (en) | 2013-07-31 |
KR20160008245A (ko) | 2016-01-21 |
JP2013542497A (ja) | 2013-11-21 |
WO2012037706A1 (en) | 2012-03-29 |
US8997113B2 (en) | 2015-03-31 |
KR101761650B1 (ko) | 2017-07-28 |
KR101534037B1 (ko) | 2015-07-08 |
US20130173894A1 (en) | 2013-07-04 |
EP2619687A4 (en) | 2014-04-09 |
EP2619687B1 (en) | 2016-04-06 |
US20150113255A1 (en) | 2015-04-23 |
KR20130040264A (ko) | 2013-04-23 |
TWI573094B (zh) | 2017-03-01 |
TW201214325A (en) | 2012-04-01 |
CN103109286A (zh) | 2013-05-15 |
CN103109286B (zh) | 2016-08-24 |
EP3043269A1 (en) | 2016-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101581796B1 (ko) | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 | |
US8719839B2 (en) | Two way communication support for heterogenous processors of a computer platform | |
KR101240092B1 (ko) | 컴퓨터 플랫폼에서의 방법 및 컴퓨터 플랫폼 | |
US10146522B1 (en) | Live code updates | |
US11030105B2 (en) | Variable handles | |
US20150331681A1 (en) | Handling value types | |
EP0546684A2 (en) | Method stubs for redispatch | |
US20040255268A1 (en) | Systems and methods providing lightweight runtime code generation | |
US8650537B2 (en) | Optimizing an object-oriented program by transforming invocations of synthetic accessor methods | |
US20080301636A1 (en) | Per-instance and per-class aspects | |
US20080301635A1 (en) | Per-instance and per-class aspects | |
KR20100110710A (ko) | 동적 라이브러리를 갖는 인터페이스를 간단히 하는 방법, 시스템 및 컴퓨터 프로그램 제품 | |
JP6280581B2 (ja) | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 | |
JP5902273B2 (ja) | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 | |
CN104536740B (zh) | 计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享 | |
Campeanu et al. | The realization of flexible GPU components in Rubus | |
Ciocarlie et al. | Considerations regarding the implementation of the ESPL programming language | |
Molina | Huemul–A Smalltalk Implementation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A107 | Divisional application of patent | ||
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
A107 | Divisional application of patent | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20181129 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20191127 Year of fee payment: 5 |