KR20120123127A - 이종 플랫폼에서 포인터를 공유시키는 방법 및 장치 - Google Patents

이종 플랫폼에서 포인터를 공유시키는 방법 및 장치 Download PDF

Info

Publication number
KR20120123127A
KR20120123127A KR1020127022911A KR20127022911A KR20120123127A KR 20120123127 A KR20120123127 A KR 20120123127A KR 1020127022911 A KR1020127022911 A KR 1020127022911A KR 20127022911 A KR20127022911 A KR 20127022911A KR 20120123127 A KR20120123127 A KR 20120123127A
Authority
KR
South Korea
Prior art keywords
pointer
processing core
memory
offset
memory location
Prior art date
Application number
KR1020127022911A
Other languages
English (en)
Other versions
KR101253012B1 (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 KR20120123127A publication Critical patent/KR20120123127A/ko
Application granted granted Critical
Publication of KR101253012B1 publication Critical patent/KR101253012B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • 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
    • 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
    • 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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (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가 공유하고 있는 메모리의 위치에 대한 포인터를 공유시키는 것을 가능하게 하는 로직을 갖고 있다. 이종 플랫폼에서 포인터를 공유함으로써, 이종 플랫폼의 서로 다른 코어 사이에서의 데이터 혹은 정보의 공유를 간소화시킬 수 있다.

Description

이종 플랫폼에서 포인터를 공유시키는 방법 및 장치{METHOD AND APPARATUS TO FACILITATE SHARED POINTERS IN A HETEROGENEOUS PLATFORM}
본 발명은 공유 포인터에 관한 것이고, 더 상세하게는 이종 플랫폼에서 포인터를 공유시키는 방법 및 장치에 관한 것이다.
OpenCL(Open Computing Language)은, 중앙 처리 장치(CPU), 그래픽 처리 장치(GPU) 및 다른 프로세서를 포함한 플랫폼의 이종에 걸쳐서 실행되는 프로그램을 기록하는 프레임워크이다. OpenCL은, 다양한 장치 사이에서 통신을 행하여 이들 장치의 데이터 병렬-통신 커널을 기록하는데 이용되는 C99 표준의 서브셋 및 다수의 확장판에 기초한 프로그래밍 언어로 이루어진다. OpenCL의 중요한 제한 중 하나는, 복잡한 데이터 구조를 다수의 이종 장치 사이에서 끊김없이 공유시키는 것이 불가능하다는 점이다.
전형적으로, GPU의 메모리는 영역의 세트로, 즉 에어리어로 나누어진다. 이들 영역은 바인딩 테이블(a binding table) 및 오프셋에 의해 참조되어 있다. 이러한 설계에서 CPU 포인터를 GPU 포인터로 변환(translating)하기 위해서는 오프셋 및 바인딩 테이블도 디코딩해야 하며, 이는 하나 이상의 바인딩 테이블이 존재하기 때문이다.
본 발명의 특징 및 이점은 청구 대상에 대한 이하의 상세한 설명으로부터 분명해질 것이다.
도 1은 본 발명의 일 실시예에 따른 프로세서의 블록도를 나타내는 도면,
도 2는 본 발명의 일 실시예에 따른 샘플 코드를 나타내는 도면,
도 3은 본 발명의 일 실시예에 따른 공유 포인터의 매핑을 나타내는 도면,
도 4는 본 발명의 일 실시예에 따른 샘플 코드를 나타내는 도면,
도 5는 본 발명의 일 실시예에 따른 샘플 코드를 나타내는 도면,
도 6은 본 발명의 일 실시예에 따른 샘플 코드를 나타내는 도면,
도 7은 본 발명의 일 실시예에 따른 샘플 코드를 나타내는 도면,
도 8은 본 발명의 일 실시예에 따른 흐름도를 나타내는 도면,
도 9는 본 발명의 일 실시예에 따른, 본 명세서에 개시된 방법을 실시하는 시스템을 나타내는 도면이다.
본 명세서에서 설명되는 본 발명의 실시예가 도면에 예시적인 것으로 도시되어 있지만, 이것으로 한정되는 것은 아니다. 설명을 간결하고 명료하게 하기 위해서, 도면에 도시된 구성 요소는 반드시 실제 축적으로 도시하지는 않았다. 예컨대, 명료하게 하기 위해서 일부 구성 요소의 치수는 다른 구성 요소보다 크게 도시되어 있다. 또한, 적절하다고 판단된 경우에는, 여러 도면에서, 동일한 참조 번호를 이용해서 대응하는 구성 요소 혹은 동일한 구성 요소를 나타내었다. 본 명세서에서 본 발명의 '일 실시예'를 참조한다는 것은, 그 실시예와 관련되어 설명된 특정한 특성, 구조 혹은 특징이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서, 명세서 전반에 걸쳐서 기재된 '일 실시예'라고 하는 표현이 모두 반드시 동일한 실시예를 가리키는 것은 아니다.
본 발명의 실시예는 이종 플랫폼에서 포인터를 공유시키는 방법 및 장치를 제공한다. 본 발명의 일 실시예에서, 이종 플랫폼, 즉 비-동종 플랫폼은 중앙 처리 코어 혹은 장치, 그래픽 처리 코어 혹은 장치, 디지털 신호 프로세서, 인터페이스 모듈 및 임의의 다른 형태의 처리 코어를 포함하지만, 이것으로 한정되는 것은 아니다. 본 발명의 일 실시예에서, 이종 플랫폼은 적어도 2개의 서로 다른 처리 코어를 갖고 있다.
본 발명의 일 실시예에서, 컴파일러 코드 생성 방식 혹은 방법을 통해서 이종 플랫폼의 2개의 서로 다른 코어 사이에서 포인터가 공유될 수 있다. 예컨대, 본 발명의 일 실시예에서, 이종 플랫폼은 중앙 처리 장치(CPU) 및 그래픽 처리 장치(GPU)를 포함한다. 이종 플랫폼은 CPU 및 GPU가 공유하고 있는 메모리의 위치에 대해 포인터를 공유시키는 로직을 갖고 있다. 본 발명의 일 실시예에서, CPU 및 GPU를 효율적인 이용할 수 있도록, C 프로그래밍 언어를 확장해서 CPU 및 GPU를 프로그래밍하는 새로운 방식을 제공한다. 이 프로그래밍 모델은, CPU와 GPU 사이에 하나의 어드레스 공간을 제공해서 CPU와 GPU가 직접 포인터를 공유할 수 있게 하는, SVM(공유 가상 메모리:a shared virtual memory)를 지원한다. 본 발명의 일 실시예에서 CPU 포인터는 소프트웨어적으로 혹은 하드웨어적으로 GPU 장치에 의해 끊김없이 공유될 수 있다.
본 발명의 일 실시예에서, 이종 플랫폼에서 포인터를 공유함으로써, 이종 플랫폼의 서로 다른 코어 사이에서의 데이터 혹은 정보의 공유를 간소화시킬 수 있다. 예컨대, 본 발명의 일 실시예에서, 이종 플랫폼이 링크된 리스트 즉 트리와 같은 포인터-기반 데이터 구조를 이용하고 있다면, 이종 플랫폼의 서로 다른 코어는 C, C++ 혹은 OpenCL과 같은 상위 레벨 프로그래밍 언어를 통해서, 서로 다른 코어 사이에서 공유되고 있는 포인터를 이용해 데이터를 공유할 수 있다.
본 발명의 일 실시예에서는, 이종 플랫폼은, 포인터를 공유하기 위해, 어떤 처리 코어의 가상-물리(virtual-to-physical) 매핑을 다른 처리 코어와 동일하게 할 필요가 없다. 본 발명의 일 실시예에서는, 이종 플랫폼에서 실행되는 컴파일러가, 각각의 코어가 동일한 물리 메모리 위치를 참조할 수 있도록, 가상 어드레스를 적절하게 조정시키는 코드를 작성한다. 작성된 코드는 기계어, IR(intermediate representation) 코드 및 임의의 다른 형태의 코드를 포함하지만, 이것으로 한정되는 것은 아니다.
도 1은 본 발명의 일 실시예에 따른 프로세서(105)의 블록도를 나타내고 있다. 프로세서(105)는 이종 플랫폼의 일 실시예로, 처리 모듈 1(110) 및 처리 모듈 2(120)를 갖고 있다. 본 발명의 일 실시예에서, 처리 모듈 1(110)은 처리 코어 1(112) 및 처리 코어 2(114)를 갖고 있다. 본 발명의 일 실시예에서, 처리 모듈 1(110)은 2개 이상의 처리 코어를 갖고 있다. 본 발명의 다른 실시예에서는, 처리 모듈 1(110)은 하나의 처리 코어만을 갖는다.
처리 모듈 1(110)은 프로세서(105) 내의 다른 모듈과의 통신을 가능하게 하는 인터페이스 모듈(116)을 갖고 있다. 본 발명의 일 실시예에서, 인터페이스 모듈(116)은 인텔® QuickPath Interconnect(QPI) 통신 프로토콜 혹은 임의의 다른 통신 프로토콜에 따라 동작하지만, 이것으로 한정되는 것은 아니다.
처리 모듈 2(120)는 처리 코어 3(124), 및 처리 모듈 1(110)과의 통신을 가능하게 하는 인터페이스 모듈(122)을 갖고 있다. 본 발명의 일 실시예에서, 처리 모듈 1(110)은 중앙 처리 장치이고, 처리 모듈 2(120)는 그래픽 처리 장치이다. 프로세서(105)는 본 발명의 다른 실시예에서는 다른 종류의 처리 장치를 가질 수 있다.
프로세서(105)는 한정의 의미로 개시된 것이 아니며, 본 발명의 동작에 영향을 미치지 않는 한 프로세서(105)의 다른 구성이 이용될 수도 있다. 예컨대, 본 발명의 일 실시예에서, 프로세서(105)는 처리 모듈 1(110) 및 처리 모듈 2(120)에 연결된 제 3의 처리 모듈을 갖고 있다.
도 2는 본 발명의 일 실시예에 따른 샘플 코드(200)를 나타내고 있다. 샘플 코드(200)는, 포인터가 CPU에서 정의되어서 CPU로 송신되는 본 발명의 일 실시예를 나타내고 있다. GPU는 포인터를 수신해서, 디레퍼런싱(de-referencing) 연산, 로드 인스트럭션 혹은 연산, 저장 인스트럭션 혹은 연산, 포인터 산술 연산 등과 같은 연산에 이 포인터를 이용하지만, 이것으로 한정되는 것은 아니다. 공유 포인터가 CPU에서 디레퍼런싱되는지 GPU에서 디레퍼런싱되는지에 상관없이, 공유 포인터는 같은 물리 메모리 위치를 가리키고 있다.
샘플 코드(200)는 C 언어로 기록된 코드를 나타내고 있으며, 데이터 병렬 계산 혹은 태스크 병렬 계산을 GPU로 오프로드시키는 함수를 포함한다. 라인 202는 공유 가상 메모리 혹은 어드레스 공간에 어레이를 할당하는 말록(malloc) 라이브러리 호출을 나타내고 있다. 라인 204는, 데이터-병렬 태스크를 실행을 위해서 큐에 배치하는, 오프로드 함수 호출을 나타내고 있다. 제 1 인수는 실행될 반복 횟수를 정의하고 있고, 제 2 인수는 콘텍스트를 정의하고 있으며, 제 3 인수는 함수를 오프로드할 함수 포인터를 정의하고 있다.
본 발명의 일 실시예에서, CPU 및 GPU는 서로 다른 포인터의 표현(representations)을 갖고 있다. 예컨대, 본 발명의 일 실시예에서, GPU에서의 포인터의 인코딩 및 길이 즉 비트는 CPU와 상이할 수 있다. 본 발명의 일 실시예에서 GPU의 포인터는 오프셋과 함께 바인딩 테이블 인덱스로서 표현될 수 있다. 이 바인딩 테이블은 GPU 표면 유입(GPU surface entries) 각각에 대한 기본 메모리 어드레스를 갖고 있고, 오프셋은 런타임시에 이 기본 어드레스에 추가된다. 본 발명의 일 실시예에서, 포인터의 표현이 CPU 및 GPU에서 서로 다른 것을 극복하기 위해서, 이종 플랫폼은, GPU 내의 메모리 내에서의 포인터의 표현을, CPU와 유사한 방식으로 유지시키는 로직을 갖고 있다. 본 발명의 일 실시예에서 이 포인터에 의해 표현되는 가상 어드레스의 값은 32, 64 또는 임의의 다른 적절한 비트값을 가질 수 있다.
도 3은 본 발명의 일 실시예에 따른 공유 포인터의 매핑(300)을 나타내고 있다. 설명을 명료하게 하기 위해서, 본 발명의 일 실시예에서 매핑(300)은 CPU와 GPU 사이의 공유 포인터를 나타내고 있다. 가상 어드레스 공간(302)은 CPU의 메모리 뷰를 나타내고 있고, GenX JIT(Just In Time) 뷰(304)는 GPU의 메모리 뷰를 나타내고 있다. GenX JIT IL(Intermediate Language)은 본 발명의 일 실시예에서 인텔® 그래픽 프로세서의 중간 표현 언어이다. 본 발명의 일 실시예에서, GenX JIT IL은 GPU 메모리 모델 및 프로그래밍 인스트럭션을 나타낸다.
CPU의 가상 어드레스 공간(302) 및 GPU의 GenX JIT 뷰(304)는, CPU와 GPU 모두가 액세스 가능한 공유 메모리 영역과 연관되어 있다. 설명을 명료하게 하기 위해서, 본 발명의 일 실시예에서 가상 어드레스 공간(302)의 공유 영역(310)은 공유 메모리의 특정 가상 메모리 매핑을 나타내고 있다. 가상 어드레스 공간(302)의 시작 어드레스는 메모리 어드레스 0x0(312)로 표시되어 있다. 공유 영역(310)은 기본 어드레스(314), 및 공유 영역(310)의 특정 메모리 위치를 가리키고 있는, 즉 참조하고 있는 포인터 p(316)를 갖고 있다.
본 발명의 일 실시예에서, 런타임 상수 c0.x(320)는 런타임시에 결정되어서 저장된다. 런타임 상수 c0.x(320)는 공유 영역(310)의 기본 어드레스(314)를 나타낸다. 본 발명의 일 실시예에서, 파라미터 c0.y(322)는 레지스터 혹은 임의의 저장 영역으로부터 로딩받는다. 파라미터 c0.y(322)는 공유 영역(320) 내의 포인터 p(316)의 메모리 어드레스를 나타낸다. 본 발명의 일 실시예에서, 런타임 상수 c0.x(320) 및 파라미터 c0.y(322)는 정수로 저장된다.
본 발명의 일 실시예에서, 런타임 상수 c0.x(320)가 런타임 상수로서 GPU로 송신된다. 본 발명의 일 실시예에서, 파라미터 c0.y(322)는 레지스터로부터 사전에 로딩받는다. 예컨대, 본 발명의 일 실시예에서, 이종 플랫폼은 런타임 상수 c0.x(320)를 GPU에서 실행되는 컴파일된 코드로 송신하는 소프트웨어 드라이버를 갖고 있고, 이 c0.y(322)는 레지스터로부터 사전에 로딩된다.
본 발명의 일 실시예에서, GPU는, 하나 이상의 영역의 세트 즉 에어리어로 나누어질 수 있는 메모리를 갖고 있다. 본 발명의 일 실시예에서 이 하나 이상의 영역의 세트는 바인딩 테이블 및 오프셋에 의해 참조될 수 있다. 메모리 영역 u0(330)은 그 포인터에 대한 오프셋을 가진 하나의 바인딩 테이블을 구비한, GPU 내의 메모리를 나타내고 있다. GPU는 런타임 상수 c0.x(320) 및 파라미터 c0.y(322)를 이용해서, GenX JIT 뷰(304) 내에서 대응하는 공유 영역을 결정한다. 예컨대, 포인터 ptr0(334)는 GPU 내의 메모리 영역 u0(330)의 시작 어드레스를 나타내고 있으며, 이는 CPU의 공유 영역(310)의 기본 어드레스(314)와 연관되어 있다.
본 발명의 일 실시예에서, 포인터 ptr1(332)는 포인터 ptr0(334) 및 런타임 상수 c0.x(320)로부터 결정된다. 예컨대, 본 발명의 일 실시예에서, 포인터 ptr1(332)는 포인터 ptr0(334)에서 런타임 상수 c0.x(320)를 감산함으로써 결정된다. 본 발명의 다른 실시예에서, 포인터 ptr1(332)는 런타임 상수 c0.x(320)의 음의 값에 포인터 ptr0(334)를 합산함으로써 결정된다.
본 발명의 일 실시예에서, 포인터 ptr2(336)의 GPU 표현은 포인터 합산 연산을 통해서 ptr1(332) 및 ptr2(336)의 정수값으로부터 유도될 수 있다. 예컨대, 포인터 ptr2(336)는 포인터 ptr1(332)와 파라미터 c0.y(322)를 합산함으로써 결정된다.
본 발명의 일 실시예에서, 런타임 상수 c0.x(320) 및 파라미터 c0.y(322)를 통해서, CPU 및 GPU 모두에 대해 공통의 가상-물리 매핑을 행하지 않고도 포인터 p(316)를 포인터 ptr2(336)로 매핑할 수 있다.
도 4는 본 발명의 일 실시예에 따른 샘플 코드(400)를 나타내고 있다. 설명을 명료하게 하기 위해서, 도 4는 도 3을 참조하여 설명된다. GenX JIT IL에서, 포인터는 리소스, GPU의 메모리 영역, 상수 버퍼, 혹은 스레드 그룹 공유 메모리와 연관되어 있지만, 이것으로 한정되는 것은 아니다. 이들 각각의 개체는 자체의 바인딩 테이블 엔트리를 갖고 있다. 공유 포인터를 지원하기 위해서, GPU 내의 하나의 메모리 영역이, 바인딩 테이블 인덱스를 GPU의 그 메모리 영역에 기초한 모든 포인터에 대한 상수로 만드는 프로그램에 할당된다. 이로써, 바인딩 테이블 인덱스가 상수인만큼 더욱 용이하게 가상 어드레스를 바인딩 테이블 인덱스와 오프셋으로 변환할 수 있게 된다.
본 발명의 일 실시예에서, CPU의 모든 포인터는 포인터 크기의 정수로서 GPU의 커널 코드로 송신된다. 예컨대, 본 발명의 일 실시예에서, 포인터의 원래의 크기가 32비트라면, 32비트 정수가 CPU로부터 GPU로 송신된다. 본 발명의 다른 실시예에서는, 포인터의 원래의 크기는 64비트를 가질 수도 있고, 혹은 다른 적절한 비트수가 될 수도 있다.
본 발명의 일 실시예에서, 이 정수값으로부터 각각의 포인터의 오프셋이 유도되어서 GPU의 하나의 메모리 영역에 인가된다. 이로써, GenX JIT IL의 GPU 포인터와 같은 포인터를 모든 CPU 포인터에 대해서 획득할 수 있다. 샘플 코드(400)는 본 발명의 일 실시예에서, 32비트의 포인터에 대한 GenX JIT IL 코드의 예를 나타내고 있다.
라인 410은 GPU 내의 메모리 영역 u0(330)의 선언을 나타내고 있다. 본 발명의 일 실시예에서, 소프트웨어 드라이버는 메모리 영역 u0(330)을, CPU와 GPU가 공유하고 있는 메모리 영역으로 패치, 즉 연관시킨다. 라인 412은 공유 영역 및 포인터 p(316)의 기본 어드레스(314)의 선언을 나타내고 있다. 라인 414는 스레드 식별자(ID)의 선언을 나타내고 있다. 라인 416, 418, 420은 포인터 ptr0(334), ptr1(332) 및 ptr2(336) 각각의 선언을 나타내고 있다.
라인 422은 포인터 ptr0(334)가 메모리 영역 u0(330)에 할당되는 것을 나타내고 있다. 라인 424는 포인터 ptr1(332) 및, 포인터 ptr0(334)와 런타임 상수 c0.x(320)를 포함한 2개의 인수의 선언을 나타내고 있다. PADD 함수를 통해서 제 1 인수인 포인터 ptr0(334)와, 제 2 인수인 음의 런타임 상수 c0.x(320) 즉 -c0.x를 합산해서 포인터 ptr1(332)를 얻는다.
라인 426은 포인터 ptr2(336) 및, 포인터 ptr1(332)와 파라미터 c0.y(322)를 포함한 2개의 인수의 선언을 나타내고 있다. PADD 함수를 통해서 제 1 인수인 포인터 ptr1(332)와, 제 2 인수인 파라미터 c0.y(322)를 합산해서 포인터 ptr2(336)를 얻는다.
샘플 코드(400)는 본 발명의 일 실시예를 나타내는 것으로, 한정의 의미는 아니다. 본 발명의 일 실시예에서 샘플 코드(400)는 동적 컴파일러에 의해 최적화될 수 있다. 예컨대, 본 발명의 일 실시예에서, 동적 컴파일러가 메모리 영역 u0(330)의 런타임 값 및 런타임 상수 c0.x(320)를 알고 있으므로, 라인 422 및 424는 생략될 수 있다.
당업자라면, 본 발명의 동작에 영향을 미치지 않는 한, 다른 코드 포맷이 이용될 수도 있다는 것을 이해할 것이며, 이들 다른 코드 포맷은 설명하지 않는다. 본 발명의 다른 실시예에서, 본 발명의 동작에 영향을 미치지 않는 한, 64비트 포인터가 사용될 수도 있다.
본 발명의 일 실시예에서, 포인터의 공유가 컴파일러 백엔드로 한정되는 것은 아니다. 본 발명의 다른 실시예에서, 포인터의 공유는 다른 중간 언어 레벨에서의 컴파일러 변형(transformations)으로서 수행될 수 있다. 예컨대, 본 발명의 일 실시예에서 포인터의 공유는 C 즉 OpenCL 코드로부터 OpenCL 코드를 생성하는 소스-소스 변형을 이용해서 수행될 수 있다. 본 발명의 다른 실시예에서, 포인터의 공유는 로우 레벨 가상 머신 IR(LLVMIR) 레벨에서 수행될 수 있으며, 즉 LLVMIR로부터 LLVMIR로의 변형이 될 수 있다.
도 5는 본 발명의 일 실시예에 따른 샘플 코드(500)를 나타내고 있다. 본 발명의 일 실시예에서, 정수 저장 연산을 이용해서 포인터를 메모리에 저장한다. 본 발명의 일 실시예에서, IL에서 GPU 포인터가 어떻게 표현되는지에 따라서, GPU 포인터에 대해, CPU 가상 어드레스와 동일한 정수값을 획득하는데 몇 가지 조정이 필요할 수 있다. 샘플 코드(500)는 C 언어로 기록된, 조정의 일 실시예를 나타내고 있다.
라인 510은 링크된 리스트 노드의 선언을 나타내고 있다. 라인 520은 링크된 리스트 노드 컨텍스트의 선언을 나타내고 있다. 라인 530은 GPU에서 실행될 foo 함수를 나타내고 있다. 라인 540은 링크된 리스트 노드 포인터 p의 선언을 나타내고 있다. 라인 550은 데이터-병렬 태스크를 큐에 배치하는 메인 코드 및 링크된 리스트 노드 포인터 p의 적절한 조정을 나타내고 있다. 당업자라면 샘플 코드(500)의 동작을 이해할 것이므로, 여기서는 그 설명은 생략한다.
도 6은 본 발명의 일 실시예에 따른 샘플 코드(600)를 나타내고 있다. 설명을 명확하게 하기 위해서, 도 6은 도 3, 4 및 5를 참조해서 설명된다. 본 발명의 일 실시예에서 샘플 코드(600)는 컴파일러에 의해 생성된 GenX JIT IL 코드를 나타내고 있다. 라인 616은 샘플 코드(500)에서의 스레드 인덱스로부터 획득한 인덱스 i를 가진 파라미터 i0.x를 나타내고 있다. 라인 616에서 파라미터 i0.x를 바이트 오프셋으로 변경하고 포인터 ptr2(336)에 합산해서, 포인터 ptr3를 획득한다.
본 발명의 일 실시예에서, GPU는 포인터 ptr3를 이용해서 데이터를 저장할 수 있다. 예컨대, 라인 630에서, GPU는 포인터 ptr3를 이용해서 &p[i+1]의 값을 저장한다. 당업자라면 샘플 코드(500)의 동작을 이해할 것이므로, 여기서는 그 설명은 생략한다. 도 4, 5 및 6에 도시된 샘플 코드는 본 발명의 실시예가 컴파일러 백엔드에서 사용되는 것을 예시하고 있지만, 이것으로 한정되는 것은 아니다. 본 발명의 다른 실시예에서는, C, C++, 오브젝티브 C, 오브젝티브 C++ 및 OpenCL 소스를 이용해서 LLVMIR를 생성하는 Clang와 같은 컴파일러 프론트엔드에서 사용될 수도 있다.
예컨대, 도 7은 표준 OpenCL으로 기록된 샘플 코드 700를 나타내고 있으며, 이는 본 발명의 일 실시예에 따른 샘플 코드 500의 링크된 리스트와 같은 것이다. 본 발명의 일 실시예에서 샘플 코드 700는 공유 포인터를 표준 OpenCL 스택 중 상위부에서 실시하는데 이용될 수 있는 소스-소스 변형을 나타내고 있다. 당업자라면 샘플 코드 700의 동작을 이해할 것이므로, 그 설명은 생략한다.
본 발명의 일 실시예에서, 이종 플랫폼은 어드레스 공간의 서로 다른 폭 및 크기를 이용하는 처리 코어를 갖고 있다. 예컨대, 본 발명의 일 실시예에서, CPU는 64비트 어드레스 공간을 갖고 있고, GPU는 32비트 어드레스 공간을 갖고 있다. GPU에서의 포인터의 메모리 내 표현을 CPU가 포인터를 표현하는 것과 같은 방식으로 유지함으로써, CPU의 64비트 애플리케이션이, 32비트 포인터만을 지원하는 GPU와 가상 메모리를 공유할 수 있다.
도 8은 본 발명의 일 실시예에 따른 흐름도(800)를 나타낸다. 설명을 명확하게 하기 위해서, 도 8은 도 3을 참조로 설명된다. 단계 810에서, 흐름도(800)는 제 1 처리 코어의 공유 메모리 영역의 제 1 기본 어드레스를 결정한다. 예컨대, 본 발명의 일 실시예에서, 단계 810에서 CPU의 가상 어드레스 공간(302)에서의 공유 영역(310)의 기본 어드레스(314)를 결정한다.
단계 820에서, 흐름도(800)는 제 1 처리 코어에서 제 1 포인터의 메모리 위치를 결정한다. 예컨대, 본 발명의 일 실시예에서, 단계 820에서 CPU의 가상 어드레스 공간(302)에서의 포인터 p(316)의 메모리 위치를 결정한다. 본 발명의 일 실시예에서, 단계 810에서 결정된 제 1 기본 어드레스 및 단계 820에서 결정된 메모리 위치는 런타임 정수 상수로서 저장된다. 단계 810에서 결정된 제 1 기본 어드레스 및 단계 820에서 결정된 메모리 위치는 제 2 처리 코어에서도 이용할 수 있게 되어 있으며, 이로써 제 2 처리 코어는 제 1 처리 코어의 제 1 포인터에 대응하는 포인터를 매핑 혹은 변환할 수 있다.
단계 830에서, 흐름도(800)는 제 1 기본 어드레스에 기초해서 제 2 처리 코어의 다른 공유 메모리 영역의 시작 어드레스를 결정한다. 예컨대, 본 발명의 일 실시예에서, 단계 830에서, 제 1 기본 어드레스를 이용해서 GPU의 메모리 영역 u0(330)의 포인터 ptr1(332)의 메모리 위치를 결정한다. 제 2 처리 코어가 포인터 ptr0(334)를 알고 있기 때문에, 포인터 ptr0(334)에서 제 1 기본 어드레스를 감산함으로써 포인터 ptr1(332)를 결정한다. 본 발명의 다른 실시예에서, 포인터 ptr1(332)는 포인터 ptr0(334)를 제 1 기본 어드레스의 음의 값과 합산함으로써 결정된다.
단계 840에서, 흐름도(800)는 제 1 포인터의 메모리 위치와 시작 어드레스에 기초해서 제 1 포인터와 연관된 포인터의 대응 메모리 위치를 결정하고, 흐름도(800)는 종료된다. 예컨대, 본 발명의 일 실시예에서, 단계 840에서, 제 1 포인터의 메모리 위치 즉, c0.y(322) 및 시작 어드레스 즉, 포인터 ptr1(332)를 이용해서, GPU의 메모리 영역 u0(330)에서의 포인터 ptr2(336)의 메모리 위치를 결정한다. 포인터 ptr2(336)는 포인터 ptr1(332)와 파라미터 c0.y(322)를 합산함으로써 결정된다. 본 발명의 다른 실시예에서, 코드 모션과 같은(이것으로 한정되는 것은 아님) 표준 컴파일러 최적화가 적용되어서, 루프 밖으로 포인터 동작을 호이스트(hoist)할 수도 있다.
본 발명의 다른 실시예에서, 컴파일러 최적화를 통해, 상술한 바와 같이, CPU 포맷 대신 GPU 포맷으로 포인터를 저장하는 것을 선택할 수 있다. 본 발명의 일 실시예에서 포인터가 GPU 포맷으로 저장되면, 로드 연산이나 저장 연산에 어떤 변환도 필요없다. 본 발명의 일 실시예에서, GPU 포인터는 인버스 포인터 연산을 수행해서 CPU 포인터로 변환된다. 예컨대, 도 3에서 포인터 ptr2(336)는 인버스 포인터 연산을 수행해서 포인터 p(316)로 변환될 수 있다. 당업자라면 인버스 포인터 연산을 어떻게 수행하는지 알고 있기 때문에, 여기서는 그 설명은 생략한다.
도 9는 본 명세서에 설명된, 본 발명의 일 실시예에 따른 방법을 실시하는 시스템(900)을 나타내고 있다. 시스템(900)은 데스크톱 컴퓨터, 랩톱 컴퓨터, 넷북, 노트북 컴퓨터, PDA, 서버, 워크스테이션, 휴대 전화, 모바일 컴퓨팅 장치, 인터넷 어플라이언스 혹은 임의의 타입의 컴퓨팅 장치를 포함하지만, 이것으로 한정되는 것은 아니다. 다른 실시예에서, 본 명세서에 개시된 방법을 실시하는데 이용되는 시스템(900)은 시스템 온 칩(SOC) 시스템이 될 수 있다.
프로세서(910)는 시스템(900)의 인스트럭션을 실행하는 처리 모듈 1(912)을 구비하고 있다. 처리 모듈 1(912)은 인스트럭션을 페치하는 프리페치 로직, 인스트럭션을 디코딩하는 디코딩 로직, 인스트럭션을 실행하는 실행 로직 등을 포함하지만, 이것으로 한정되는 것은 아니다. 프로세서 처리 모듈 1(912)은 시스템(900)의 인스트럭션 및/또는 데이터를 캐시하는 캐시 메모리(도시 생략)를 갖고 있다. 본 발명의 다른 실시예에서, 캐시 메모리는, 처리 모듈 1(912) 내의 레벨 1, 레벨 2 및 레벨 3의 캐시 메모리 및 임의의 다른 구성의 캐시 메모리를 포함하지만 이것으로 한정되는 것은 아니다.
프로세서(910)는 표시 장치(940)에 연결된 처리 모듈 2(916)를 구비하고 있다. 표시 장치(940)는 LCD(liquid crystal display), CRT(cathode ray tube) 표시 장치, 혹은 다른 임의의 형태의 시각 표시 장치를 포함하지만, 이것으로 한정되는 것은 아니다. 본 발명의 일 실시예에서, 처리 모듈 2(916)는 그래픽 처리 연산을 실행한다. 처리 모듈 2(916)는, 처리 모듈 1(912)이 자신에게 오프로드한, 인스트럭션을 실행할 수도 있고, 혹은 태스크를 처리할 수도 있다.
프로세서(910)는 MCH(memory control hub)(914)을 이용해서 휘발성 메모리(932) 및/또는 비휘발성 메모리(934)를 포함한 메모리(930)에 액세스해서 통신할 수 있다. 휘발성 메모리(932)는 SDRAM(Synchronous Dynamic Random Access Memory), DRAM(Dynamic Random Access Memory), RDRAM(RAMBUS Dynamic Random Access Memory) 및/또는 임의의 다른 형태의 랜덤 액세스 메모리 소자를 포함하지만, 이것으로 한정되는 것은 아니다. 비휘발성 메모리(34)는 NAND 플래시 메모리, PCM(phase change memory), ROM(read only memory), EEPROM(electrically erasable programmable read only memory) 또는 임의의 다른 형태의 랜덤 액세스 메모리 소자를 포함하지만, 이것으로 한정되는 것은 아니다.
메모리(930)는 정보, 및 프로세서(910)에 의해 실행될 인스트럭션을 저장하고 있다. 메모리(930)는, 프로세서(910)가 인스트럭션을 실행하는 동안의 임시 변수나 다른 중간 정보를 저장할 수도 있다. 이 프로세서(910)에는 칩셋(920)이 점대점(PtP) 인터페이스(917, 922)를 통해서 접속되어 있다. 이 칩셋(920)을 통해서 프로세서(910)는 시스템(900)의 다른 모듈에 접속할 수 있다. 본 발명의 일 실시예에서, 인터페이스(917, 922)는, 인텔® QuickPath Interconnect(QPI) 등의 PtP 통신 프로토콜에 따라서 동작한다.
아울러, 칩셋(920)은 다양한 모듈(974, 980, 982, 984, 986)을 상호 접속시키는 하나 이상의 버스(950, 960)에 접속되어 있다. 버스(950, 960)는, 버스 속도나 통신 프로토콜이 일치하지 않는 경우, 버스 브리지(972)를 통해서 서로 접속될 수 있다. 칩셋(920)은 비휘발성 메모리(980), 대용량 저장 장치(982), 키보드/마우스(984) 및 네트워크 인터페이스(986)에 연결되지만, 이것으로 한정되는 것은 아니다. 대용량 저장 장치(982)는 SSD(a solid state drive), 하드디스크 드라이브, USB 플래시 메모리 드라이브, 혹은 임의의 다른 형태의 컴퓨터 데이터 저장 매체를 포함하지만, 이것으로 한정되는 것은 아니다. 네트워크 인터페이스(986)는, 이더넷 인터페이스, USB 인터페이스, PCI 익스프레스 인터페이스, 무선 인터페이스 및/또는 임의의 다른 형태의 적절한 인터페이스를 포함한, 임의의 타입의 공지된 네트워크 인터페이스를 이용해서 구현되지만, 이것으로 한정되는 것은 아니다. 무선 인터페이스는 IEEE 802.11 표준 및 이와 관련된 패밀리, HPAV(Home Plug AV), UWB(Ultra Wide Band), 블루투스, WiMax 혹은 임의의 형태의 무선 통신 프로토콜에 따라 동작하지만, 이것으로 한정되는 것은 아니다.
도 9에 도시된 모듈이 시스템(900) 내의 개별 블록으로서 도시되어 있지만, 이들 블록 중 일부가 수행하는 기능은 하나의 반도체 회로 내로 통합될 수도 있고, 2개 이상의 개별 집적 회로를 이용해서 구현될 수도 있다. 본 명세서에 개시된 방법은 하드웨어, 소프트웨어, 펌웨어 혹은 이들의 임의의 조합으로 구현될 수 있다. 개시된 청구 대상의 실시예의 예가 설명되었지만, 당업자라면, 이와 달리, 개시된 청구 대상을 구현하는 다른 많은 방법이 사용될 수 있다는 것을 이해할 것이다. 상기 설명에서, 개시된 청구 대상의 다양한 측면들을 설명했다. 청구 대상을 완전하게 이해하기 위한 설명의 목적으로 특정 수치, 시스템 및 구성을 제시했다. 그러나, 본 명세서의 이점을 취한 당업자라면, 청구 대상이 이러한 세부 사항 없이도 실시될 수 있다는 것을 이해할 것이다. 다른 예로, 개시된 청구 대상을 불명확하게 하지 않기 위해서, 공지된 특성, 구성 요소 혹은 모듈을 생략하거나, 간략화하거나, 통합하거나 나누었다.
본 명세서에서 사용되는 용어 '동작 가능'이란, 장치, 시스템, 프로토콜 등이, 그 장치 혹은 시스템이 오프 파워(off-powered) 상태에 있을 때, 소망의 기능을 행하도록 동작할 수 있거나, 동작하도록 채택된다는 것을 의미한다. 개시된 청구 대상의 다양한 실시예가 하드웨어, 펌웨어, 소프트웨어 혹은 이들의 조합에 의해서 구현될 수 있으며, 머신에 의해 액세스되었을 때, 머신으로 하여금, 태스크, 압축 데이터 타입이나 저레벨 하드웨어 컨텍스트의 정의, 혹은 그 결과를 내는 동작을 수행하게 하는, 인스트럭션, 함수, 프로시저, 데이터 구조, 로직, 애플리케이션 프로그램, 시뮬레이션을 위한 설계 표현 혹은 그 포맷, 에뮬레이션, 및 설계 제작(fabrication of a design)과 같은 프로그램 코드를 참조해서, 혹은 프로그램 코드와 함께 설명될 수 있다.
도면에 도시된 기법은, 범용 컴퓨터 혹은 컴퓨팅 장치와 같은 컴퓨팅 장치 중 하나 이상에 저장되어 실행되는 코드 및 데이터를 이용해서 구현될 수 있다. 이러한 컴퓨팅 장치는 머신 판독 가능 저장 매체와 같은 머신 판독 가능 매체(예컨대, 자기 디스크, 광 디스크, RAM, ROM, 플래시 메모리 소자, 상변환 소자 등) 및 머신 판독 가능 통신 매체(예컨대, 전기 신호, 광 신호, 음향 신호 혹은 다른 형태의 전파형 신호 - 반송파, 적외선 신호, 디지털 신호 등과 같은 -)를 이용해서 코드 및 데이터를 저장하고, (내부적으로, 그리고 네트워크를 통해서 다른 컴퓨팅 장치와) 통신한다.
개시된 청구 대상을 예시적인 실시예를 참조로 설명했지만, 이 설명은 한정의 의미가 아니다. 개시된 청구 대상의 분야에 종사하는 당업자에게는, 청구 대상의 다른 실시예는 물론, 예시적인 실시예의 다른 수정예도, 개시된 청구 대상의 범주 내에 포함된다는 것은 자명할 것이다.

Claims (23)

  1. 제 1 처리 코어와 제 2 처리 코어 사이에서 메모리 위치에 대한 포인터를 공유시키는 단계를 포함하고,
    상기 메모리 위치는, 상기 제 1 처리 코어와 상기 제 2 처리 코어가 모두 액세스할 수 있는 공유 메모리 영역(shared memory region)에 있는
    방법.
  2. 제 1 항에 있어서,
    상기 제 1 처리 코어에 의해, 상기 메모리 위치에 대한 상기 포인터를 정의하는 단계와,
    상기 제 1 처리 코어에 의해, 상기 메모리 위치의 기본 메모리 어드레스(base memory address)를 포함한 제 1 정수 상수를 결정하는 단계와,
    상기 제 1 처리 코어에 의해, 상기 메모리 위치에 대한 상기 포인터의 메모리 어드레스의 값을 포함한 제 2 정수 파라미터를 결정하는 단계를 더 포함하는
    방법.
  3. 제 1 항에 있어서,
    상기 제 1 처리 코어와 상기 제 2 처리 코어 사이에서 상기 메모리 위치에 대한 상기 포인터를 공유시키는 단계는,
    상기 제 2 처리 코어에 의해, 상기 제 1 정수 상수 및 상기 제 2 정수 파라미터에 적어도 부분적으로 기초해서 제 2 포인터를 정의하는 단계를 포함하고,
    상기 메모리 위치에 대한 상기 포인터와 상기 제 2 포인터는, 동일한 물리적 메모리 위치를 가리키고 있는
    방법.
  4. 제 3 항에 있어서,
    상기 제 2 처리 코어에 의해, 상기 제 1 정수 상수 및 상기 제 2 정수 파라미터에 적어도 부분적으로 기초해서 제 2 포인터를 정의하는 단계는,
    상기 제 2 처리 코어의 가상 메모리 위치의 다른 기본 메모리 어드레스, 및 상기 제 1 정수 상수에 적어도 부분적으로 기초해서 제 3 포인터를 정의하는 단계와,
    상기 제 3 포인터 및 상기 제 2 정수 파라미터에 적어도 부분적으로 기초해서 상기 제 2 포인터를 정의하는 단계를 포함하는
    방법.

  5. 제 1 항에 있어서,
    상기 제 1 처리 코어는 중앙 처리 장치(CPU)이고, 상기 제 2 처리 코어는 그래픽 처리 장치(GPU)인
    방법.
  6. 제 4 항에 있어서,
    상기 제 2 처리 코어의 상기 제 2 포인터 및 상기 제 3 포인터는 바인딩 테이블(binding table)과 연관되어 있는
    방법.
  7. 제 1 항에 있어서,
    상기 제 1 처리 코어 및 제 2 처리 코어는 OpenCL(Open Computing Language), LLVM(low level virtual machine) IL(intermediate language) 및 GenX JIT IL 중 하나를 적어도 부분적으로 따르고 있는
    방법.

  8. 복수의 비-동종(non-homogeneous) 처리 코어와,
    상기 복수의 비-동종 처리 코어 각각에 연결된 메모리와,
    상기 복수의 비-동종 처리 코어에 의해, 상기 메모리 내의 공유 영역의 위치에 대한 포인터를 공유할 수 있게 하는 로직을 포함하는
    장치.
  9. 제 8 항에 있어서,
    상기 복수의 비-동종 처리 코어 중 제 1 처리 코어는 상기 공유 영역과 연관된 제 1 가상 맵을 갖고 있고,
    상기 복수의 비-동종 처리 코어 중 제 2 처리 코어는 상기 공유 영역과 연관된 제 2 가상 맵을 갖고 있는
    장치.
  10. 제 9 항에 있어서,
    상기 로직은 또한,
    상기 제 1 가상 맵에 대한 제 1 포인터를 결정하고,
    상기 제 1 가상 맵의 기본 메모리 어드레스를 포함한 제 1 오프셋을 결정하며,
    상기 제 1 가상 맵에 대한 상기 제 1 포인터의 메모리 어드레스의 값을 포함한 제 2 오프셋을 결정하는
    장치.
  11. 제 8 항에 있어서,
    상기 복수의 비-동종 처리 코어에 의해, 상기 메모리 내의 공유 영역의 위치에 대한 포인터를 공유할 수 있게 하는 상기 로직은,
    상기 제 1 오프셋 및 상기 제 2 오프셋에 적어도 부분적으로 기초해서 상기 제 2 가상 맵에 대한 제 2 포인터를 정의하고,
    상기 제 1 포인터와 상기 제 2 포인터는 상기 공유 영역에서 동일한 물리적 메모리 위치를 참조하는
    장치.
  12. 제 11 항에 있어서,
    상기 제 1 오프셋 및 상기 제 2 오프셋에 적어도 부분적으로 기초해서 상기 제 2 가상 맵에 대한 제 2 포인터를 정의하는 상기 로직은,
    상기 제 2 가상 맵의 다른 기본 메모리 어드레스 및 상기 제 1 오프셋에 적어도 부분적으로 기초해서 제 3 포인터를 정의하고,
    상기 제 3 포인터 및 상기 제 2 오프셋에 적어도 부분적으로 기초해서 상기 제 2 포인터를 정의하는
    장치.
  13. 제 11 항에 있어서,
    상기 복수의 비-동종 처리 코어는 적어도 하나의 중앙 처리 장치(CPU) 및 적어도 하나의 그래픽 처리 장치(GPU)를 포함하는
    장치.
  14. 제 12 항에 있어서,
    상기 제 2 포인터 및 상기 제 3 포인터는 바인딩 테이블과 연관되어 있는
    장치.
  15. 제 8 항에 있어서,
    상기 복수의 비-동종 처리 코어는 OpenCL, LLVM IL 및 GenX JIT IL 중 하나를 적어도 부분적으로 따르고 있는
    장치.
  16. 인스트럭션이 저장되어 있는 머신 판독 가능 저장 매체에 있어서,
    상기 인스트럭션은 실행시에 프로세서로 하여금, 제 1 처리 코어와 제 2 처리 코어 사이에서 메모리 위치에 대한 포인터를 공유시키는 단계를 포함하는 방법을 수행하게 하고,
    상기 메모리 위치는, 상기 제 1 처리 코어와 상기 제 2 처리 코어가 모두 액세스할 수 있는 공유 메모리 영역에 있는
    머신 판독 가능 저장 매체.
  17. 제 16 항에 있어서,
    상기 방법은
    상기 제 1 처리 코어에 의해 상기 메모리 위치에 대한 상기 포인터를 정의하는 단계와,
    상기 제 1 처리 코어에 의해 상기 메모리 위치의 기본 메모리 어드레스를 포함한 제 1 오프셋을 결정하는 단계와,
    상기 제 1 처리 코어에 의해 상기 메모리 위치에 대한 상기 포인터의 메모리 어드레스의 값을 포함한 제 2 오프셋을 결정하는 단계를 더 포함하는
    머신 판독 가능 저장 매체.
  18. 제 16 항에 있어서,
    상기 제 1 처리 코어와 상기 제 2 처리 코어 사이에서 상기 메모리 위치에 대한 상기 포인터를 공유시키는 단계는,
    상기 제 2 처리 코어에 의해, 상기 제 1 오프셋 및 상기 제 2 오프셋에 적어도 부분적으로 기초해서 제 2 포인터를 정의하는 단계를 포함하고,
    상기 메모리 위치에 대한 상기 포인터와 상기 제 2 포인터는 동일한 물리적 메모리 위치를 가리키고 있는
    머신 판독 가능 저장 매체.
  19. 제 18 항에 있어서,
    상기 제 2 처리 코어에 의해, 상기 제 1 오프셋 및 상기 제 2 오프셋에 적어도 부분적으로 기초해서 제 2 포인터를 정의하는 단계는,
    상기 제 2 처리 코어의 가상 메모리 위치의 다른 기본 메모리 어드레스, 및 상기 제 1 오프셋에 적어도 부분적으로 기초해서 제 3 포인터를 정의하는 단계와,
    상기 제 3 포인터 및 상기 제 2 오프셋에 적어도 부분적으로 기초해서 상기 제 2 포인터를 정의하는 단계를 포함하는
    머신 판독 가능 저장 매체.
  20. 제 16 항에 있어서,
    상기 제 1 처리 코어는 중앙 처리 장치(CPU)이고, 상기 제 2 처리 코어는 그래픽 처리 장치(GPU)인
    머신 판독 가능 저장 매체.
  21. 제 19 항에 있어서,
    상기 제 2 처리 코어의 상기 제 2 포인터 및 상기 제 3 포인터는 바인딩 테이블과 연관되어 있는
    머신 판독 가능 저장 매체.
  22. 제 16 항에 있어서,
    상기 제 1 처리 코어 및 제 2 처리 코어는 OpenCL, LLVM IL 및 GenX JIT IL 중 하나를 적어도 부분적으로 따르고 있는
    머신 판독 가능 저장 매체.
  23. 제 16 항에 있어서,
    상기 포인터는 상기 제 2 처리 코어에 적합한 포맷으로 저장되어 있는
    머신 판독 가능 저장 매체.
KR1020127022911A 2011-03-29 2011-12-09 이종 플랫폼에서 포인터를 공유시키는 방법 및 장치 KR101253012B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/074,779 2011-03-29
US13/074,779 US8566537B2 (en) 2011-03-29 2011-03-29 Method and apparatus to facilitate shared pointers in a heterogeneous platform
PCT/US2011/064244 WO2012134557A1 (en) 2011-03-29 2011-12-09 Method and apparatus to facilitate shared pointers in a heterogeneous platform

Publications (2)

Publication Number Publication Date
KR20120123127A true KR20120123127A (ko) 2012-11-07
KR101253012B1 KR101253012B1 (ko) 2013-04-16

Family

ID=46928842

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127022911A KR101253012B1 (ko) 2011-03-29 2011-12-09 이종 플랫폼에서 포인터를 공유시키는 방법 및 장치

Country Status (6)

Country Link
US (3) US8566537B2 (ko)
EP (1) EP2691852A4 (ko)
KR (1) KR101253012B1 (ko)
CN (1) CN102959504B (ko)
TW (1) TWI471730B (ko)
WO (1) WO2012134557A1 (ko)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8667249B2 (en) * 2004-12-22 2014-03-04 Intel Corporation Systems and methods exchanging data between processors through concurrent shared memory
US20130113809A1 (en) * 2011-11-07 2013-05-09 Nvidia Corporation Technique for inter-procedural memory address space optimization in gpu computing compiler
US20130141443A1 (en) * 2011-12-01 2013-06-06 Michael L. Schmit Software libraries for heterogeneous parallel processing platforms
US9311250B2 (en) * 2011-12-19 2016-04-12 Intel Corporation Techniques for memory de-duplication in a virtual system
US9009419B2 (en) * 2012-07-31 2015-04-14 Advanced Micro Devices, Inc. Shared memory space in a unified memory model
US9405561B2 (en) * 2012-08-08 2016-08-02 Nvidia Corporation Method and system for memory overlays for portable function pointers
US9274839B2 (en) 2012-09-27 2016-03-01 Intel Corporation Techniques for dynamic physical memory partitioning
US9411715B2 (en) 2012-12-12 2016-08-09 Nvidia Corporation System, method, and computer program product for optimizing the management of thread stack memory
US20140232733A1 (en) * 2013-02-19 2014-08-21 Jason Caulkins Graphics Processing Unit Pre-Caching
US9311011B2 (en) 2013-08-07 2016-04-12 Qualcomm Incorporated Dynamic address negotiation for shared memory regions in heterogenous multiprocessor systems
US9881592B2 (en) 2013-10-08 2018-01-30 Nvidia Corporation Hardware overlay assignment
US10452306B1 (en) * 2013-12-31 2019-10-22 EMC IP Holding Company LLC Method and apparatus for asymmetric raid
US9886736B2 (en) * 2014-01-20 2018-02-06 Nvidia Corporation Selectively killing trapped multi-process service clients sharing the same hardware context
US10152312B2 (en) 2014-01-21 2018-12-11 Nvidia Corporation Dynamic compiler parallelism techniques
CN104866295B (zh) * 2014-02-25 2018-03-06 华为技术有限公司 OpenCL运行时***框架的设计方法及装置
US9779535B2 (en) 2014-03-19 2017-10-03 Microsoft Technology Licensing, Llc Configuring resources used by a graphics processing unit
US9766954B2 (en) 2014-09-08 2017-09-19 Microsoft Technology Licensing, Llc Configuring resources used by a graphics processing unit
US9740464B2 (en) 2014-05-30 2017-08-22 Apple Inc. Unified intermediate representation
US10346941B2 (en) 2014-05-30 2019-07-09 Apple Inc. System and method for unified application programming interface and model
US10430169B2 (en) 2014-05-30 2019-10-01 Apple Inc. Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit
CN104484266A (zh) * 2014-11-07 2015-04-01 上海交通大学 一种锁使用模式自动化静态分析***
DE102016106939B4 (de) 2015-04-17 2024-05-02 Suunto Oy Eingebettetes Rechengerät
US9733978B2 (en) 2015-08-27 2017-08-15 Qualcomm Incorporated Data management for multiple processing units using data transfer costs
US9778961B2 (en) 2015-09-14 2017-10-03 Qualcomm Incorporated Efficient scheduling of multi-versioned tasks
US10360063B2 (en) 2015-09-23 2019-07-23 Qualcomm Incorporated Proactive resource management for parallel work-stealing processing systems
WO2017095367A1 (en) * 2015-11-30 2017-06-08 Hewlett Packard Enterprise Development Lp Managing objects stored in memory
US10235811B2 (en) 2016-12-29 2019-03-19 Intel Corporation Replicating primitives across multiple viewports
US10489881B2 (en) * 2017-06-30 2019-11-26 H3 Platform Inc. Direct memory access for co-processor memory
CN109726005B (zh) * 2017-10-27 2023-02-28 伊姆西Ip控股有限责任公司 用于管理资源的方法、服务器***和计算机可读介质
US10866806B2 (en) * 2017-11-14 2020-12-15 Nvidia Corporation Uniform register file for improved resource utilization
FR3078176B1 (fr) 2018-02-19 2020-02-28 IFP Energies Nouvelles Systeme et procede de prediction d'un phenomene physique et/ou chimique au moyen d'un segment de memoire partage
US11275587B2 (en) 2018-05-02 2022-03-15 Micron Technology, Inc. Static identifications in object-based memory access
US10740220B2 (en) * 2018-06-27 2020-08-11 Microsoft Technology Licensing, Llc Cache-based trace replay breakpoints using reserved tag field bits
US10628910B2 (en) 2018-09-24 2020-04-21 Intel Corporation Vertex shader with primitive replication
US11544069B2 (en) * 2018-10-25 2023-01-03 Micron Technology, Inc. Universal pointers for data exchange in a computer system having independent processors
GB2599451B (en) * 2020-09-30 2022-11-02 Imagination Tech Ltd Building and scheduling tasks for parallel processing

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5315707A (en) 1992-01-10 1994-05-24 Digital Equipment Corporation Multiprocessor buffer system
US6289432B1 (en) * 1998-03-25 2001-09-11 International Business Machines Corporation Sharing segments of storage by enabling the sharing of page tables
US7096252B1 (en) 2000-10-05 2006-08-22 Stmicroelectronics, Inc. System and method for interfacing network station subsystems
US7299242B2 (en) 2001-01-12 2007-11-20 Sun Microsystems, Inc. Single-word lock-free reference counting
US6728858B2 (en) * 2001-03-30 2004-04-27 Intel Corporation Method and apparatus including heuristic for sharing TLB entries
US7234111B2 (en) 2001-09-28 2007-06-19 Ntt Docomo, Inc. Dynamic adaptation of GUI presentations to heterogeneous device platforms
US6822654B1 (en) * 2001-12-31 2004-11-23 Apple Computer, Inc. Memory controller chipset
US7321958B2 (en) * 2003-10-30 2008-01-22 International Business Machines Corporation System and method for sharing memory by heterogeneous processors
US20080109795A1 (en) * 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit
US7929707B1 (en) * 2007-09-06 2011-04-19 Elcomsoft Co. Ltd. Use of graphics processors as parallel math co-processors for password recovery
US8904064B2 (en) * 2008-10-24 2014-12-02 International Business Machines Corporation Managing an out-of-order asynchronous heterogeneous remote direct memory access (RDMA) message queue
US8397241B2 (en) * 2008-11-13 2013-03-12 Intel Corporation Language level support for shared virtual memory
US8776088B2 (en) 2009-03-30 2014-07-08 Microsoft Corporation Operating system distributed over heterogeneous platforms
US20110161620A1 (en) * 2009-12-29 2011-06-30 Advanced Micro Devices, Inc. Systems and methods implementing shared page tables for sharing memory resources managed by a main operating system with accelerator devices

Also Published As

Publication number Publication date
WO2012134557A1 (en) 2012-10-04
CN102959504A (zh) 2013-03-06
TW201239633A (en) 2012-10-01
US20150186273A1 (en) 2015-07-02
KR101253012B1 (ko) 2013-04-16
US8566537B2 (en) 2013-10-22
TWI471730B (zh) 2015-02-01
US9606919B2 (en) 2017-03-28
US8862831B2 (en) 2014-10-14
EP2691852A1 (en) 2014-02-05
US20140071144A1 (en) 2014-03-13
EP2691852A4 (en) 2014-12-31
US20120254497A1 (en) 2012-10-04
CN102959504B (zh) 2014-12-03

Similar Documents

Publication Publication Date Title
KR101253012B1 (ko) 이종 플랫폼에서 포인터를 공유시키는 방법 및 장치
US10545672B2 (en) Method for accessing extended memory, device, and system
JP6124463B2 (ja) 一方のアーキテクチャのコードモジュールが他方のアーキテクチャのライブラリモジュールを用いることを可能にするインターアーキテクチャ互換性モジュール
US9594521B2 (en) Scheduling of data migration
US9727471B2 (en) Method and apparatus for stream buffer management instructions
US9229878B2 (en) Memory page offloading in multi-node computer systems
US20110219204A1 (en) Gpu support for garbage collection
KR20170027125A (ko) 컴퓨팅 시스템 및 컴퓨팅 시스템에서 연산들을 처리하는 방법
US9513886B2 (en) Heap data management for limited local memory(LLM) multi-core processors
US9063860B2 (en) Method and system for optimizing prefetching of cache memory lines
US11868306B2 (en) Processing-in-memory concurrent processing system and method
US8359433B2 (en) Method and system of handling non-aligned memory accesses
CN107250995B (zh) 存储器管理设备
CN117609109A (zh) 灵活高速缓存分配技术的基于优先级的高速缓存行驱逐算法
US8949777B2 (en) Methods and systems for mapping a function pointer to the device code
US20210224213A1 (en) Techniques for near data acceleration for a multi-core architecture
US8838915B2 (en) Cache collaboration in tiled processor systems
US20190324919A1 (en) Page Tables for Granular Allocation of Memory Pages
CN113885943A (zh) 处理单元、片上***、计算装置及方法
WO2023241655A1 (zh) 数据处理方法、装置、电子设备以及计算机可读存储介质
US20220197682A1 (en) Native-image in-memory cache for containerized ahead-of-time applications
CN115934584A (zh) 设备私有存储器中的存储器访问***

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180516

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee