KR101761650B1 - 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 - Google Patents

컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 Download PDF

Info

Publication number
KR101761650B1
KR101761650B1 KR1020157036580A KR20157036580A KR101761650B1 KR 101761650 B1 KR101761650 B1 KR 101761650B1 KR 1020157036580 A KR1020157036580 A KR 1020157036580A KR 20157036580 A KR20157036580 A KR 20157036580A KR 101761650 B1 KR101761650 B1 KR 101761650B1
Authority
KR
South Korea
Prior art keywords
gpu
cpu
shared
virtual
memory
Prior art date
Application number
KR1020157036580A
Other languages
English (en)
Other versions
KR20160008245A (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 KR20160008245A publication Critical patent/KR20160008245A/ko
Application granted granted Critical
Publication of KR101761650B1 publication Critical patent/KR101761650B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • 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/10Address translation
    • 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/10Address translation
    • G06F12/1072Decentralised address translation, e.g. in distributed shared 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/447Target code generation
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • G06F9/548Object oriented; Remote method invocation [RMI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • 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
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing 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

컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유{SHARING VIRTUAL FUNCTIONS IN A SHARED VIRTUAL MEMORY BETWEEN HETEROGENEOUS PROCESSORS OF A COMPUTING PLATFORM}
컴퓨팅 플랫폼들은 중앙 처리 장치(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는 일 실시예에 따라 컴퓨터 플랫폼에서 제공된 이종 프로세서들 간의 공유 가상 메모리에 저장된 가상 함수들의 공유의 지원을 제공할 수 있는 컴퓨터 시스템을 도시한다.
이하의 설명은, 컴퓨팅 플랫폼의 이종 프로세서들 간에, 공유 가상 메모리에 저장된, 가상 함수들을 공유하기 위한 기술들을 설명한다. 이하의 설명에서, 논리 구현들, 리소스 분할, 또는 공유, 또는 복제 구현들, 시스템 컴포넌트들의 타입들 및 상호 관계들, 및 논리 분할 또는 통합 선택 사항들 등의 다수의 특정 세부 사항들이 본 발명의 더 철저한 이해를 제공하기 위해 기술된다. 그러나, 이러한 특정 세부 사항들 없이 본 발명이 실시될 수 있음을 당업자는 알 것이다. 다른 실례들에서, 제어 구조들, 게이트 레벨 회로들, 및 풀 소프트웨어 명령 시퀀스들은 본 발명을 모호하게 하지 않기 위해 상세히 도시되지 않았다. 포함된 설명으로, 당업자는 과도한 실험 없이 적합한 기능을 구현할 수 있을 것이다.
본 명세서에서 "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 (26)

  1. 플랫폼으로서,
    중앙 처리 장치(CPU) 및 그래픽 프로세싱 유닛(GPU)의 조합;
    상기 CPU 및 상기 GPU 둘 다에 액세스 가능한 공유 가상 메모리를 제공하는 수단;
    상기 공유 가상 메모리에 복수의 가상 함수들을 포함하는 공유 객체를 저장하는 수단; 및
    상기 복수의 가상 함수들 중 적어도 하나를 상기 CPU와 상기 GPU 간에 공유하는 수단을 포함하고,
    상기 공유 가상 메모리는 GPU 전용 메모리 공간 및 CPU 전용 메모리 공간에 의해 지원되는 플랫폼.
  2. 제1항에 있어서,
    상기 공유 객체는 비가상 함수 또는 가상 함수 테이블을 인덱싱하기 위한 가상 테이블 포인터 중 적어도 하나를 더 포함하는 플랫폼.
  3. 제1항에 있어서,
    상기 공유 객체는 CPU 측 가상 테이블 포인터를 포함하는 플랫폼.
  4. 제3항에 있어서,
    상기 GPU는 GPU 측 가상 테이블을 결정하기 위해 상기 CPU 측 가상 테이블 포인터를 사용하는 플랫폼.
  5. 제4항에 있어서,
    상기 GPU 측 가상 테이블은 클래스 이름, CPU 측 가상 테이블 어드레스 및 GPU 측 가상 테이블 어드레스를 포함하는 플랫폼.
  6. 제1항에 있어서,
    상기 플랫폼은,
    상기 공유 가상 메모리 내에 공유 비간섭성 아레나(shared non-coherent arena)를 생성하는 수단; 및
    CPU 측 가상 테이블 및 GPU 측 가상 테이블을 상기 공유 가상 메모리에 복사하는 수단 - 상기 CPU 측 가상 테이블 및 상기 GPU 측 가상 테이블은 상기 공유 가상 메모리 내에서 동일한 어드레스를 가짐 -
    을 더 포함하는 플랫폼.
  7. 가상 함수들을 공유하는 방법으로서,
    공유 가상 메모리를, 중앙 처리 장치(CPU) 및 그래픽 프로세싱 유닛(GPU)의 조합의 둘 다에 액세스 가능한 공유 물리 메모리에 맵핑하는 단계 - 상기 공유 가상 메모리는 상기 CPU 및 상기 GPU 둘 다에 액세스 가능함 -;
    상기 공유 가상 메모리에 복수의 가상 함수들을 포함하는 공유 객체를 저장하는 단계; 및
    상기 복수의 가상 함수들 중 적어도 하나를 상기 CPU와 상기 GPU 간에 공유하는 단계를 포함하는 방법.
  8. 제7항에 있어서,
    상기 공유 객체는 비가상 함수를 더 포함하는 방법.
  9. 제7항에 있어서,
    상기 공유 객체는 CPU 측 가상 테이블 포인터를 포함하는 방법.
  10. 제9항에 있어서,
    상기 GPU에 의해, GPU 측 가상 테이블을 결정하기 위해 상기 CPU 측 가상 테이블 포인터를 사용하는 단계를 더 포함하는 방법.
  11. 제10항에 있어서,
    상기 GPU 측 가상 테이블은 클래스 이름, CPU 측 가상 테이블 어드레스, 및 GPU 측 가상 테이블 어드레스를 포함하는 방법.
  12. 제10항에 있어서,
    상기 GPU 측 가상 테이블은 동적 연결 라이브러리들 또는 정적 연결 라이브러리들 중 적어도 하나를 지원하는 방법.
  13. 제7항에 있어서,
    상기 공유 가상 메모리 내에 공유 비간섭성 아레나를 생성하는 단계; 및
    CPU 측 가상 테이블 및 GPU 측 가상 테이블을 상기 공유 가상 메모리에 복사하는 단계 - 상기 CPU 측 가상 테이블 및 상기 GPU 측 가상 테이블은 상기 공유 가상 메모리 내에서 동일한 어드레스를 가짐 -
    를 더 포함하는 방법.
  14. 기록된 복수의 명령들을 포함하는 컴퓨터 판독 가능 기록 매체로서,
    상기 복수의 명령들은 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 상기 컴퓨팅 디바이스가
    공유 가상 메모리를, 중앙 처리 장치(CPU) 및 그래픽 프로세싱 유닛(GPU)의 조합의 둘 다에 액세스 가능한 공유 물리 메모리에 맵핑하고 - 상기 공유 가상 메모리는 상기 CPU 및 상기 GPU 둘 다에 액세스 가능함 -,
    상기 공유 가상 메모리에 복수의 가상 함수들을 포함하는 공유 객체를 저장하고,
    상기 복수의 가상 함수들 중 적어도 하나를 상기 CPU와 상기 GPU 간에 공유하여, 상기 가상 함수들을 공유하게 하는 컴퓨터 판독 가능 기록 매체.
  15. 제14항에 있어서,
    상기 공유 객체는 비가상 함수를 더 포함하는 컴퓨터 판독 가능 기록 매체.
  16. 제14항에 있어서,
    상기 공유 객체는 CPU 측 가상 테이블 포인터를 포함하는 컴퓨터 판독 가능 기록 매체.
  17. 제16항에 있어서,
    상기 GPU에 의해, GPU 측 가상 테이블을 결정하기 위해 상기 CPU 측 가상 테이블 포인터를 사용하는 것을 더 포함하는 컴퓨터 판독 가능 기록 매체.
  18. 제17항에 있어서,
    상기 GPU 측 가상 테이블은 클래스 이름, CPU 측 가상 테이블 어드레스, 및 GPU 측 가상 테이블 어드레스를 포함하는 컴퓨터 판독 가능 기록 매체.
  19. 제17항에 있어서,
    상기 GPU 측 가상 테이블은 동적 연결 라이브러리들 또는 정적 연결 라이브러리들 중 적어도 하나를 지원하는 컴퓨터 판독 가능 기록 매체.
  20. 제14항에 있어서,
    컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 상기 컴퓨팅 디바이스가
    상기 공유 가상 메모리 내에 공유 비간섭성 아레나를 생성하고,
    CPU 측 가상 테이블 및 GPU 측 가상 테이블을 상기 공유 가상 메모리에 복사하여 - 상기 CPU 측 가상 테이블 및 상기 GPU 측 가상 테이블은 상기 공유 가상 메모리 내에서 동일한 어드레스를 가짐 -
    상기 가상 함수들을 공유하게 하는 복수의 명령들을 더 포함하는 컴퓨터 판독 가능 기록 매체.
  21. 플랫폼으로서,
    중앙 처리 장치(CPU) 및 그래픽 프로세싱 유닛(GPU)의 조합; 및
    상기 GPU 및 상기 CPU 둘 다에 액세스 가능한 공유 가상 메모리
    를 포함하고,
    상기 공유 가상 메모리는 GPU 전용 메모리 공간 및 CPU 전용 메모리 공간에 의해 지원되고,
    상기 플랫폼은,
    상기 공유 가상 메모리에 복수의 가상 함수들을 포함하는 공유 객체를 저장하고,
    상기 복수의 가상 함수들 중 적어도 하나를 상기 CPU와 상기 GPU 간에 공유하는 플랫폼.
  22. 제21항에 있어서,
    상기 복수의 가상 함수들을 상기 CPU와 상기 GPU 간에 공유하는 상기 플랫폼은 상기 CPU와 상기 GPU 간의 양방향 통신을 포함하는 플랫폼.
  23. 제21항에 있어서,
    상기 공유 객체는 비가상 함수를 더 포함하는 플랫폼.
  24. 제21항에 있어서,
    상기 공유 객체는 CPU 측 가상 테이블 포인터를 포함하고, 상기 GPU는 GPU 측 가상 테이블을 결정하기 위해 상기 CPU 측 가상 테이블 포인터를 사용하는 플랫폼.
  25. 제21항에 있어서,
    상기 플랫폼은 또한, 상기 공유 가상 메모리 내에 공유 비간섭성 아레나를 생성하고, CPU 측 가상 테이블 및 GPU 측 가상 테이블을 상기 공유 가상 메모리에 복사하고, 상기 CPU 측 가상 테이블 및 상기 GPU 측 가상 테이블은 상기 공유 가상 메모리 내에서 동일한 어드레스를 갖는 플랫폼.
  26. 제25항에 있어서,
    상기 플랫폼은 또한, 가상 테이블 포인터를 상기 동일한 어드레스를 포인팅하도록 변경하고, 상기 CPU 측 가상 테이블은 CPU 측 함수 포인터들을 포함하고, 상기 GPU 측 가상 테이블은 상기 CPU 측 함수 포인터들과는 상이한 GPU 측 함수 포인터들을 포함하는 플랫폼.
KR1020157036580A 2010-09-24 2010-09-24 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 KR101761650B1 (ko)

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
KR1020147036803A Division KR101581796B1 (ko) 2010-09-24 2010-09-24 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유

Publications (2)

Publication Number Publication Date
KR20160008245A KR20160008245A (ko) 2016-01-21
KR101761650B1 true KR101761650B1 (ko) 2017-07-28

Family

ID=45873372

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1020157036580A KR101761650B1 (ko) 2010-09-24 2010-09-24 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유
KR1020147036803A KR101581796B1 (ko) 2010-09-24 2010-09-24 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유
KR1020137006592A KR101534037B1 (ko) 2010-09-24 2010-09-24 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유

Family Applications After (2)

Application Number Title Priority Date Filing Date
KR1020147036803A KR101581796B1 (ko) 2010-09-24 2010-09-24 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유
KR1020137006592A KR101534037B1 (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) KR101761650B1 (ko)
CN (1) CN103109286B (ko)
TW (1) TWI573094B (ko)
WO (1) WO2012037706A1 (ko)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101761650B1 (ko) 2010-09-24 2017-07-28 인텔 코포레이션 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유
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
CN104335162B (zh) * 2012-05-09 2018-02-23 英特尔公司 使用多个页表的执行
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간 데이터 공유 방법
CN109086086B (zh) * 2018-08-06 2021-06-08 深圳忆联信息系统有限公司 一种非空间共享的多核cpu的启动方法及装置
WO2020056620A1 (en) * 2018-09-19 2020-03-26 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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3874603B2 (ja) * 2000-11-21 2007-01-31 株式会社日立製作所 計算機システムの共有メモリ構築方法

Family Cites Families (33)

* Cited by examiner, † Cited by third party
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 富士通株式会社 プログラム実行システム
US8397241B2 (en) 2008-11-13 2013-03-12 Intel Corporation Language level support for 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
KR101761650B1 (ko) 2010-09-24 2017-07-28 인텔 코포레이션 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3874603B2 (ja) * 2000-11-21 2007-01-31 株式会社日立製作所 計算機システムの共有メモリ構築方法

Also Published As

Publication number Publication date
EP2619687A4 (en) 2014-04-09
EP3043269B1 (en) 2017-07-26
US20150113255A1 (en) 2015-04-23
TW201214325A (en) 2012-04-01
KR20160008245A (ko) 2016-01-21
EP2619687B1 (en) 2016-04-06
CN103109286A (zh) 2013-05-15
WO2012037706A1 (en) 2012-03-29
US8997113B2 (en) 2015-03-31
KR20130040264A (ko) 2013-04-23
KR101534037B1 (ko) 2015-07-08
KR101581796B1 (ko) 2016-01-04
JP5639274B2 (ja) 2014-12-10
TWI573094B (zh) 2017-03-01
US20130173894A1 (en) 2013-07-04
CN103109286B (zh) 2016-08-24
KR20150006903A (ko) 2015-01-19
EP2619687A1 (en) 2013-07-31
JP2013542497A (ja) 2013-11-21
EP3043269A1 (en) 2016-07-13

Similar Documents

Publication Publication Date Title
KR101761650B1 (ko) 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유
US8719839B2 (en) Two way communication support for heterogenous processors of a computer platform
US11175896B2 (en) Handling value types
KR101240092B1 (ko) 컴퓨터 플랫폼에서의 방법 및 컴퓨터 플랫폼
US10146522B1 (en) Live code updates
US20160011982A1 (en) Variable handles
US8650537B2 (en) Optimizing an object-oriented program by transforming invocations of synthetic accessor methods
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

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant