KR20140006778A - 이미지 압축을 위한 엔트로피 코더 - Google Patents

이미지 압축을 위한 엔트로피 코더 Download PDF

Info

Publication number
KR20140006778A
KR20140006778A KR1020137007954A KR20137007954A KR20140006778A KR 20140006778 A KR20140006778 A KR 20140006778A KR 1020137007954 A KR1020137007954 A KR 1020137007954A KR 20137007954 A KR20137007954 A KR 20137007954A KR 20140006778 A KR20140006778 A KR 20140006778A
Authority
KR
South Korea
Prior art keywords
data
encoded
values
computer
stream
Prior art date
Application number
KR1020137007954A
Other languages
English (en)
Inventor
나딤 와이 아브도
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20140006778A publication Critical patent/KR20140006778A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/93Run-length coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/41Bandwidth or redundancy reduction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/164Feedback from the receiver or from the transmission channel
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/156Availability of hardware or computational resources, e.g. encoding based on power-saving criteria
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/63Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets

Abstract

본 개시의 예시적 실시예들은 실시간 이미지 압축에 사용하기 위한 고속 엔트로피 코더/디코더를 제공한다. 원격 컴퓨팅 장치로 전송하기 위한 그래픽 데이터를 처리하는 방법은 렌더링할 클라이언트 스크린을 나타내는 그래픽 데이터를 수신하는 단계, 전송에 이용 가능한 대역폭을 표시하는 정보를 수신하는 단계, 상기 정보에 기반하여 상기 이용 가능한 대역폭이 소정 문턱치를 만족하는 것으로 판단하는 단계, 및 고정 비트 사이즈 인코딩 스트림을 이용하여 상기 그래픽 데이터를 엔트로피 인코딩하되, 제로 런들이 가변하는 수의 고정 비트 사이즈의 유닛들로 인코딩되며, 리터럴 값들은 최근 사용된 리터럴 값들의 캐시 내 엔트리 또는 가변하는 수의 고정 비트 사이즈의 유닛들 중 하나를 이용하여 인코딩되는 단계를 포함한다.

Description

이미지 압축을 위한 엔트로피 코더{ENTROPY CODER FOR IMAGE COMPRESSION}
하나의 늘어나고 있는 대중적 네트워킹 형태는 일반적으로 원격 프리젠테이션 시스템이라 지칭될 수 있는데, 이 시스템은 데스크탑 및 서버 상에서 실행되는 다른 애플리케이션들을 원격 클라이언트와 공유하기 위해 원격 데스크탑 프로토콜(RDP(Remote Desktop Protocol)) 및 독립 컴퓨팅 구조(ICA(Independent Computing Architecture))와 같은 프로토콜들을 사용할 수 있다. 그러한 컴퓨팅 시스템은 통상적으로 키보드 누르기 및 마우스 클릭, 또는 선택사항들을 클라이언트에서 서버로 전송하며, 네트워크 접속(예를 들어, 인터넷)을 통해 다른 방향으로 다시 스크린 업데이트 내용을 중계한다. 따라서, 실제로 데스크탑이나 애플리케이션들의 스크린샷들만이 서버 측에 나타나는 대로 해당 클라이언트 장치로 전송될 때, 사용자는 마치 자신의 장치가 전적으로 지역적으로(locally) 동작하는 것과 같은 경험을 하게 된다.
원격 데스크탑 환경에서 클라이언트로 전송될 그래픽을 나타내는 데이터는 통상적으로 서버에 의해 압축되고, 서버로부터 네트워크를 통해 클라이언트로 전송되며, 클라이언트에 의해 압축해제되어 로컬 사용자 디스플레이 상에 디스플레이된다. 데이터를 인코딩하는 프로세스는 통상적으로 데이터를 압축 및 압축해제 하기 위해 상당한 프로세서 계산 사이클을 요한다. 그러한 프로세싱 요건들은 서버로부터 클라이언트까지의 인코딩 및 디코딩 대기시간(latency)에 영향을 미칠 수 있으며 원격 사용자의 경험에 부정적인 영향을 줄 수 있다.
원격 표현 시스템의 한 가지 문제는 그러한 시스템들이 프로세서 성능을 희생하는 데이터 압축을 선호하는 경향을 가진다는 것이다. 많은 시스템들은 대역폭이 제한될 가능성이 높다고 추정하고 그에 따라 고차 레벨의 데이터 압축을 달성하고 그에 따라 그 제한된 대역폭 데이터 링크를 통해 전송되어야 하는 데이터량을 줄이기 위해 프로세서 성능을 희생시킨다. 그러나 오늘날 많은 원격 표현 클라이언트들은, 저속 프로세서들을 이용할 수 있으나 풍부한 대역폭을 액세스할 수 있는 하위 종단 장치들이다. 그러한 경우 압축이 축소된다는 것을 의미하더라도 보다 단순한 압축기 및 계산적 요구가 덜한 압축 기법들을 사용함으로써 전반적 성능 및 사용자 경험이 개선될 수 있다.
다양한 실시예들에서, 실시간 이미지 압축에 사용할 고속 엔트로피 코더/디코더를 위한 방법 및 시스템이 개시된다. 예를 들어, 원격 컴퓨팅 장치로 전송하기 위한 그래픽 데이터를 처리하는 방법은 렌더링할 클라이언트 스크린을 나타내는 그래픽 데이터를 수신하는 단계, 전송에 이용 가능한 대역폭을 표시하는 정보를 수신하는 단계, 정보에 기반하여 이용 가능한 대역폭이 소정 문턱치를 만족하는 것을 판단하는 단계, 및 고정 비트 사이즈 인코딩 스트림을 이용하여 그래픽 데이터를 엔트로피 인코딩하되, 제로 런들이 가변하는 수의 고정 비트 사이즈의 유닛들로 인코딩되며, 리터럴 값들(literal values)이 최근 사용된 리터럴 값들의 캐시 내 엔트리나 가변하는 수의 고정 비트 사이즈의 유닛들 중 하나를 이용하여 인코딩되는 단계를 포함한다.
본 명세서에 따른 원격 컴퓨팅 장치로 전송하기 위한 그래픽 데이터를 위한 시스템, 방법, 및 컴퓨터 판독 가능 매체가 첨부 도면을 참조하여 더 설명된다.
본 명세서에 따른 가상 환경 안에서의 관점을 바꾸기 위한 시스템, 방법, 및 컴퓨터 판독 가능 매체가 첨부 도면을 참조하여 더 설명된다.
도 1 및 2는 본 개시의 양태들이 구현될 수 있는 전형적 컴퓨터 시스템을 도시한다.
도 3은 본 개시의 양태들을 실시하기 위한 동작 환경을 도시한다.
도 4는 본 개시의 양태들을 실시하기 위한 동작 환경을 도시한다.
도 5는 원격 데스크탑 서비스를 발효하기 위한 회로를 포함하는 컴퓨터 시스템을 예시한다.
도 6은 원격 서비스를 발효하기 위한 회로를 포함하는 컴퓨터 시스템을 예시한다.
도 7은 디코딩 프로세스의 일례를 예시한다.
도 8은 인코딩 프로세스의 일례를 예시한다.
도 9는 클라이언트 컴퓨터로 전송할 그래픽 데이터를 처리하기 위한 동작 절차의 일례를 예시한다.
도 10은 클라이언트 컴퓨터로 전송할 그래픽 데이터를 처리하기 위한 동작 절차의 일례를 예시한다.
도 11은 클라이언트 컴퓨터로 전송할 그래픽 데이터를 처리하기 위한 전형적 시스템을 예시한다.
개괄적인 컴퓨팅 환경
소정의 특정 세부 사항들이 본 개시의 다양한 실시예들에 대한 철저한 이해를 제공하기 위해 이하의 설명 및 도면들에서 설명된다. 종종 컴퓨팅 및 소프트웨어 기술과 관련된 소정의 공지된 세부 사항들은 본 개시의 다양한 실시예들을 불필요하게 불명확하게 하는 것을 피하기 위해 이하의 개시에서 설명되지 않는다. 또한, 당업자는 이하에 기술되는 세부 사항들 중 하나 이상 없이도 본 개시의 다른 실시예들을 실시할 수 있다는 것을 이해할 것이다. 마지막으로, 다양한 방법들이 이하의 개시에서의 단계들 및 순서를 사용하여 기술되지만, 그러한 기술은 본 개시의 실시예들의 명확한 구현을 제공하기 위한 것이며, 단계들과 단계들의 순서가 본 개시를 실시하는데 요구되는 것으로 간주되지 않아야 한다.
여기 기술된 다양한 기법들은 하드웨어나 소프트웨어, 또는 적절하다면 그 둘의 조합과 관련하여 구현될 수 있다는 점이 이해되어야 한다. 따라서, 본 개시의 방법 및 장치, 또는 그들의 소정 양태들이나 일부는 플로피 디스크, CD-ROM, 하드 드라이브, 또는 어떤 다른 장치 판독 가능 저장 매체와 같은 유형의 매체에 수록되는 프로그램 코드(즉, 명령어들)의 형태를 취할 수 있으며, 프로그램 코드가 컴퓨터와 같은 기계로 로딩되어 그 기계에 의해 실행될 때, 그 기계는 본 개시의 실시를 위한 장치가 된다. 프로그램 가능한 컴퓨터들 상에서 프로그램 코드가 실행되는 경우, 컴퓨팅 장치는 일반적으로 프로세서, 프로세서에 의해 판독 가능한 저장 매체(휘발성 및 비휘발성 메모리 및/또는 저장 요소들을 포함), 적어도 한 개의 입력 장치, 및 적어도 한 개의 출력 장치를 포함한다. 예컨대 애플리케이션 프로그래밍 인터페이스(API), 재사용 콘트롤들 등의 사용을 통해, 본 개시와 관련하여 기술되는 프로세스들을 구현하거나 활용할 수 있다. 그러한 프로그램들은 컴퓨터 시스템과 통신하기 위한 고차 레벨의 절차적 또는 객체 지향적 프로그래밍 언어로 바람직하게 구현된다. 그러나, 프로그램(들)은 원할 경우 어셈블리나 기계어로 구현될 수 있다. 어느 경우에도, 그 언어는 컴파일 혹은 해석 언어이며, 하드웨어 구성과 결합될 수 있다.
원격 데스크탑 시스템은 클라이언트 컴퓨터 시스템들에 의해 원격으로 실행될 수 있는 애플리케이션들을 관리하는 컴퓨터 시스템이다. 입력이 클라이언트 컴퓨터 시스템에 입력되고 네트워크(예를 들어, RDP(Remote Desktop Protocol)와 같은 프로토콜들의 ITU(International Telecommunications Union) T.120 패밀리에 기반하는 프로토콜들을 사용함)를 통해 단말 서버 상의 애플리케이션으로 전송된다. 애플리케이션은 그 입력이 터미널 서버에서 입력된 것처럼 그 입력을 처리한다. 애플리케이션은 수신된 입력에 따른 출력을 생성하며, 그 출력은 네트워크를 통해 클라이언트로 전송된다.
실시예들은 하나 이상의 컴퓨터들 상에서 실행될 수 있다. 도 1과 도 2 및 이하의 논의는 본 개시가 구현될 수 있는 알맞은 컴퓨팅 환경에 대한 간결하고 일반적인 내용을 제공하도록 의도된다. 당업자는 컴퓨터 시스템들(200, 300)이 도 1 및 2의 컴퓨터(100)와 관련하여 기술된 구성요소들의 일부나 전부를 가질 수 있다는 점을 이해할 수 있다.
본 개시 전체에 걸쳐 사용된 용어 회로(circuitry)는 하드웨어 인터럽트 제어기, 하드 드라이브, 네트워크 어댑터, 그래픽 프로세서, 하드웨어 기반 비디오/오디오 코덱, 및 그러한 하드웨어를 동작시키는 데 사용되는 펌웨어/소프트웨어를 포함할 수 있다. 그 용어 회로는 또한 소정 방식이나 하나 이상의 로직 프로세서들, 예컨대 멀티 코어 일반 프로세싱 유닛의 하나 이상의 코어들 안에서 세팅된 펌웨어나 스위치들에 의해 기능(들)을 수행하도록 구성된 마이크로프로세서들을 포함할 수 있다. 이 예에서 로직 프로세서(들)은 메모리, 예를 들어 RAM, ROM, 펌웨어 및/또는 가상 메모리로부터 로딩되는 기능(들)을 수행하도록 동작할 수 있는 로직을 구현하는 소프트웨어 명령어들에 의해 구성될 수 있다. 회로가 하드웨어 및 소프트웨어의 조합을 포함하는 예시적 실시예에서, 구현자가 로직 프로세서에 의해 실행될 수 있는 기계 판독 가능 코드 안에 이어서 컴파일될 수 있는 로직을 구현하는 소스 코드를 기입할 수 있다. 당업자라면 최신 기술이 하드웨어, 소프트웨어, 또는 하드웨어/소프트웨어 사이에 차가 거의 없는 수준까지 진화하였다는 것을 알 수 있으므로, 기능들을 실시하기 위한 하드웨어 대 소프트웨어의 선택은 단지 디자인 선택사항이다. 따라서, 당업자는 소프트웨어 프로세스가 등가의 하드웨어 구조로 전환될 수 있고 하드웨어 구조 자체는 등가의 소프트웨어 프로세스로 전환될 수 있다는 것을 예상할 수 있으므로, 하드웨어 구현 대 소프트웨어 구현의 선택은 사소한 것으로 구현자에게 맡겨진다.
도 1은 본 개시의 양태들에 따라 구성되는 컴퓨팅 시스템의 일례를 도시한다. 컴퓨팅 시스템은 프로세싱 유닛(21), 시스템 메모리(22), 및 시스템 메모리를 포함하는 다양한 시스템 구성요소들을 프로세싱 유닛(21)에 연결시키는 시스템 버스(23)를 포함하는 컴퓨터(20) 등을 포함할 수 있다. 시스템 버스(23)는 다양한 버스 구조들 중 어느 하나를 이용하는 메모리 버스나 메모리 제어기, 주변장치 버스, 및 로컬 버스를 포함하는 여러 유형의 버스 구조들 중 어느 하나일 수 있다. 시스템 메모리는 ROM(read only memory)(24) 및 RAM(random access memory)(25)을 포함한다. 시동 중인 경우와 같이 컴퓨터(20) 내 구성요소들 사이에서 정보를 전달하는 것을 돕는 기본 루틴들을 포함하는 기본 입출력 시스템(26)(BIOS)은 ROM(24)에 저장된다. 컴퓨터(20)는 하드 디스크에 읽고 쓰기를 하기 위한 하드 디스크 드라이브(27), 착탈형 마그네틱 디스크(29)에 읽고 쓰기를 하는 마그네틱 디스크 드라이브(28), 및 CD ROM 또는 다른 광 매체 같은 착탈형 광 디스크(31)에 읽기 쓰기를 하는 광 디스크 드라이브(30)를 더 포함할 수 있다. 일부 예시적 실시예들에서, 본 개시의 양태들을 구현하는 컴퓨터 실행 가능 명령어들은 ROM(24), 하드 디스크(미도시), RAM(25), 착탈형 마그네틱 디스크(29), 광 디스크(31), 및/또는 프로세싱 유닛(21)의 캐시에 저장될 수 있다. 하드 디스크 드라이브(27), 마그네틱 디스크 드라이브(28) 및 광 디스크 드라이브(30)는 각기 하드 디스크 드라이브 인터페이스(32), 마그네틱 디스크 드라이브 인터페이스(33) 및 광 드라이브 인터페이스(34)에 의해 시스템 버스(23)로 연결된다. 드라이브들 및 그 관련 컴퓨터 판독 가능 매체는 컴퓨터(20)에 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 및 기타 데이터의 비휘발성 저장을 지원한다. 여기에 기술된 환경은 하드 디스크, 착탈 가능 마그네틱 디스크(29) 및 착탈 가능 광 디스크(31)를 이용하지만, 마그네틱 카세트, 플래시 메모리 카드, 디지털 비디오 디스크, 베르누이 카트리지, RAM(random access memorie), ROM(read only memory) 등과 같이, 당업자에 의해 컴퓨터에 의해 액세스 가능한 데이터를 저장할 수 있는 다른 타입의 컴퓨터 판독 가능 매체 역시 동작 환경에서 사용될 수 있다.
다수의 프로그램 모듈들이 운영 시스템(35), 하나 이상의 애플리케이션 프로그램(36), 다른 프로그램 모듈들(37) 및 프로그램 데이터(38)를 포함하는 하드 디스크, 마그네틱 디스크(29), 광 디스크(31), ROM(24) 또는 RAM(25) 상에 저장될 수 있다. 사용자는 키보드(40) 및 포인팅 장치(42) 같은 입력 장치들을 통해 컴퓨터(20) 안에 명령과 정보를 입력할 수 있다. 다른 입력 장치들(미도시)에는 마이크로폰, 조이스틱, 게임 패드, 위성 접시, 스캐너 등이 포함될 수 있다. 이들 및 기타 입력 장치들은 흔히, 시스템 버스에 연결된 시리얼 포트 인터페이스(46)를 통해 프로세싱 유닛(21)에 연결되나, 병렬 포트나 게임 포트 또는 유니버설 시리얼 버스(USB) 같은 다른 인터페이스들에 의해 연결될 수도 있다. 디스플레이(47) 또는 다른 유형의 디스플레이 장치 역시 비디오 어댑터(48) 같은 인터페이스를 통해 시스템 버스(23)에 연결될 수 있다. 디스플레이(47) 외에, 컴퓨터들은 통상적으로 스피커 및 프린터와 같은 다른 주변 출력 장치(미도시)를 포함한다. 도 1의 시스템은 또한 호스트 어댑터(55), SCSI(Small Computer System Interface) 버스(56) 및 SCSI 버스(56)에 연결된 외부 저장 장치(62)를 포함한다.
컴퓨터(20)는 원격 컴퓨터(49)와 같은 한 개 이상의 원격 컴퓨터로의 로직 연결을 이용하여, 네트워킹 환경 안에서 동작할 수 있다. 원격 컴퓨터(49)는 다른 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 전형적 네트워크 노드, 가상 머신일 수 있으며, 도 1에는 메모리 저장 장치(50) 만이 예시되었지만 통상적으로 컴퓨터(20)와 관련해 위에서 기술된 구성요소들 중 다수나 전부를 포함할 수 있다. 도 1에 도시된 논리 접속들은 LAN(local area network)(51) 및 WAN(wide area network)(52)을 포함할 수 있다. 그러한 네트워킹 환경은 사무소, 기업 전체의 컴퓨터 네트워크, 인트라넷 및 인터넷에서 일반적이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(20)는 네트워크 인터페이스나 어댑터(53)를 통해 LAN(51)에 연결될 수 있다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(20)는 통상적으로, 인터넷 같은 광역 네트워크(52)을 통한 통신을 설정하기 위한 모뎀(54) 또는 다른 수단을 포함할 수 있다. 내장형 또는 외장형일 수 있는 모뎀(54)이 시리얼 포트 인터페이스(46)를 통해 시스템 버스(23)에 연결될 수 있다. 네트워킹 환경에서, 컴퓨터(20)와 관련해 묘사된 프로그램 모듈들이나 그 일부는 원격 메모리 저장 장치에 저장될 수 있다. 도시된 네트워크 접속은 예들이며 컴퓨터들 사이에 통신 링크를 설정하는 다른 수단 역시 사용될 수 있다는 것을 알 수 있을 것이다. 또한 본 개시의 수많은 실시에들은 컴퓨터 시스템들에 특히 적합하다고 생각되지만 이 문서 안의 어느 것도 본 개시를 그러한 실시예들에 한정시키도록 의도되지 않는다.
이제 도 2를 참조하면, 전형적 컴퓨팅 시스템(100)의 또 다른 실시예가 도시된다. 컴퓨팅 시스템(100)은 로직 프로세서(102), 예컨대 실행 코어를 포함할 수 있다. 하나의 로직 프로세서(102)가 예시되지만, 다른 실시예들에서 컴퓨터 시스템(100)은 다수의 로직 프로세서들, 예컨대 각각이 다중 실행 코어들을 가질 수 있는 다중 프로세서 기판들 및/또는 프로세서 기판 마다 다중 실행 코어들을 가질 수 있다. 도면에 의해 보여진 바와 같이, 다양한 컴퓨터 판독 가능 저장 매체(110)가 다양한 시스템 구성요소들을 로직 프로세서(102)에 연결하는 하나 이상의 시스템 버스들에 의해 상호 연결될 수 있다. 시스템 버스들은 다양한 버스 구조들 중 어느 하나를 이용하는 메모리 버스나 메모리 제어기, 주변장치 버스, 및 로컬 버스를 포함하는 여러 유형의 버스 구조들 중 어느 하나일 수 있다. 예시적 실시예들에서 컴퓨터 판독 가능 저장 매체(110)는 예컨대 RAM(random access memory)(104), 저장 장치(106), 예를 들어 전장치계적 하드 드라이브, 반도체 하드 드라이브 등, 펌웨어(108), 예컨대 플래시 RAM이나 ROM 및 예컨대 CD-ROM, 플로피 디스크, DVD, 플래시 드라이브, 외부 저장 소자 등과 같은 착탈 가능 저장 장치들(118)을 포함할 수 있다. 당업자에 의해 마그네틱 카세트, 플래시 메모리 카드, 디지털 비디오 디스크, 베르누이 카트리지와 같은 다른 타입의 컴퓨터 판독 가능 저장 매체가 사용될 수 있다는 점이 이해될 것이다.
컴퓨터 판독 가능 저장 매체는 컴퓨터(100)에 프로세서 실행 가능 명령어(122), 데이터 구조, 프로그램 모듈 및 기타 데이터의 비휘발성 저장을 지원한다. 시동 중인 경우와 같이 컴퓨터 시스템(100) 내 구성요소들 사이에서 정보를 전달하는 것을 돕는 기본 루틴들을 포함하는 기본 입출력 시스템(120)(BIOS)이 펌웨어(108)에 저장될 수 있다. 다수의 프로그램들이 펌웨어(108), 저장 소자(106), RAM(104) 및/또는 착탈 가능 저장 소자(118) 상에 저장되고 운영체계 및/또는 애플리케이션 프로그램들을 포함하는 로직 프로세서(102)에 의해 실행된다.
명령 및 정보는 비한정적으로 키보드 및 포인팅 장치를 포함할 수 있는 입력 장치들(116)을 통해 컴퓨터(100)에 의해 수신될 수 있다. 다른 입력 장치들에는 마이크로폰, 조이스틱, 게임 패드, 스캐너 등이 포함될 수 있다. 이들 및 기타 입력 장치들은 흔히, 시스템 버스에 연결된 시리얼 포트 인터페이스를 통해 로직 프로세서(21)에 연결되나, 병렬 포트나 게임 포트 또는 유니버설 시리얼 버스(USB) 같은 다른 인터페이스들에 의해 연결될 수도 있다. 디스플레이 또는 다른 타입의 디스플레이 장치 역시 그래픽 프로세서(112)의 일부이거나 그에 연결될 수 있는 비디오 어댑터와 같은 인터페이스를 통해 시스템 버스에 연결될 수 있다. 디스플레이 외에, 컴퓨터들은 통상적으로 스피커 및 프린터와 같은 다른 주변 출력 장치(미도시)를 포함한다. 도 1의 전형적 시스템은 또한 호스트 어댑터, SCSI(Small Computer System Interface) 버스 및 SCSI 버스에 연결된 외부 저장 장치를 포함할 수 있다.
컴퓨터 시스템(100)은 원격 컴퓨터와 같은 한 개 이상의 원격 컴퓨터로의 로직 연결을 이용하여, 네트워킹 환경 안에서 동작할 수 있다. 원격 컴퓨터는 다른 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 전형적 네트워크 노드일 수 있으며, 통상적으로 컴퓨터 시스템과 관련해 위에서 기술된 구성요소들 중 다수나 전부를 포함할 수 있다.
LAN이나 WAN 네트워킹 환경에서 사용될 때, 컴퓨터 시스템(100)은 네트워크 인터페이스 카드(114)를 통해 LLAN이나 WAN에 연결될 수 있다. 내부에 있거나 외부에 있을 수 있는 NIC(114)가 시스템 버스에 연결될 수 있다. 네트워킹 환경에서, 컴퓨터 시스템(100)과 관련해 묘사된 프로그램 모듈들이나 그 일부는 원격 메모리 저장 장치에 저장될 수 있다. 여기에 기술된 네트워크 접속은 본보기적인 것이며 컴퓨터들 사이에 통신 링크를 설정하는 다른 수단 역시 사용될 수 있다는 것을 알 수 있을 것이다. 또한 본 개시의 수많은 실시예들은 컴퓨터화된 시스템들에 특히 적합하다고 생각되지만 이 문서 안의 어느 것도 본 개시를 그러한 실시예들에 한정시키도록 의도되지 않는다.
원격 데스크탑 시스템은 클라이언트 컴퓨터 시스템들에 의해 원격으로 실행될 수 있는 애플리케이션들을 관리하는 컴퓨터 시스템이다. 입력이 클라이언트 컴퓨터 시스템에 입력되고 네트워크(예를 들어, RDP(Remote Desktop Protocol)와 같은 프로토콜들의 ITU(International Telecommunications Union) T.120 패밀리에 기반하는 프로토콜들을 사용함)를 통해 단말 서버 상의 애플리케이션으로 전송된다. 애플리케이션은 그 입력이 터미널 서버에서 입력되었던 것처럼 그 입력을 처리한다. 애플리케이션은 수신된 입력에 따른 출력을 생성하고 그 출력은 네트워크를 통해 클라이언트 컴퓨터 시스템으로 전송된다. 클라이언트 컴퓨터 시스템은 출력 데이터를 표현한다. 따라서 입력이 클라이언트 컴퓨터 시스템에서 수신되고 출력이 표현되지만 처리는 실제로 터미널 서버에서 일어난다. 세션은 데스크 탑과 같은 사용자 인터페이스 및 셸, 데스크 탑 안에서의 마우스 움직이을 추적하는 서브 시스템들, 아이콘 위에서의 마우스 클릭을 프로그램 인스턴스를 발효시키는 명령으로 해석하는 서브 시스템들 등을 포함할 수 있다. 다른 예시적 실시예에서 세션은 애플리케이션을 포함할 수 있다. 이 예에서 애플리케이션이 렌더링되는 동안 데스크 탑 환경이 계속 생성될 수 있으나 사용자로부터 숨겨질 것이다. 상술한 논의는 본보기적인 것이고 여기에 개시된 발명의 대상은 다양한 클라이언트/서버 환경들 안에서 구현될 수 있고 특정 터미널 서비스 제품에 국한되지 않을 것이라는 것을 알아야 한다.
원격 데스크탑 환경 전체는 아니더라도 대부분에서, 입력 데이터(클라이언트 컴퓨터 시스템에 입력됨)는 통상적으로 애플리케이션으로의 명령을 나타내는 마우스 및 키보드 데이터를 포함하며 출력 데이터(단말 서버에 있는 애플리케이션에 의해 생성됨)는 통상적으로 비디오 출력 장치에 디스플레이할 비디오 데이터를 포함한다. 많은 원격 데스크탑 환경들 또한 다른 타입의 데이터를 전송하도록 확장되는 기능을 포함한다.
플러그 인들이 RDP 접속을 통해 데이터를 전송하게 함으로써 RDP 프로토콜을 확장시키는 통신 채널들이 사용될 수 있다. 많은 그러한 확장버전들이 존재한다. 프린터 재지정, 클립보드 재지정, 포트 재지정 등과 같은 특성들이 통신 채널 기술을 이용한다. 그에 따라, 입출력 데이터 외에 데이터를 전송해야 하는 많은 통신 채널들이 있을 수 있다. 따라서 출력 데이터를 전송하라는 이따금씩의 요청들 및 이용 가능한 네트워크 대역폭에 대해 경쟁하는 다른 데이터를 전송하라는 하나 이상의 채널 요청들이 있을 수 있다.
이제 도 3 및 4를 참조하면, 가상 머신들을 실행하도록 구성된 컴퓨터 시스템들의 고수준 블록도들이 도시된다. 도면에 도시된 바와 같이, 컴퓨터 시스템(100)은 도 1 및 2에 기술된 구성요소들 및 가상 머신들을 실행시키는데 동작될 구성요소들을 포함할 수 있다. 그러한 구성요소 중 하나가 이 분야에서 가상 머신 모니터라고도 불릴 수 있는 하이퍼바이저(202)이다. 도시된 실시예 안의 하이퍼바이저(202)는 컴퓨터 시스템(100)의 하드웨어에 대한 액세스를 제어하고 중재하도록 구성될 수 있다. 넓게 말하면, 하이퍼바이저(202)는 자녀 파티션 1부터 자녀 파티션 N과 같이 파티션이라 불리는 실행 환경들을 생성할 수 있다(여기서 N은 1 이상의 정수). 실시예들에서 자녀 파티션은 하이퍼바이저(202)에 의해 지원되는 기본 분리 유닛이라고 간주될 수 있고, 즉 각각의 자녀 파티션은 하이퍼바이저(202) 및/또는 부모 파티션의 제어 하에 있는 하드웨어 자원들의 집합, 예컨대 메모리 소자, 로직 프로세서 사이클 등에 매핑될 수 있으며, 하이퍼바이저(202)는 한 파티션이 다른 파티션의 자원들을 액세스하는 것에서 분리시킬 수 있다. 실시예들에서 하이퍼바이저(202)는 마더보드의 펌웨어 안에 내장된 단독형 소프트웨어 제품, 운영체제의 일부, 특수화된 집적 회로, 또는 이들의 조합일 수 있다.
상기 예에서, 컴퓨터 시스템(100)은 개방 소스 커뮤니터에서 도메인 0라고 간주될 수도 있는 부모 파티션(204)을 포함한다. 부모 파티션(204)는 개방 소스 커뮤니티에서 백엔드 드라이버들이라고도 알려진 가상화 서비스 제공자들(VSP: virtualization service providers)(228)을 이용하여 자녀 파티션들 1-N에서 실행되는 운영체제들을 게스팅(guest)하기 위해 자원들을 제공하도록 구성될 수 있다. 이 전형적 구조에서 부모 파티션(204)은 기본 하드웨어에 게이트 액세스할 수 있다. VSP들(228)은 개방 소스 커뮤니티에서 프론트엔드 드라이버들이라고도 알려진 가상화 서비스 제공자들(VSP: virtualization service providers)을 이용하여 하드웨어 자원들로의 인터페이스들을 멀티플렉싱하는데 사용될 수 있다. 각각의 자녀 파티션은 실행할 스레드들을 관리 및 스케줄링할 수 있는 운영 시스템들(220에서 222)을 게스팅하는 가상 프로세서들(230 내지 232)과 같은 하나 이상의 가상 프로세서들을 포함할 수 있다. 일반적으로, 가상 프로세스들(230에서 232)은 고유 구조를 가진 물리적 프로세서의 표현을 재공하는 실행 가능 명령어들 및 관련 상태 정보이다. 예를 들어 한 가상 머신은 인텔 x86 프로세서의 특징을 가진 가상 프로세서를 가질 수 있는 반면 다른 가상 프로세서는 PowerPC 프로세서의 특징을 가질 수 있다. 이 예의 가상 프로세서들은 가상 프로세서들을 실시하는 명령어들이 컴퓨터 시스템들의 로직 프로세서들에 의해 지원될 수 있도록 그 로직 프로세서들로 매핑될 수 있다. 따라서 이러한 예시적 실시예에서 다중 가상 프로세서들은 예를 들어 다른 로직 프로세서가 하이퍼바이저 명령어들을 실행하는 동안 동시에 실행될 수 있다. 일반적으로 말하면 도면에 예시된 바와 같이, 파티션 내 가상 프로세서들, 다양한 VSC들 및 메모리의 조합이 가상 머신 240 또는 242와 같은 가상 머신이라고 간주될 수 있다.
일반적으로 게스트 운영체제들(220 내지 222)은 예컨대 마이크로소프트, 애플, 개방 소스 커뮤니티 등으로부터의 운영체제들과 같은 어떤 운영체제를 포함할 수 있다. 게스트 운영체제들은 동작의 사용자/커널 모드들을 포함할 수 있고, 스케줄러, 메모리 관리자 등을 포함할 수 있는 커널들을 가질 수 있다. 커널 모드는 적어도 특권이 있는 프로세서 명령어들에 대한 액세스를 허용하는 로직 프로세서 내 실행 모드를 포함할 수 있다. 각각의 게스트 운영체제(220 내지 222)는 터미널 서버, 전자상거래 서버, 이메일 서버 등과 같은 애플리케이션을 저장할 수 있는 관련 파일 시스템들 및 게스트 운영체제 자체를 가질 수 있다. 게스트 운영체제(220-222)는 스레드들이 가상 프로세서들(230-232) 상에서 실행되도록 스케줄링할 수 있고 그러한 애플리케이션들의 인스터스들이 실시될 수 있다.
이제 도 4를 참조하면 가상 머신들을 실시하는 데 사용될 수 있는 다른 구조가 예시된다. 도 4는 도 3의 구성요소들과 유사한 구성요소들을 도시하지만, 이 예시적 실시예에서 하이퍼바이저(202)는 가상화 서비스 제공자들(228) 및 장치 드라이버들(224)을 포함할 수 있고 부모 파티션(204)은 구성 유틸리티들(236)을 포함할 수 있다. 이 구조에서 하이퍼바이저(202)는 도 2의 하이퍼바이저(202)와 동일하거나 유사한 기능들을 수행할 수 있다. 도 4의 하이퍼바이저(202)는 마더보드의 펌웨어 안에 내장되는 단독형 소프트웨어 제품, 운영체제의 일부일 수 있고, 혹은 하이퍼바이저(202)의 일부가 특수 집적 회로들에 의해 실시될 수 있다. 이 예에서 부모 파티션(204)은 하이퍼바이저(202)를 구성하는데 사용될 수 있는 명령어들을 가질 수 있으나, 하드웨어 액세스 요청들은 부모 파티션(204)으로 전달되지 않고 수퍼바이저(202)에 의해 처리될 수 있다.
이제 도 5를 참조하면, 컴퓨터(100)는 연결하는 클라이언트들로 원격 데스크톱 서비스들을 제공하도록 구성된 회로를 포함할 수 있다. 예시적 실시예에서, 도시된 운영체제(400)는 하드웨어 상에서 바로 실행될 수 있고, 혹은 게스트 운영 체제(220 또는 222)가 VM(216) 또는 VM(218)과 같은 가상 머신에 의해 실시될 수 있다. 기본 하드웨어(208, 210, 234, 212 및 214)는 그 하드웨어가 가상화될 수 있음을 식별하기 위해 도시된 유형의 점선으로 나타내진다.
각각의 접속 클라이언트는 클라이언트가 컴퓨터(100) 상에 저장된 데이터 및 애플리케이션을 액세스하게 하는 세션(세션(404) 같은)을 가질 수 있다. 일반적으로 애플리케이션들 및 소정 운영체제 구성요소들은 세션에 할당된 메모리의 어떤 영역 안으로 로딩될 수 있다. 따라서, 어떤 예들에서 일부 OS 구성요소들은 N 배로 늘어날 수 있다(여기서 N은 현재의 세션들의 개수를 나타낸다). 이러한 다양한 OS 구성요소들은 예컨대 메모리를 관리하고; 디스크 읽기/쓰기를 돕고; 각각의 세션으로부터의 스레드들이 로직 프로세서(102) 상에서 실행되도록 구성할 수 있는 운영체제 커널(418)로 서비스들을 요청할 수 있다. 세션 공간 안으로 로딩될 수 있는 일부 전형적 서브시스템들은 데스크탑 환경을 생성하는 서비시스템, 데스크탑 안의 마우스 이동을 추적하는 서브시스템, 아이콘 상의 마우스 클릭을 프로그램의 인스턴스를 발효시키는 명령들로 변환하는 서비시스템 등을 포함할 수 있다. 이러한 서비스들, 예컨대 마우스 이동 추적을 실시하는 프로세스들에는 세션과 결부된 식별자가 태깅되며 그 프로세서들은 세션에 할당된 메모리의 영역 안으로 로딩된다.
세션은 세션 관리자(416), 예를 들어 프로세스에 의해 생성될 수 있다. 예를 들어 세션 관리자(416)는 세션 공간에 대한 세션 식별자를 생성하고; 메모리를 그 세션 공간에 할당하며; 세션 공간에 할당된 메모리 내에 서브시스템 프로세스의 시스템 환경 변수들 및 인스턴스들을 생성함으로써 각각의 원격 세션을 초기화하고 관리할 수 있다. 세션 관리자(416)는 원격 데스크탑 세션에 대한 요청이 운영체제(400)에 의해 수신될 때 호출될 수 있다.
접속 요청은 먼저 전송 스택(410), 예컨대 원격 데스크탑 프로토콜(RDP) 스택에 의해 처리될 수 있다. 전송 스택(410) 명령들이 소정 포트 상의 접속 메시지들에 주의를 기울이고 그들을 세션 관리자(416)로 전달하도록 로직 프로세서(102)를 구성할 수 있다. 세션들이 생성될 때 전송 스택(410)은 각각의 세션에 대한 원격 데스크탑 프로콜 스택 인스턴스를 인스턴스화할 수 있다. 스택 인스턴스(414)는 세션(404)에 대해 생성될 수 있는 전형적 스택 인스턴스이다. 일반적으로 각각의 원격 데스크탑 프로토콜 스택 인스턴스는 출력을 관련 클라이언트로 라우팅하고 클라이언트 입력을 적합한 원격 세션을 위한 환경 서브시스템(444)으로 라우팅하도록 구성될 수 있다.
도면에 도시된 바와 같이, 일 실시에에서 애플리케이션(448)(하나가 보여지는 동안 다른 것들 역시 실행됨)이 실행되어 비트들의 어레이를 생성할 수 있다. 그 어레이는 메모리에 저장될 수 있는 비트맵들, 예컨대 픽셀 값들의 어레이들을 렌더링할 수 있는 그래픽 인터페이스(446)에 의해 처리될 수 있다. 도면에 의해 도시된 바와 같이, 원격 디스플레이 서브시스템(420)이 인스턴스화될 수 있고 렌더링 콜을 캡처하고 그 콜들을 네트워크를 통해 세션에 대한 스택 인스턴스(414)를 거쳐 클라이언트(401)로 보낼 수 있다.
원격 그래픽 및 오디오 외에, 플러그 및 플레이 재지정기(458) 역시 프린터, MP3 플레이어, 클라이언트 파일 시스템, CD ROM 드라이브 등과 같은 다양한 장치들을 리모팅하기 위해 인스턴스화될 수 있다. 플러그 앤 플레이 재지정기(458)는 클라이언트(401)에 결합된 주변 장치들을 식별하는 클라이언트 측 구성요소로부터 정보를 수신할 수 있다. 플러그 앤 플레이 재지정기(458)는 그런 다음 클라이언트(401)의 주변 장치들을 위한 재지정 장치 드라이버들을 로딩하도록 운영체제(400)를 구성할 수 있다. 재지정 장치 드라이버들은 운영체제(400)로부터 주변 장치를 액세스하라는 호출을 받아 그 호출을 네트워크를 통해 클라이언트(401)로 보낼 수 있다.
위에서 논의한 바와 같이, 클라이언트들은 단말 서비스를 이용하여 자원에 연결하기 위해 원격 데스크탑 프로토콜(RDP)과 같이 원격 표현 서비스를 제공하는 프로토콜을 사용할 수 있다. 원격 데스크탑 클라이언트가 단말 서버 게이트웨이를 통해 단말 서버에 연결될 때, 게이트웨이는 단말 서버와의 소켓 접속을 오픈하고 원격 표현 포트나 원격 액세스 서비스 전용 포트 상으로 클라이언트 트래픽을 재지정할 수 있다. 게이트웨이는 또한 HTTP5를 통해 전송되는 단말 서버 게이트웨이를 이용하여 클라이언트와 소정 게이트웨이 고유의 교환을 수행할 수도 있다.
도 6으로 주의를 돌리면, 원격 서비스들을 실시하고 본 개시의 양태들을 포함하는 회로를 포함하는 컴퓨터 시스템(100)이 도시된다. 도면에 의해 도시된 바와 같이, 일 실시예에서 컴퓨터 시스템(100)은 도 2 및 도 5에 도시된 것들과 유사한 구성요소들을 포함할 수 있고 원격 표현 세션을 실시할 수 있다. 본 개시의 일 실시예에서 원격 표현 세션은 콘솔 세션, 예를 들어 컴퓨터 시스템을 이용하는 사용자를 위해 야기된 세션 및 원격 세션의 양태들을 포함할 수 있다. 상술한 것과 유사하게, 세션 관리자(416)는 원격 표현 세션을 실시하기 위해 구성요소들을 인에니블/디세이블함으로써 원격 표현 세션을 초기화 및 관리할 수 있다.
원격 표현 세션 안에 로딩될 수 있는 구성요소들의 한 집합은 고 충실도 리모팅을 가능하게 하는 콘솔 구성요소들, 즉 3D 하드웨어에 의해 렌더링되는 3D 그래픽 및 2D 그래픽을 활용하는 구성요소들이다.
3D 하드웨어에 의해 렌더링되는 3D/2D 그래픽은 사용자 모드 드라이버(522), API(520), 그래픽 커널(524) 및 커널 모드 드라이버(530)를 포함하는 드라이버 모델을 이용하여 액세스될 수 있다. 애플리케이션(448)(또는 3D 그래픽을 생성하는 사용자 인터페이스와 같은 어떤 다른 프로세스)은 API 구성물들을 생성할 수 있고 그들을 마이크로소프트로부터 Direct3D와 같은 애플리케이션 프로그래밍 인터페이스(API)(520)으로 보낼 수 있다. API(520)는 다시, 프리미티브들(primitives) 예컨대, 다른 모양들을 위한 빌딩 블록들로서 사용되는 정점들과 상수들로서 표현되는 컴퓨터 그래픽에 사용되는 기본 기하 모양들을 생성할 수 있는 사용자 모드 드라이버(522)와 통신할 수 있고 그들을 버퍼, 예를 들어 메모리의 페이지들 안에 저장한다. 일 실시예에서 애플리케이션(448)은 그것이 버퍼를 어떻게 사용할 것인지, 예를 들어 어떤 타입의 데이터를 버퍼에 저장할 것인지를 선언할 수 있다. 비디오그램과 같은 애플리케이션은 아바타를 위한 프리미티브들을 저장하기 위한 동적 버퍼 및 빌딩이나 숲을 나타내는 데이터와 같이 자주 바뀌지 않을 데이터를 저장하기 위한 정적 버퍼를 사용할 수 있다.
드라이버 모델에 대한 설명을 계속하면, 애플리케이션은 버퍼들을 프리미티브들로 채우고 실행 명령들을 발부할 수 있다. 애플리케이션이 실행 명령을 발부할 때 버퍼가 커널 모드 드라이버(530)에 의해 리스트를 실행하기 위해 종속되고 그래픽 커널 스케줄러(528)에 의해 스케줄링될 수 있다. 각각의 그래픽 소스, 예를 들어 애플리케이션이나 사용자 인터페이스는 컨텍스트 및 그 자신의 실행 리스트를 가질 수 있다. 그래픽 커널(524)은 그래픽 프로세싱 유닛(112) 상에서 실행할 다양한 컨텍스트들을 스케줄링하도록 구성될 수 있다. GPU 스케줄러(528)가 로직 프로세서(102)에 의해 실행될 수 있고, 이 스케줄러(528)는 버퍼의 콘텐츠를 렌더링하라는 명령을 커널 모드 드라이버(530)로 발부할 수 있다. 스택 인스턴스(414)는 버퍼가 클라이언트의 GPU에 의해 프로세싱될 수 있을 때 네트워크를 통해 클라이언트(401)로 버퍼의 콘텐츠를 전송하고 며령을 수신하도록 구성될 수 있다.
이제 예시되는 것은 원격 표현 서비스를 호출하는 애플리케이션과 함께 사용되는 가상화된 GPU의 동작예이다. 도 6을 참조할 때, 일 실시예에서 가상 머신 세션이 컴퓨터(100)에 의해 생성될 수 있다. 예를 들어 세션 관리자(416)가 로직 프로세서(102)에 의해 실행될 수 있고 소정 원격 구성요소들을 포함하는 원격 세션이 초기화될 수 있다. 이 예에서 야기된 세션은 커널(418), 그래픽 커널(524), 사용자 모드 디스플레이 드라이버(522) 및 커널 모드 디스플레이 드라이버(530)를 포함할 수 있다. 사용자 모드 드라이버(522)는 메모리 안에 저장될 수 있는 그래픽 프리미티브들을 생성할 수 있다. 예를 들어 API(520)는 운영체제(400)나 애플리케이션(448)을 위한 사용자 인터페이스와 같은 프로세스들에 대해 보여질 수 있는 인터페이스들을 포함할 수 있다. 프로세스는 포인트 리스트, 라인 리스트, 라인 스트립, 삼각 리스트, 삼각 스트립, 또는 삼각 부채모양과 같은 고차 레벨 API 명령들을 API(420)로 보낼 수 있다. API(520)는 이러한 명령들을 수신하고 이들을 정점들을 생성하여 하나 이상의 버퍼들에 저장할 수 있는 사용자 모드 드라이버(522)를 위한 명령들로 변환한다. GPU 스케줄러(528)는 버퍼의 콘텐츠를 렌더링하도록 실행 및 결정할 수 있다. 이 예에서 서버의 그래픽 프로세싱 유닛(112)으로의 명령이 캡처될 수 있고 버퍼의 콘텐츠(프리미티브들)가 네트워크 인터페이스 카드(114)를 통해 클라이언트(401)로 보내질 수 있다. 일 실시예에서 API는 가상 GPU가 이용 가능한지 여부를 판단하기 위해 구성요소들이 간섭할 수 있는 세션 관리자(416)에 의해 노출될 수 있다.
일 실시예에서 도 3이나 4의 가상 머신(240)과 같은 가상 머신이 인스턴스화될 수 있고 그 가상 머신은 운영체제(400)에 대한 실행 플랫폼으로서 기능할 수 있다. 게스트 운영체제(220)가 이 예에서 운영체제(400)를 구현할 수 있다. 가상 머신은 접속 요청이 네트워크를 통해 수신될 때 인스턴스화될 수 있다. 예를 들어 부모 파티션(204)은 전송 스택(410)의 인스턴스를 포함할 수 있고 접속 요청들을 수신하도록 구성될 수 있다. 부모 파티션(204)은 원격 세션을 실시하는 기능을 포함하는 게스트 운영체제와 함께 접속 요청에 응답하여 가상 머신을 초기화할 수 있다. 그런 다음 그 접속 요청이 게스트 운영체제(220)의 전송 스택(410)로 건네질 수 있다. 이 예에서 각각의 원격 세션은 가체 가상 머신에 의해 실행되는 운영체제 상에서 인스턴스화될 수 있다.
일 실시예에서 가상 머신이 인스턴스화될 수 있고 운영체제(400)를 구현하는 게스트 운영체제(220)가 실행될 수 있다. 상술한 것과 유사하게, 가상 머신은 접속 요청이 네트워크를 통해 수신될 때 인스턴스화될 수 있다. 원격 세션들이 운영체제에 의해 생성될 수 있다. 세션 관리자(416)가 그 요청이 3D 그래픽 렌더링을 지원하는 세션에 대한 것이라고 판단하도록 구성될 수 있고 세션 관리자(416)는 콘솔 세션을 로딩할 수 있다. 콘솔 세션을 로딩하는 것 외에 세션 관리자(416)는 세션을 위한 스택 인스턴스(414')를 로딩하고 사용자 모드 디스플레이 드라이버(522)에 의해 생성되는 프리미티브들을 캡처하도록 시스템을 구성할 수 있다.
사용자 모드 드라이버(522)는 캡처되어 전송 스택(410)이 액세스할 수 있은 버퍼들 안에 저장될 수 있는 그래픽 프리미티브들을 생성할 수 있다. 커널 모드 드라이버(530)는 애플리케이션에 대한 실행 리스트에 버퍼들을 종속시킬 수 있고 GPU 스케줄러(528)는 버퍼들에 대한 렌더 명령들을 언제 발부할지를 결정할 수 있다. 스케줄러(528)가 렌더 명령을 발부할 때, 그 명령은 예컨대 커널 모드 드라이버(530)에 의해 캡처될 수 있고 스택 인스턴스(414)를 통해 클라이언트(401)로 보내질 수 있다.
GPU 스케줄러(528)는 버퍼의 콘텐츠를 렌더링할 명령어들을 실행 및 결정할 수 있다. 이 예에서 렌더링할 명령어들과 관련된 그래픽 프리미티브들이 네트워크 인터페이스 카드(114)를 통해 클라이언트(401)로 보내질 수 있다.
일 실시예에서 적어도 하나의 커널 모드 프로세스가 적어도 하나의 로직 프로세서(112)에 의해 실행될 수 있고 적어도 하나의 로직 프로세서(112)는 다양한 버퍼들 안에 저장되는 렌더링 정점들을 동기시킬 수 있다. 예를 들어 운영체제 스케줄러와 유사하게 동작할 수 있는 그래픽 프로세싱 스케줄러(528)가 GPU 동작들을 스케줄링할 수 있다. GPU 스케줄러(528)는 정점들의 각각의 버퍼들을 올바른 실행 순서로 병합하여 클라이언트(401)의 그래픽 프로세싱 유닛이 그들을 올바로 렌더링하게 하는 순서로 명령들을 실행하도록 할 수 있다.
비디오그램과 같은 프로세스의 하나 이상의 스레드들이 다수의 버퍼들을 매핑할 수 있고 각각의 스레드가 그리기(draw) 명령을 발부할 수 있다. 정점들에 대한 식별 정보, 예컨대 버퍼마다, 정점마다, 혹은 버퍼 내 정점들의 배치(batch) 마다 생성되는 정보가 GPU 스케줄러(528)로 보내질 수 있다. 그 정보는 동일하거나 다른 프로세스들로부터의 정점들과 연관된 식별 정보와 함께 테이블 안에 저장되어 다양한 버퍼들의 렌더링을 동기화하는데 사용될 수 있다.
워드 프로세서 프로그램과 같은 애플리케이션은 예컨대 두 개의 버퍼들- 한 개는 3D 메뉴들을 생성하기 위해 정점들을 저장하기 위한 것이고 다른 하나는 메뉴들을 있게 할 수 있는 문자들을 생성하기 위한 명령들을 저장하기 위한 것-을 실행 및 선언할 수 있다. 그 애플리케이션은 버퍼를 매핑하고 그리기 명령들을 발부할 수 있다. GPU 스케줄러(528)는 메뉴들이 보기에 좋을 수 있는 방식으로 문자들과 함께 렌더링되도록 두 개의 버퍼들을 실행시키는 순서를 결정할 수 있다. 예를 들어, 다른 프로세스들이 동일하거나 실질적으로 유사한 시점에 그리기 명령들을 발부할 수 있고 정점들이 동기화되지 않았다면, 다른 프로세스들의 다른 스레드들로부터의 정점들은 클라이언트(401) 상에서 비동기적으로 렌더링될 수 있며, 그에 의해 디스플레이되는 최종 이미지가 혼돈되거나 뒤범벅되게 보이도록 할 수 있다.
벌크(bulk) 압축기(450)가 클라이언트(401)로의 데이터 스트림 전송 전에 그래픽 프리미티브들을 압축하는데 사용될 수 있다. 일 실시예에서 벌크 압축기(450)는 스택 인스턴스(414)의 사용자 모드(미도시) 또는 커널 모드 구성요소일 수 있으며 클라이언트(401)로 보내지고 있는 데이터의 스트림 안에서 유사한 패턴들을 찾도록 구성될 수 있다. 이 실시예에서, 벌크 압축기(450)는 여러 애플리케이션들로부터 여러 API 구성물들을 수신하지 않고 정점들의 스트림을 수신하므로, 벌크 압축기(450)는 압축할 기회들을 찾기 위해 선별할 정점들의 대량 데이터 집합을 가진다. 즉, 복수의 프로세스들을 위한 정점들이 리모팅되기 때문에, 다양한 API 콜들 대신 버크 압축기(450)가 주어진 스트림 안에서 유사한 패턴들을 찾을 수 있는 더 큰 기회가 존재한다.
일 실시예에서 그래픽 프로세싱 유닛(112)는 메모리에 대한 물리적 어드레스들 대신 가상 어드레싱을 이용하도록 구성될 수 있다. 따라서 버퍼로서 사용되는 메모리의 페이지들이 비디오 메모리로부터의 디스크나 스템 RAM으로 페이징될 수 있다. 스택 인스턴스(414')는 그래픽 커널(528)로부터 렌더 명령이 캡처될 때 버퍼들의 가상 어드레스들을 획득하고 가상 어드레스들로부터 콘텐츠를 보내도록 구성될 수 있다.
운영체제(400)는 예컨대 다양한 서브시스템들 및 드라이버들이 프리미티브들을 캡처하고 이들을 클라이언트(401)와 같은 원격 컴퓨터로 보내기 위해 로딩될 수 있도록 구성될 수 있다. 위에서 기술한 것과 유사하게, 세션 관리자(416)가 로직 프로세서(102)에 의해 실행될 수 있고 소정 원격 구성요소들을 포함하는 세션이 초기화될 수 있다. 이 예에서 야기된 세션은 커널(418), 그래픽 커널(524), 사용자 모드 디스플레이 드라이버(522) 및 커널 모드 디스플레이 드라이버(530)를 포함할 수 있다.
그래픽 커널이 GPU 동작들을 스케줄링할 수 있다. GPU 스케줄러(528)는 정점들의 각각의 버퍼들을 올바른 실행 순서로 병합하여 클라이언트(401)의 그래픽 프로세싱 유닛이 그들을 올바로 렌더링하게 하는 순서로 명령들을 실행하도록 할 수 있다.
도 7을 참조하면, 본 개시의 일 실시예에 따라 코딩 프로세스를 예시한 블록도가 도시된다. 인코딩 프로세스는 도 8에 도시된다. 인코딩된 타일은 우선, 양자화된 타일 계수를 생성하기 위해 RLGR 디코더(900)를 거칠 수 있다. 이것은 CPU 상에서 수행될 수 있다.
양자화해제(705)가 SSE2 명령어들을 이용하여 CPU 상에서 구현될 수 있다. 양자화해제 후, 타일의 세 성분들의 열 개의 서브밴드들이 Y, U 및 V 각각에 대해 하나씩 포맷 L16의 세 개의 Direct3D 텍스처 버퍼들 안으로 복사될 수 있다. 이들 세 텍스처들은 GPU 상으로 업로딩될 수 있고 역 DWT 단계(710)에 의해 입력으로서 사용될 수 있다.
상술한 파티션들을 구현하기 위한 그러한 변형들 모두는 단지 전형적 구현예들이며, 여기에서의 어느 것도 특정 가상화 양태에 대한 개시를 한정하는 것으로 해석되어서는 안될 것이다.
엔트로피 인코더
가상 데스크탑 또는 원격 표현 세션에서, 사용자 그래픽 및 비디오가 각각의 사용자를 위해 서버에서 렌더링될 수 있다. 그에 따른 비트맵들이 이제 디스플레이되고 상호작용하기 위해 클라이언트로 보내질 수 있다. 네트워크 상의 대역폭 요건들을 감축하기 위해 비트맵들은 클라이언트로 보내기 전에 압축될 수 있다. 압축 기법은 낮은 대기시간을 이용하여 효율적이게 되는 것이 요망된다.
비트맵들 및 기타 그래픽 데이터를 인코딩 및 디코딩하기 위한 시스템 및 방법이 여기에 기술된다. 인코딩 시스템은 초기에 소스 이미지 데이터를 데이터 타일들로 분할하는 타일링 모듈을 가진 타일링 시스템을 포함할 수 있다. 그런 다음 프레임 차별화 모듈이 변경된 데이터 타일들만을 다양한 프로세싱 모듈로 출력할 수 있으며 다양한 프로세싱 모듈들은 그 변경된 데이터 파일들을 해당 타일 성분들로 변환한다. 일 실시에에서 양자화기가 조정가능한 양자화 파라미터에 따른 압축 데이터를 생성하기 위해 타일 성분들에 대해 압축 절차를 수행할 수 있다. 그런 다음 적응적 엔트로피 인코더 선택기가 엔트로피 인코딩 절차를 수행하여 그에 따라 인코딩된 데이터를 생성하기 위해 복수의 엔트로피 인코더들 중 하나를 선택할 수 있다. 엔트로피 인코더는 현재의 전송 대역폭 특징들에 비춰 양자화 파라미터를 조정하도록 피드백 로프를 이용할 수도 있다. 여기에 언급한 바와 같이 그래픽 데이터를 압축, 인코딩 및 디코딩하는 프로세스는 일반적으로 공동 양도된 "전자 정보를 효율적으로 인코딩 및 디코딩하기 위한 시스템 및 방법(System And Method For Effectively Encoding And Decoding Electronic Information)"이라는 발명의 명칭을 가진 미국 특허 7,460,725 및 2009년 3월 6일 출원된 "프레임 캡처, 인코딩, 및 전송 관리(Frame Capture, Encoding, And Transmission)"라는 발명의 명칭을 가진 미국 특허출원 12/399,302에서 기술되어 있는 하나 이상의 방법 및 시스템을 이용할 수 있으며, 이 미국 특허출원들은 참조에 의해 이 명세서에 전체적으로 포함된다.
여기에 개시된 다양한 방법 및 시스템들에서, 보다 효율적인 프로세싱 및 그에 따른 보다 시기적절하고 풍성한 사용자 경험을 지원하기 위해 상술한 다양한 프로세스들의 프로세싱 및 처리에 대한 개량사항들이 사용될 수 있다. 상기 방법 및 시스템들은 또한 네트워크 및/또는 시스템 자원들이 적절한 대역폭을 제공하고 있고/있거나 클라이언트 장치가 보다 느린 프로세싱 속도나 자원들을 가질 때 그러한 그래픽 지원을 제공함에 있어서 개선사항들 제공한다. 그래픽 데이터를 렌더링, 인코딩 및 전송하기 위해 여기에 개시된 실시예들은 하드웨어 및 소프트웨어 프로세스들의 다양한 조합들을 이용하여 구현될 수 있다. 일부 실시예들에서 기능들이 전적으로 하드웨어에서 실행될 수 있다. 일부 실시예들에서 기능들은 전적으로 소프트웨어로 수행될 수 있다. 또 다른 실시에들에서 기능들은 하드웨어 및 소프트웨어 프로세스들의 조합을 이용하여 구현될 수 있다. 그러한 프로세스들은 하나 이상의 CPU 및/또는 그래픽 프로세싱 유닛(GPU) 또는 다른 전용 그래픽 렌더링 장치들과 같은 하나 이상의 특수 프로세서들을 이용하여 더 구현될 수 있다.
또한, 이하의 내용들이 원격 표현 시스템과 관련하여 제공되지만, 개시된 실시예들은 그래픽 데이터가 네트워크를 통해 전달되기 위해 인코딩 및 압축되는 어떤 타입의 시스템으로 구현될 수 있다는 것을 알아야 한다.
다양한 실시예들은 타일들의 개별 YUV 성분들을 해당하는 YUV 타일 서브밴드들로 변환하기 위한 이산 웨이브릿 변환(DWT) 기능의 사용을 포함할 수 있다. 양자화 기능은 타일 서브밴드들을 압축하기 위해 알맞은 양자화 기법을 활용함으로써 양자화 절차를 수행할 수 있다. 양자화 기능은 엔트로피 인코더로부터 피드백 루프를 통해 수신되는 적응적 양자화 파라미터에 의해 특정될 수 있는 특정한 압축 비율에 따라 타일들의 비트율을 줄임으로써 압축된 이미지 데이터를 생성할 수 있다.
일 실시예에서 GPU는 압축되어야 하는 변화된 직사각형들을 가진 비트맵들에 지원될 수 있다. 비트맵은 로직 타일들로 더 분할될 수 있고, 및 변화된 직사각형 안에서 변화하는 타일들만 인코딩 및 압축될 수 있다. 이러한 방식으로 프로세스는 결과적으로 디코딩된 이미지가 관리 및 디스플레이되는 클라이언트와 협조하여 캐싱 방식을 효과적으로 구현한다.
원격 표현 압축 알고리즘들이 로컬 영역 네트워크, 광역 네트워크, 및 저대역폭 네트워크를 통해 전송하기 위해 허용 가능한 레벨들로 디스플레이 스트림의 대역폭을 줄이기 위해 사용된다. 그러한 알고리즘들은 통상적으로 보다 낮은 요망 대역폭을 위해 서버측의 CPU 시간을 이용한다.
엔트로피 코더라 불리는 위상을 이용할 수 있는 이미지 압축기들이 사용될 수 있다. 엔트로피 인코더 기능은 인코딩된 데이터를 생성하기 위해 엔트로피 인코딩 절차를 수행할 수 있다. 소정 실시예들에서 엔트로피 인코딩 절차는 양자화기로부터 수신된 압축된 이미지 데이터 내 해당 비트 패턴들을 적절한 코드들로 대체함으로써 압축된 이미지 데이터의 비트율을 더 감축시킨다.
원격 표현 시스템에서 사용되는 엔트로피 인코딩은 일반적으로 CPU 성능(즉, 속도)을 압축률과 상쇄시킨다. 엔트로피 코더들은 합당한 CPU 속도로 양호한 압축을 수행하도록 조율될 수 있다. 통상적 엔트로피 코더들은 런길이, 허프만(Huffman), 산술, 및 골롬-라이스 코더들의 변형을 포함할 수 있다. 원격 표현 애플리케이션들을 위한 효율적 엔트로피 코더들을 설계함에 있어 주요한 문제 중 하나가 통상적으로 인코딩될 정수들의 블록들의 통계에 있어서의 커다란 변화이다. 연구 결과 대부분의 경우 양자화 이전의 데이터는 가우스 분포보다 제로 근처에서 훨씬 더 집중될 수 있는 확률 분포를 가진다.
본 개시는 압축률의 손실에 대한 잠정적 댓가로 인코딩 및 디코딩 속도를 향상시키도록 구성된 단순화된 엔트로피 코더를 구현하는 것에 관한 것이다. 그러나, 많은 상황들에서 이러한 타협은 대역폭보다 저속 CPU에 의해 제한되는 시나리오들에서 허용될 수 있고 실제로 더 바람직할 수 있다. 그 결과로 약 10% 또는 20%의 압축률 손실로 현재의 인코더/디코더들보다 두 세배 빠른 인코더/디코더가 제공될 수 있다.
그러한 인코더/디코더는 프로세서 속도를 최적화하는 것이 대역폭의 모든 비트 하나 하나를 아끼는 것 보다 높은 우선순위를 가지는 시나리오들이 있을 수 있기 때문에 유용할 수 있다. 예를 들어 하위 엔드 클라이언트 장치들이 고속 프로세싱을 가능하게 하는 보다 간단한 압축기를 이용하여 보다 우수한 성능을 달성할 수 있다. 원격 표현 시스템들은 통상적으로 CPU 비용 및 기능과 무관하게 대역폭을 감소시키도록 최적화된다. 오늘날 많은 시스템들에서 대역폭은 넉넉할 수 있지만 클라이언트 장치들은 세톱박스들이나 씬(thin) 클라이언트와 같이 보다 간단한 장치들일 수 있다.
일 실시예에서 엔트로피 인코더는 가변 비트스트림 포맷을 이용하는 것을 피하도록 구성될 수 있다. 가변 비트스트림의 이용은 효율적으로 인코딩 및 디코딩함에 있어 예외 없이 느려진다. 일 실시예에서 인코더는 고정 사이즈 인코딩 스트림의 보통 사이즈를 달성하기 위해 니블 크기(nibble-sized)(쿼드 비트(quad-bit)라 알려짐)를 이용하도록 구성될 수 있다. 그러한 스트림을 이용함으로써, 스트림은 디코딩하는 데 있어 더 빨라질 수 있고 훨씬 적은 CPU 비용으로 안정적으로(풀(full) 오버플로우 체크를 통해) 디코딩될 수 있다.
전형적 방식에서 인코더는 다음과 같은 타입의 연산들을 인코딩한다.
1) 0들의 런(엔트로피 인코덩에 있어 전형적인 입력들임)- 0들의 런이 런들 대부분이 매우 짧다는 통계적 관측에 부합되는 가변 개수의 쿼드들(quads)로 인코딩된다.
2) 리터럴(literal) 값들-리터럴 값들은 보여진 가장 최근의 리터럴 값들의 테이블(캐시) 안에서 최소 최근 사용(LRU(Least Recently Used)) 히트(hit)로서, 또는 보다 작은 값들이 발생할 가능성이 높은 통계적 특성들로부터 다시 이득을 취하는 가변 개수의 쿼드들로서 인코딩된다.
두 경우들에 있어 사실상 두 개의 스트림들이 존재한다: (a) 옵코드들의 쿼드 스트림 및 (b) 큰 값의 스트림 런. 길이나 리터럴 길이에 대한 소정 옵코드들은 단순히 "큰 값의 스트림 내 다음 값을 가져온다"는 것을 나타낸다.
큰 값의 스트림은 큰 값들에 비해 작은 값들에 대해 보다 적은 바이트를 사용하는 기본 멀티바이트 인코딩 방식으로 인코딩될 수 있으며, 동시에 고정 바이트 경계들에 대해서만 작용하도록 보장된다. 그러한 인코딩 방식을 이용함으로써 쿼드 스트림 및 가치 스트림(value-stream)은 복잡한 비트 이동 또는 가변 비트 디코딩 방식들을 필요로 하지 않고 디코딩됨으로써, 보다 일반적인/복잡한 엔트로피 코더들(예를 들어 RLGR 또는 다양한 허프만 기반 방식들)보다 훨씬 더 빠른 성능을 가능하게 할 수 있다. 그러한 간략화된 인코더는 임의 개수의 비트들, 예컨대 1부터 32 비트들이 인코딩될 수 있도록 구성될 수 있다. 보다 복잡한 인코딩에서, 디코딩은 가변 비트들 및 많은 코딩 브랜치들 및 처리 도중의 상당량의 장부 기입(bookkeeping)을 요하는 필수 프로세싱으로 인해 계산적인 면에서 난제가 된다. 이러한 간략화된 방식을 이용하는 것은 보통 크기의 구조(예를 들어, 쿼드들)를 이용함으로써 그러한 복잡도를 최소화할 수 있게 한다. 그러한 방식에서 어떤 출력 심볼도 4 비트를 넘지 않으며 데이터는 어떤 쉬프트나 롤링(rolls)도 없는 바이트 단위이다. 한 바이트는 원하는 경우 병렬로 처리될 수 있는 두 개의 코드들을 포함할 수 있다. 또한 쿼드들의 개수가 알려지면 버퍼 오버런을 피할 수 있다. 통상의 원격 표현 시나리오들을 이용하는 시도에서, 현재 이용 가능한 CPU들을 이용하여 2-3 배 성능의 이득으로 단지 10-20% 압축률의 손실만이 측정되었다.
일부 실시예들에서 여기에 개시된 바와 같이 보다 간단한 인코더 및 보다 복잡한/보다 느린 엔트로피 코더 사이의 스위칭을 위한 로직이 제공될 수 있다. 예를 들어, 도 9를 참조할 때 원격 표현 시스템은 적어도 두 개의 인코더들(910 및 920)을 제공할 수 있다. 인코더(910)는 RLGR을 구현하는 것과 같은 복잡한 엔트로피 인코더일 수 있다. 인코더(920)는 본 개시에 따른 간략화된 인코더일 수 있다. 네트워크(930)의 상태에 따라, 시스템은 데이터(900)를 인코딩하기 위해 인코더들(910 또는 920) 중 하나를 선택할 수 있다. 예를 들어 네트워크 상태가 네트워크가 혼잡상태이고 이용 가능한 대역폭이 제한되어 있다는 것을 나타내면, 네트워크(930)를 통해 전송될 데이터량을 최소화하기 위해 데이터(900) 인코딩을 위해 복잡한 인코더(910)가 선택될 수 있다. 마찬가지로, 네트워크 상태들이 네트워크가 혼잡하지 않다는 것을 나타내면, 클라이언트에서의 보다 빠른 프로세서 성능을 제공하기 위해 데이터(900)인코딩을 위해 단순화된 인코더(910)가 선택될 수 있다.
부록 A는 이 개시에 따라 단순화된 인코더의 전형적 구현예를 제공한다.
도 10은 동작들(1000, 1002, 1004 및 1006)을 포함하여 클라이언트 컴퓨터로 전송할 그래픽 데이터를 처리하기 위한 전형적 동작 절차를 도시한다. 도 10을 참조할 때 동작(1000)은 동작 절차를 시작하고 동작(1002)은 가상 머신 세션과 연관된 클라이언트 스크린을 나타내는 그래픽 데이터를 수신하는 것을 예시한다. 동작(1004)은 상기 전송을 위한 이용 가능 대역폭을 표시하는 정보를 수신하고, 그 정보에 기반하여 이용 가능 대역폭이 소정 문턱치를 만족한다는 것을 판단하는 동작들을 예시한다. 동작(1006)은 바이트 경계들에 대해 정렬되는 비트 토큰들의 컴팩트 스트림을 이용하여 변환된 그래픽 데이터의 계수들을 엔트로피 인코딩하는 동작을 예시한다. 일 실시예에서 제로들의 런들이 가변하는 수의 양자 사이즈 배수들로 인코딩되고, 리터럴 값들이 최근 사용된 리터럴 값들의 캐시 내 엔트리를 이용하여 부호화되고, 다른 값들이 최소 개수의 양자 사이즈의 배수들을 이용하여 부호화된다. 비트 토콘은 데이터의 단위를 규정하는 비트들의 스트링일 수 있다. 예를 들어 니블 기반 시스템에서, 네 개의 비트 토큰이 사용된다.
다양한 실시예들에서 양자 사이즈는 니블일 수 있다. 일부 실시예들에서, 동작 절차는 엔트로피 인코딩 옵코드들의 스트림 및 큰 값의 스트림을 생성하는 동작을 포함할 수 있다. 절차는 큰 값들에 비해 작은 값들에 대해 보다 적은 바이트들을 사용하는 멀티 바이트 인코딩 방식을 이용하여 큰 값의 스트림을 엔트로피 인코딩하는 동작 및 상기 그래픽 데이터를 데이터 타일들로 분할하는 동작, 상기 데이터 타일들을 타일 성분들로 처리하는 동작, 및 상기 타일 성분들에 대해 상기 엔트로피 인코딩을 수행하는 동작을 더 포함할 수 있다. 인코딩 방식은 고정 바이트의 경계들에 대해 작용하도록 구성될 수 있다.
도 11은 클라이언트 컴퓨터로 전송할 그래픽 데이터를 처리하기 위한 전형적 시스템을 도시한다. 도 11을 참조할 때, 시스템(1100)은 프로세서(1110) 및 메모리(1120)를 포함한다. 메모리(1120)는 원격 컴퓨팅 장치로 전송하기 위한 그래픽 데이터를 처리하도록 구성된 컴퓨터 명령어들을 더 포함한다. 블록(1122)은 가상 머신 세션과 연관된 클라이언트 스크린을 나타내는 그래픽 데이터를 수신하는 동작을 예시한다. 블록(1124)은 상기 그래픽 데이터를 데이터 타일들로 분할하는 동작을 예시한다. 블록(1126)은 바이트 경계들에 대해 정렬되는 비트 토큰들의 스트림을 이용하여 변환된 데이터 타일들의 계수들을 엔트로피 인코딩하는 동작을 예시한다.
상술한 양태들 중 어느 것도 방법, 시스템, 컴퓨터 판독 가능 매체, 또는 다른 타입의 제조품으로 구현될 수 있다. 예를 들어 컴퓨터 판독 가능 매체는 클라이언트 컴퓨터로 전송할 그래픽 데이터를 처리하기 위한 컴퓨터 실행 가능 명령어들을 저장할 수 있다. 그러한 매체는 가상 머신 세션과 연관된 클라이언트 스크린을 나타내는 그래픽 데이터를 수신하기 위한 명령어들의 제1부분집합 및 인코딩된 데이터가 바이트 기반 디코딩 프로세스를 이용하여 디코딩될 수 있도록 바이트 경계들에 대해 정렬된 비트 토큰들의 컴팩트 스트림을 이용하여 변환된 그래픽의 계수들을 엔트로피 인코딩하기 위한 명령어들의 제2집합을 포함한다. 당업자는 추가적 명령어 집합들이 여기에 개시된 다양한 다른 양태들을 캡처하는데 사용될 수 있고 상기 두 개의 현재 개시된 명령어들의 부분집합들이 본 개시에 따라 세부적으로 가변될 수 있다는 것을 이해할 수 있을 것이다.
상술한 세부 내용은 예들 및/또는 동작 다이어그램들을 통해 시스템들 및/또는 프로세스들의 다양한 실시예들을 설명하였다. 그러한 블록도 및/또는 예들이 한 개 이상의 기능들 및/또는 동작들을 포함하는 한, 당업자는 각각의 블록도 또는 예 안의 각각의 기능 및/또는 동작은 광범위한 하드웨어, 소프트웨어, 펌웨어, 또는 그들의 어떤 실질적 조합을 통해 개별적 및/또는 집합적으로 구현될 수 있다는 것을 이해할 것이다.
여기 기술된 다양한 기법들은 하드웨어나 소프트웨어, 또는 적절하다면 그 둘의 조합과 관련하여 구현될 수 있다는 점이 이해될 것이다. 따라서, 본 개시의 방법 및 장치, 또는 그들의 소정 양태들이나 일부는 플로피 디스크, CD-ROM, 하드 드라이브, 또는 어떤 다른 장치 판독 가능 저장 매체와 같은 유형의 매체에 수록되는 프로그램 코드(즉, 명령어들)의 형태를 취할 수 있으며, 프로그램 코드가 컴퓨터와 같은 기계로 로드되어 그 기계에 의해 실행될 때 그 기계는 본 개시의 실시를 위한 장치가 된다. 프로그램 가능한 컴퓨터들 상에서 프로그램 코드가 실행되는 경우, 컴퓨팅 장치는 일반적으로 프로세서, 프로세서에 의해 판독 가능한 저장 매체(휘발성 및 비휘발성 메모리 및/또는 저장 요소들을 포함), 적어도 한 개의 입력 장치, 및 적어도 한 개의 출력 장치를 포함한다. 예컨대 애플리케이션 프로그래밍 인터페이스(API), 재사용 콘트롤들 등의 사용을 통해, 본 개시와 관련하여 기술되는 프로세스들을 구현하거나 활용할 수 있다. 그러한 프로그램들은 컴퓨터 시스템과 통신하기 위해 고차 레벨의 절차적 또는 객체 지향적 프로그래밍 언어로 바람직하게 구현된다. 그러나, 프로그램(들)은 원하는 경우 어셈블리나 기계어로 구현될 수 있다. 어느 경우에도, 그 언어는 컴파일 혹은 해석 언어이며, 하드웨어 구현과 결합될 수 있다.
본 발명은 그의 바람직한 실시예를 참조하여 특정하게 도시되고 기술되었으나, 당업자는 이하의 청구범위에서 설명되는 바와 같은 본 발명의 범위로부터 벗어나지 않으면서 형식 및 세부 내용에 있어 다양한 변경이 이뤄질 수 있다는 점을 이해할 것이다. 또한, 본 발명의 구성요소들이 단수로 기술되거나 청구되더라도, 단수로 한정된다는 것이 명백히 언급되지 않는 한 복수가 고려된다.

Claims (10)

  1. 원격 컴퓨팅 장치로 전송하기 위한 그래픽 데이터를 처리하는 방법으로서,
    가상 머신 세션과 연관된 클라이언트 스크린을 나타내는 그래픽 데이터를 수신하는 단계,
    상기 전송을 위한 이용 가능 대역폭을 표시하는 정보를 수신하며, 상기 정보에 기반하여 상기 이용 가능 대역폭이 소정 문턱치를 만족하는 것을 판단하는 단계, 및
    바이트 경계(byte boundary)에 대해 정렬하는 그룹을 형성하는 비트 토큰의 컴팩트 스트림을 이용하여 변환된 그래픽 데이터의 계수를 엔트로피 인코딩하는 단계 -
    제로 런(runs of zeros)은 가변 개수의 양자 사이즈의 배수로 인코딩되고,
    리터럴 값(literal value)은 최근 사용된 리터럴 값의 캐시 내의 엔트리를 사용하여 인코딩되며,
    다른 값은 최소 개수의 상기 양자 사이즈의 배수를 이용하여 인코딩됨 - 를 포함하는
    방법.
  2. 제1항에 있어서,
    엔트로피 인코딩 옵코드(op-code)의 스트림 및 큰 값의 스트림을 생성하는 단계를 더 포함하는
    방법.
  3. 제2항에 있어서,
    큰 값에 비해 작은 값에 더 적은 바이트를 사용하는 멀티 바이트 인코딩 방식으로 상기 큰 값의 스트림을 엔트로피 인코딩하는 단계를 더 포함하는
    방법.
  4. 제3항에 있어서,
    상기 인코딩 방식은 고정 바이트의 경계에만 동작하도록 구성되는
    방법.
  5. 제3항에 있어서,
    상기 그래픽 데이터를 데이터 타일(data tile)로 분할하고, 상기 데이터 타일을 타일 성분으로 처리하며, 상기 타일 성분에 대해 상기 엔트로피 인코딩을 수행하는 단계를 더 포함하는
    방법.
  6. 원격 컴퓨팅 장치로 전송하기 위한 그래픽 데이터를 처리하기 위한 시스템으로서,
    적어도 하나의 프로세서를 포함하는 컴퓨팅 장치,
    상기 시스템이 동작 가능할 때 상기 프로세서에 통신 가능하게 결합된 메모리를 포함하되,
    상기 메모리는 상기 적어도 하나의 프로세서에 의해 실행될 때
    가상 머신 세션과 연관된 클라이언트 스크린을 나타내는 그래픽 데이터를 수신하고,
    상기 그래픽 데이터를 데이터 타일로 분할하며,
    바이트 경계에 대해 정렬하는 그룹을 형성하는 비트 토큰의 스트림을 이용하여 변환된 데이터 타일의 계수를 엔트로피 인코딩하게 하되,
    제로 런은 가변 개수의 양자 사이즈의 배수로 인코딩되고,
    리터럴 값은 최근 사용된 리터럴 값의 캐시 내의 엔트리를 사용하여 인코딩되며,
    다른 값은 최소 개수의 상기 양자 사이즈의 배수를 이용하여 인코딩되는 컴퓨터 명령어를 저장하는
    시스템.
  7. 제6항에 있어서,
    상기 양자 사이즈에 기반하여 상기 인코딩된 계수를 처리하도록 구성된 컴퓨터 장치에 상기 인코딩된 계수를 전송하는 것을 더 포함하는
    시스템.
  8. 제6항에 있어서,
    상기 인코딩된 데이터가 상기 인코딩된 데이터에 대해 바이트 단위로 동작하도록 구성된 엔트로피 디코딩 프로세스에 의한 효율적 디코딩을 위해 사용될 수 있는
    시스템.
  9. 제6항에 있어서,
    큰 값에 비해 작은 값에 더 적은 바이트를 이용하는 멀티 바이트 인코딩 방식으로 상기 큰 값의 스트림을 엔트로피 인코딩하는 것을 더 포함하는
    시스템.
  10. 클라이언트 컴퓨터로 전송하기 위한 그래픽 데이터를 처리하기 위한 컴퓨터 실행 가능 명령어를 저장하는 컴퓨터 판독 가능 저장 매체로서, 상기 명령어는
    가상 머신 세션과 연관된 클라이언트 스크린을 나타내는 그래픽 데이터를 수신하며,
    인코딩된 데이터가 바이트 기반 디코딩 프로세스를 이용하여 디코딩될 수 있도록 바이트 경계에 대해 정렬하는 그룹을 형성하는 비트 토큰의 컴팩트 스트림을 이용하여 변환된 그래픽 데이터의 계수를 엔트로피 인코딩하기 위한 것이며,
    제로 런은 가변 개수의 니블(nibble)의 배수로 인코딩되고,
    리터럴 값은 최근 사용된 리터럴 값의 캐시 내의 엔트리를 사용하여 인코딩되며,
    다른 값은 최소 개수의 니블의 배수를 이용하여 인코딩되는
    컴퓨터 판독 가능 저장 매체.
KR1020137007954A 2010-09-30 2011-09-14 이미지 압축을 위한 엔트로피 코더 KR20140006778A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/894,793 US20120082395A1 (en) 2010-09-30 2010-09-30 Entropy Coder for Image Compression
US12/894,793 2010-09-30
PCT/US2011/051660 WO2012050722A2 (en) 2010-09-30 2011-09-14 Entropy coder for image compression

Publications (1)

Publication Number Publication Date
KR20140006778A true KR20140006778A (ko) 2014-01-16

Family

ID=45889897

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137007954A KR20140006778A (ko) 2010-09-30 2011-09-14 이미지 압축을 위한 엔트로피 코더

Country Status (10)

Country Link
US (1) US20120082395A1 (ko)
EP (1) EP2622507A4 (ko)
JP (1) JP2013541295A (ko)
KR (1) KR20140006778A (ko)
CN (1) CN102523443A (ko)
AU (1) AU2011314228B2 (ko)
BR (1) BR112013007612A2 (ko)
CA (1) CA2812740A1 (ko)
MX (1) MX2013003615A (ko)
WO (1) WO2012050722A2 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8886699B2 (en) * 2011-01-21 2014-11-11 Cloudium Systems Limited Offloading the processing of signals
US9171464B2 (en) 2012-06-10 2015-10-27 Apple Inc. Encoded representation of route data
US11935190B2 (en) 2012-06-10 2024-03-19 Apple Inc. Representing traffic along a route
CN102833583B (zh) * 2012-07-27 2015-07-01 北京视博云科技有限公司 一种视频图像的处理方法及装置
KR101597637B1 (ko) * 2013-09-02 2016-02-29 주식회사 쏠리드 Fpga 이미지 다운로드시 네트워크 부하를 경감하기 위한 압축 방법
US10007612B2 (en) * 2015-10-21 2018-06-26 Dell Products L.P. Systems and methods for pre-population of graphics image cache in virtual desktop environment
US9990691B2 (en) * 2016-02-17 2018-06-05 Intel Corporation Ray compression for efficient processing of graphics data at computing devices
US9875076B1 (en) * 2016-07-26 2018-01-23 Wyse Technology L.L.C. Remoting client having GPU off-loader
GB2567427B (en) * 2017-10-06 2020-10-07 Imagination Tech Ltd Data compression
US11366738B2 (en) * 2018-03-12 2022-06-21 Headspin, Inc. System to determine performance based on entropy values
CN111788607A (zh) * 2018-04-12 2020-10-16 谷歌有限责任公司 用于改进的渐进网格压缩的批次密度增加
US11256528B2 (en) * 2018-10-26 2022-02-22 Nvidia Corporation Individual application window streaming suitable for remote desktop applications

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784631A (en) * 1992-06-30 1998-07-21 Discovision Associates Huffman decoder
AU695626B2 (en) * 1995-02-03 1998-08-20 Koninklijke Philips Electronics N.V. Video image colour encoding
US5689255A (en) * 1995-08-22 1997-11-18 Hewlett-Packard Company Method and apparatus for compressing and decompressing image data
US5710719A (en) * 1995-10-19 1998-01-20 America Online, Inc. Apparatus and method for 2-dimensional data compression
US6618506B1 (en) * 1997-09-23 2003-09-09 International Business Machines Corporation Method and apparatus for improved compression and decompression
US6356660B1 (en) * 1997-10-15 2002-03-12 Hewlett-Packard Co. Method for compressing raster data
JP3676078B2 (ja) * 1998-05-07 2005-07-27 株式会社リコー ランレングス符号化方法及び圧縮装置
US6298164B1 (en) * 1998-10-02 2001-10-02 Canon Kabushiki Kaisha PCL conversion of JETSEND images
US20020026391A1 (en) * 2000-07-13 2002-02-28 Laster Scott A. Method and system for collecting rich inventory via computer system
CN101448162B (zh) * 2001-12-17 2013-01-02 微软公司 处理视频图像的方法
US7149360B2 (en) * 2002-01-09 2006-12-12 Hewlett-Packard Development Company, L.P. Method for using a JPEG engine to assist in efficiently constructing MPEG I-frames
US7373008B2 (en) * 2002-03-28 2008-05-13 Hewlett-Packard Development Company, L.P. Grayscale and binary image data compression
US7016547B1 (en) * 2002-06-28 2006-03-21 Microsoft Corporation Adaptive entropy encoding/decoding for screen capture content
US7606314B2 (en) * 2002-08-29 2009-10-20 Raritan America, Inc. Method and apparatus for caching, compressing and transmitting video signals
US7039247B2 (en) * 2003-01-31 2006-05-02 Sony Corporation Graphic codec for network transmission
US6919825B2 (en) * 2003-09-25 2005-07-19 Peerless Systems Corporation Split runlength encoding method and apparatus
TW595124B (en) * 2003-10-08 2004-06-21 Mediatek Inc Method and apparatus for encoding video signals
US7602850B2 (en) * 2003-12-19 2009-10-13 Intel Corporation Content adaptive variable length coding (CAVLC) decoding
US7471840B2 (en) * 2004-08-18 2008-12-30 Cisco Technology, Inc. Two-dimensional variable length coding of runs of zero and non-zero transform coefficients for image compression
US20060176953A1 (en) * 2005-02-04 2006-08-10 Nader Mohsenian Method and system for video encoding with rate control
US20060195464A1 (en) * 2005-02-28 2006-08-31 Microsoft Corporation Dynamic data delivery
US8171169B2 (en) * 2005-03-14 2012-05-01 Citrix Systems, Inc. Method and apparatus for updating a graphical display in a distributed processing environment
US7822278B1 (en) * 2005-09-20 2010-10-26 Teradici Corporation Methods and apparatus for encoding a digital video signal
JP4618436B2 (ja) * 2006-02-10 2011-01-26 富士ゼロックス株式会社 符号化装置、復号化装置、符号化方法、復号化方法、及びプログラム
US7460725B2 (en) * 2006-11-09 2008-12-02 Calista Technologies, Inc. System and method for effectively encoding and decoding electronic information
US7949195B2 (en) * 2007-01-16 2011-05-24 Cisco Technology, Inc. Per block breakpoint determining for hybrid variable length coding
US7827237B2 (en) * 2007-03-12 2010-11-02 Citrix Systems, Inc. Systems and methods for identifying long matches of data in a compression history
US7501964B2 (en) * 2007-04-16 2009-03-10 Texas Instruments Incorporated Entropy coding for digital codecs
US7605721B2 (en) * 2007-11-30 2009-10-20 Red Hat, Inc. Adaptive entropy coding compression output formats
BRPI0823173A2 (pt) * 2008-10-27 2015-06-23 Micro Motion Inc Método de armazenamento de dados, e sistema de processamento.
US8254704B2 (en) * 2008-10-30 2012-08-28 Microsoft Corporation Remote computing platforms providing high-fidelity display and interactivity for clients
US20100226441A1 (en) * 2009-03-06 2010-09-09 Microsoft Corporation Frame Capture, Encoding, and Transmission Management
US20100225655A1 (en) * 2009-03-06 2010-09-09 Microsoft Corporation Concurrent Encoding/Decoding of Tiled Data
US20110052087A1 (en) * 2009-08-27 2011-03-03 Debargha Mukherjee Method and system for coding images
US8255528B2 (en) * 2009-12-23 2012-08-28 Citrix Systems, Inc. Systems and methods for GSLB spillover

Also Published As

Publication number Publication date
WO2012050722A3 (en) 2012-07-19
CN102523443A (zh) 2012-06-27
BR112013007612A2 (pt) 2019-09-24
US20120082395A1 (en) 2012-04-05
EP2622507A2 (en) 2013-08-07
AU2011314228A1 (en) 2013-03-28
EP2622507A4 (en) 2015-08-26
RU2013114349A (ru) 2014-10-10
JP2013541295A (ja) 2013-11-07
AU2011314228B2 (en) 2014-07-31
MX2013003615A (es) 2013-05-09
CA2812740A1 (en) 2012-04-19
WO2012050722A2 (en) 2012-04-19

Similar Documents

Publication Publication Date Title
AU2011314228B2 (en) Entropy coder for image compression
US9075560B2 (en) Real-time compression with GPU/CPU
US10542301B2 (en) Multimedia redirection method, device, and system
US8638337B2 (en) Image frame buffer management
US9146884B2 (en) Push pull adaptive capture
US10555010B2 (en) Network-enabled graphics processing module
US8760453B2 (en) Adaptive grid generation for improved caching and image classification
US20100013839A1 (en) Integrated GPU, NIC and Compression Hardware for Hosted Graphics
US9235452B2 (en) Graphics remoting using augmentation data
US20100225655A1 (en) Concurrent Encoding/Decoding of Tiled Data
US8924507B2 (en) Cross-frame progressive spoiling support for reduced network bandwidth usage
US20120075346A1 (en) Low Complexity Method For Motion Compensation Of DWT Based Systems
US8385666B2 (en) Classification and encoder selection based on content
US20140146063A1 (en) Command remoting
WO2023011033A1 (zh) 图像处理方法、装置、计算机设备及存储介质
US20170289547A1 (en) Video decoding using point sprites
CN115767161A (zh) 一种视频播放方法、装置、计算机设备及存储介质
RU2575679C2 (ru) Энтропийный кодер для сжатия изображения
US20240022743A1 (en) Decoding a video stream on a client device
CN116599942A (zh) 一种虚拟桌面的图像处理方法、装置、服务端和存储介质

Legal Events

Date Code Title Description
N231 Notification of change of applicant
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid