KR20130018742A - 가비지 콜렉션을 위한 gpu 서포트 - Google Patents

가비지 콜렉션을 위한 gpu 서포트 Download PDF

Info

Publication number
KR20130018742A
KR20130018742A KR1020127025736A KR20127025736A KR20130018742A KR 20130018742 A KR20130018742 A KR 20130018742A KR 1020127025736 A KR1020127025736 A KR 1020127025736A KR 20127025736 A KR20127025736 A KR 20127025736A KR 20130018742 A KR20130018742 A KR 20130018742A
Authority
KR
South Korea
Prior art keywords
sub
spu
regions
garbage collection
processing unit
Prior art date
Application number
KR1020127025736A
Other languages
English (en)
Other versions
KR101626533B1 (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 KR20130018742A publication Critical patent/KR20130018742A/ko
Application granted granted Critical
Publication of KR101626533B1 publication Critical patent/KR101626533B1/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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)
  • Advance Control (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 효율적인 가비지 콜렉션을 위한 시스템 및 방법이다. 범용 중앙 처리 장치(CPU)는 할당된 힙을 세대형 가비지 콜렉션 기법에 따라 파티션한다. 상기 세대들은 고정된 크기의 카드들로 파티션된다. 상기 CPU는 마지막 가비지 콜렉션 이후 어플리케이션 실행 동안에 자격있는 더티 카드들의 표시들을 마킹한다. 그 다음 가비지 콜렉션 시작 조건이 충족되었다고 상기 CPU가 검출할 때, 상기 CPU는 하나 이상의 카드 루트 주소들의 결정에 대응하는 특수 처리 장치(SPU)에 통지를 보내는데, 각각의 카드 루트 주소는 상기 마킹된 표시들 중 하나에 대응한다. 상기 SPU는 단일 지시 다수 데이터(SIMD) 병렬 아키텍처를 구비하며 그래픽 처리 장치(GPU)일 수 있다. 상기 SPU는 다수 카드 루트 주소들을 동시에 계산하기 위해 자신의 SIMD 코어의 병렬 아키텍처를 활용할 수 있다. 이어서, 상기 SPU는 이러한 주소들을 가비지 콜렉션 알고리즘에서 사용되도록 상기 CPU에 보낸다.

Description

가비지 콜렉션을 위한 GPU 서포트{GPU SUPPORT FOR GARBAGE COLLECTION}
본 발명은 컴퓨팅 시스템들, 및 더 구체적으로는 컴퓨터 가비지 콜렉션 메커니즘들에 대한 것이다.
소프트웨어 프로그래머들이 알고리즘 또는 방법에 따라 작업을 수행하기 위해 어플리케이션들을 작성할 때, 프로그래머들은 일시적인 그리고 결과 데이터를 참조하기 위해 변수들을 종종 활용한다. 데이터 객체들이라고도 언급될 수 있는 이러한 데이터는 공간이 컴퓨터 메모리 내에 할당될 것을 필요로 한다. 하나 이상의 어플리케이션들의 실행 동안, 데이터 객체 할당을 위해, 할당되지 않은 또는 자유로운 컴퓨터 메모리의 양은 최적 이하 레벨까지 감소할 수 있다. 자유 공간의 양의 이러한 감소는 시스템 성능을 감소시킬 수 있으며, 결국, 이용가능한 임의의 자유 공간이 없을 수 있다. 자동 메모리 관리 기법들, 이를테면 가비지 콜렉션이 어플리케이션 실행 동안에 사용될 수 있다. 가비지 콜렉션은 충분한 자유 공간을 유지하고, 메모리 리트(leak)들을 식별 및 제거하며, 도달가능한 데이터 객체들 중 일부 또는 모두를 새로운 메모리 영역 안에 복사하고, 필요한 대로 데이터 객체들에 대한 참조를 갱신하는 것 등을 한다.
가비지 콜렉션 알고리즘들은 그들의 혜택들을 동반하기 위해 설계 절충을 갖는다. 예컨대, 가비지 콜렉션 알고리즘들은 통상적으로 몇 개의 단계들을 포함하며 비교적 시간이 걸릴 수 있다. 결과적으로, 컴퓨팅 시스템은 가비지 콜렉션 알고리즘이 그 태스크(task)들을 수행하는 동안에 일시정지를 경험할 수 있다. 가비지 콜렉터가 실시간으로, 또는 어플리케이션들의 실행과 동시에 작동되는 경우, 가비지 콜렉션 일시정지의 길이는 용인할 수 없을 정도일 수 있다. 덧붙여, 알고리즘은 그 실행 동안에 캐시 공간을 활용할 수 있다. 캐시 공간의 사용은, 결과적으로 사용되는 정보의 축출을 야기할 수 있고 이는 알고리즘이 종료하면 재-페치되어야(re-fetched)한다.
전체 메모리보다는 메모리의 일부에 대해 가비지 콜렉션 알고리즘의 단계들을 수행하는 것이 가비지 콜렉션과 연관된 일시정지 시간들을 줄인다. 덧붙여, 연구들은 대부분의 데이터 객체들이 어려서 죽는다는 것을 많은 소프트웨어 어플리케이션들에서 보여주었다. 그러므로, 위에서 설명된 가비지 콜렉션에서의 문제점들에 대한 하나의 해결책은 가장 어린 데이터 객체들을 갖는 메모리의 부분 상에서 가비지 콜렉션 알고리즘을 실행하는 것을 포함한다. 그러한 기법의 하나는 세대(generation) 가비지 콜렉션이다. 가비지 콜렉션이 작동되기로 결정된 때에, 몇 가지 전-처리 단계들이 가비지 콜렉션이 계속하기 전에 실행된다. 예컨대, 더 어린 데이터 객체들을 가리키는 더 늙은 데이터 객체들의 주소들이 이때 계산된다. 가비지 콜렉션 알고리즘은 후속적으로, 모든 도달가능한 데이터 객체들의 위치를 찾아내기 위해 이 주소들을 사용한다. 주소들의 수 및 크기가 증가함에 따라, 주소 계산에 사용된 사용되는 시간이 증가하며 세대형 가비지 콜렉션 기법의 혜택을 줄어들게 할 수 있다.
위의 관점에서, 컴퓨터 가비지 콜렉션을 수행하기 위한 효과적인 방법들 및 메커니즘들이 요구된다.
효과적인 컴퓨터 가비지 콜렉션을 수행하기 위한 시스템들 및 방법들이 구상된다.
일 실시예에서, 처리 노드는 범용 중앙 처리 장치(CPU), 특수 처리 장치(SPU), 및 메모리를 포함한다. 일 실시예에서, SPU는 단일 지시 다수 데이터(single instruction multiple data; SIMD) 병렬 아키텍처를 구비하며 그래픽 처리 장치(graphics processing unit; GPU)일 수 있다. CPU는 메모리 내의 할당된 힙(heap)을 복수의 영역들로 나누기 위해 동작한다. 다양한 실시예들에서, 영역들은 나이에 의해 순서지정되거나 식별가능하며, "세대"로 언급될 수 있다. 덧붙여, 각각의 영역은 복수의 서브-영역들 또는 "카드들"을 포함할 수 있다. 일부 실시예들에서, 각각의 카드는 고정된 크기, 이를테면 128바이트, 4KB 가상 페이지 등을 갖는다. 어플리케이션 실행 동안에, CPU는, 카드 내에 저장된 데이터 객체의 수정이 잠재적인 교차-세대 참조로서 자격이 있음을 검출하는 것에 응답하여 특정 카드에 대응하는 표시를 마킹한다. 예컨대, 일 실시예에서, 데이터 객체 내에 저장된 포인터 값이 또 하나의 세대 내에 저장된 데이터 객체를 가리키기 위해 수정될 수 있다. 또 하나의 실시예에서, 포인터 값이 가장 어린 세대 내에 저장된 데이터 객체를 가리키기 위해 수정되는 경우에 대응하는 표시의 마킹이 발생한다. 다른 자격인정 조건들이 가능하며 구상된다.
다양한 실시예들에서, CPU는 가비지 콜렉션 시작 조건 - 이를테면 가장 어린 세대가 미리결정된 임계치보다 더 적은 자유 메모리 공간을 갖는 것 - 이 충족되었다는 것을 검출할 수 있다. 가비지 콜렉션 시작 조건이 충족되었다고 결정한 것에 응답해서, CPU는 하나의 통지를 SPU에게 보내는데, 이는 SPU가 미리결정된 가비지 콜렉션 관련 태스크들을 수행할 거라는 것을 나타낸다. 일 실시예에서, SPU는 하나 이상의 카드 루트 주소들을 결정할 수 있으며, 각각의 카드 루트 주소는 마킹된 표시들 중 하나에 대응한다. SPU는 다수의 카드 루트 주소들을 동시에 계산하기 위해 SIMD 코어의 병렬 아키텍처를 활용할 수 있다. SPU가 가비지 콜렉션 관련 태스크들을 수행하는 동안, CPU는 다른 태스크들의 처리를 계속할 수 있다. 그러므로, 카드 루트 주소들은 CPU가 가비지 콜렉션 일시정지를 초래함이 없이 결정될 수 있다. 부가적으로, CPU의 캐시 서브시스템은 이러한 태스크들에 필요하지 않다. 그러므로, 전체 시스템 성능은 개선될 수 있다. 다양한 실시예들에서, 제1 처리 노드의 CPU가 네트워크 접속을 통해 위에서 설명된 통지를 제2 처리 노드 내에 위치된 SPU에 보낼 수 있다. SPU는 이후 CPU를 오프로딩(offload)하기 위해 위에서 설명된 바와 같이 카드 루트 주소들을 결정할 수 있다.
이러한 및 다른 실시예들이 다음 설명 및 도면들을 참조해서 더 이해될 것이다.
도 1은 병렬 아키텍처를 갖는 특수 처리 장치를 구비하는 예시적인 처리 노드의 일 실시예의 일반화된 블록도이다.
도 2는 프로세스 주소 공간의 일 실시예의 일반화된 블록도이다.
도 3은 파티션된 메모리의 일 실시예의 일반화된 블록도이다.
도 4는 병렬 아키텍처를 갖는 특수 처리 장치로 효과적인 가비지 콜렉션을 위한 방법의 일 실시예의 흐름도이다.
도 5는 가비지 콜렉션 알고리즘에서 사용될 카드 루트 주소들을 계산하기 위한 방법의 일 실시예의 흐름도이다.
도 6은 범용 프로세서 코어의 일 실시예의 일반화된 블록도이다.
도 7은 그래픽 프로세서 코어의 일 실시예의 일반화된 블록도이다.
도 8은 컴퓨팅 시스템의 일 실시예를 나타내는 일반화된 블록도이다.
본 발명은 다양한 수정예들 및 대안적인 형태들이 가능하나, 특정한 실시예들이 도면 내에서 예로서 도시되며 본 명세서에서 상세히 설명된다. 그러나, 도면들 및 그에 대한 상세한 설명이 본 발명을 개시된 특별한 형태로 제한하도록 의도되지 않으며, 그와 반대로, 본 발명이 첨부된 청구항들에 의해 정의된 바와 같은 본 발명의 사상 및 범주 내에 있는 모든 수정예들, 등가물들 및 대안예들을 포괄한다는 것이 이해되어야 한다.
다음 설명에서, 다양한 특정 세부사항들이 본 개시물의 철저한 이해를 제공하기 위해 나타난다. 그러나, 본 발명이 이러한 특정 세부사항들 없이 실시될 수 있다는 것이 당업자에게 분명할 것이다. 일부 예들에서, 잘 알려진 회로들, 구조들, 및 기법들이 본 발명을 모호하게 하는 것을 회피하기 위해 상세히 설명되지 않는다.
도 1을 참조하면, 병렬 아키텍처를 갖는 특수 처리 장치(SPU)를 구비하는 예시적인 처리 노드(110)의 일 실시예가 도시된다. 처리 노드(110)는 메모리 제어기(120), 인터페이스 로직(140), 하나 이상의 처리 장치들(115)로서, 하나 이상의 프로세서 코어들(112) 및 대응하는 캐시 메모리 서브시스템들(114)를 포함하는, 하나 이상의 처리 장치들; 패킷 처리 로직(116), 및 공유 캐시 메모리 서브시스템(118)을 포함할 수 있다. 덧붙여, 처리 노드(110)는 하나 이상의 특수 처리 장치들(SPUs, 170)을 포함할 수 있다. SPU(170)는 단일 지시 다수 데이터(SIMD) 코어와 같은 병렬 아키텍처를 갖는 특수 프로세서 코어(172)를 포함할 수 있다. SIMD 코어들의 예들은 그래픽 처리 장치들(GPUs), 디지털 신호 처리(DSP) 코어들 등을 포함한다.
일 실시예에서, 처리 노드(110)는 제2 범용 처리 장치(115)(도시되지 않음) 대신에 또는 그에 덧붙여서 그래픽 처리 장치들(GPU)로서 구현되는 SPU(170)를 포함할 수 있다. GPU(170)는 하나 이상의 그래픽 프로세서 코어들(172) 및 데이터 저장 버퍼들(174)을 포함할 수 있다. GPU는 개인용 컴퓨터, 워크스테이션, 또는 비디오 게임 콘솔용의 전용 그래픽 렌더링 디바이스일 수 있다. 일 실시예에서, 처리 노드(110)의 예시된 기능은 단일 집적 회로 상에 병합된다.
프로세서 코어들(112)은 미리정의된 범용 지시어 세트(general-purpose instruction set)에 따라 지시어들을 실행하기 위한 회로를 포함한다. 예컨대, x86 지시어 세트 아키텍처가 선택될 수 있다. 대안적으로, 알파, 파워 PC, 또는 임의의 다른 범용 지시어 세트 아키텍처가 선택될 수 있다. 일반적으로, 프로세서 코어(112)는 데이터 및 지시어들을 위해 캐시 메모리 시스템들(114)에 각각 액세스한다. 요청된 블록이 캐시 메모리 서브시스템(114) 또는 공유 캐시 메모리 서브시스템(118) 내에서 발견되지 않는 경우, 읽기 요청이 생성되어, 유실 블록이 매핑되는 노드 내의 메모리 제어기에 송신될 수 있다.
현대의 GPU들(170)은 컴퓨터 그래픽을 조작하는데 그리고 디스플레이하는데 매우 효과적이며 그들의 고도의 병렬 구조는 복잡한 알고리즘들 범위에 대해, 처리 장치(115)와 같은 범용 중앙 처리 장치들(CPUs)보다 그들을 더 효과적으로 만든다. GPU는 통상적으로, 그래픽 및 비디오에 필요한 계산들을 실행하며 CPU는 그래픽 단독보다는 더 많은 시스템 프로세스들을 위한 계산들을 실행한다. 종래의 GPU들(170)은 영상-렌더링 어플리케이션에서 높은 처리량을 달성하기 위해 매우 넓은 단일 지시 다수 데이터(SIMD) 아키텍처들을 사용한다. 그러한 어플리케이션들은 일반적으로, 다수의 객체들(정점들(vertices) 또는 화소들)에 대하여 정점 셰이더(vertex shader)들 또는 화소 셰이더들과 같은 동일한 프로그램들을 실행하는 것을 수반한다. 각각의 객체가 다른 객체들과 독립적으로 처리되나, 동작들의 동일한 순서가 사용되기 때문에, SIMD 아키텍처가 상당한 성능 향상을 제공한다.
GPU들(170)의 발전들은 프로그래머블 셰이더들에 대한 지원을 포함하는데, 이 셰이더들은 정점들 및 질감들, 앨리어싱(aliasing)을 줄이기 위한 오버샘플링 및 보간 기법들, 및 매우 높은 정밀도의 컬러 공간들을 조작할 수 있다. 이러한 계산들 중 많은 것은 행렬 및 벡터 연산들을 수반한다. 그러므로, GPU들(119)은 비-그래픽 계산들을 위해 고려되어 왔다.
일 실시예에서, 메모리를 관리하기 위해, 중앙 처리 장치는 세대형 가비지 콜렉션(generational garbage collection; GC)을 위한 알고리즘의 단계들을 실행한다; H. Lieberman, et al., A Real-Time Garbage Collector Based on the Lifetime of Objects(객체들의 일생을 기초로 한 실시간 가비지 콜렉터), Communications of the ACM 26 (6), 1983, pp. 419-429 참조. 중앙 처리 장치(115)는 세대형 가비지 콜렉션 알고리즘을 실행하기 전에 카드 마킹 기법의 전처리 단계들을 활용할 수 있다; P. Wilson, et al., A card-marking scheme for controlling intergenerational references in generation-based GC on stock hardware(스톡 하드웨어 상에서 세대 기반 GC 내에서 세대간 참조를 제어하기 위한 카드 마킹 방식), SIGPLAN Notices 24 (5), 1989, pp. 87-92 참조. 가비지 콜렉션 일시정지 시간들을 줄이기 위해, 알고리즘은 전체 메모리보다는 메모리의 일부 상에서 작동될 수 있다. 일 실시예에서, 메모리 내의 할당된 힙이 영역들로 파티션(partition)될 수 있다. 이러한 영역들은 "세대들"로 언급될 수 있다. 일 실시예에서, 각각의 세대는 안에 포함된 데이터 객체들의 나이에 대응한다. 일 실시예에서, 가비지 콜렉션 알고리즘은 가장 어린 세대들 중 하나 이상 에서만 작동될 수 있다. 그러한 기법은 가비지 콜렉션 일시정지 시간 및 가비지 콜렉션 동안 캐시의 활용 둘 다를 줄일 수 있다.
하나 이상의 더 어린 세대들 내에 위치된 제1 데이터 객체가 더 늙은 세대 내의 제2 데이터 객체에 의해 참조될 수 있다. 이러한 더 늙은 세대는 하나 이상의 더 어린 세대들 내에 포함되지 않는다. 가비지 콜렉션은 하나 이상의 더 어린 세대들 상에서만 실행하기 때문에, 이러한 참조는 유실될 수 있다. 그러한 유실이 발생하면, 더 어린 세대들 내에 위치된 제1 데이터 객체는 도달불가능하다고 잘못 결정될 수 있다. 도달불가능하다고 결정된 데이터 객체들은 메모리로부터 제거된다. 그러므로, 더 어린 세대들 내의 데이터 객체들을 참조하는 더 늙은 세대들 내에 위치된 임의의 데이터 객체들의 주소들을 결정하도록 단계들이 취해진다. 이러한 단계들은 추후에 설명되는 세대형 가비지 콜렉션 기법의 일부로서 수행된다.
일 실시예에서, 각각의 세대는 서브-영역들로 파티션된다. 이러한 서브-영역들은 "카드들"로 언급될 수 있다. 일 실시예에서, 각각의 카드는 안에 포함된 데이터 객체들의 나이에 대응한다. 일 실시예에서, 가비지 콜렉션 알고리즘은 더 어린 세대들 내에 위치된 각각의 카드 상에서 작동할 수 있다. 가비지 콜렉션은 더 늙은 세대들 내의 마킹된 카드들 상에서만 작동할 수 있다. 어플리케이션 실행 동안에, 일 실시예에서, 카드는 마킹될 수 있는데, 이는 카드가, 하나 이상의 가장 어린 세대들 내에 위치된 또 하나의 데이터 객체를 가리키는 데이터 객체를 포함한다고 결정되는 경우이다. 또 하나의 실시예에서, 카드는 마킹될 수 있는데, 이는 카드가 수정되는 데이터 객체를 포함한다고 결정되는 경우이다. 카드를 마킹하기 위한 다른 조건들이 가능하며 구상된다. 일 실시예에서, 가비지 콜렉션 알고리즘을 실행하기 전에 수행된 전처리 단계는 마킹된 카드들의 주소들을 결정하는 것이다. 추후에, 알고리즘 내에서, 더 어린 세대들 내의 데이터 객체들을 참조하는 더 늙은 세대들 내에 위치된 임의의 데이터 객체들의 주소들을 결정하는 단계들이 수행된다.
도 1을 다시 참조하면, 일 실시예에서, CPU(115)가 세대형 GC 시작 조건을 검출할 때, CPU(115)는 통지를 GPU(170)에 보낼 수 있다. 통지를 수신하는 것에 응답해서, GPU(170)는 주소들을 산출할 수 있다. 이러한 주소들은 더 어린 세대들 내의 카드들에 포인터 값들을 잠재적으로 저장하는 더 늙은 세대들 내의 카드들에 대응할 수 있다. 이러한 주소들은 루트 주소들 또는 카드 루트 주소들로서 언급될 수 있다.
위에서 설명된 루트 주소들의 계산은 고도로 병렬처리가능한 태스크일 수 있다. GPU(170)는 CPU보다 더 효율적으로 고도로 병렬처리가능한 태스크들을 수행할 수 있다. 덧붙여, GPU(170)에 의해 수행된 작업은 CPU(115)가 하나 이상의 소프트웨어 어플리케이션들의 실행을 계속하는 동안 수행될 수 있다. 그러므로, 루트 주소들을 획득하기 위해 사용된 계산 단계들의 실행은 어떠한 GC 일시정지도 만들어 내지 않을 수 있다. 전처리 단계들에 대한 제거된 GC 일시정지로, 전체 시스템 성능이 증가할 수 있다. 이러한 전처리 단계들의 실행을 위한 CPU(115)와 GPU(170) 사이의 프로토콜의 추가적인 세부사항들은 아래에서 더 설명된다.
일 실시예에서, GPU(170)는 비디오 카드 상에 위치될 수 있다. 또 하나의 실시예에서, GPU(170)는 마더보드 상에 통합될 수 있다. 또 하나의 실시예에서, 처리 노드(110)의 예시된 기능은 단일 집적 회로 상에 통합될 수 있다. 그러한 실시예에서, CPU(115) 및 GPU(170)는 상이한 설계 센터들로부터의 사설(proprietary) 코어일 수 있다. 또한, GPU(170)는 이제 인터페이스(140)을 통해 오프-칩(off-chip)으로 메모리 액세스를 수행하기 보다는, 처리 노드(110)로부터 메모리 제어기(120)를 통해 로컬 메모리들(114 및 118) 및 주 메모리 둘 다에 직접 액세스할 수 있다. 본 실시예는 GPU(170)를 위한 메모리 액세스들에 대한 지연을 낮출 수 있는데, 이는 더 높은 성능을 의미할 수 있다.
도 1 내의 처리 노드(110)의 구성요소들을 계속해서 보면, 캐시 서브시스템들(114 및 118)이 데이터 블록들을 저장하기 위해 구성된 고속 캐시 메모리들을 포함할 수 있다. 캐시 메모리 서브시스템들(114)은 제각각의 프로세서 코어들(112) 내에 통합될 수 있다. 대안적으로, 캐시 메모리 서브시스템들(114)은 원하는 대로, 백사이드(backside) 캐시 구성 또는 인라인(inline) 구성으로 프로세서 코어들(114)에 결합될 수 있다. 더 나아가, 캐시 메모리 서브시스템들(114)은 캐시들의 계층으로서 구현될 수 있다. (계층 내의) 프로세서 코어들(112)에 더 가까이 위치된 캐시들은 원하는 경우, 프로세서 코어들(112) 안에 통합될 수 있다. 일 실시예에서, 캐시 메모리 서브시스템들(114)은 각각 L2 캐시 구조들을 나타내며, 공유 캐시 서브시스템(118)은 L3 캐시 구조를 나타낸다. 캐시 메모리 서브시스템(114) 및 공유 캐시 메모리 서브시스템(118) 둘 다 대응하는 캐시 제어기에 결합된 캐시 메모리를 포함할 수 있다.
일반적으로, 패킷 처리 로직(116)은 처리 노드(110)가 결합되는 링크들 상에서 수신되는 패킷들을 제어하기 위해 응답하도록, 프로세서 코어들(112) 및/또는 캐시 메모리 서브시스템(114)에 응답해서 제어 패킷들을 생성하도록, 서비스를 위해 메모리 제어기(120)에 의해 선택된 트랜잭션들에 응답해서 프로브 명령어들 및 응답 패킷들을 생성하도록, 및 인터페이스 로직(140)을 통해 노드(110)가 중간 노드인 패킷들을 다른 노드들로 경로지정하도록 구성된다. 인터페이스 로직(140)은 패킷들을 수신하고 패킷들을 패킷 처리 로직(116)에 의해 사용되는 내부 클록과 동기화하기 위한 로직을 포함할 수 있다.
도 2를 참조하면, 일반화된 프로세스 주소 공간(200)의 일 실시예가 도시된다. 현대의 컴퓨팅 시스템들은 가상 메모리를 사용해서 많은 프로세스들 사이에서 더 적은 양의 물리 메모리를 공유한다. 주소 공간(200)은 연속된 가상 주소 공간일 수 있는데, 가상 주소들과 물리 주소들 사이의 매핑이 물리 메모리 또는 디스크 내의 값들(210 내지 250)의 위치를 결정한다. 예컨대, 처리 노드(110)의 자원들을 리프라이징(reprise)할 수 있는 멀티-프로세서 시스템 상의 운영 체제가 소프트웨어 어플리케이션을 위해 메모리 영역들을 할당할 수 있다. 소프트웨어 어플리케이션이 컴파일 될 때, 어플리케이션은 복수의 프로세스들을 포함할 수 있다. 그러한 실시예에서, 각각의 프로세스는 어플리케이션 실행 전에 그 자신의 자원들, 이를테면 메모리의 영상, 또는 지시어들(instructions) 및 데이터의 인스턴스(instance)를 소유할 수 있다. 또한, 각각의 프로세스는 이를테면 코드, 데이터, 및 가능하게는 힙 및 스택을 주소지정하는 주소 공간과 같은 프로세스-특정 정보; 이를테면 스택 포인터들, 일반적인 및 부동 소수점 레지스터들, 프로그램 카운터 등과 같은 데이터 및 제어 레지스터들 내의 변수들; 및 이를테면 stdin, stdout 등과 같은 운영 체제 서술자들, 그리고 이를테면 프로세서 소유자 및 프로세스의 사용권한 세트와 같은 보안 속성들을 포함할 수 있다.
일반적으로 말하면, 주어진 소프트웨어 어플리케이션을 위해, 운영 체제의 커널은 어플리케이션을 위해 주소 공간(200)을 설정하고, 어플리케이션의 코드(210)를 메모리 안에 로딩하며, 프로그램을 위해 스택(250)을 설정하고, 어플리케이션 코드(210) 내의 주어진 위치로 분기해서, 어플리케이션 코드(210)의 실행을 시작한다. 일부 실시예들에서, 모든 코드(210) 및 데이터(220)가 실행이 시작되기 전에 물리 메모리 내에 저장될 필요는 없다. 소프트웨어 어플리케이션이 지시어 세트 아키텍처(instruction set architecture; ISA)를 사용하는 방식은 컴파일러들과 고수준 언어들의 상호작용에 의해 영향을 받는다. 예컨대, 소프트웨어 어플리케이션 개발을 위해, 변수들이 어떻게 할당되는지 그리고 주소지정되는지 및 얼마나 많은 레지스터들이 변수들을 할당하기 위해 요구되는지가 알려질 필요가 있다. 일 실시예에서, 스태틱 데이터(static data, 220), 스택(250), 및 힙(230)이 데이터 할당을 결정한다.
스태틱 데이터(220)는 정적으로 선언된 객체들, 이를테면 전역 변수들 및 상수들을 할당하기 위해 사용될 수 있다. 이러한 객체들 대부분은 어레이(array)일 수 있다. 스택(250)은 어레이들보다는 스칼라(scalar) 변수, 이를테면 현재 호출되는 함수들 내의 지역 변수들 및 파라미터들을 할당하기 위해 사용될 수 있다. 스택(250)은 프로시져 호출 또는 반환시에 각각 성장 및 수축될 수 있다. 힙(230)은 포인터들에 액세스된 동적 객체들을 할당하기 위해 사용될 수 있으며 통상적으로 스칼라 변수들은 아니다. 힙(230)은 스트링/리스트(string/list) 연산 동안에 일시적인 스트링들 및 리스트들의 내용들을 저장함으로써 스트링들 및 리스트들의 내용을 복사하는 빈도를 줄이기 위해 사용될 수 있다. 힙은 함수 호출의 반환에 의해 영향받지 않는다.
스택(250) 및 힙(230)의 사용을 예시하는 소스 코드 내의 방법의 간단한 예는 다음과 같다.
class Students { /* line 1 */
public String name;
public int score;
}
public void Classroom () { /* line 5 */
Students jeff = new Students();
jeff.name = "Jeff";
jeff.score = 82;
} /* line 9 */
위 예는 Students라 불리는 클래스를 가지며, Students 클래스는 두 개의 퍼블릭 필드들 - 이름 및 점수 - 를 포함한다. Students 클래스는 Classroom 메소드에 의해 액세스된다. Classroom 메소드 내에서, jeff라는 이름의 객체가 Students 타입으로 생성된다. 객체의 이름 및 점수 필드들은 초기화된다. 일 실시예에서, 이 코드 예를 실행한 후에, 스택(250)은, 예컨대 도 2 내의 엔트리(252j) 안에 Classroom 메소드 호출을 포함한다. 객체 jeff를 위한 엔트리는 도 2 내의 엔트리(252k) 안에 포함될 수 있다. 객체 jeff는 값을 가리키지 않고, 대신 힙(230) 내의 객체(232h)를 참조할 수 있다. 객체(232h)는 Students 객체를 저장할 수 있는데, 이 객체는 클래스, 또는 참조 타입(reference type)이다. 객체(232h)의 필드(234a)는 이름 필드 값을 저장할 수 있으며 필드(234b)는 점수 필드 값을 저장할 수 있다.
Classroom 메소드가 실행을 종료한 후에, 스택(250)은 엔트리(252j)를 팝(pop)할 수 있는데, 이는 이 엔트리가 오직, 실행하고 있는 또는 실행할 코드에 대한 정보를 포함하기 때문이다. 전체 어플리케이션의 일부만을 나타낼 수 있는, 이 예에서 실행할 것이 남아있지 않음으로, 스택(250)은 엔트리(252j)보다는 엔트리(252i)를 이제 가리키기 위해 조정된 스택 포인터를 가질 수 있다. 다른 한편, 힙은 객체(232h)의 필드들(234a 및 234b) 내에 데이터를 여전히 포함할 수 있다.
추후에, 가비지 콜렉션 알고리즘은 힙(230)으로부터 참조되지 않는(사용되지 않는) 데이터를 치우기 위해 실행될 수 있다. 예컨대, 위 Students 객체는 객체(232h)로부터 제거될 수 있는데, 이는 이 클래스가 더 이상 사용되지 않기 때문이다. 일 실시예에서, 가비지 콜렉션 알고리즘은 하나 이상의 다음 액션들을 포함한다: 시스템 메모리 스캐닝, 모든 도달가능 데이터 객체들 마킹(재귀적인(recursive) 검색을 필요로 할 수 있음), 사용가능 또는 도달가능하지 않다고 결정된 데이터 객체들 삭제, 및 메모리 내의 연속된 위치들을 점유하도록 데이터 객체들 이동. 이 마지막 단계는 컴팩팅(compacting)으로 언급될 수 있다.
위 예에서 사용되지 않았으나, 객체(232b)가 힙(230) 내의 객체(232g) 내의 포인터에 의해 참조된다는 것이 도 2에 도시된다. 가비지 콜렉터가 사용되지 않는 데이터를 치우기 위해 실행될 때, 사용되는 데이터는 가비지 콜렉터 알고리즘에 의해 메모리 내에 남아 있는다. 일부 실시예들에서, 가비지 콜렉션 알고리즘이 추후 어플리케이션 사용을 위해 유지될 필요가 있는 데이터 객체들의 리스트를 개발할 수 있다. 이러한 리스트의 개발은 루트들, 또는 루트 주소들로 시작할 수 있다. 루트 주소들은 스태틱 데이터(220) 내의 스태틱 전역 포인터들, 스택(250) 내의 포인터들, 및 CPU 내에서 메모리 주소에 의해 가리켜지는 힙(230) 내의 임의의 데이터 객체들에 대응할 수 있다. GC 알고리즘에 의한 재귀적인 검색 동안에, 객체(232g)는 도달가능하다고 결정될 수 있다. 객체(232b)는 객체(232g) 내의 포인터에 의해 참조됨으로 인해, 하나의 예에서, 도달가능할 수 있다. 도달가능한 객체는, 루트 주소에 의해 위치된 객체들로서 또는 도달가능하다고 이전에 결정된 객체에 의해 참조되는 객체들로서 정의될 수 있다.
일 실시예에서, 가비지 콜렉션을 주기적으로 수행하는 가비지 콜렉션 알고리즘이 활용된다. 스토리지를 복구(reclaim)할 필요가 있다고 콜렉터가 판단할 때(또는 통지받을 때) 주기가 시작된다. 예컨대, 가비지 콜렉션은 시스템이 메모리 부족일 때 개시될 수 있다. 가비지 콜렉션 알고리즘은 가비지를, 또는 결코 어플리케이션에 의해 다시 액세스되거나 변형되지 않을 객체들에 의해 사용된 메모리를, 복구할 것을 시도한다. 구문론적(syntactic) 가비지(프로그램이 도달할 가능성이 없는 데이터 객체들)와 의미론적(semantic) 가비지(프로그램이 실제로 결코 다시 사용하지 않을 데이터 객체들)는 구별될 수 있다. 메모리에 액세스하는 소프트웨어 스레드는 뮤테이터(mutator)로 언급될 수 있다. 상당히 다양한 상이한 가비지 콜렉션 기법들이 개발되어 왔으며 사용될 수 있다.
일부 경우들에서, 가비지 콜렉션 시스템들은 일반적으로 과도한 일시정지 시간들의 문제를 다양한 정도들까지 겪어 왔다. 이 문제는 가비지 콜렉션이 실시간으로, 즉 하나 이상의 프로세서들 상에서 작동하는 다른 라이브 프로그램들의 실행과 동시에, 수행될 때 발생한다. 예컨대, 시스템이 다수의 뮤테이터 스레드들 및 단일 가비지 콜렉션 스레드를 포함한다고 생각하자. 뮤테이터들이 멀티미디어 어플리케이션에 사용되는 경우, 이러한 스레드들은 어플리케이션, 이를테면 영화를 일정한 속도로 제시하는 것이 필요할 수 있다. 주목할 만한 GC 일시정지 시간들의 비용을 감당할 수 없는 일부 크리티컬 어플리케이션들의 예들은 온라인 주식 거래, 전자 상거래 어플리케이션, 및 멀티미디어 어플리케이션들, 이를테면 영화 및 비디오 게임들을 포함할 수 있다.
이제 도 3으로 가면, 파티션된 메모리(300)의 일 실시예가 도시된다. 세대형 가비지 콜렉션(GC)이 세대들(360a, 360b, 및 360c 등)으로 파티션될 수 있는 메모리 내의 할당된 힙(230)을 활용할 수 있다. 다양한 실시예들에서, 운영 체제 또는 다른 소프트웨어가 파티션 동작을 수행할 수 있고 세대들(360a, 360b, 및 360c)의 크기들을 결정할 수 있다. 덧붙여, 세대들(360a, 360b, 및 360c) 각각이 서브-영역들로 파티션될 수 있다. 이러한 서브-영역들은 카드들로서 언급될 수 있다. 예컨대, 세대(360a)는 카드들(350a, 350b, 및 350f 등)로 파티션될 수 있다. 일 실시예에서, 각각의 카드(350a, 350b, 및 350f)는 동일한 고정 크기, 이를테면 128 바이트, 4킬로-바이트(KB) 가상 페이지, 또는 다른 크기를 갖는다.
일 실시예에서, 힙(230) 내의 카드들(350a 내지 350g) 각각이 하나 이상의 데이터 객체들을 저장한다. 예컨대, 카드(350a)는 데이터 객체들(320a, 및 320g 등)을 저장한다. 카드가 오직 단일 데이터 객체를 저장할 수 있으나, 일반적으로, 카드는 다수의 데이터 객체들을 저장한다. 카드 루트 주소들(380a, 380b, 및 380f)이 대응하는 카드들(350a, 350b, 및 350f)의 위치를 찾기 위해 사용될 수 있다. 세대들 및 카드들에 대응하는 메타데이터(metadata)가 메모리에 저장될 수 있다. 이 메타데이터는 세대 기본 주소들(370a, 370b, 및 370c)을 포함할 수 있는데, 이 주소들은 세대들(360a, 360b, 및 360c)의 위치를 찾기 위해 사용된다. 덧붙여, 이 메타데이터는, 이를테면 엔트리들(312a, 312b, 312j, 및 312k 등)을 포함하는 카드 테이블(310)과 같은 데이터 구조를 포함할 수 있다. 일 실시예에서, 카드 테이블(310)은 메모리에 각 카드를 위한 하나의 엔트리를 포함할 수 있다. 또 하나의 실시예에서, 카드 테이블(310)은 가장 어린 세대를 제외한, 각각의 세대 내에 각각의 카드를 위한 하나의 엔트리를 포함할 수 있다. 그러한 실시예에서, 가장 어린 세대는 건너 띌 수 있는데, 이는 가장 어린 세대 내의 각각의 카드는 GC 알고리즘 동안에 무조건 스캔될 수 있기 때문이다. 또 하나의 실시예에서, 카드 테이블(310)은 힙 내에 각각의 데이터 객체를 위한 하나의 엔트리를 포함할 수 있다. 그러한 실시예는 카드 테이블(310)이 상당히 성장하게 한다.
일 실시예에서, 엔트리들(312a, 312b, 312j, 및 312k) 각각은 단일 비트를 포함한다. 엔트리들(312a, 312b, 312j, 및 312k) 각각 내의 단일 비트는 소프트웨어 어플리케이션을 실행하고 있는 프로세서 코어(112)에 의해 설정될 수 있다. 일 실시예에서, 그러한 단일 비트는 대응하는 카드 내에 저장된 대응하는 데이터 객체가 수정될 때 설정될 수 있다. 또 하나의 실시예에서, 그러한 단일 비트는 대응하는 데이터 객체 내의 포인터 값이 또 하나의 세대 내에 저장된 데이터 객체를 가리키도록 수정될 때 설정될 수 있다. 예컨대, 데이터 객체(320g) 내의 포인터 값이 세대(360b)의 카드(350g) 내에 저장된 데이터 객체를 가리키도록 수정되는 경우, 엔트리(312a) 내에 대응하는 단일 비트가 설정될 수 있다. 또 하나의 실시예에서, 그러한 단일 비트는 데이터 객체 내의 포인터 값이 가장 어린 세대 내에 저장된 데이터 객체를 가리키기 위해 수정될 때 설정될 수 있다. 또 하나의 실시예에서, 데이터 객체 내의 포인터 값이, GC 알고리즘의 그 다음 실행 동안에 콜렉트되도록 미리결정된 다수의 가장 어린 세대들 중 하나 내에 저장된 데이터 객체를 가리키기 위해 수정되는 경우에 그러한 단일 비트가 설정될 수 있다. 카드 테이블(310) 내의 표시를 마킹하기 위한 다른 조건들이 가능하며 구상된다.
저장 확인(store check) 동작이 표시를 마킹할지를 결정하기 위해 위 단계들을 수행한다. 저장 확인 동작은 또한 기록 배리어(write barrier) 동작으로도 언급될 수 있다. 저장 확인 동작은 어플리케이션 실행 동안에 저장 동작이 힙에 액세스하는 때에 대응하는 단일 비트를 설정할지를 결정할 수 있다. 저장 동작은 GC 알고리즘 동안에 추후 사용될 포인터 값을 생성할 수 있다. 몇 가지 저장 동작들에 대해, 컴파일러는 어떠한 저장 확인도 필요하지 않다고 정적으로(statically) 알 수 있다. 예컨대, 어플리케이션이 정수를 저장하고 정수들이 힙-할당된 객체들 대신 직접 값들(immediate values)로서 구현되는 경우에는 어떠한 저장 확인 동작도 필요하지 않을 수 있다. 그러나, 일반적인 경우에, 저장 확인 동작은 힙에 액세스하는 각각의 저장 동작에 대해 실행될 수 있다. 저장이 어플리케이션 내에서 빈번하게 발생할 수 있기 때문에, 저장 확인 동작의 효과적인 구현이 필수적일 수 있다.
프로세서 코어(112)에 대응하는 운영 체제 또는 다른 소프트웨어가 GC 시작 조건을 검출하기 위해 구성될 수 있다. 일 실시예에서, GC 시작 조건은 가장 어린 카드가 미리결정된 임계치보다 더 적은 자유 공간을 갖는 조건을 포함한다. 또 하나의 실시예에서, GC 시작 조건은 가장 어린 세대가 미리결정된 임계치보다 더 적은 자유 공간을 갖는 조건을 포함한다. 또 하나의 실시예에서, GC 시작 조건은 전체 힙이 미리결정된 임계치보다 더 적은 자유 공간을 갖는 조건을 포함한다. 다른 조건들이 가능하며 구상된다. GC 시작 조건이 검출되는 경우, 카드 테이블(310)은 마킹된 표시들, 또는 설정 비트들에 대해 스캔될 수 있다. 각각의 설정 비트에 대해, 카드 루트 주소가 산출될 수 있다.
카드 루트 주소를 산출하기 위해, 일 실시예에서, 카드 테이블(310) 내의 대응하는 엔트리의 위치가 사용될 수 있다. 카드의 크기와 카드 테이블(310) 내의 대응하는 설정 비트의 엔트리 위치가 곱해질 수 있다. 결과적인 곱은 카드 루트 주소를 결정하기 위해 세대 기본 주소에 더해질 수 있다. 예컨대, 카드가 128 바이트의 크기를 가질 수 있다. 카드 테이블(310) 내의 엔트리(312j)는 설정 비트를 저장할 수 있다. 엔트리(312j)는 카드 테이블(310) 내의 20번째 비트일 수 있다. 20의 이진값(예컨대, b10100)이 7개의 위치만큼 왼쪽으로 자리이동될 수 있다. 카드가 128바이트의 크기, 또는 27-바이트 경계 상에 정렬된 27바이트를 갖기 때문에 7개 위치의 자리이동이 선택된다. 결과적인 곱은 세대 기본 주소(370a)에 더해질 수 있다.
카드 루트 주소(380)를 결정하기 위한 위 동작들은 병렬처리될 수 있는 동작이다. 결과적으로, 병렬 아키텍처, 이를테면 단일 지시 다수 데이터(SIMD) 코어를 갖는 프로세서를 활용하는 것이 유리할 수 있다. SIMD 코어들의 예들은 그래픽 처리 장치들(GPUs) 및 디지털 신호 처리(DSP) 코어들을 포함한다. 일 실시예에서, 프로세서 코어(112)가 GC 시작 조건을 검출할 때, 코어(112)는 통지를 SIMD 코어(172)에 보낼 수 있다. 일 실시예에서, 통지는 카드 테이블(310)의 위치에 대응하는 메모리 내의 주소 및 하나 이상의 세대들의 기본 주소들을 포함할 수 있다. 프로세서 코어(112)는 SIMD 코어(172)가 카드 루트 주소들을 산출함에 따라 하나 이상의 소프트웨어 어플리케이션들의 실행을 계속할 수 있으며, 따라서 GC 일시정지 시간을 감소시킬 수 있다.
CPU, GPU, 또는 DSP 등 내의 코어(172)는 카드 테이블(310) 내의 마킹된 표시들 및 세대 기본 주소들 둘 다에 기초해서 두 개 이상의 카드 루트 주소들을 동시에 산출할 수 있다. 일 실시예에서, 코어(172)는 산출된 카드 루트 주소들을 프로세서 코어(112)로 직접 보낼 수 있다. 또 하나의 실시예에서, 코어(172)는 메모리 내의 주소를 프로세서 코어(112)에 보낼 수 있는데, 주소는 산출된 카드 루트 주소들을 저장하는 위치에 대응한다. 프로세서 코어(112)가 카드 루트 주소 값들로의 액세스를 얻을 때, 프로세서 코어(112)는 미리결정된 GC 알고리즘의 단계들을 실행하기 시작할 수 있다. 예컨대, 프로세서 코어(112)는 산출된 카드 루트 주소에 대응하는 수정된 또는 더티(dirty) 카드 내의 각각의 데이터 객체를 스캔할 수 있다. 프로세서 코어(112)는 적어도 가장 어린 세대 내의 도달가능한 데이터 객체들을 결정하기 위해 이전에 설명된 바와 같이 이러한 데이터 객체들 내의 포인터 값들을 추적할 수 있다.
이제 도 4로 가면, 별도의 특수 처리 코어로 가비지 콜렉션을 수행하기 위한 방법(400)의 일 실시예가 도시된다. 논의 목적상, 본 실시예 및 추후에 설명되는 방법들의 후속 실시예들 내의 단계들은 순차적인 순서로 도시된다. 그러나, 일부 단계들은 도시된 것과 상이한 순서로 발생할 수 있으며, 일부 단계들은 동시에 수행될 수 있으며, 일부 단계들은 다른 단계들과 조합될 수 있으며, 일부 단계들은 또 하나의 실시예에서 없을 수 있다.
블록(402)에서, 운영 체제 또는 다른 소프트웨어가 소프트웨어 어플리케이션을 위한 주소 공간을 할당할 수 있다. 블록(404)에서, 할당된 힙이 두 개 이상의 세대들로 될 수 있다. 일 실시예에서, 세대들은 대응하는 데이터 객체들의 나이에 대응한다. 덧붙여, 각각의 세대는 서브-영역들, 또는 카드들로 될 수 있다.
블록(406)에서, 하나 이상의 소프트웨어 어플리케이션들의 지시들이 실행된다. 블록(410)에서, 실행 동안에, 데이터 객체들은 힙 내에 할당될 수 있다. 로그가 각각의 할당된 데이터 객체의 대응하는 정보를 저장하는 메모리 내에 유지될 수 있다. 예컨대, 로그는 각각의 할당된 데이터 객체를 위한 엔트리를 포함할 수 있는데, 엔트리는 데이터 객체 이름, 주소, 및 크기 등을 포함한다. 일 실시예에서, 소프트웨어 어플리케이션들을 실행하는 범용 프로세서가 로그를 유지할 수 있다. 덧붙여, 실행 동안에, 할당된 데이터 객체들 내에 저장된 값들이 수정될 수 있다.
블록(412)에서, 할당된 데이터 객체에 대응하는 수정이 미리결정된 조건을 충족하는지가 실행 동안에 결정될 수 있다. 일 실시예에서, 미리결정된 조건은, 더 오래된 세대의 데이터 객체 내에 저장된 포인터 값이 가장 어린 세대에 저장된 데이터 객체를 가리키기 위해 수정되는 것을 포함할 수 있다. 그러한 실시예에서, 새로운 포인터 값과 미리결정된 주소 범위들 사이에 비교가 수행될 수 있다. 주소 범위들은 세대들, 이를테면 도 3에 도시된 세대들(360a, 360b, 및 360c)에 대응할 수 있다. 일 실시예에서, 이 비교는 소프트웨어 어플리케이션의 실행 동안에 힙에 대한 각각의 저장 동작에 대해 수행될 수 있다. 이 비교는 저장 확인 동작의 일부일 수 있다. 다른 미리결정된 조건들, 이를테면 카드 마킹에 대해 위에서 설명된 것들이 가능하며 구상된다.
할당된 데이터 객체에 대한 수정이 미리결정된 조건(조건부 블록(414))을 충족시키는 경우, 블록(416)에서 마킹이 수행된다. 일 실시예에서, 저장 확인 동작이 힙 내의 데이터 객체에 대한 수정이 마킹을 위한 자격이 있는지에 대한 결정을 수행한다. 저장 확인 동작은 적어도 힙 내의 각각의 세대의 주소 범위들과 새로운 포인터 값 사이의 비교를 사용할 수 있다. 일 실시예에서, 대응하는 표시의 마킹이 카드 테이블(310)과 같은 데이터 구조 내에서 대응하는 비트를 설정하는 것을 포함한다. 일 실시예에서, 저장 확인 동작은 또한 힙 내의 각각의 카드의 주소 범위들과 새로운 포인터 값 사이의 비교를 사용할 수 있다. 이러한 비교들은 세대들의 주소 범위들에 대한 비교와 동시에 수행될 수 있다.
조건부 블록(408)에서, 가비지 콜렉션을 개시할지에 대해 하나의 결정이 이루어질 수 있다. 상이한 요건들이 이러한 가비지 콜렉션을 시작할 때를 결정하기 위해 사용될 수 있다 - 이를테면, 이용가능한 자유 메모리의 양(예컨대, 어떤 임계치와 비교됨), 가장 어린 세대 내의 이용가능한 자유 메모리의 양, 또는 마지막 가비지 콜렉션 이후 소정량의 시간이 경과했는지 등. 가비지 콜렉션이 개시되지 않는 것으로 결정되면(조건부 블록(408)), 방법(400)의 제어 흐름이 블록(406)으로 복귀한다. 블록(406)에서, 어플리케이션의 지시들의 실행이 계속된다. 가비지 콜렉션이 개시되는 것으로 결정되면(조건부 블록(408)), 블록(420)에서, 통지가 특수 처리 장치(SPU)로 보내질 수 있다. 통지는 SPU가 도 3에 도시된 주소들(380a, 380b, 및 380f)과 같은 카드 루트 주소들을 산출하기 시작한다는 것을 나타낼 수 있다. 카드 루트 주소들의 산출은 마지막 가비지 콜렉션 이후 어플리케이션 실행 동안에 수행된 메모리 할당 및 수정 갱신들에 기초할 수 있다. 예컨대, 블록(416)에서 발생한 각각의 마킹된 표시에 대해 하나의 카드 루트 주소가 산출될 수 있다. 일 실시예에서, 마킹된 표시는 카드 테이블(310) 내의 설정 비트에 대응한다.
블록(422)에서, SPU는 카드 루트 주소를 결정하기 위해 산출들을 수행할 수 있다. 일 실시예에서, 산출들은 이전에 설명된 바와 같이 대응하는 기본 주소에 대한 더하기 동작 및 자리이동을 포함할 수 있다. 추후에, SPU는 카드 루트 주소들을 CPU에 보낼 수 있다. 대안적으로, SPU는 카드 루트 주소들을 저장하는 메모리 내의 위치에 대응하는 주소를 CPU에 보낼 수 있다. 블록(424)에서, CPU는 산출된 카드 루트 주소들을 활용해서 GC 알고리즘의 단계들을 수행할 수 있다.
이제 도 5를 참조하면, 가비지 콜렉션 알고리즘에서 사용될 카드 루트 주소들을 산출하기 위한 방법(500)의 일 실시예가 도시된다. 방법(400)과 유사하게, 논의 목적상, 본 실시예 및 추후에 설명되는 방법들의 후속 실시예들의 단계들이 순차적인 순서로 도시된다. 그러나, 일부 단계들은 도시된 것과 상이한 순서로 발생할 수 있으며, 일부 단계들은 동시에 수행될 수 있으며, 일부 단계들은 다른 단계들과 조합될 수 있으며, 일부 단계들은 또 하나의 실시예에서 없을 수 있다.
블록(502)에서, 통지가 GC 알고리즘을 위한 카드 루트 주소들을 산출하기 위해 CPU로부터 SPU로 보내질 수 있다. 일 실시예에서, CPU는 도 3에 도시된 세대 기본 주소들(370a, 370b, 및 370c)과 같은 하나 이상의 세대 기본 주소들을 SPU에 보낼 수 있다. 덧붙여, CPU는 카드 테이블(310)과 같은 데이터 구조의 주소를 SPU에 보낼 수 있다. 이러한 데이터 구조는 마지막 가비지 콜렉션 이후의 어플리케이션 실행 동안에 임의의 자격있는 저장된 참조들의 표시들을 저장할 수 있다. 블록(504)에서, SPU는 카드 테이블(310)과 같은 데이터 구조 내에서 저장된 표시들을 스캔하기 위해 자신의 SIMD 코어의 병렬 아키텍처를 활용할 수 있다. 이러한 스캔 동작은 힙 내의 어떤 서브-영역들, 또는 카드들이 자격있는 교차-세대 참조들(cross-generation references)을 저장하는지를 결정할 수 있다. 블록(506)에서, SPU는 다수의 카드 루트 주소들을 동시에 산출하기 위해 자신의 SIMD 코어의 병렬 아키텍처를 활용할 수 있다. 이러한 산출들은 CPU에 의한 소프트웨어 어플리케이션들의 실행시 아무 중단 없이 실행될 수 있다. 그러므로, 카드 루트 주소들은 가비지 콜렉션 일시정지 시간없이 결정될 수 있다.
블록(508)에서, CPU는 SPU로부터 카드 루트 주소들을 수신할 수 있다. 대안적으로, CPU는 카드 루트 주소들을 저장하는 메모리 내의 위치들에 대응하는 하나 이상의 주소들을 수신할 수 있다. 일 실시예에서, CPU는 방법(400)의 블록(410) 내에 생성 및 유지되는 로그를 갱신한다. 이러한 로그는 어플리케이션 실행 동안에 힙 내에 각각의 할당된 데이터 객체들의 대응하는 정보를 저장한다. 이 로그는 산출된 카드 루트 주소들을 가지고 갱신될 수 있다. 블록(510)에서, CPU는 로그 내에 저장된 정보를 활용해서 미리결정된 GC 알고리즘의 단계들을 실행할 수 있다.
위에서, SIMD 코어의 병렬 아키텍처를 활용하여 가비지 콜렉션 알고리즘을 위한 전처리 단계들을 수행하기 위한 하나의 설명이 주어진다. 일 실시예에서, 전처리 단계들은 카드 테이블을 스캔하는 것 및 대응하는 카드 루트 주소들을 산출하는 것을 포함한다. 여기서, 범용 코어와 병렬 아키텍처 SIMD 코어의 차이들 사이에 추가적인 설명이 주어진다. 우선, 범용 코어가 설명된다. 도 6은 비순차 실행(out-of-order execution)을 수행하는 범용 프로세서 코어(600)의 일 실시예를 예시한다. 지시-캐시(instruction-cache; i-cache) 및 대응하는 변환 색인 버퍼(translation-lookaside-buffer; TLB, 602)가 소프트웨어 어플리케이션을 위한 지시들 및 그 지시들에 액세스하기 위한 주소들을 저장할 수 있다. 어떠한 지시-캐시 유실(miss)도 없는 경우, 지시 페치 장치(instruction fetch unit; IFU, 604)가 클록 주기마다 지시-캐시(602)로부터 다수의 지시들을 페치할 수 있다. IFU(604)는 i-TLB 내의 주소들과 비교될 수 있는, 지시-캐시(602)에서 페치하기 위한 그 다음 지시들의 주소에 대한 포인터를 보유하는 프로그램 카운터를 포함할 수 있다. IFU(604)는 또한, 실행 장치가 후반 파이프라인 스테이지(later pipeline stage)에서 실제 결과를 결정하기 전에 조건부 지시의 결과를 예측하기 위한 분기 예측 장치를 포함할 수 있다.
디코더 장치(606)는 다수의 페치된 지시들의 오피코드들(opcodes)을 디코딩하고 예약 스테이션들(608) 내의 그리고 로딩/저장 장치(614) 내의 리오더 버퍼(reorder buffer, 618)와 같은 순차 리타이어먼트 큐(in-order retirement queue) 내에서 엔트리들을 할당할 수 있다. 예약 스테이션들(608) 내에서의 엔트리들의 할당은 디스패치(dispatch)로 여겨진다. 예약 스테이션들(608)은 지시들이 그들의 피연산자들이 이용가능해질 때까지 기다리는 지시 큐로서 작용할 수 있다. 피연산자들이 이용가능하고 하드웨어 자원들 또한 이용가능한 경우, 지시가 예약 스테이션들(608)로부터 정수 및 부동 소수점 기능 장치들(610)로 또는 로딩/저장 장치(614)로 비순차 발급될 수 있다. 로딩 및 저장 동작들과 같은 메모리 액세스들은 로딩/저장 장치(614)로 발급될 수 있다. 기능 장치들(610)은 더하기, 빼기, 곱하기, 나누기, 및 제곱근과 같은 산술적 계산들을 위한 산술 로직 장치들(arithmetic logic units; ALUs)을 포함할 수 있다. 로직은 조건부 지시의 결과를 결정하기 위해 포함될 수 있다. 로딩/저장 장치(614)는 메모리 액세스 지시를 실행하기 위한 큐들 및 로직을 포함할 수 있다. 또한, 로딩 지시가 올바른 가장 어린 저장 지시로부터 전달된 데이터를 수신한다는 것을 보장하기 위해 검증 로직이 로딩/저장 장치(614) 내에 상주할 수 있다.
로딩/저장 장치(614)는 메모리 액세스 요청들(622)을 칩 상의 데이터 캐시(data cache; d-cache, 616)의 하나 이상의 레벨들에 보낼 수 있다. 캐시의 각각의 레벨이 메모리 요청들(622)과의 주소 비교를 위해 자신의 TLB를 가질 수 있다. 캐시(616)의 각각의 레벨이 직렬 또는 병렬 방식으로 검색될 수 있다. 요청된 메모리 라인이 캐시들(616) 내에서 발견되지 않는 경우, 메모리 요청(622)이 메모리 제어기로 보내져 오프-칩(off-chip) 시스템 메모리 내의 메모리 라인에 액세스하게 한다.
기능 장치들(610) 및 로딩/저장 장치(614)로부터의 결과들이 공통 데이터 버스(612) 상에 제시될 수 있다. 결과들은 리오더 버퍼(618)에 보내질 수 있다. 일 실시예에서, 리오더 버퍼(618)는 프로그램 순서에 따른 지시들의 순차 리타이어먼트를 보장하는 선입선출(first-in first-out; FIFO) 큐일 수 있다. 여기서, 자신의 결과들을 수신하는 지시가 리타이먼트를 위해 마킹된다. 지시가 헤드 오브 더 큐(head-of-the-queue)인 경우, 자신의 결과들이 레지스터 파일(620)에 보내지게 할 수 있다. 레지스터 파일(620)은 프로세서 코어(600)의 범용 레지스터들의 아키텍처 상태를 보유할 수 있다. 이때, 리오더 버퍼 내의 지시는 순차로 리타이어될 수 있고 그 헤드 오브 큐 포인터는 프로그램 순서로 후속 지시로 조정될 수 있다.
공통 데이터 버스(612) 상의 결과들이 예약 스테이션들(608)로 보내질 수 있는데, 이는 결과들을 기다리는 지시들의 피연산자들에게 값들을 전달하기 위해서이다. 예컨대, 산술 지시가 이전 산술 지시의 결과들에 의존하는 피연산자들을 가질 수 있거나, 로딩 지시가 기능 장치들(610) 내의 주소 생성 장치(address generation unit; AGU)에 의해 계산된 주소를 필요로 할 수 있다. 이러한 기다리는 지시들이 그들의 피연산자들을 위한 값들과 그 지시들을 실행하기 위한 이용가능한 하드웨어 자원들을 가질 때, 이 지시들은 예약 스테이션들(608)로부터 기능 장치들(610) 또는 로딩/저장 장치(614) 내의 적합한 자원들로 비순차 발급될 수 있다.
실행되지 않은(uncommitted) 또는 리타이어되지 않은(non-retired) 메모리 액세스 지시들이 로딩/저장 장치 내에 엔트리들을 구비한다. 가장 어린 실행되지 않은 더 오래된 저장 지시로부터 인플라이트(in-flight) 또는 실행되지 않은 로딩 지시를 위해 전달된 데이터 값은 공통 데이터 버스(112) 상에 놓이거나, 로딩/저장 장치(614) 내의 로딩 버퍼 내의 적합한 엔트리로 간단히 경로지정될 수 있다. 범용 프로세서 코어, 이를테면 코어(600)가 단일 지시 다수 데이터(SIMD) 어플리케이션과 같은 고도의 병렬 알고리즘의 지시들을 실행할 수 있으나, SIMD 코어와 같은 병렬 아키텍처를 갖는 특수 처리 코어보다 덜 효과적일 수 있다는 것이 주목된다. 병렬 아키텍처를 갖는 특수 처리 코어들의 예들은 디지털 신호 프로세서들(DSPs), 또는 그래픽 처리 장치들(GPUs) 등을 포함한다.
이제 도 7로 가면, 그래픽 프로세서 코어(700)의 일 실시예의 블록도가 도시된다. 코어(700)는 SIMD 코어 내의 병렬 아키텍처의 일 예이다. DSP를 위한 코어와 같은 다른 예들이 가능하며 구상된다. 코어(700)는 대안적인 실시예들을 도출하기 위해 당업자에 의해 수정될 수 있다. 본 실시예 내의 블록들은 특정 레이아웃을 가지고 도시된다. 그러나, 코어(700)의 레이아웃은 도시된 것과 상이할 수 있다. 다른 실시예들에서, 일부 블록들은 통합될 수 있으며, 일부 블록들은 별도의 독립 블록 내에 또는 또 하나의 블록 내에 내부 기능 및 회로를 구비할 수 있으며, 어떤 기능 및 회로는 또 하나의 집적 회로 내에 위치될 수 있다.
도시된 실시예에서, 명령어 및 데이터 페치 장치(710)는 렌더링 명령어 스트림, 상태 정보, 및 부동 소수점 연산들을 위한 기하학적 데이터를 도 1 내의 코어(112)와 같은 프로세서 코어 또는 그래픽 드라이버로부터 수신할 수 있다. 일부 실시예들에서, 이러한 정보를 직접 제공하기 보다는, 프로세서 코어가 이 정보가 저장되는 메모리와 같은 메모리 내의 위치들에 대한 참조들을 제공할 수 있다. 이로써, 장치(710)이 지정된 위치들로부터 정보를 조회한다.
렌더링 명령어 스트림, 상태 정보, 및 기하학적 데이터가 원하는 렌더링된 영상, 또는 영상들을 정의하기 위해 사용될 수 있고, 이는 장면을 위한 기하학적 구조(geometry), 밝기(lighting), 음영(shading), 질감(texture), 움직임(motion), 및/또는 카메라 파라미터들을 포함한다. 일 실시예에서, 기하학적 데이터는 장면 내에 존재할 수 있는 객체들(예컨대, 테이블, 나무, 사람 또는 동물)을 위한 다수의 정의들을 포함한다. 프리미티브들(primitives, 예컨대, 점들, 선들, 삼각형들 및/또는 다른 다각형들)의 그룹들이 객체들을 모델링하기 위해 사용될 수 있다. 프리미티브들은 그들의 정점들(vertices)에 대한 참조에 의해 정의될 수 있다. 각각의 정점에 대해, 하나의 위치가 객체 좌표 시스템 내에 지정될 수 있고, 모델링되는 객체에 대해 상대적으로 정점의 위치를 나타낸다. 위치에 덧붙여, 각각의 정점이 그것과 연관된 다양한 다른 속성들을 가질 수 있다. 다른 정점 속성들의 예들은 정점 및 그 정점과 연관된 기하학적 프리미티브들의 컬러, 질감, 투명도, 조명, 음영, 및 애니메이션과 같은 품질들을 결정하기 위해 사용되는 스칼라 또는 벡터 속성들을 포함할 수 있다.
장면 내의 객체들의 관리가 상태 관리 오버헤드를 포함할 수 있으며 이 오버헤드는 작업이 작은 배치들로(in small batches) 그룹지어지는 경우 증가할 수 있다. 일 실시예에서, 장치(710)는 CPU(115)와 같은 호스트 CPU로부터 그래픽 드라이버로부터 작업을 오프로딩하는 프로세서일 수 있다. 일반적으로, 그래픽 드라이버는 이러한 관리를 위한 작업을 수행하나, 이때 처리 장치(115)는 이러한 작업으로 부담을 느낀다. 그러므로, 장치(710)의 처리 능력을 강화함으로써, 그래픽 드라이버, 및 결과적으로, 처리 장치(115)는 오버헤드 동작들이 경감될 수 있다.
그 다음, 입력 데이터 어셈블러(720)가 처리를 위해 데이터를 준비한다. 어셈블러(720)에 의해 수행된 기능들의 세 개의 예들은 정점 셰이더들을 위한 정점 어셈블리, 기하학적 셰이더들을 위한 기하학적 어셈블리, 및 화소 셰이더들을 위한 스캔 변환 및 보간을 포함할 수 있다. 각각의 기능은 디스패치 장치(730)에게 스레드들을 제출할 수 있다.
일 실시예에서, 디스패치 장치(730)는 수신된 워크로드(workload)를 스레드들로 나눌 수 있으며, 스레드들을 하나 이상의 스트림 코어들(742)을 포함하는 셰이더 어레이(740)와 하나 이상의 텍스쳐 장치들(752)을 포함하는 기능 장치(750) 사이에서 최적으로 분배할 수 있다. 디스패치 장치(730)는 코어들(742) 내의 일부 스트림 처리 장치들(744)의 아이들니스(idleness) 순간들을 결정해서 이 장치들에게 새로운 태스크들을 할당할 수 있다.
스트림 처리 어플리케이션들은 적시 응답 방식으로 고 용량 데이터 스트림들을 처리할 필요성에 의해 특징지어진다. 그러한 어플리케이션들은 GPU 상의 부동 소수점 장치들과 같은 다수의 산술적 장치들을, 이 장치들 사이에서 할당, 동기화, 또는 통신을 명시적으로 관리하지 않고, 사용할 수 있다. 스트림 처리는 수행될 수 있는 병렬 산출(parallel computation)을 제한함으로써 병렬 소프트웨어 및 하드웨어를 단순화시킬 수 있다. 소정의 데이터의 집합인, 스트림은 스트림 내의 각각의 요소에 적용된 일련의 동작들을 구비할 수 있다. 하나의 동작이 스트림 내의 모든 요소들에 적용되는, 균일한 스트리밍이 통상적이다. 동작들은 보통 파이프라인되며(pipelined) 외부 메모리 대역폭을 최소화하기 위해 로컬 온-칩 메모리가 재사용된다.
스트림 추상화들이 데이터 의존성들을 드러내며, 그러므로 컴파일러 툴들이 완전히 자동화되어 온-칩 관리 태스크들을 최적화할 수 있다. 의존성들이 알려진 경우, 스트림 처리 하드웨어는, 예를 들어, 실시간으로 직접 메모리 액세스들(direct memory accesses; DMAs)을 착수하기 위해, 스코어보딩(scoreboarding)을 사용할 수 있다. 수동형 DMA 관리의 제거가 소프트웨어 복잡도를 줄이며, 하드웨어 캐시들의 제거가 산술 로직 장치들(ALUs)과 같은 산술적 장치들에 전용이 아닌 다이(die) 영역의 양을 줄인다.
스트림 처리는 전통적인 디지털 신호 처리(DSP) 또는 GPU-타입 어플리케이션들을 위해 잘 작용하는 데이터-중심 모델에 의해 구동된다. 스트림 처리는 데이터베이스와 같은 더 많은 무작위 데이터 액세스들을 갖는 범용 처리에 최적은 아니다.
일 실시예에서, 각각의 스트림 코어(742)는 SIMD 코어이며 다수의 스트림 처리 장치들(SPU, 744)을 포함한다. 각각의 SPU(744)는 다수의 ALUs를 포함할 수 있으며, 그러므로, 셰이더 어레이(740)가 더 많은 양의 산출 능력(computing power)을 가질 수 있다. 셰이더 어레이(740)는 정점 데이터 상에서 정점 및/또는 기하학적 셰이더 프로그램들을, 제공된 상태 정보에 의해 선택된 프로그램들을 가지고 실행할 수 있다. 셰이더 프로그램들은 정점들 및 다른 데이터 상에서 넓은 범위의 수학적 그리고 논리적 동작들을 사용해서 알고리즘들을 구현할 수 있으며, 프로그램들은 조건부 또는 분기형 실행 경로들 및 직접 그리고 간접 메모리 액세스들을 포함할 수 있다. 사용될 셰이더 프로그램이 도 1에 도시된 시스템 메모리 또는 버퍼들(174) 내에 저장될 수 있다. 셰이더 프로그램은 해당 기술 분야에 알려진 바와 같이 적절한 렌더링 명령어들 및 상태 정보를 통해 셰이더 어레이(740)에 대해 식별될 수 있다.
기능 장치(750)가 시각 효과들을 위한 화소 셰이더 프로그램들의 실행을 위해 하나 이상의 텍스쳐 장치들(752)를 포함한다. 일 실시예에서, 텍스쳐 장치들(752)은 스트림 코어들(742)과 정렬되는데, 이는 셰이더 능력을 더 더하는 것이 텍스쳐 능력을 더 더하는 것과 동등하도록 하기 위해서이다. 텍스쳐 장치들(752)은 프로그램 실행 동안에 데이터 저장을 위해 캐시 메모리 서브시스템(754)을 활용할 수 있다.
도 8을 참조하면, 컴퓨팅 시스템(800)의 일 실시예가 도시된다. 도 1의 부분들과 대응하는 회로 부분들은 동일하게 번호지정된다. 컴퓨팅 시스템(800)은 복수의 처리 노드들(110a 내지 110d)을 포함한다. 네 개의 노드들이 도 8에 도시되나, 다른 실시예들이 상이한 수의 노드들을 포함할 수 있는데, 각 노드는 하나 이상의 프로세서 코어들을 포함한다. 본 명세서에 사용된 바와 같이, 글자가 뒤따르는 참조 번호에 의해 참조되는 요소들은 그 숫자 단독으로 집합적으로 참조될 수 있다. 예컨대, 처리 노드들(110a 내지 110d)은 집합적으로 처리 노드들(110) 또는 노드들(110)으로 언급될 수 있다. 각각의 노드(110)는 제각각의 메모리 제어기(120)를 통해 제각각의 메모리(130)에 결합될 수 있다. 부가적으로, 각각의 처리 노드(110)는 처리 노드들(110)의 나머지들과 통신하기 위해 사용되는 인터페이스 로직(140)을 포함할 수 있다. 예컨대, 처리 노드(110a)는 처리 노드들(110b 및 110c)과 통신하기 위한 인터페이스 로직(140a)을 포함한다. 유사하게, 처리 노드(110b)는 처리 노드들(110a 및 110d)과 통신하기 위한 인터페이스 로직(140b)을 포함하는 식이다.
도 8의 실시예에서, 처리 노드(110d)는 인터페이스 로직(140d)을 통해 입력/출력(I/O) 디바이스(160a)와 통신하기 위해 결합된 것으로 도시되며, I/O 디바이스(160a)는 제2 I/O 디바이스(160b)와 더 결합된다. 다른 처리 노드들이 유사한 방식으로 다른 I/O 디바이스들과 통신할 수 있다. 대안적으로, 처리 노드는 I/O 버스와 결합되는 I/O 브리지와 통신할 수 있다.
컴퓨팅 시스템(800)은 노드간 통신을 위해 패킷 기반 링크를 구현할 수 있다. 묘사된 실시예에서, 링크는 단방향 라인 세트들로서 구현된다(예컨대, 라인들(150a)이 패킷들을 처리 노드(110a)로부터 처리 노드(110b)로 송신하기 위해 사용되고 라인들(150b)이 패킷들을 처리 노드(110b)로부터 처리 노드(110a)로 송신하기 위해 사용된다). 라인들(150c 내지 150h)의 다른 세트들이 도 8에 예시된 다른 처리 노드들 사이에서 패킷들을 송신하기 위해 사용된다. 링크는 처리 노드들 사이에서 통신을 위한 캐시 일치(cache coherent) 방식으로 또는 I/O 디바이스들(160a 및 160b)(및 원하는대로, 부가적인 I/O 디바이스들) 사이에서 데이지-체인(daisy-chain) 구조로서 비일치 방식으로 작동될 수 있다. 하나의 처리 노드(110)로부터 또 하나로 송신될 패킷이 하나 이상의 중간 노드들을 통해 통과할 수 있다는 것이 주목된다. 예컨대, 처리 노드(110a)에 의해 처리 노드(110d)로 송신된 패킷은 도 8에 도시된 바와 같이 처리 노드(110b) 또는 처리 노드(110c)를 통해 통과할 수 있다. 임의의 적합한 경로지정 알고리즘이 사용될 수 있다. 컴퓨팅 시스템(800)의 다른 실시예들이 도 8에 도시된 실시예보다 더 많은 또는 더 적은 처리 노드들을 포함할 수 있다. 덧붙여, 다른 실시예들이 가능한데, 이 실시예들에서 각각의 처리 노드는 점대점 네트워크(point-to-point network)를 통해 모든 다른(every other) 처리 노드에 결합된다. 묘사된 메모리 제어기 및 인터페이스 로직에 덧붙여, 각각의 처리 노드(110)는 하나 이상의 프로세서들 및 연관된 캐시들을 포함할 수 있는데, 이는 도 1에서 이전에 도시 및 설명된 바와 같다.
메모리들(130)은 임의의 적합한 메모리 디바이스들을 포함할 수 있다. 예컨대, 메모리(130)는 하나 이상의 램버스(RAMBUS) 동적 랜덤 액세스 메모리들(dynamic random access memories; DRAMs), 동기식 DRAM들(SDRAMs), DRAM, 정적 RAM 등을 포함할 수 있다. 컴퓨팅 시스템(800)의 주소 공간은 메모리들(130) 사이에서 나뉜다. 각각의 처리 노드(110)는 어느 주소들이 어느 메모리들(130)에 매핑되었는지를, 그리고 따라서 특정 주소를 위한 메모리 요청이 어떤 노드(110)로 경로지정되어야 하는지를 결정하기 위해 사용된 메모리 맵을 포함할 수 있다. 일 실시예에서, 컴퓨팅 시스템(800) 내의 주소를 위한 일치 지점(coherency point)은 주소에 대응하는 바이트들을 저장하는 메모리에 결합된 메모리 제어기(120)이다. 메모리 제어기들(120)은 메모리들(130)과 인터페이스하기 위한 제어 회로를 포함할 수 있다. 부가적으로, 메모리 제어기들(120)은 메모리 요청들을 큐잉하기 위한 요청 큐들을 포함할 수 있다.
일반적으로, 인터페이스 로직(140)은 링크로부터 패킷들을 수신하기 위한 그리고 링크 상에서 송신될 패킷들을 버퍼링하기 위한 버퍼들을 포함할 수있다. 컴퓨팅 시스템(800)은 패킷들을 송신하기 위한 임의의 적합한 흐름 제어 메커니즘을 채용할 수 있다. I/O 디바이스들(160)은 임의의 원하는 주변 디바이스들을 예시한다. 예컨대, I/O 디바이스들(160)은 네트워크 인터페이스 카드들, 비디오 가속기들, 오디오 카드들, 하드 또는 플로피 디스크 드라이브들 또는 드라이브 제어기들, 스카시(SCSI) 어댑터들 및 전화 카드들, 모뎀들, 사운드 카드들, 및 다양한 데이터 획득 카드들, 이를테면 범용 인터페이스 버스(General Purpose Interface Bus; GPIB) 또는 필드 버스 인터페이스 카드들을 포함할 수 있다.
이전에 진술된 바와 같이, 각각의 처리 노드(110)는 하나 이상의 프로세서들 및 연관된 캐시들을 포함할 수 있는데, 이는 도 1에서 이전에 도시 및 설명된 바와 같다. 각각의 노드(110)는 하나 이상의 범용 프로세서 코어들(112)을 포함할 수 있다. 덧붙여, 처리 노드(110)는 단일 지시 다수 데이터(SIMD) 코어와 같은 병렬 아키텍처를 갖는 특수 프로세서 코어(172)를 포함할 수 있다. 프로세서 코어(112)는 이전에 설명된 바와 같이 GC 알고리즘의 단계들을 실행하기 전에 루트 주소들을 산출하기 위해 SIMD 코어(172)를 활용할 수 있다. 대안적으로, 예컨대, SIMD 코어(172) 없는, 처리 노드(110a) 내의 프로세서 코어(112)는 SIMD 코어(172)를 포함하는, 노드(110b)와 같은 별도의 노드 내의 SIMD 코어(172)를 활용할 수 있다. 그러한 실시예에서, 노드(110a) 내의 프로세서 코어(112)가 충족된 GC 시작 조건을 검출할 때, 코어(112)는 별도의 노드(110b) 내의 SIMD 코어(172)에 루트 주소들을 산출하기 위한 통지를 보낼 수 있다. 통지는 임의의 선택된 노드간 통신에 포함될 수 있다.
위에서 설명된 실시예들은 소프트웨어를 포함할 수 있다는 것이 주목된다. 그러한 실시예에서, 방법들 및/또는 메커니즘들을 구현하는 프로그램 지시들이 컴퓨터 판독가능 매체에 전달 및 저장될 수 있다. 프로그램 지시들을 저장하기 위해 구성되는 매체의 다양한 타입들이 이용가능하며 하드 디스크, 플로피 디스크, CD-ROM, DVD, 플래시 메모리, 프로그래머블 ROM들(PROM), 랜덤 액세스 메모리(RAM), 및 휘발성 또는 비-휘발성 스토리지의 다양한 그밖의 형태들을 포함한다.
위 실시예들이 상당히 상세히 설명되었으나, 위 개시물이 일단 완전히 인식되면 다양한 변형예들 및 수정예들이 당업자에게 분명해질 것이다. 다음 청구항들이 그러한 변형예들 및 수정예들 모두를 포괄하도록 해석되어야 한다는 것이 의도된다.

Claims (20)

  1. 처리 노드로서,
    범용 중앙 처리 장치(CPU);
    특수 처리 장치(SPU); 및
    메모리를 포함하되;
    상기 중앙 처리 장치는:
    상기 메모리의 부분에 저장된 데이터 객체가 수정되었다고 검출하는 것에 응답해서, 상기 부분에 대응하는 표시를 저장하도록; 및
    가비지 콜렉션 시작 조건이 충족되었다고 검출하는 것에 응답해서 상기 SPU에 통지를 보내도록 구성되며;
    상기 중앙 처리 장치로부터 상기 통지를 수신하는 것에 응답해서, 상기 SPU는 상기 부분에 대응하는 가비지 콜렉션 전처리를 수행하도록 구성되는, 처리 노드.
  2. 청구항 1에 있어서,
    상기 중앙 처리 장치는:
    상기 메모리를 복수의 영역들로 나누도록 더 구성되되, 각각의 영역은 복수의 서브-영역들을 포함하고, 상기 부분은 상기 서브-영역들 중 하나에 대응하며;
    상기 SPU는 복수의 루트 주소들을 계산하도록 더 구성되고, 각각의 루트 주소는 상기 저장된 표시들 중 하나에 대응하는, 처리 노드.
  3. 청구항 2에 있어서, 상기 SPU는 하나 이상의 미리결정된 콜렉팅가능한 영역들 내에서 도달가능한 데이터 객체들을 식별하기 위해 가비지 콜렉션 알고리즘에 의해 사용되도록 상기 중앙 처리 장치에 상기 계산된 루트 주소들을 보내도록 더 구성되는, 처리 노드.
  4. 청구항 3에 있어서, 상기 중앙 처리 장치는 상기 복수의 서브-영역들 중 하나의 서브-영역에 저장된 데이터 객체가 상기 하나 이상의 미리결정된 콜렉팅가능한 영역들 중 하나를 가리키는 포인터 값을 포함한다고 검출하는 것에 응답해서 상기 서브-영역에 대응하는 표시를 저장하도록 더 구성되는, 처리 노드.
  5. 청구항 3에 있어서, 상기 중앙 처리 장치는 상기 저장된 표시들에 대응하는 하나 이상의 서브-영역들을 포함하는 상기 복수의 영역들 중 영역들의 상기 저장된 표시들 및 기본 주소들을 상기 통지 내에서 상기 SPU에 보내도록 더 구성되는, 처리 노드.
  6. 청구항 5에 있어서, 상기 SPU는:
    두 개 이상의 대응하는 서브-영역들의 위치를 찾기 위해 두 개 이상의 저장된 표시들을 병렬로 읽도록; 및
    대응하는 기본 주소를 기초로 해서 하나의 루트 주소를, 상기 두 개 이상의 위치를 찾은 서브-영역들 각각에 대해, 병렬로 계산하도록 더 구성되는, 처리 노드.
  7. 청구항 6에 있어서, 상기 SPU는 단일 지시 다수 데이터(SIMD) 병렬 아키텍처를 포함하는, 처리 노드.
  8. 청구항 6에 있어서, 상기 SPU는 상기 중앙 처리 장치의 실행을 중단시키는 일시정지 없이 상기 복수의 루트 주소들을 계산하는, 처리 노드.
  9. 가비지 콜렉션을 위한 방법으로서,
    범용 중앙 처리 장치(CPU)가 상기 메모리의 부분에 저장된 데이터 객체가 수정되었다고 검출하는 것에 응답해서, 상기 부분에 대응하는 표시를 저장하는 단계;
    가비지 콜렉션 시작 조건이 충족되었다고 검출하는 것에 응답해서 상기 중앙 처리 장치로부터 특수 처리 장치(SPU)에 통지를 보내는 단계; 및
    상기 SPU는 상기 부분에 대응하는 가비지 콜렉션 전처리를 수행하는 단계를 포함하는, 가비지 콜렉션을 위한 방법.
  10. 청구항 9에 있어서,
    상기 중앙 처리 장치가 상기 메모리를 복수의 영역들로 나누는 단계로서, 각각의 영역은 복수의 서브-영역들을 포함하고, 상기 부분은 상기 서브-영역들 중 하나에 대응하는, 나누는 단계; 및
    상기 SPU가 복수의 루트 주소들을 계산하는 단계로서, 각각의 루트 주소는 상기 저장된 표시들 중 하나에 대응하는, 계산 단계를 더 포함하는, 가비지 콜렉션을 위한 방법.
  11. 청구항 10에 있어서, 하나 이상의 미리결정된 콜렉팅가능한 영역들 중 하나 내에서 도달가능한 데이터 객체들을 식별하기 위해 가비지 콜렉션 알고리즘에 의해 사용되도록 상기 중앙 처리 장치로 상기 계산된 루트 주소들을 보내는 단계를 더 포함하는, 가비지 콜렉션을 위한 방법.
  12. 청구항 11에 있어서, 상기 복수의 서브-영역들 중 하나의 서브-영역에 저장된 데이터 객체가 상기 하나 이상의 미리결정된 콜렉팅가능한 영역들 중 하나를 가리키는 포인터 값을 포함한다고 검출하는 것에 응답해서 상기 서브-영역에 대응하는 표시를 저장하는 단계를 더 포함하는, 가비지 콜렉션을 위한 방법.
  13. 청구항 11에 있어서, 상기 저장된 표시들에 대응하는 하나 이상의 서브-영역들을 포함하는 상기 복수의 영역들 중 영역들의 상기 저장된 표시들 및 기본 주소들을 상기 통지 내에서 상기 SPU에 보내는 단계를 더 포함하는, 가비지 콜렉션을 위한 방법.
  14. 청구항 13에 있어서,
    두 개 이상의 대응하는 서브-영역들의 위치를 찾기 위해 두 개 이상의 저장된 표시들을 병렬로 읽는 단계; 및
    대응하는 기본 주소를 기초로 해서 하나의 루트 주소를, 상기 두 개 이상의 위치를 찾은 서브-영역들 각각에 대해, 병렬로 계산하는 단계를 더 포함하는, 가비지 콜렉션을 위한 방법.
  15. 청구항 13에 있어서, 상기 복수의 영역들의 각각의 영역이 대응하는 저장된 데이터 객체들의 나이에 대응하고, 상기 하나 이상의 미리결정된 콜렉팅가능한 영역들은 상기 복수의 영역들 중 가장 어린 영역들인, 가비지 콜렉션을 위한 방법.
  16. 청구항 15에 있어서, 상기 가비지 콜렉션 시작 조건은 가장 어린 서브-영역이 미리결정된 임계치보다 더 작은 여유 공간을 갖는 조건을 포함하는, 가비지 콜렉션을 위한 방법.
  17. 컴퓨팅 시스템으로서,
    범용 중앙 처리 장치(CPU)를 포함하는 제1 처리 노드;
    상기 제1 처리 노드에 결합된 메모리; 및
    특수 처리 장치(SPU)를 포함하는 제2 처리 노드를 포함하되;
    상기 중앙 처리 장치는:
    상기 메모리의 부분에 저장된 데이터 객체가 수정되었다고 검출하는 것에 응답해서, 상기 부분에 대응하는 표시를 저장하도록; 및
    가비지 콜렉션 시작 조건이 충족되었다고 검출하는 것에 응답해서 상기 SPU에 통지를 보내도록 구성되며;
    상기 중앙 처리 장치로부터 상기 통지를 수신하는 것에 응답해서, 상기 SPU는 상기 부분에 대응하는 가비지 콜렉션 전처리를 수행하도록 구성되는, 컴퓨팅 시스템.
  18. 청구항 17에 있어서, 상기 중앙 처리 장치는:
    상기 메모리를 복수의 영역들로 나누도록 더 구성되되, 각각의 영역은 복수의 서브-영역들을 포함하고, 상기 부분은 상기 서브-영역들 중 하나에 대응하며;
    상기 SPU는 복수의 루트 주소들을 계산하도록 더 구성되고, 각각의 루트 주소는 상기 저장된 표시들 중 하나에 대응하는, 컴퓨팅 시스템.
  19. 청구항 18에 있어서, 상기 중앙 처리 장치는 상기 복수의 서브-영역들 중 하나의 서브-영역에 저장된 데이터 객체가 상기 하나 이상의 미리결정된 콜렉팅가능한 영역들 중 하나를 가리키는 포인터 값을 포함한다고 검출하는 것에 응답해서 상기 서브-영역에 대응하는 표시를 저장하도록 더 구성되는, 컴퓨팅 시스템.
  20. 청구항 18에 있어서, 상기 중앙 처리 장치는 상기 저장된 표시들에 대응하는 하나 이상의 서브-영역들을 포함하는 상기 복수의 영역들 중 영역들의 상기 저장된 표시들 및 기본 주소들을 상기 통지 내에서 상기 SPU에 보내도록 더 구성되는, 컴퓨팅 시스템.
KR1020127025736A 2010-03-02 2011-02-22 가비지 콜렉션을 위한 gpu 서포트 KR101626533B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/715,835 2010-03-02
US12/715,835 US8327109B2 (en) 2010-03-02 2010-03-02 GPU support for garbage collection
PCT/US2011/025779 WO2011109191A1 (en) 2010-03-02 2011-02-22 Gpu support for garbage collection

Publications (2)

Publication Number Publication Date
KR20130018742A true KR20130018742A (ko) 2013-02-25
KR101626533B1 KR101626533B1 (ko) 2016-06-01

Family

ID=43971395

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127025736A KR101626533B1 (ko) 2010-03-02 2011-02-22 가비지 콜렉션을 위한 gpu 서포트

Country Status (6)

Country Link
US (1) US8327109B2 (ko)
EP (1) EP2542973B1 (ko)
JP (1) JP5805675B2 (ko)
KR (1) KR101626533B1 (ko)
CN (1) CN102985910B (ko)
WO (1) WO2011109191A1 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5382383B2 (ja) * 2011-03-24 2014-01-08 日本電気株式会社 データベース処理装置、データベース処理方法、プログラム及びデータベースのデータ構造
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US9053017B2 (en) * 2011-09-09 2015-06-09 Microsoft Technology Licensing, Llc Managing object lifetime in a cyclic graph
US8838929B2 (en) * 2011-10-05 2014-09-16 Arm Limited Allocation and deallocation of bounded time relative portions of a graphics memory
US9530245B2 (en) 2011-12-29 2016-12-27 Qualcomm Incorporated Packing multiple shader programs onto a graphics processor
US9448928B2 (en) * 2013-04-26 2016-09-20 Oracle International Corporation System and method for two-tier adaptive heap management in a virtual machine environment
US9740716B2 (en) * 2013-08-21 2017-08-22 Oracle International Corporation System and method for dynamically selecting a garbage collection algorithm based on the contents of heap regions
US8719374B1 (en) 2013-09-19 2014-05-06 Farelogix, Inc. Accessing large data stores over a communications network
US9477516B1 (en) 2015-03-19 2016-10-25 Google Inc. Concurrent in-memory data publication and storage system
US9734052B2 (en) 2015-06-30 2017-08-15 International Business Machines Corporation Multi-section garbage collection
US10176093B2 (en) 2015-06-30 2019-01-08 International Business Machines Corporation Pauseless location and object handle based garbage collection
US9734053B2 (en) 2015-06-30 2017-08-15 International Business Machines Corporation Garbage collection handler to update object pointers
US10180902B2 (en) 2015-06-30 2019-01-15 International Business Machines Corporation Pauseless location and object handle based garbage collection
US9740626B2 (en) * 2015-08-11 2017-08-22 Oracle International Corporation Sharing data structures between processes by semi-invasive hybrid approach
WO2017087002A1 (en) * 2015-11-20 2017-05-26 Hewlett Packard Enterprise Development Lp Shared memory for distributed data
CN108459898B (zh) 2017-02-20 2022-01-14 阿里巴巴集团控股有限公司 一种资源回收方法及装置
US11593262B1 (en) * 2018-04-25 2023-02-28 Seagate Technology Llc Garbage collection command scheduling
US11650916B2 (en) * 2018-06-14 2023-05-16 Microsoft Technology Licensing, Llc Closed loop garbage collector
US11169804B2 (en) * 2018-09-24 2021-11-09 Oracle International Corporation Method for vectorizing d-heaps using horizontal aggregation SIMD instructions
EP3699771A1 (en) * 2019-02-21 2020-08-26 CoreMedia AG Method and apparatus for managing data in a content management system
US11016778B2 (en) 2019-03-12 2021-05-25 Oracle International Corporation Method for vectorizing Heapsort using horizontal aggregation SIMD instructions
US11620215B2 (en) * 2019-06-26 2023-04-04 International Business Machines Corporation Multi-threaded pause-less replicating garbage collection
US11573793B2 (en) 2020-03-18 2023-02-07 Oracle International Corporation Lazy push strategies for vectorized D-Heaps

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5355483A (en) * 1991-07-18 1994-10-11 Next Computers Asynchronous garbage collection
US20070255909A1 (en) * 2006-04-28 2007-11-01 Gschwind Michael K System and method for garbage collection in heterogeneous multiprocessor systems

Family Cites Families (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4775932A (en) * 1984-07-31 1988-10-04 Texas Instruments Incorporated Computer memory system with parallel garbage collection independent from an associated user processor
US4989134A (en) * 1987-03-20 1991-01-29 Hewlett-Packard Company Method and apparatus for enhancing data storage efficiency
US5136706A (en) * 1987-04-30 1992-08-04 Texas Instruments Incorporated Adaptive memory management system for collection of garbage in a digital computer
JPS6441043A (en) * 1987-08-06 1989-02-13 Ricoh Kk Parallel garbage collector system for list processing
CA2098459A1 (en) * 1992-06-15 1993-12-16 James L. Adcock Computer method and system for conservative-stack and generational heap garbage collection
DE69327089T2 (de) * 1992-07-24 2000-04-13 Microsoft Corp Rechnerverfahren und system zur zuordnung und zur freigabe von speichern.
US5416915A (en) * 1992-12-11 1995-05-16 International Business Machines Corporation Method and system for minimizing seek affinity and enhancing write sensitivity in a DASD array
US5560003A (en) * 1992-12-21 1996-09-24 Iowa State University Research Foundation, Inc. System and hardware module for incremental real time garbage collection and memory management
US5530850A (en) * 1993-10-25 1996-06-25 International Business Machines Corporation Data storage library array with log-structured file system which allows simultaneous write and garbage collection
US5687368A (en) * 1994-07-22 1997-11-11 Iowa State University Research Foundation, Inc. CPU-controlled garbage-collecting memory module
US5751613A (en) * 1996-09-03 1998-05-12 Doty; Douglas E. Persistent heap for dynamic picture objects
US6115782A (en) * 1997-04-23 2000-09-05 Sun Micosystems, Inc. Method and apparatus for locating nodes in a carded heap using a card marking structure and a node advance value
US6199075B1 (en) * 1997-05-30 2001-03-06 Sun Microsystems, Inc. Method and apparatus for generational garbage collection of a heap memory shared by multiple processors
US6081665A (en) * 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6300962B1 (en) * 1998-12-23 2001-10-09 Scientific-Atlanta, Inc. Method and apparatus for providing reliable graphic memory operations in a set-top box environment
US6931423B2 (en) * 1999-02-11 2005-08-16 Oracle International Corp. Write-barrier maintenance in a garbage collector
US6470361B1 (en) * 2000-01-10 2002-10-22 International Business Machines Corporation Method and apparatus for performing generational garbage collection using middle-aged objects
US6826583B1 (en) * 2000-05-15 2004-11-30 Sun Microsystems, Inc. Local allocation buffers for parallel garbage collection
US6526422B1 (en) * 2000-05-15 2003-02-25 Sun Microsystems, Inc. Striding-type generation scanning for parallel garbage collection
US6823351B1 (en) * 2000-05-15 2004-11-23 Sun Microsystems, Inc. Work-stealing queues for parallel garbage collection
US6839725B2 (en) * 2000-05-16 2005-01-04 Sun Microsystems, Inc. Dynamic adaptive tenuring of objects
US6763440B1 (en) * 2000-06-02 2004-07-13 Sun Microsystems, Inc. Garbage collection using nursery regions for new objects in a virtual heap
US6760815B1 (en) * 2000-06-02 2004-07-06 Sun Microsystems, Inc. Caching mechanism for a virtual heap
US6738875B1 (en) * 2000-07-31 2004-05-18 Microsoft Corporation Efficient write-watch mechanism useful for garbage collection in a computer system
US6865585B1 (en) * 2000-07-31 2005-03-08 Microsoft Corporation Method and system for multiprocessor garbage collection
US6804762B1 (en) * 2000-07-31 2004-10-12 Microsoft Corporation Method and system for garbage collection using a dynamically tuned write barrier
CA2421591C (en) * 2000-09-13 2011-08-23 Geodesic Systems, Incorporated Conservative garbage collectors that can be used with general memory allocators
GB0027053D0 (en) * 2000-11-06 2000-12-20 Ibm A computer system with two heaps in contiguous storage
US6964039B2 (en) * 2000-12-13 2005-11-08 Esmertec Ag Method to create optimized machine code through combined verification and translation of JAVA™ bytecode
US7017162B2 (en) * 2001-07-10 2006-03-21 Microsoft Corporation Application program interface for network software platform
JP3939975B2 (ja) * 2001-12-14 2007-07-04 松下電器産業株式会社 ガベージコレクション装置、ガベージコレクション方法及びガベージコレクションプログラム
GB0212119D0 (en) * 2002-05-25 2002-07-03 Ibm A method and system for the garbage collection of shared data
US6999980B2 (en) * 2002-08-23 2006-02-14 Sun Microsystems, Inc. Eliminating write barriers for young objects
US7010555B2 (en) * 2002-10-17 2006-03-07 International Business Machines Corporation System and method for compacting a computer system heap
US7016923B2 (en) * 2002-11-05 2006-03-21 Sun Microsystems, Inc. Multi-threaded garbage collector employing cascaded memory arrays of task identifiers to implement work stealing queues for task identification and processing
US7136887B2 (en) * 2002-12-04 2006-11-14 Sun Microsystems, Inc. Method and mechanism for finding references in a card in time linear in the size of the card in a garbage-collected heap
US20040111718A1 (en) * 2002-12-04 2004-06-10 Detlefs David L. Block-offset table employing gaps in value set
US7031990B2 (en) * 2002-12-06 2006-04-18 Sun Microsystems, Inc. Combining external and intragenerational reference-processing in a garbage collector based on the train algorithm
US7069280B2 (en) * 2002-12-06 2006-06-27 Sun Microsystems, Inc. Collection-tick mechanism for a collector based on the train algorithm
US6868488B2 (en) * 2002-12-20 2005-03-15 Sun Microsystems, Inc. Binned remembered sets
JP4116877B2 (ja) * 2002-12-26 2008-07-09 富士通株式会社 ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置およびそのプログラム
US20040128329A1 (en) * 2002-12-31 2004-07-01 International Business Machines Corporation Parallel incremental compaction
US7058781B2 (en) * 2003-02-14 2006-06-06 Sun Microsystems, Inc. Parallel card table scanning and updating
US7043509B2 (en) * 2003-02-19 2006-05-09 Sun Microsystems, Inc. Parallel non-contiguous allocation and card parsing
US7100003B2 (en) * 2003-11-24 2006-08-29 International Business Machines Corporation Method and apparatus for generating data for use in memory leak detection
US7519639B2 (en) * 2004-01-05 2009-04-14 International Business Machines Corporation Method and apparatus for dynamic incremental defragmentation of memory
KR100608606B1 (ko) * 2004-01-28 2006-08-03 삼성전자주식회사 적응형 가비지 컬렉션 방법 및 상기 방법을 수행하는 장치
US8131955B2 (en) * 2004-04-15 2012-03-06 Microsoft Corporation Ephemeral garbage collection using a tracking mechanism on a card table to determine marked bundles
US7149870B2 (en) * 2004-06-04 2006-12-12 International Business Machines Corporation Assigning sections within a memory heap for efficient garbage collection of large objects
US7171527B2 (en) * 2004-06-10 2007-01-30 Sun Microsystems, Inc Method and apparatus for keeping track of memory usage for tasks in a shared heap
US8607016B2 (en) * 2004-07-21 2013-12-10 Sandisk Technologies Inc. FAT analysis for optimized sequential cluster management
WO2006026086A2 (en) * 2004-08-31 2006-03-09 Silicon Optix Method and apparatus for management of bit plane resources
US7788300B2 (en) * 2004-09-15 2010-08-31 Sap Ag Garbage collection for shared data entities
US7412466B1 (en) * 2005-05-31 2008-08-12 Sun Microsystems, Inc. Offset-based forward address calculation in a sliding-compaction garbage collector
JP4996073B2 (ja) * 2005-07-13 2012-08-08 富士通株式会社 世代別ガベージコレクションプログラム
US8825718B2 (en) * 2006-12-28 2014-09-02 Oracle America, Inc. Methods and apparatus for marking objects for garbage collection in an object-based memory system
US7408782B2 (en) * 2007-01-04 2008-08-05 Tellabs Bedford, Inc. Multiple printed circuit board heat transfer guide plates
CN101615143B (zh) * 2008-06-27 2013-04-17 国际商业机器公司 用于内存泄漏诊断的方法和装置
US8301672B2 (en) 2008-09-22 2012-10-30 Advanced Micro Devices, Inc. GPU assisted garbage collection

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5355483A (en) * 1991-07-18 1994-10-11 Next Computers Asynchronous garbage collection
US20070255909A1 (en) * 2006-04-28 2007-11-01 Gschwind Michael K System and method for garbage collection in heterogeneous multiprocessor systems

Also Published As

Publication number Publication date
CN102985910B (zh) 2016-04-13
CN102985910A (zh) 2013-03-20
EP2542973A1 (en) 2013-01-09
US8327109B2 (en) 2012-12-04
US20110219204A1 (en) 2011-09-08
JP2013521570A (ja) 2013-06-10
EP2542973B1 (en) 2020-04-01
WO2011109191A1 (en) 2011-09-09
JP5805675B2 (ja) 2015-11-04
KR101626533B1 (ko) 2016-06-01

Similar Documents

Publication Publication Date Title
KR101626533B1 (ko) 가비지 콜렉션을 위한 gpu 서포트
US8639730B2 (en) GPU assisted garbage collection
US10896128B2 (en) Partitioning shared caches
US9513904B2 (en) Computer processor employing cache memory with per-byte valid bits
US8732711B2 (en) Two-level scheduler for multi-threaded processing
CN110865968B (zh) 多核处理装置及其内核之间数据传输方法
TWI529620B (zh) 推理執行和回復
TWI489385B (zh) 一種用於預先擷取快取線的電腦實作方法與子系統
CN102713837B (zh) 用于管理并行高速缓存层级的指令
US9069609B2 (en) Scheduling and execution of compute tasks
CN108268385B (zh) 具有集成目录高速缓存的优化的高速缓存代理
US8825718B2 (en) Methods and apparatus for marking objects for garbage collection in an object-based memory system
US9513886B2 (en) Heap data management for limited local memory(LLM) multi-core processors
CN114667508B (zh) 为加速器取回数据的方法和系统
US9715413B2 (en) Execution state analysis for assigning tasks to streaming multiprocessors
US20170322887A1 (en) Method to control cache replacement for decoupled data fetch
US6892280B2 (en) Multiprocessor system having distributed shared memory and instruction scheduling method used in the same system
US10754791B2 (en) Software translation prefetch instructions
Upadhyay Big Vector: An External Memory Algorithm and Data Structure

Legal Events

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

Payment date: 20190429

Year of fee payment: 4