KR20090113222A - 병렬 처리를 이용하여 1차 연립 방정식의 해를 구하기 위한 디바이스, 시스템 및 방법 - Google Patents
병렬 처리를 이용하여 1차 연립 방정식의 해를 구하기 위한 디바이스, 시스템 및 방법 Download PDFInfo
- Publication number
- KR20090113222A KR20090113222A KR1020090036145A KR20090036145A KR20090113222A KR 20090113222 A KR20090113222 A KR 20090113222A KR 1020090036145 A KR1020090036145 A KR 1020090036145A KR 20090036145 A KR20090036145 A KR 20090036145A KR 20090113222 A KR20090113222 A KR 20090113222A
- Authority
- KR
- South Korea
- Prior art keywords
- vector
- order
- entries
- elements
- matrix
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 104
- 238000012545 processing Methods 0.000 title description 17
- 239000013598 vector Substances 0.000 claims abstract description 171
- 230000008569 process Effects 0.000 claims abstract description 28
- 239000011159 matrix material Substances 0.000 claims description 82
- 238000013507 mapping Methods 0.000 claims description 16
- 230000007246 mechanism Effects 0.000 description 35
- 230000015654 memory Effects 0.000 description 17
- 230000008707 rearrangement Effects 0.000 description 15
- 238000007667 floating Methods 0.000 description 13
- 238000006243 chemical reaction Methods 0.000 description 10
- 238000013500 data storage Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 5
- 238000007792 addition Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000011068 loading method Methods 0.000 description 3
- 238000012856 packing Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 241000283070 Equus zebra Species 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 238000004870 electrical engineering Methods 0.000 description 2
- 239000012530 fluid Substances 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000002939 conjugate gradient method Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/11—Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
- G06F17/12—Simultaneous equations, e.g. systems of linear equations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/14—Picture signal circuitry for video frequency region
- H04N5/144—Movement detection
- H04N5/145—Movement estimation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N7/00—Television systems
- H04N7/01—Conversion of standards, e.g. involving analogue television standards or digital television standards processed at pixel level
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N7/00—Television systems
- H04N7/01—Conversion of standards, e.g. involving analogue television standards or digital television standards processed at pixel level
- H04N7/0127—Conversion of standards, e.g. involving analogue television standards or digital television standards processed at pixel level by changing the field or frame frequency of the incoming video signal, e.g. frame rate converter
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Multimedia (AREA)
- Software Systems (AREA)
- Signal Processing (AREA)
- General Engineering & Computer Science (AREA)
- Operations Research (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Complex Calculations (AREA)
- Television Systems (AREA)
Abstract
예를 들면, 비디오 보간(다른 애플리케이션들도 고려됨)을 위해, 행렬과 벡터를 곱하는 방법, 장치 및 시스템이 개시된다. 행렬은 대형 희소 1차 연립 방정식(large and sparse system of linear equations)의 표현일 수 있다. 대형 희소 1차 연립 방정식은 프레임 레이트들을 변환하기 위해 비디오 파일의 프레임들 사이의 움직임을 추정하는데 이용될 수 있다. 벡터는 1차 연립 방정식에 대한 해(solution)의 제1 추정일 수 있다. 행렬은 요소들이 벡터에서 배열되는 순서와 상이한 순서로 벡터의 요소들에 의해 곱해질 수 있다. 벡터에서의 요소들은 병렬로 곱해질 수 있다. 1차 연립 방정식에 대한 해의 제2 벡터 추정은 곱하는 것의 결과물일 수 있다. 1차 연립 방정식에 대한 해는, 예를 들면, 제1 및 제2 추정들이 미리 결정된 양 미만 만큼 상이할 경우에 구해질 수 있다. 다른 실시예들이 기술되고 청구된다.
행렬, 벡터, 1차 연립 방정식, 비디오 파일, 프레임 레이트
Description
본 발명은 예를 들어 프레임 레이트들을 변환하기 위해 비디오 파일의 프레임들 사이에서 움직임을 추정하도록 이용될 수 있는 1차 연립 방정식을 풀기 위한 반복법에 관한 것이다.
비디오 입력 파일은 특정 프레임 레이트를 가질 수 있다. 파일을 출력(예를 들어 재생)하기 위한 디바이스는 상이한 프레임 레이트를 가질 수 있다. 100 Hz의 프레임 레이트로 비디오들을 재생하는 텔레비전에는 예를 들어 50 Hz 비디오 파일이 입력될 수 있다. 입력 파일의 프레임 레이트가 출력 파일의 프레임 레이트와 상이하면 프레임 레이트들을 호환가능하게 만들 필요성이 존재할 수 있다.
프레임들이 표시되는 레이트를 변경하기 위해 프레임 레이트 변환 알고리즘들이 개발되고 있다. 프레임 레이트 변환 알고리즘들은 비디오 프리젠테이션의 총 시간 또는 프리젠테이션의 인지 속도를 변경하지 않고, 예를 들어, 입력 프레임 레이트의 속도를 올리거나 낮추기 위해 시간 주기당 프레임 수를 각각 증감시킬 수 있다. 일부 기본 알고리즘들은 프레임들을 단순히 복제(replicate)하거나 제거할 수 있다. 다른 알고리즘들은 예를 들어, 움직임 보상 알고리즘을 이용하여 프레임들 사이에서 움직임을 보간할 수 있다.
비디오 내에서의 움직임 추정은, 예를 들어 (편)미분 방정식((Partial)-differential-equations, PDE)에 의해 모델링될 수 있다. PDE에는 그 수치 해법을 찾기 위해 이산화(discretization) 스킴(예를 들어, 유한 차분)을 적용할 수 있다. 이산화는 대형 희소 1차 연립 방정식(large and sparse system of linear equations, LSSLE)과 같은 1차 연립 방정식을 생성할 수 있다. 각 LSSLE는 프레임 쌍에서 각 프레임 간의 변화 또는 움직임을 기술할 수 있다. 프레임 레이트 변환 알고리즘들은 예를 들어, 프레임 레이트 변환들을 생성하기 위해 LSSLE에 대한 수치 해법을 이용할 수 있다. LSSLE는 전기 공학, 유체 역학, 컴퓨터 비전/그래픽, 광류 추정(optical flow estimation), 초해상도(super-resolution), 및 이미지 잡음 감소 등의 많은 과학 및 공학 분야에서 알려져 있다.
LSSLE를 푸는 것은 계산 집약적일 수 있다. 예를 들어, 프레임 세트에 대한 프레임 레이트 변환을 위해 LSSLE를 푸는 것은 프레임들의 재생 시간보다 길게 걸릴 수 있다. 플레이어가 변환된 프레임들을 기다리는 동안, 재생 레이트가 지연될 수도 있다. 이러한 지연을 보상하기 위해, 프레임 레이트 변환 알고리즘은 움직임 추정이 저하된 프레임들을 생성하거나 및/또는 프레임들을 거의 생성하지 않음으로 써 비디오의 질을 감소시킬 수 있다. 이에 의해 비디오가 더 흔들리게(jerky) 된다.
본 출원에 개시된 주제는 명세서의 결론 부분에 특별히 지적되고 따로 청구된다. 그러나, 본 발명의 실시예들은, 그 목적, 특징 및 이점과 함께, 조직 및 동작 방법 모두에 관하여, 첨부 도면과 함께 읽을 때 이하의 상세한 설명을 참조하여 가장 잘 이해될 수 있다.
설명의 간단함 및 명료함을 위해, 도면에 도시된 요소들은 반드시 정확하게 그려지거나 치수화될 필요가 없음을 이해할 것이다. 예를 들어, 요소들의 일부의 치수는 명료함을 위해 다른 요소들에 비해 과장되거나, 여러 물리적 컴포넌트들이 하나의 기능 블록 또는 요소 내에 포함될 수도 있다. 또한, 적절하다고 여겨진다면, 참조 부호들은 대응하거나 유사한 요소들을 나타내기 위해 도면 사이에서 반복될 수도 있다. 또한, 도면에 도시된 블록들 중 일부는 단일 기능으로 조합될 수도 있다.
이하의 상세한 설명에서, 발명의 실시예들의 철저한 이해를 제공하기 위해 다수의 특정 상세들이 개시된다. 그러나, 본 발명의 실시예들은 이러한 특정 상세들 없이도 실시될 수 있음을 본 기술 분야의 당업자들은 이해할 것이다. 다른 예에서, 공지된 방법들, 절차들, 컴포넌트들 및 회로들은 설명을 모호하게 하지 않도록 상세히 기재되지 않았다.
특별히 다르게 언급되지 않는다면, 이하의 논의로부터 명백하듯이, 명세서를 통해 "프로세싱", "컴퓨팅", "계산", "결정" 등과 같은 용어들을 이용하는 논의들은 컴퓨터 또는 컴퓨팅 시스템, 또는 컴퓨팅 시스템의 레지스터 및/또는 메모리들 내의 물리적, 예를 들어 전자적 양들로서 표현되는 데이터를, 컴퓨팅 시스템의 메모리, 레지스터 또는 다른 그러한 정보 저장, 전송 또는 디스플레이 디바이스들 내의 물리적 양들과 유사하게 표현되는 다른 데이터로, 변환 및/또는 조작하는 유사한 전자 컴퓨팅 디바이스의 동작 및/또는 프로세스들을 지칭한다. 또한, "복수의"라는 용어는 2 이상의 컴포넌트들, 디바이스들, 요소들, 파라미터들 등을 기술하기 위해 명세서에 걸쳐 이용될 수 있다.
본 발명의 실시예들은 다양한 어플리케이션에서 이용될 수 있다. 본 발명이 이러한 측면에 제한되지 않지만, 본원에 개시된 회로들 및 기술들은 퍼스널 컴퓨터(PC), 이미지 또는 비디오 재생 디바이스, 디지털 비디오 디스크(DVD) 플레이어, 무선 디바이스 또는 스테이션, 비디오 또는 디지털 게임 디바이스 또는 시스템, 이미지 집합 시스템, 프로세싱 시스템, 시각화 또는 디스플레이 시스템, 디지털 디스플레이 시스템, 통신 시스템 등과 같은 많은 장치들에서 이용될 수 있다.
본 발명의 실시예들은 예를 들어 제1 프레임 레이트로 비디오를 입력하고 제2 프레임 레이트로 비디오를 출력하는 시스템들에서 이용될 수 있다. 재생 시간 또는 인지된 재생 시간은 동일하게 남을 수 있지만, 시간 단위당 표시된 프레임들의 수는 변할 수 있다. 본 발명의 실시예들은 제1 프레임 레이트에서 제2 프레임 레이트로 변환할 수 있다. 프레임 레이트 변환은 예를 들어, LSSLE들을 푸는 것에 의해 중간 프레임들을 보간하는 단계를 포함할 수 있다. 본 발명의 실시예들은 예 를 들어 도 1에 도시된 바와 같이, 팩형(packed) 명령들을 실행하는 컴퓨터 시스템에서 동작할 수 있다.
본 발명의 실시예에 따른 컴퓨터 시스템(100)을 개략적으로 도시하는 도 1을 참조한다. 컴퓨터 시스템(100)은 본 발명의 실시예들과 함께 이용될 수 있는 컴퓨터 시스템의 일 유형의 예이다. 도시되지 않지만, 다르게 구성된 다른 유형의 컴퓨터 시스템들도 본 발명의 실시예들과 함께 이용될 수 있다. 컴퓨터 시스템(100)은 정보 전달을 위한 하나 이상의 버스(들)(101) 및/또는 포인트간(point-to-point) 상호접속부들, 또는 다른 내부 통신 하드웨어 및 소프트웨어, 및 정보 처리를 위한 버스(101) 또는 포인트간 상호접속부들에 연결된 프로세서(109)를 포함할 수 있다. 프로세서(109)는 단일 코어, 멀티 코어, 또는 대칭 멀티프로세싱 아키텍쳐를 가질 수 있다.
프로세서(109)는 예를 들어 임의의 적절한 아키텍쳐를 갖는 중앙 처리 유닛(CPU) 또는 다수의 프로세서일 수 있다. 일 실시예에서, 그 아키텍쳐는 단일 명령 다중 데이터(single instruction multiple data, SIMD) 명령 세트 확장(extension)인 스트리밍 SIMD 확장(SSE)(예를 들어, 2007년 4월에 공개된 인텔® SSE4 프로그래밍 레퍼런스에 기재된 바와 같은 SSE4.2 또는 기타 SSE4 명령 세트)를 포함할 수 있다. SSE 아키텍쳐는 팩형 명령들을, 복수(예를 들어 4)의 데이터 포인트들 상에서 병렬로 실행할 수 있다. 다른 실시예에서, SSE 아키텍쳐에 대한 인텔® 고급 벡터 확장(Advanced Vector Extension, AVX)(예를 들어, 2008년 3월에 공개된 인텔® 어드밴스드 벡터 확장 프로그래밍 레퍼런스에 기재되어 있음)은 팩형 명령들을, 다른 수의 데이터 포인트(예를 들어, 8 또는 16 데이터 포인트) 상에서 병렬로 실행하기 위해 이용될 수도 있다. 프로세서(109)는 CISC(complex instructions set computing) 아키텍쳐 또는 RISC(reduced instructions set computing) 아키텍쳐를 가질 수 있다.
프로세서(109)는 실행 유닛(130), 레지스터 파일(150), 캐시 계층(160), 디코더(165) 및 내부 버스(170)를 포함할 수 있다. 레지스터 파일(150)은 다수의 구성(architectural) 레지스터를 포함하는 단일 레지스터 파일을 포함할 수 있고 또는 각각이 다수의 구성 레지스터들을 포함하는 다수의 레지스터 파일을 포함할 수도 있다. 다른 레지스터들도 이용될 수 있다.
컴퓨터 시스템(100)은 프로세서(109)에 의해 실행될 명령 또는 정보를 저장하기 위해 버스(101)에 연결된 주 메모리(104) 내에 RAM(random access memory), DRAM(dynamic RAM), 또는 다른 동적인 저장 디바이스를 포함할 수 있다. 주 메모리(104)는 프로세서(109)에 의해 명령들의 실행 동안 임시 변수 또는 다른 중간 정보를 저장하기 위해 이용될 수 있다. 컴퓨터 시스템(100)은 프로세서(109)에 대한 정적 정보 및 명령들을 저장하기 위해 버스(101)에 연결된 ROM(read only memory)(106), 또는 다른 정적인 저장 디바이스를 포함할 수 있다.
자기 디스크 또는 광디스크 및 대응하는 디스크 드라이브 등의 데이터 저장 디바이스(107)는 버스(101)에 연결될 수 있다. 컴퓨터 시스템(100)은 컴퓨터 시스 템(100)의 사용자에게 정보를 표시하기 위해 버스(101)를 경유해서 디스플레이 디바이스(121)에 연결될 수 있다. 디스플레이 디바이스(121)는 프레임 버퍼, 특수 그래픽 렌더링(rendering) 디바이스, CRT(cathode ray tube), 또는 평판 디스플레이를 포함할 수 있지만, 본 발명은 이에 제한되지 않는다. 문자숫자식(alphanumeric) 및 다른 키들을 포함하는 키보드 등의 문자숫자식 입력 디바이스(122)가 프로세서(109)로 정보 및 커맨드 선택을 전달하기 위해 버스(101)에 연결될 수 있다. 방향 정보 및 커맨드 선택을 프로세서(109)에 전달하고, 디스플레이 디바이스(121) 상에서 커서 움직임을 제어하기 위한 마우스, 트랙볼, 펜, 터치 스크린 또는 커서 방향키를 포함하는 커서 제어(123)가 포함될 수 있다. 컴퓨터 시스템(100)은 녹음 및 재생을 위한 디바이스(125)에 연결될 수 있다. 녹음은 예를 들어 마이크로폰에 연결된 오디오 디지타이저(digitizer)를 이용하여 실현될 수 있고, 사운드 재생은 예를 들어 디지털화된 사운드를 재생하기 위해 디지털 아날로그(D/A) 컨버터에 연결된 헤드폰 또는 스피커를 이용하여 실현될 수 있으나, 본 발명은 이에 제한되지 않는다.
컴퓨터 시스템(100)은 컴퓨터 네트워크에서 단말기로 기능할 수 있고, 여기서 컴퓨터 시스템(100)은 컴퓨터 네트워크의 컴퓨터 하위(sub) 시스템이지만, 본 발명은 이에 제한되지 않는다. 컴퓨터 시스템(100)은 비디오 디지털화 디바이스(126)를 더 포함할 수 있다. 비디오 디지털화 디바이스(126)는 컴퓨터 네트워크에 연결된 다른 컴퓨터 시스템들에 송신될 수 있는 비디오 이미지들을 캡쳐하기 위해 이용될 수 있다.
일 실시예에서, 프로세서(109)는 x86 및/또는 x87 명령 세트와 호환가능한 명령 세트를 지원할 수 있는데, 그 명령 세트는 캘리포니아, 산타클라라시의 인텔사에 의해 제조된 인텔® 코어TM2 듀오 프로세서들과 같은 마이크로프로세서들에 의해 사용된다. 따라서, 일 실시예에서, 프로세서(109)는 캘리포니아, 산타클라라의 인텔사에 의해 정의된 바와 같이, 인텔 아키텍쳐(IA.TM.)에서 지원되는 모든 동작들을 지원한다. 2005년 4월에 공개된 마이크로프로세서, IA-32 인텔® 아키텍쳐 소프트웨어 개발자의 메뉴얼(3권: 시스템 프로그래밍 가이드) 참조. 그 결과, 프로세서(109)는 다른 동작 이외에 기존 x86 및/또는 x87 동작들을 지원할 수 있다. 본 발명은 다른 명령 세트에 포함되거나 그것을 이용할 수 있다.
실행 유닛(130)은 프로세서(109)에 의해 수신된 명령들을 실행하기 위해 이용될 수 있다. 범용 프로세서들에서 구현될 수 있는 명령들을 인식(recognizing)하는 것 외에, 실행 유닛(130)은 팩형 데이터 포맷의 연산들을 수행하기 위해 팩형 명령 세트(140)와 같은, SIMD, 팩형 또는 기타 명령들 내의 명령들을 인식할 수 있다. 일 실시예에서, 팩형 명령 세트(140)는 팩형 덧셈 연산, 팩형 뺄셈 연산, 팩형 곱셈 연산, 팩형 시프트 연산, 팩형 비교 연산, 곱셈-덧셈 연산, 곱셈-뺄셈 연산, 계수(population count) 연산, 및 팩형 논리 연산 세트와 같은 팩형 및/또는 스칼라 연산 또는 부동 소수점 명령들을 지원하기 위한 명령들을 포함할 수 있으나, 본 발명은 이에 제한되지 않는다. 일 실시예의 팩형 데이터 논리 연산 세트는, 예를 들어, ANDPS, ORPS, XORPS, 및 ANDNPS를 포함하지만, 본 발명은 이에 제 한되지 않는다. 일 실시예의 팩형 산술 연산 세트는 예를 들어, ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, 및 RSQRTPS를 포함할 수 있지만, 본 발명은 이에 제한되지 않는다. 일 실시예의 팩형 데이터 움직임 연산 세트는 예를 들어, 팩형 MOVPS, MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, 및 MOVHLPS를 포함할 수 있지만, 본 발명은 이에 제한되지 않는다. 일 실시예는 팩형 명령 세트(140)가 이러한 명령들을 포함하는 것으로 기술되었지만, 대안적인 실시예들은 이들 명령들의 하위 세트(subset) 또는 상위 세트(super-set)를 포함할 수도 있다.
이들 명령들은 팩형 데이터를 이용하는 멀티미디어 어플리케이션들에서 사용되는 다수의 알고리즘들에 의해 요구되는 연산들의 성능을 위해 제공된다. 따라서, 하나의 데이터 요소에 대해 동시에 하나 이상의 동작을 수행하기 위해 팩형 데이터를 팩형 해제할 필요 없이, 필요한 데이터를 팩킹하고, 팩형 데이터에 대해 필요한 연산들을 수행하도록 이러한 알고리즘들을 기입할 수 있다. 실행 유닛(130)은 예를 들어 내부 버스(170)를 이용하여 레지스터 파일(150)에 연결될 수 있다. 다른 유형의 버스화(bussing) 또는 데이터 전송 시스템, 예를 들어 포인트간 시스템이 이용될 수 있다. 레지스터 파일(150)은 데이터를 포함하는 정보를 저장하기 위한 프로세서(109) 상의 저장 영역을 나타낸다. 또한, 실행 유닛(130)은 캐시 계층(160) 및 디코더(165)에 연결될 수도 있다. 캐시 계층(160)은 데이터를 캐싱하고 예를 들어 주 메모리(104)로부터의 신호들을 제어하기 위해 이용된다. 디코더(165)는 프로세서(109)에 의해 수신된 명령들을, 제어 신호들 및 마이크로코드 엔트리 포인트들로 디코딩하기 위해 이용된다. 이들 제어 신호들 및 마이크로코드 엔트리 포인트들에 응답하여, 실행 유닛(130)은 적절한 동작을 수행한다. 예를 들어, 덧셈 명령이 수신되면, 디코더(165)는 실행 유닛(130)이 필요한 덧셈을 수행하게 하고, 뺄셈 명령이 수신되면, 디코더(165)는 실행 유닛(130)이 필요한 뺄셈을 행하게 한다. 이와 같이, 디코더(165) 및 실행 유닛(130)에 의한 각종 명령의 실행이 일련의 조건문에 의해 표현되지만, 일 실시예의 명령의 실행은 이들 조건문의 직렬 처리를 요하지 않는다.
레지스터 파일(150)은 제어 및 상태 정보, 스칼라 데이터, 정수 데이터, 팩형 정수 데이터 및 팩형 부동 소수점 데이터를 포함하는 정보를 저장하기 위해 이용될 수 있다. 일 실시예에서, 레지스터 파일(150)은 메모리 레지스터, 제어 및 상태 레지스터, 스칼라 정수 레지스터, 스칼라 부동 소수점 레지스터, 팩형 단일 정밀도(precision) 부동 소수점 레지스터, 팩형 정수 레지스터, 및 내부 버스(170)에 연결된 명령 포인터 레지스터를 포함할 수 있지만, 본 발명은 이에 제한되지 않는다.
일 실시예에서, 스칼라 정수 레지스터는 32비트 레지스터이고, 팩형 단일 정밀도 부동 소수점 레지스터는 128비트 레지스터이고, 팩형 정수 레지스터는 64비트 레지스터이지만, 본 발명은 이에 제한되지 않는다. SSE 명령 세트는 예를 들어 xmm0 내지 xmm7로 알려진 8개의 128비트 레지스터를 이용할 수 있다. xmm8 내지 xmm15로 알려진 부가적인 8개의 128비트 레지스터는 SSE 명령 세트에 대해 사용될 수 있다. 예를 들어, xmm0은 벡터 b에 대해 4개의 엔트리를 보유하고, xmm1 내지 xmm4는 벡터 x의 4개의 데이터 포인트들 각각에 대해 4개의 엔트리를 보유할 수 있 고, xmm5 내지 xmm8 각각은 행렬 A의 4개의 대응하는 계수 항들을 보유할 수 있다. 이로써 SSE 명령 세트는 행렬 A의 계수 항들을 동시에 곱하는 것에 의해 벡터 x의 다수(예를 들어, 4개)의 데이터 포인트를 병렬로 처리할 수 있다. 예를 들어, 8개의 xmm 레지스터(예를 들어, xmm0-xmm7)를 (32 비트 플랫폼에서) 이용할 수 있고, 및/또는 16개의 xmm 레지스터(예를 들어, xmm1-xmm15)를 (64 비트 플랫폼에서) 이용할 수 있다. 추가의 32비트 제어/상태 레지스터, 예를 들어 MXCSR을 이용할 수도 있다. 각 레지스터는 4개의 32비트 단일 정밀도 부동 소수점 숫자를 함께 팩킹할 수 있다. 정수 SIMD 연산들은 8개의 64비트 MMX 레지스터들과 함께 수행될 수 있다. 다른 명령 세트들 및 레지스터 크기들을 이용할 수 있다. 8개의 데이터 포인트들을 병렬로 실행하기 위해 다른 명령 세트(예를 들어, SSE AVX 명령 세트)를 이용할 수 있다. 그 명령 세트는 예를 들어, 호출될 수 있는 12개의 256 비트 레지스터들, 예를 들어, ymm0 내지 ymm10과 ERR_YMM을 이용할 수 있다. 보다 큰(예를 들어 256비트) 레지스터는, 예를 들어 ymm0이 벡터 b에 대해 8개의 엔트리를 보유할 수 있도록 하고, ymm1 내지 ymm4가 벡터 x의 8개의 데이터 포인트들 각각에 대해 8개의 엔트리를 보유할 수 있도록 하며, ymm4 내지 ymm7 각각이 행렬 A의 8개의 대응하는 계수 항들을 보유할 수 있도록 한다. 예를 들어, 12개의 ymm 레지스터들(예를 들어, ymm0 내지 ymm10 및 ERR_YMM)을 이용할 수 있다. 다른 레지스터들, 수들, 크기들 및 유형들을 이용할 수 있다.
일 실시예에서, 팩형 정수 레지스터들은 스칼라 부동 소수점 레지스터들과 동일한 메모리 공간 상으로 에일리어싱된다(aliased). 팩형 부동 소수점 데이터에 대해 별도의 레지스터가 이용된다. 레지스터 파일(150)의 레지스터들을 이용할 때, 프로세서(109)는, 임의의 주어진 시간에, 그 레지스터들을 스택 참조형(stack referenced) 부동 소수점 레지스터들 또는 비스택 참조형 팩형 정수 레지스터들이라고 간주한다. 일 실시예에서, 프로세서(109)가 스택 참조형 부동 소수점 레지스터들과 같은 레지스터에서 동작하는 것과 비스택 참조형 팩형 데이터 레지스터들과 같은 레지스터에서 동작하는 것 사이를 전환가능하게 하는 메카니즘이 포함된다. 다른 그러한 실시예에서, 프로세서(109)는 비스택 참조형 부동 소수점 및 팩형 데이터 레지스터들과 같은 레지스터들에서 동시에 동작할 수도 있다. 또한, 대안의 실시예에서, 이들 동일한 레지스터들이 스칼라 정수 데이터를 저장하기 위해 이용될 수도 있다.
대안의 실시예들은 상이한 레지스터 세트를 포함할 수 있다. 예를 들어, 대안의 실시예는 팩형 정수 레지스터들 및 스칼라 데이터 레지스터들에 대해 별도의 레지스터들을 포함할 수 있다. 대안의 실시예는, 각각 제어 및 상태 정보를 저장하는 제1 세트의 레지스터들, 및 각각 스칼라 정수, 팩형 정수, 및 팩형 부동 소수점 데이터를 저장할 수 있는 제2 세트의 레지스터들을 포함할 수 있다.
또한, 특정 유형의 프로세서 및 명령 세트 아키텍쳐들이 기술되지만, 본 발명의 실시예들은 다른 유형의 프로세서, 아키텍쳐, 및 명령 세트들과 동작할 수 있다.
레지스터 파일(150)의 레지스터들은 상이한 수의 레지스터 및 상이한 크기의 레지스터를 포함하도록 구현될 수도 있다. 예를 들어, 일 실시예에서, 정수 레지 스터들은 32비트를 저장하도록 구현될 수 있는 반면, 다른 레지스터들은 128비트를 저장하도록 구현되고, 여기서는 모든 128 비트가 부동 소수점 데이터를 저장하기 위해 사용되는 반면 64비트만이 팩형 데이터에 사용된다. 대안의 실시예에서, 정수 레지스터들 각각은 32 또는 64 비트를 포함한다.
본 발명의 실시예들은 프로세서(109)에 의해 하나 이상의 팩형 명령 세트(140) 내의 명령들을 실행(예를 들어, 4, 8, 및/또는 16개의 데이터 포인트들을 병렬로 실행)시키는 실행 유닛(130)을 포함할 수 있다. 명령 세트(140)는 LSSLE와 같은 하나 이상의 방정식에 대한 해(solution)를 찾기 위해 이용될 수 있다. LSSLE에 대한 해는 예를 들어, 입력 파일의 프레임 레이트를 출력 파일의 프레임 레이트와 호환가능하도록 변경하기 위한 프레임 레이트 변환, 저장 디바이스, 저장 포맷 또는 디스플레이 디바이스에 사용될 수 있다. 입력 파일은 버스(101)를 경유하여 주 메모리(104), ROM(106), 데이터 저장 디바이스(107), 녹음 및 재생 디바이스(125), 및/또는 입력 디바이스(122)와 같은 입력 디바이스로부터 수신 및/또는 저장될 수 있다. 출력 파일은 예를 들어, 녹음 및 재생 디바이스(125) 또는 디스플레이 디바이스(121)와 같은 출력 디바이스에 의해 방송(broadcast)되거나 사용될 수 있다.
본 발명의 실시예에 따른 프로세서 파이프라인(200)을 개략적으로 도시하는 도 2를 참조한다. 프로세서 파이프라인(200)은 U-파이프(202) 및 V-파이프(204)를 포함하는 듀얼 데이터 파이프라인을 포함할 수 있다. 다른 실시예들에서, 프로세서 파이프라인(200)은 단일 파이프라인, 또는 3 이상의 파이프라인을 포함할 수도 있다. SIMD 명령들을 이용하여, 프로세서 파이프라인(200)은 각 데이터 파이프라인을 이용하는 다수(예를 들어, 4, 8, 및/또는 16)의 데이터 포인트들(예를 들어, 1차 연립 방정식에 대한 벡터 해의 요소들)을 병렬로 처리할 수 있다. (예를 들어 다수의 데이터 포인트들을 처리하기 위해) 임의의 주어진 명령을 디코딩하는 동안 후속하는 2개의 명령을 체크할 수 있고, 가능하다면, 제1 명령이 U-파이프(202)에서 실행될 수 있고 제2 명령이 V-파이프(204)에서 실행될 수 있도록 2개의 명령이 발행(issue)된다. 2개의 명령을 쌍으로 하는 것이 가능하지 않다면, 후속 명령을 U-파이프(202)에 발행할 수 있고 전형적으로 V-파이프(204)에는 명령을 발행하지 않는다(예를 들어, 반대도 가능). U-파이프(202) 및 V-파이프(204)에서 명령이 실행되면, 그 거동(behavior)은 명령들이 순차 실행된 것과 동일할 수 있다. 프로세서(109)(도 1) 마이크로-아키텍쳐는 명령 프리패치(prepatch)(210), 명령 패치(212) 명령 디코딩, 페어링(paring), 및 디스패치(dispatch)(214), 어드레스 발생(216), 오퍼랜드 판독 및 실행(218), 및 재기록(220)과 같은 단계를 포함할 수 있다. 명령 디코드 로직은, 클록 사이클 당 2개까지의 명령들의 레이트로 명령들을 디코딩하고, 스케줄링하고 발행한다. 다른 실시예들에서는 상이한 레이트들이 이용될 수 있다.
LSSLE는 예를 들어 행렬 형태로 표현될 수 있다(예를 들어, Ax=b에 의해, 여기서, A는 nxn 행렬이고, b 및 x는 nx1 벡터들이다). LSSLE가 (예를 들어, PDE들의) 이산화(discretization)에 의해 생성될 때, 행렬 A의 차원들(dimensions)은 이용되는 이산화 포인트들의 개수에 의존할 수 있다. 이산화 포인트들의 개수는 또 한 a) 수치적 스킴(numerical scheme)의 고유한 정확도, b) 요구되는 정확도, 및 c) LSSLE의 해를 구하는 데 이용되는 수치적 프로세스의 수렴(convergence)에 의존할 수 있다.
LSSLE를 표현하는 행렬 A는 PDE의 미분 연산자(differential operator)의 이산화로 인해 통상적으로 희소(sparse)하다(예를 들어, 다수의 0 엔트리들을 갖는다). 예를 들어, 푸아송 방정식(Poisson equation) u xx +u yy =f(x,y)에 적용되는 중앙 차분(central difference) 이산화 메커니즘이 행(row) 당 4개의 0이 아닌 엔트리만을 갖는 행렬을 생성할 수 있다. 움직임 추정(motion estimation)을 기술하는 PDE는 예를 들어, 일 수 있다(예를 들어, 여기서 u 및 v는 각각 x 및 y 방향의 움직임이다). 움직임 추정 PDE에 적용된 동일한 이산화 메커니즘은 예를 들어, 아래와 같이 주어질 수 있다.
여기서, N(i)는 i의 공간적 이웃(spatial neighborhood)이다. 이러한 이산화를 표현하는 행렬 LSSLE는 행 당 6개의 0이 아닌 엔트리만을 가질 수 있다.
LSSLE를 위한 수치적 해를 구하는 것은, Ax=b와 같은 1차 방정식을 푸는 것을 포함하며, 여기서, A는 nxn 행렬이고, b 및 x는 nx1 벡터들이다. 1차 방정식들은 인수 분해(factorization) 및 반복(iterative) 메커니즘들을 포함하는 다양한 메커니즘에 의해 풀 수 있다. 그러나, LSSLE들을 풀 때, 인수 분해 메커니즘들은 통상적으로 반복 메커니즘들보다 계산상의 수고와 시간이 훨씬 더 필요하다. 그러 므로, 반복법들이 통상적으로 선호된다. 인수 분해 메커니즘들 및/또는 인수 분해 메커니즘들과 반복 메커니즘들의 조합이 또한 본 발명의 실시예들에 따라 LSSLE들을 푸는 데 이용될 수 있다는 것을 알 수 있다.
반복 메커니즘들은 1차 방정식 Ax=b를 푸는 데 이용될 수 있다. 행렬 A의 엔트리들은 a ij 로 표시될 수 있는데, 여기서, 1<i,j≤n이고, x 및 b의 엔트리들은 각각 x r 및 b r 로 표시될 수 있으며, 1≤r≤n이다. 행렬 A는 예를 들어, 도 1에서 주 메모리(104), ROM(106), 및/또는 데이터 저장 디바이스(107)에의 효율적인 저장을 위해 인코딩될 수 있지만, 어디에도 저장될 수 있다.
"희소(sparse)" 및 "대형(large)"라는 용어가 의미하는 것을 비-한정적인 예로 예시하기 위해, nxn 행렬 A(여기서, n은 65,536과 동일함)에 의해 표현되는 LSSLE에 의해 정의되는 프레임 레이트 변환 문제를 고려한다. 행렬 A는 4,294,967,296 단일 정밀도(예를 들어, 32 비트) 엔트리들(예를 들어, 대략 17,000 메가 바이트)에 대응하는 65,536 x 65,536의 차원을 가질 수 있다. 이러한 행렬은 "대형"이라고 고려될 수 있다. 행렬 A는 행들(예를 들어, 65,536) 중 각각의 행이 상당히 적은 0이 아닌 엔트리(예를 들어, 움직임 추정 PDE를 위한 6 또는 다른 작은 수의 0이 아닌 엔트리)를 가질 때 "희소"하다고 고려될 수 있다. 그러므로, 효율적으로 인코딩된 행렬 A는 예를 들어, 327,680개의 0이 아닌 엔트리(예를 들어, 대략 1.3 메가 바이트)를 가질 수 있다. 다른 수 및 차원이 이용될 수 있다.
프로세서(109)(도 1)는 예를 들어, x r (0) 으로 표시되는 엔트리들을 갖는, x (0) 으로 표시되는, 해 x를 위한 초기 추정값(estimate)으로 시작하는, 반복 메커니즘을 이용하여 LSSLE를 풀 수 있다. 각각의 일련의 반복 (k+1)에서, 새로운 해 추정값 x (k+1) 은 이전의 해 추정값 x (k) 으로부터 순환적으로(recursively) 유도될 수 있다. 반복 프로세스는 추정값의 수렴이 관측될 때 종료될 수 있다. 예를 들어, 수렴은 측정(measure), 예를 들어, (x (k+1) - x (k) )의 L2 놈(norm)이 어떤 미리 결정된 임계값보다 작게 될 때 관측될 수 있다. 예를 들어, L2 놈은 로서 정의될 수 있으며, 여기서, n은 벡터 x의 길이일 수 있다. 수렴의 다른 측정들 및/또는 프로세스를 종료하는 다른 방법이 이용될 수 있다.
LSSLE들을 푸는 하나의 이러한 반복 메커니즘이 Jacobi법이다. Jacobi법에서, 해 추정값 x i (k+1) 은 예를 들어, 다음의 수학식 1에 의해 순환적으로 정의될 수 있다.
Jacobi법에서, nxn 행렬 A는 nx1 해 추정값 벡터 x (k) 로 곱해져서 새로운 nx1 해 추정값 벡터 x(k+1) 을 생성할 수 있다. 곱셈 절차는 통상적으로 새로운 및 오래된 추정값들의 수렴이 관측될 때까지, 각각의 새로운 해 추정값 벡터로 반복된 다. 예를 들어, 수렴은 어떤 미리 결정된 작은 ε>0에 대해 L2_NORM (x (k+1) - x (k) ) < ε일 때 일어날 수 있다. 수렴하는 해 추정값은 LSSLE에 대한 해 벡터일 수 있다. 따라서, Jacobi법을 이용하여 LSSLE를 푸는 계산상의 비용은 iterations*n2(γ)일 수 있으며, 여기서, iterations는 반복의 수이고, γ는 Jacobi법의 곱셈 및 덧셈의 계산상의 비용이다. 비록 Jacobi법이 LSSLE를 푸는 데 이용될 수 있지만, 이 방법은 통상적으로 원하는 정확도로(예를 들어, 실질적으로 작은 ε>0에 대해) 수렴을 달성하기 위해 비교적 다수의 반복을 필요로 한다.
동일한 정확도로 Jacobi법에 비해 비교적 적은 반복을 이용하여 LSSLE를 풀기 위해 Gauss-Seidel법(GS) 및 그의 변형, Successive over-relaxation(SOR)과 같은 다른 방법들이 개발되었다.
추정값의 수렴을 달성할 때까지 nxn 행렬 A를 nx1 해 추정값 벡터 x (k) 로 반복적으로 곱함으로써, GS법은 부분적으로 Jacobi법의 프로세스를 따른다. 그러나, GS 메커니즘은 해 추정값 벡터가 정의되는 방법에 있어서 Jacobi법과 상이하다. GS 메커니즘은 그 벡터의 최근에 계산된 엔트리들 또는 좌표값들을 이용하여 해 추정값 벡터 x (k) 를 순환적으로 정의한다. 예를 들어, x i (k+1) 은 j=1, 2, …, (i-1)에 대해 x j (k+1) 및 j=i, i+1, …, n에 대해 x j (k) 에 의해 정의될 수 있다. 통상적으로 이러한 관계는 Jacobi법 및 다른 유사한 방법에 비해 수렴 레이트(convergence rate)를 향상시킨다. GS법은 예를 들어 다음의 수학식 2에 의해 추정값 x i (k+1) 을 순환적으로 정의한다.
비록, Jacobi법과 비교해서, GS 및 SOR 방법들이 통상적으로 추정 해 값의 수렴의 속도가 빠르지만, GS 및 SOR 방법들은 다른 문제를 일으킬 수 있다. 예를 들어, GS 및 SOR 방법들은 x의 최근 계산된 엔트리들을 이용하여 현재의 해 추정값을 갱신(update)할 수 있으며, 그에 따라 "직렬(serial)"이라고 불릴 수 있다. 예를 들어, 수학식 2에서, x i (k+1) 은 동일한 반복에서(예를 들어, j<i에 대해 합산 항(summation term)에서) 계산된 x의 값들에 의존한다. 그러므로, x i (k+1) 의 값은, 동일한(예를 들어, k+1) 반복 동안 계산되는, 벡터 x에서의 그의 "이웃하는 엔트리/엔트리들"(예를 들어, x i-1 (k+1 ))에 의존한다. GS법에서의 이러한 의존은 벡터 x의 요소들의 병렬 계산들을 불가능하게 하여, LSSLE를 푸는 속도를 상당히 제한한다. 예를 들어, 벡터 x에서의 엔트리(예를 들어, x i (k+1) )를 생성하기 위해, 애플리케이션은 통상적으로 벡터 x에서의 이전 또는 이웃하는 항(예를 들어, x i-1 (k+1) )의 생성 완료까지, 완료후, 또는 완료시에 기다린다. 예를 들어, GS법은 x의 순차 항들(예를 들어, x i 및 x i+1 )에 동시에 적용되지 않을 수 있다.
본 발명의 실시예들은 좌표 요소가 벡터에 배열되는 순서와 상이한 순서로, (예를 들어, 현재의 반복 k에서 계산된) 동일한 벡터의 다른 엔트리들에 의해 x의 순서화된 좌표 요소 또는 엔트리 x i (k) 각각을 반복적으로 또는 순환적으로 정의하는 것을 포함할 수 있다. 다른 엔트리들은 벡터 순서(vector ordering)에서 "이웃하지 않는(non-neighboring)" 엔트리들 x i (k) 일 수 있다. 그러므로, x의 각각의 엔트리 x i (k) 의 값은 좌표 요소가 벡터에 배열되는 순서와 상이한 순서로 갱신될 수 있다. (예를 들어, 수학식 2에 정의된) GS 메커니즘에 따르면, 엔트리 x i (k) 는 다른 인접이 아닌 엔트리들에 독립적이다. 따라서, 엔트리 x i (k) 및 그의 다른 이웃이 아닌 엔트리들은 병렬로 동시에 갱신된다. 그러므로, 본 발명의 실시예들에 따르면, (예를 들어, GS 메커니즘을 이용하여) 엔트리를 갱신하는 것은 벡터의 순차적으로 순서화된(ordered) 또는 이웃하는 엔트리들의 갱신을 기다리는 것을 필요로 하지 않는다.
본 발명의 실시예들은, x의 각각의 엔트리에 대하여, 원래 순서(ordering)로 된 그의 초기 이웃하는 엔트리들이 새로운 순서의 상이한 이웃하지 않는 위치들로 이동되도록, 새로운 벡터 x'를 생성하기 위해 벡터의 엔트리들의 순서를 재배열하는 메커니즘을 제공한다. 그러므로, 원래의 순차 엔트리들(예를 들어, 벡터 x의 x i 및 x i+1 )은 벡터 x'에서 (예를 들어, 현재의 이웃하지 않는 위치들에서) 분리된다. (예를 들어, 수학식 2에 따른) GS 메커니즘에서, 벡터의 각각의 좌표 엔트리를 푸는 것은, 원래의 이웃 엔트리들을 이웃하지 않는 위치들로 이동시킴으로써, 그의 이웃 엔트리들에 의존하기 때문에, 새로운 벡터 x'의 엔트리들은 더 이상 현재의 이웃들에 의존하지 않는다. 그러므로, 새로운 벡터의 2 이상의 이웃 엔트리들 각각은, 예를 들어, 벡터 x'의 엔트리(예를 들어, x' i (k+1) ) 및 새로운 이웃하는 항(예를 들어, x' i-1 (k+1) )은, 순환적으로 정의되는 그의 각각의 이동된 이웃하지 않는 엔트리들을 이용하여 순환적 정의들을 갱신하는 것에 의해, 동시에 또는 병렬로 풀릴 수 있다.
예를 들어, (예를 들어, 수학식 2에 따른) 종래의 GS법은 벡터 x의 엔트리(예를 들어, x 4 )에 적용될 수 있다. 결과는 통상적으로 x의 최근 계산된 엔트리들 (예를 들어, x 3 )에 의존하며, 이에 따라 이전(preceding) 이웃하는 항의 처리를 기다려야 한다. 재배열 알고리즘을 이용하여 초기 이웃 엔트리들(예를 들어, x3, x4, x5)을 분리할 수 있다. 일 실시예에서, x에서 엔트리(예를 들어, x 4 )와 초기 이웃하는 엔트리들(예를 들어, x 3 및 x 4 )은 x'에서 이웃하지 않는 엔트리들이 되도록 재배열된다. 새로운 벡터 x'에서 엔트리(예를 들어, x 4 )는 엔트리(예를 들어, x 4 )가 (예를 들어, 수학식 2에 따라) 의존하지 않는 새로운 이웃하는 값들(예를 들어, 재배열된 벡터 x'의 시퀀스 x 1 , x 4 , x 8 에서 x 1 및 x 8 )을 가질 수 있다. 그러므로, GS 메커니즘(예를 들어, 수학식 2에 의해 정의됨)은 x'에서 새로운 이웃하는 엔트리들(예를 들어, x 1 , x 4 , x 8 )에 동시에 적용될 수 있다. x'에서 각각의 재배열된 이웃하는 엔트리들(예를 들어, x 1 , x 4 , x 8 )은 x'의 최근 계산된 엔트리들(예를 들어, x 1 , x 4 , x 8 )에 의존하여 (예를 들어, 수학식 2에 따라) 풀릴 수 있다. 엔트리들, x'의 최근 계산된 엔트리들(예를 들어, x 0 , x 3 , x 7 )의 재배열은 더 이상 그에 의존하는 엔트리들(예를 들어, x 1 , x 4 , x8 각각)에 이웃하지 않는다. 그러므로, 이웃하는 엔트리들(예를 들어, x1, x4, x8)의 각각을 풀기 위해, 해 메커니즘은 다른 이웃하는 엔트리들의 해를 기다릴 필요가 없다.
(예를 들어, 도 3에 도시된) 일 실시예에서, 벡터 x는 맵핑 행렬이라고 불릴 수 있는 대응하는 제1 격자 또는 행렬(예를 들어, 도 3의 행렬(310))로 변환된다. 제1 격자 또는 행렬의 요소들은 새로운 벡터 x'에 대응하는 제2 격자 또는 행렬(예를 들어, 도 3의 행렬(340))로 재배열된다. 재배열은, 제1 격자 또는 행렬의 각각의 엔트리에 대해, 원래 순서로 된 그의 초기 이웃하는 엔트리들이 상이한 이웃하지 않는 위치들로 이동되도록 실행될 수 있다.
일 실시예에서, 벡터 요소들의 처리 순서는 맵핑 행렬에의 벡터의 맵핑, 및 재배열된 맵핑 행렬로의 맵핑 행렬의 재배열에 대응하는 방식으로 상이할 수 있으며, 여기서, 맵핑 행렬의 이웃하는 요소들은 재배열된 맵핑 행렬에서 이웃하지 않는다.
제1 순서의 요소들을 갖는 벡터 x 및 제2 순서의 요소들을 갖는 벡터 x'에 대해서, 벡터 x'의 연속적인(consecutive) 요소들에 대해 연산하는 것이 제2 순서에 따라 벡터 x의 요소들에 대해 연산하는 것과 등가일 수 있다는 것을 이 기술분야의 전문가는 잘 알 것이다. 벡터 x는 이웃하는 요소들의 이용 또는 참조 없이 재배열될 수 있다. 예를 들어, 엔트리들을 재배열하는 것은 엔트리들에 대한 명백하지 않은(non-trivial) 맵 또는 참조를 정의하는 것과 등가일 수 있다. 예를 들어, 비연속적인 또는 교대의 순서로 벡터 엔트리들에 대해 연산하거나 계산하는 것은 재배열과 등가일 수 있다. 예를 들어, 엔트리들은 그 자체를 이동시키거나 재배열할 필요가 없다. 그러므로, 일부 실시예들에서, 벡터의 요소들은 벡터에 요소들이 나타나는 순서와 상이한 순서로 벡터 순서에서 비순차적(out-of-order)으로 동작될 수 있다. 요소들의 그룹들은 동시에 동작될 수 있다.
도 3을 참조하면, 도 3은 새로운 순서를 갖는 벡터 x'에 대해 초기 순서를 갖는 벡터 x로부터의 엔트리들의 재배열을 개략적으로 예시하고 있다. 데이터 구조 또는 행렬(310)은 초기 순서를 갖는 벡터 x를 표현할 수 있다. 예를 들어, 벡터 x의 엔트리들은 행별(도시된 바와 같음), 열별, 또는 다른 순서를 이용하여 행렬(310)의 좌표들을 채울 수 있다. 행렬(310)의 엔트리(300)(예를 들어, 벡터 x의 x 10 또는 10번째 엔트리)는 예를 들어, 4개의 직면한(facing) 엔트리들(320)(예를 들어, 이웃하며, 엔트리(300)와 동일한 행 또는 열에 있음) 및 4개의 대각선 엔트리들(330)(예를 들어, 이웃하지만, 엔트리(300)와 상이한 행 및 열에 있음)을 포함하는 8개의 이웃하는 엔트리들을 가질 수 있다. 대안적으로, 직면한 및 대각선 엔트리들(320 및 330) 이외의 엔트리들은 "이웃하는" 것으로 고려될 수 있다.
데이터 구조 또는 행렬(340)은 재배열된 순서를 갖는 벡터 x'를 표현 또는 그에 대응할 수 있다. 재배열된 순서에 따르면, 행렬(340)의 엔트리(300)(예를 들어, 행렬(310)의 10번째 엔트리에 대응함)는 초기 이웃하는 엔트리들로부터 분리될 수 있다. 예를 들어, 행렬(310)의 초기 순서의 엔트리들(예를 들어, 6번째, 9번째, 11번째 및 14번째, 및/또는 5번째, 7번째, 13번째 및 15번째)은 행렬(340)의 새로운 순서의 엔트리(300)와 이웃하지 않을 수 있다. 초기 순서의 이웃하는 엔트리들은 재배열된 순서의 엔트리(300)로부터의 거리(예를 들어, 재배열 수학식 3을 참조하여 본 명세서에 설명된 파라미터 S에 의해 정의됨)만큼 이동 또는 이격될 수 있다. 행렬(340)의 엔트리(300)는, 새로운 이웃하는 엔트리들, 예를 들어, 직면한 엔트리들(320) 및/또는 대각선 엔트리들(330)과 상이한 직면한 엔트리들(350) 및 대각선 엔트리들(360)을 가질 수 있다.
예를 들어, 일단 벡터가 행렬(340)에서 각각의 엔트리(300)가 그의 초기 이웃하는 엔트리들(예를 들어, 직면한 엔트리들(320) 및/또는 대각선 엔트리들(330))과 분리되도록 재배열되었다면, GS 메커니즘은 재배열된 벡터 x'의 새롭게 이웃하는 엔트리들(예를 들어, 직면한 엔트리들(350) 및/또는 대각선 엔트리들(360))에 병렬로 적용될 수 있다. 예를 들어, 수학식 Ax'=b의 LSSLE를 풀기 위해, nxn 행렬 A는 재배열된 nx1 벡터 x'에 의해(예를 들어, 또는 벡터 x'을 표현하는 nxm 행렬(340)에) 곱해질 수 있다. 그러므로, LSSLE를 푸는 계산 단계들은 Jacobi법의 단계들(예를 들어, 행렬 곱셈에 의해 벡터의 다수의 엔트리들을 동시에 처리하는 단계)과 유사할 수 있지만, 해들의 수렴 레이트는 GS법과 관련된 것(예를 들어, 가장 최근의 산술들에 기초한 해 값들)과 유사하다. 그러므로, Jacobi 및 GS 방법의 각각의 이득이 실현될 수 있다. 데이터 구조들의 다른 유형들, 행렬들 또는 벡터들이 이용될 수 있다. 다른 재순서화(reordering) 스킴들이 이용될 수 있다.
각각의 엔트리는 다른 수 또는 정의의 이웃하는 엔트리들을 가질 수 있다는 것을 알 것이다. 예를 들어, 행렬들(310 및 340)의 대각선 코너들을 따라 배열된 엔트리들은 2개의 직면한 엔트리들(320) 및 1개의 대각선 엔트리(330)를 가질 수 있다. 행렬들(310 및 340)의 가장자리들(그리고 코너들이 아님)을 따라 배열된 엔트리들은 3개의 직면한 엔트리들(320) 및 2개의 대각선 엔트리들(330)을 가질 수 있다. 다른 실시예에서, 벡터들의 행렬 표현들이 이용될 필요가 없다. 그 대신, 초기 및 재배열된 벡터들 x 및 x' 그 자체들이 이용될 수 있고, 행렬들(310 및 340)은 일 차원(예를 들어, 벡터들 x 및 x' 그 자체들과 등가임)인 것으로 고려될 수 있다. 이 예에서, 1xn 벡터에 대해서, 벡터의 가장자리에 있는 엔트리들(예를 들어, x 0 및 x n-1 )은 1개의 이웃하는 엔트리를 가질 수 있고, 모든 다른 엔트리들(예를 들어, x 1 및 x n-2 )은 2개의 이웃하는 엔트리를 가질 수 있다.
비록 엔트리를 재배열 또는 이동시키는 것이 설명되어 있지만, 본 발명의 실시예들은 엔트리의 미분계수(derivative)를 재배열 또는 이동시키는 것을 포함한다는 것을 알 것이다. 예를 들어, 재배열된 벡터를 표현하는 행렬이 상부(upper) 삼각형, 하부(lower) 삼각형, 대각형, 및/또는 다른 변형으로 정규화된, 감소된, 또는 분할된, 기약 행 사다리꼴(reduced row echelon) 형태에 있을 수 있다. 재배열 또는 이동된 엔트리는 초기 엔트리로부터 유도된 항일 수 있다(예를 들어, 복제가 아님).
초기 순서로부터 재배열된 순서로의 벡터의 엔트리들의 이동은 도 3에서 화살표들로 나타내어질 수 있다. 이러한 이동은 수학적 추상화(abstraction)이고 맵핑, 알고리즘, 또는 수학식(예를 들어, 본 명세서에 설명된 재배열 수학식 3)에 의해 정의될 수 있다는 것에 주목한다. 다른 실시예에서, 엔트리들을 재배열하는 것은 엔트리들에 대한 택일(alternate) 맵핑 또는 참조를 정의하는 것과 등가일 수 있다. 예를 들어, 엔트리들은 그 자체를 이동 또는 재배열할 필요가 없다. 예를 들어, 어느 벡터 엔트리 또는 어떤 순서로 벡터 엔트리들에 대해 연산 또는 계산할 것인지를 판정하는 것은 재배열하는 것과 등가일 수 있다.
요소들이 동작되는 순서는 실행 유닛(130)(도 1)에 의해 실행되는 프로세서(109)(도 1)에 의해 결정될 수 있고, 및/또는 커맨드 또는 명령들의 세트로서 (예를 들어, 도 1의 캐시 계층(160), 주 메모리(104), ROM(106), 데이터 저장 디바이스, 또는 그 조합에) 저장될 수 있다. 대안적으로, 벡터의 요소들의 재순서화, 또는 요소들이 처리되는 순서는 실행을 위해 저장되고 검색되는 명령들의 세트에서 고유할 수 있다. 예를 들어, 프로세스는 제1의 특정 엔트리들(예를 들어, 엔트리들의 그룹들)에 대해 연산하고 나서 제2의 다른 엔트리들에 대해 연산하는 등과 같도록 미리 설정(pre-set)될 수 있고, 여기서, 순서는 요소들이 벡터에 배열되는 순서에 대응하지 않는다. 예를 들어, 복수의(예를 들어, 4 또는 8) 상호 비연속적인 엔트리들의 제1 세트가 제1 명령으로 팩킹되고(packed), 그 다음에 복수의(예를 들어, 4 또는 8) 상호 비연속적인 엔트리들의 제2 세트가 제2 명령으로 팩킹될 수 있다.
새로운 벡터 x'를 형성하기 위해 그의 엔트리들을 재배열하기 위한 알고리즘이 벡터 x에 적용될 수 있다. 예를 들어, 하나의 이러한 알고리즘이 다음과 같이 진행될 수 있다(예를 들어, SSE 변형에 대해 설명될 수 있다). 벡터 x는 R 행들 및 C 열들을 갖는 행렬(310)로서 저장될 수 있다. 사이즈가 R*C인 벡터 x를 엔트리들 x'(j)을 갖는 새로운 또는 재배열된 벡터 x'로 재배열하기 위한 재배열 방정식은 예를 들어 수학식 3일 수 있으며, 여기서, 0≤j≤R*C-1이다.
파라미터 S는 초기 벡터 x의 엔트리들 x(j)와 x(j+1) 사이의 (예를 들어, x'에서의) 거리일 수 있다. 파라미터 S의 선택은 프로세서(109)(도 1)(예를 들어, SIMD) 파이프라인 효율성 및 처리량에 영향을 미칠 수 있고, 이들 특징들을 최적화기 위해 선택될 수 있다. 예를 들어, S의 파라미터 값은 8일 수 있다. 예를 들어, 충분히 큰 행렬(310)에 대해, 4의 파라미터 S 값이 전체 처리량을 위해 시스템(100)(도 1) 파이프라인을 채우는 데 충분할 수 있다. 다른 값들이 이용될 수 있다.
벡터들의 행렬 표현들이 이용될 필요가 없다는 것을 이 기술분야의 전문가는 잘 알 것이다. 그 대신, 벡터 그 자체가 이용될 수 있다.
도 4a 및 도 4b를 참조하면, 초기 순서를 갖는 벡터 x를 표현하는 행렬(400) 및 새로운 순서를 갖는 벡터 x'를 표현하는 행렬(410)을 각각 도시하고 있다. 엔트리들의 이러한 재배열은 본 명세서에 설명된 재배열 방정식에 따라 실행될 수 있다. 이 예에서, 파라미터 S는 3이다.
새로운 벡터 x'의 엔트리들을 재배열함으로써, 각각의 엔트리는 그에 독립적인 이웃하는 엔트리들을 가질 수 있고, 그에 따라 그와 병렬로 처리될 수 있다. 일 실시예에서, 엔트리 x i 에 대해, 벡터 x에서 초기에 xi에 이웃하고 재배열 벡터 x'에서 x i 에 이웃하지 않는 엔트리들의 수는 (예를 들어, GS 메커니즘을 이용하여) 엔트리 x i 와 병렬로 처리될 수 있는 엔트리들의 수이다.
일 실시예에서, 병렬 처리 알고리즘들 및/또는 하드웨어는 병렬로 이웃하는 엔트리들을 처리하는 데 이용될 수 있다. 예를 들어, 프로세서(109)(도 1)는 예를 들어, SIMD 동작들을 이용하여 재배열된 벡터 x'의 2 이상의 이웃하는 엔트리들을 병렬로 처리할 수 있다.
nxn 행렬 A를 재배열된 nx1 벡터 x'로 곱함으로써, Ax=b에 의해 정의되는 LSSLE를 푸는 데 병렬 처리 알고리즘이 이용될 수 있다. 예를 들어, 일 실시예는 8개의 데이터 포인트들을 병렬로 실행하는 데 AVX 명령 세트(140)(도 1)를 이용할 수 있다. 다른 적절한 팩킹된 SIMD, 또는 병렬 처리 명령 세트들 또는 방법들이 이용될 수 있다. 예를 들어, 16개의 데이터 포인트들을 병렬로 실행하기 위한 명령 세트(140)(도 1)가 이용될 수 있다. 일 실시예의 벡터 x'는, 각각의 엔트리에 대해, 4개의 독립적인 데이터 포인트들을 병렬로 실행하기 위해 x의 적어도 4개의 초기 이웃하는 엔트리들이 x'에 이웃하지 않도록 재배열될 수 있다. 다른 실시예의 벡터 x'는, 각각의 엔트리에 대해, 8개의 독립적인 데이터 포인트들을 병렬로 실행하기 위해 x의 적어도 8개의 초기 이웃하는 엔트리들은 x'에서 이웃하지 않도록 재배열될 수 있다.
본 명세서에서 기술된 실시예들은 의사 코드(pseudo-code)를 이용한다. 다른 프로그램 코드, 단계들, 순서 또는 단계들, 프로그램 언어들, 명령 세트들의 유형들 및/또는 이웃하지 않는 최소 개수의 엔트리(entry)들이 사용될 수 있다.
이하의 의사 코드는 다수의 (예를 들면, 4개의) 이웃하는 값들(예를 들면, xmm1-xmm4에 보유된 4X4=16 엔트리)을 이용하여 재배열(rearrange)된 벡터 x'에 대한 다수의(예를 들면, 4개의) 데이터 포인트를 병렬로 처리하기 위한 SSE 명령들을 이용하는 실시예를 기술한다. 벡터 x'는 각 엔트리의 다수의(예를 들면 4개의) 이웃하는 값들(예를 들면, xmm1-xmm4에 보유된 데이터 포인트들)이 서로 독립적인 순서를 가질 수 있다. "커널(kernel)" KERNEL-SSE는 벡터 x'의 다수의(예를 들면, 4개의) 독립적인 엔트리를 병렬로 처리하는 것을 기술할 수 있다. 이러한 커널은 예를 들면, Ax'=b라는 방정식에 따라 "행렬x벡터" 곱셈을 실행하기 위해 n/4회 호출될 수 있다. 데이터 포인트들(예를 들면, xmm5-xmm8 내에 보유된 4X4=16 엔트리)에 대응하는 행렬 A의 계수 항(term)들이 사용될 수 있다. 이러한 커널은 푸아송 방정식(예를 들면, 행렬의 각 행이 4개의, 0이 아닌 엔트리를 가질 수 있는)을 풀기 위해 사용될 수 있다. 다른 실시예들에서, 4개 이외의 엔트리들은 병렬로 처리될 수 있다.
의사 코드는 예를 들면 아래와 같이 진행될 수 있다.
KERNEL-SSE
ERR_XMM은 초기에 0으로 설정될 수 있고, 그리하여 그 값은 예를 들면 KERNEL이 인보크(invoke)될 때 갱신될 수 있다.
xmm0은 b 벡터의 4개의 엔트리를 보유할 수 있다(예를 들면, 여기서 Ax=b).
xmm1-xmm4는 추정 해 벡터(estimated solution vector) x의 현재 값의 4x4=16 엔트리를 보유할 수 있다. 이러한 값들은, 예를 들면, PDE 이산 화(discretization)에 의해 계산된 x의 추정값의 이웃들일 수 있다.
xmm5-xmm8는 행렬 A의 4x4=16 엔트리(예를 들면, A의 계수값들)를 보유 할 수 있다.
xmm9는 출력에서 x에 대해 새롭게 연산된 근사값(approximation)의 4개의
엔트리를 보유할 수 있다.
ERR_XMM은 갱신될 수 있다.
표기: 각각의 에 대하여 xmmj는 복수의(예를 들면, 4개 또는 16 개의) 엔트리를 보유할 수 있다. xmmj의 이들 4개의 엔트리는 xmmj[3], xmmj[2], xmmj[1], xmmj[0]라는 표기로써 구별될 수 있다.
KERNEL은 이하를 연산할 수 있다:
Pseudo-code SSE:
물론 이러한 명령들은 예로서만 제공된다. 다른 특정한 명령들의 예들은 본 발명의 실시예들과 함께 사용될 수 있다. KERNEL-SSE가 n/4회 인보크된 후, 벡터 x'의 모든 엔트리가 현재의 반복(iteration)에 대하여 연산되었고 ERR_XMM은 이전 반복과의 차(difference)의 L2 놈을 보유한다. 만약 L2 놈 값이 미리 연산된 값 또는 임계값보다 작으면, 프로세스는 정지될 수 있다. 가장 최근의 반복에서 연산된 x'의 값이 최종 결과로서 사용될 수 있다. 대안적으로, x'의 값의 가장 최근의 반복과 대응하는 (예를 들면, x'의 "재배열하지 않기(un-rearranging)"에 의하여 결정된 또는 역 재배열 방정식(inverted rearrangement equation)을 적용함으로써 x'를 x에 역 맵핑(inverse mapping)하는 것에 의해 결정된) x의 값이 최종 결과로서 사용될 수 있다.
벡터 재순서화(vector reordering)는 다른 단계들, 프로세스들 및/또는 메카 니즘들을 이용하여 풀리는 연립 방정식들에서 사용될 수 있다.
일 실시예의 각 반복 또는 KERNEL-SSE의 연산 비용(computational cost)은 예를 들면 로딩 10회, 저장 1회, MULP 5회 및 ADDP 6회와 같이 요약될 수 있다.
유사한 커널이 움직임 추정 방정식(motion estimation equation)을 풀기 위해 사용될 수 있지만, (예를 들면 "매끄러운 품질의 비디오(smooth quality video)"를 생성하기 위해 충분히 빠르게 해들을 찾기 위해서는) 통상적으로 벡터의 8개의 엔트리들을 병렬로 처리하는 것을 필요로 한다. (예를 들면, 그 벡터의 동일한 개수의 엔트리에 대해) 대응하는 움직임 추정 커널을 실행하기 위한 연산 비용은 예를 들면 로딩 11회, 저장 1회, MULP 6회 및 ADDP 7회와 같이 요약될 수 있다.
이하의 의사 코드는 다수의 (예를 들면, 8개의) 이웃하는 값들(예를 들면, ymm1-ymm4에 보유된 8X8=64 엔트리)을 이용하여 재배열된 벡터 x'에 대한 다수의(예를 들면, 8개의) 데이터 포인트 각각을 병렬로 처리하기 위한 명령(예를 들면, AVX)을 이용하는 실시예를 기술한다. 벡터 x'는 각각의 엔트리의 다수의(예를 들면 8개의) 이웃하는 값들(예를 들면, ymm1-ymm4에 보유된 데이터 포인트들)이 서로 독립적인 순서를 가질 수 있다. "커널" KERNEL-AVX는 벡터 x'의 다수의(예를 들면, 8개의) 독립적인 엔트리를 병렬로 처리하는 것을 기술할 수 있다. 이러한 커널은 예를 들면, Ax'=b라는 방정식에 따라, "행렬x벡터" 곱셈을 실행하기 위해 n=8회 호출될 수 있다. 데이터 포인트들(예를 들면, ymm5-ymm8 내에 보유된 8X8=64 엔트리)에 대응하는 행렬 A의 계수 항들이 사용될 수 있다.
의사 코드는 예를 들면 아래와 같이 진행될 수 있다.
KERNEL-AVX
ERR_XMM은 x의 수렴을 지시할 수 있는 L2 놈 ((x(k+1) ―x(k))2)을 보유할 수 있다.
ERR_XMM은 초기에 0으로 설정될 수 있고, 그리하여 그 값은 예를 들면 KERNEL이 인보크될 때 갱신될 수 있다.
ymm0은 b 벡터의 8개의 엔트리를 보유할 수 있다(예를 들면, 여기서 Ax=b).
ymm1-ymm4는 추정 해 벡터 x의 현재 값인 8x8=64 엔트리를 보유할 수 있다. 이러한 값들은, 예를 들면 PED 이산화에 의해 계산된 x의 추정값의 이웃들일 수 있다.
ymm5-ymm8은 행렬 A의 8x8=64 엔트리(예를 들면, 계수값들)를 보유할 수 있다.
ymm9는 입력에서 해 x 값의 8개의 엔트리를 보유할 수 있다.
ERR_YMM은 갱신될 수 있다.
표기: 각각의 에 대하여 ymmj는 복수의(예를 들면, 8개 또는 64 개의) 엔트리를 보유할 수 있다. ymj의 8개의 엔트리는 ymmj[7], ymmj[6], ymmj[5], ymmj[4], ymmj[3], ymmj[2], ymmj[1], ymmj[0]라는 표기로써 구별될 수 있다.
KERNEL은 이하를 연산할 수 있다:
ymm10 = ymm9
ymm9 = ymm1*ymm5+ymm2*ymm6+ymm3*ymm7+ymm4*ymm8+ymm0
ERR_YMM = (ymm10[7]-ymm9[7]) 2+ (ymm10[6]-ymm9[6]) 2+ (ymm10[5]-ymm9[5]) 2+ (ymm10[4]-ymm9[4])2+(ymm10[3]-ymm9[3]) 2+ (ymm10[2]-ymm9[2]) 2+ (ymm10[1]-ymm9[1]) 2+ (ymm10[0]-ymm9[0])2;
8개의 데이터 포인트를 병렬로 처리하기 위한 명령 세트를 위한 의사 코드:
KERNEL-AVX가 n/8 회 인보크된 후에, 벡터 x'의 모든 엔트리가 현재 반복에 대해 계산되고, xmm9는 이전 반복과의 차의 L2 놈을 보유할 수 있다. 만약 L2 놈 값이 미리 연산된 값 또는 임계값보다 작으면, 프로세스는 정지되고 가장 최근의 반복에서 연산된 x'의 값(예를 들면, 또는 그에 대응하는 x의 값)이 최종 결과로서 사용될 수 있다.
일 실시예의 각 반복 또는 KERNEL-AVA의 연산 비용은 예를 들면 로딩 10회, 저장 1회, MULP 5회 및 ADDP 6회와 같이 요약될 수 있다.
(예를 들면, 4개의 데이터 포인트를 병렬로 처리하는) SSE 명령 세트(140)(도 1) 대신 8개의 데이터 포인트를 병렬로 처리하기 위해 명령 세트(140)(도 1)를 사용함으로써, 프로세서(109)(도 1)는 동일한 수의 명령(예를 들면, 및 대기 시간)을 이용하여 대략 2배의 데이터를 처리할 수 있다.
발명의 실시예들은 프레임 레이트들을 전환하기 위해 움직임을 추정하기 위한 LSSLE들을 풀기(solving) 위해 사용될 수 있다. 예를 들면, 처음의 레이트(예를 들면, 리프레시 레이트(refresh rate)(예를 들면, 60fps)를 갖는 모니터 또는 스크린 상에 초당 24 프레임(fps))로 비디오 파일을 재생 또는 출력하는 비디오 플레이어 또는 컴퓨터를 고려하자. 파일을 그 리프레시 레이트로 재생하도록 전환하여 동일한 경과 기간 내에 디바이스가 제1 레이트로 출력하고 스크린이 제2 레이트로 출력하도록, 프레임 전환 어플리케이션(frame conversion application)(예를 들면, 움직임 추정기)이 부가적인 fps(예를 들면, 48fps)를 생성할 수 있다. 예를 들면, 각각의 1/2 기간 동안, 본 발명의 일 실시예에 따라 24 프레임이 프로세스에 진입(enter)하고, 60 프레임이 빠져나온다(exit). 새로운 프레임들 중 일부는 이전 프레임(old frame)들의 사본이기 때문에, 예를 들면, 60보다 적은 추가적인 fps가 생성될 수 있다. 예를 들면, 각각의 프레임이 n2 픽셀을 갖고 여기서 n=256이 면, 어플리케이션은 평균적으로 초당 48 LSSLE까지 해들을 생성할 수 있다. 일 실시예에서, LSSLE들은 행렬 형태(예를 들면, Ax=b)로서 배열될 수 있다.
종래의 GS 메카니즘들에서 LSSLE들 각각의 해는 행렬 A를 벡터 x의 각각의 엔트리로 한번에 한 엔트리씩 또는 차례로 곱하는 것에 의해 생성될 수 있다. 본 발명의 실시예들은 행렬 A를 벡터 x'의 2개 이상의(예를 들면, 독립적인) 엔트리들로 병렬로 또는 동시에 곱하는 것에 의해 LSSLE들에 대한 각각의 해를 생성할 수 있다.
각각의 LSSLE들에 대한 해들렴(예를 들면 x 또는 x')은 해에 대한 수렴이 달성될 때까지 생성될 수 있다. 예를 들면, 수렴이 GS 메카니즘의 10 회의 반복 내에 달성된다면, 어플리케이션은 10회의 "행렬x벡터" 곱셈을 수행할 수 있고, (예를 들면, 만약 행렬 A가 6개의 0이 아닌 엔트리를 갖고 각각의 프레임에 n2=2562 픽셀이 있다면) 그것은 초당 10*6n2=3932160회의 곱셈 및 10*4n2=2621440 회의 덧셈을 필요로 한다. 프레임 전환 어플리케이션은 예를 들면, 행렬들 A를 준비하는(예를 들면, 각각의 행렬을 그들의 대각선 요소(element)들로 나누는) 부가적인 계산 비용이 들 수 있다. 본 발명의 실시예들에 따르면, 다수의(예를 들면 4개 또는 8개)의 데이터 포인트를 병렬로 푸는 것에 의해, LSSLE에 대한 해들이 종래의 메카니즘을 이용하는 것보다 빠르게 생성될 수 있다. 본 발명의 실시예들에 따라 동작하는 플레이어는 다른 또는 상이한 이점들이 달성될 수 있지만, 종래의 방법보다 더욱 "매끄러운(smooth)" 비디오를 재생할 수 있다.
본 발명의 실시예들은, "레드-블랙(red-black)" GS 방법, "지그재그 스캐닝(zig-zag scanning)" 방법 및 "얼룩말무늬선 완화(zebra line relaxation)" 방법과 같은 LSSLE들을 풀기 위한, 본 기술분야에서 공지된 종래의 다른 메카니즘보다 유리할 수 있다. 예를 들면, 레드-블랙 방법은 표준 GS 방법보다 통상적으로 2-3배 많은 반복을 사용한다. 게다가, 레드-블랙 방법은 통상적으로 각 반복 전 및/또는 후에 팩킹(packing) 및/또는 언팩킹(unpacking) 프로세스를 실행하고, 그리하여 광학 흐름(optical flow), 또는 다중-격자 프레임워크(multi-grid framework)로 쉽게 통합될 수 없다. 예를 들면, 지그재그 스캐닝 방법은, 레드-블랙 방법과 같이, 통상적으로 각 반복 전 및/또는 후에 팩킹 및/또는 언팩킹 프로세스를 실행하고, 그리하여 상당한 오버헤드를 수반할 수 있고 구현하기 번거로울 수 있다. 지그재그 스캐닝 방법은 통상적으로 다중-스케일(multi-scale) 프레임워크에 적합하지 않다. 예를 들면, 얼룩말무늬선 완화 방법은, 레드-블랙 방법과 같이, 통상적으로 GS 방법보다 2-3배 많은 반복을 사용한다.
대조적으로, 본 발명의 실시예들은 GS 방법과 동일한 회수의 반복, 즉 전술된 종래의 방법보다 절반의 반복을 사용할 수 있다. 본 발명의 실시예들은 예를 들면, 각 반복 전 및/또는 후에 팩킹 및/또는 언팩킹 프로세스를 구현할 필요가 없다. 그리하여, 본 발명의 실시예들은 쉽게 광학 흐름, 또는 다중-격자 또는 다중-스케일 프레임워크로 통합될 수 있다. 본 발명의 실시예들은 (예를 들면, 지그재그 스캐닝 방법과 비교하여) 상당히 적은 전처리(pre-processing) 및/또는 후처리(post-processing) 노력 또는 비용을 사용할 수 있다. 예를 들면, 본 발명의 실 시예들은 멀티-스케일 및/또는 멀티 그리드 프레임 워크에 대하여 단일 전처리 단계를 사용할 수 있다. 4개 또는 8개의 데이터 포인트를 병렬로 처리하게 위한 명령 세트를 사용하는 본 발명의 실시예들은 표준 GS 메카니즘보다 예를 들면, 각각 3.5 및 7배 빨리 방정식의 해들을 제공할 수 있다.
다른 또는 상이한 이점 또는 유익들이 달성될 수 있다.
본 명세서에서 Jacobi 및 GS 메카니즘들이 기술되었지만, 본 발명의 실시예들은 임의의 반복적인 메카니즘(iterative mechanism)과 함께 이용될 수 있다. 반복적인 메카니즘은 초기의 추측(guess) 및/또는 추정으로부터 시작하여 해로의 연속적인 근사값들을 찾는 것에 의해 문제(예를 들면, 방정식 또는 연립 방정식(system of equation))를 푸는 메카니즘이다. 예를 들면, 뉴턴의 방법(Newton's method), 고정점 방법(fixed point method), 본 명세서에서 기술된 Jacobi 및 GS 메카니즘들 또는 그 변형들과 같은 정적인 반복적인 방법(stationary iterative method)들, CG(conjugate gradient method), GMRES(generalized minimal residual method) 및 BiCG(biconjugate gradient method)와 같은 Krylov 부공간법(Krylov subspace method)들이다. 다른 메카니즘들이 사용될 수 있다.
본 발명의 일 실시예를 따른 방법의 흐름도인 도 5를 참조한다. 본 방법의 실시예들은 예를 들면, 도 1의 컴퓨팅 시스템(100) 또는 다른 적절한 시스템들에 의해 사용되거나 구현될 수 있다.
동작(500)에서, 시스템(예를 들면, 도 1의 시스템(100))은 출력 디바이스(예를 들면, 도 1의 디스플레이 디바이스(121))로 비디오 파일들을 출력하기 위한 프 레임 레이트와 상이한 입력 디바이스(예를 들어, 도 1의 입력 디바이스(122))로부터의 프레임 레이트를 가지고 비디오 입력 파일을 수신할 수 있다.
동작(505)에서, 실행 유닛(예를 들면, 도 1의 실행 유닛(130)은 Ax=b라는 방정식들에 의해 정의된 1차 연립 방정식(system of linear equations)(예를 들면, LSSLE)을 풀기 시작할 수 있다. 1차 연립 방정식은 입력 프레임 레이트로부터 출력 프레임 레이트로 비디오 파일을 전환하기 위한 중간 프레임(intermediary frame)들을 정의할 수 있다.
동작(510)에서, 프로세서(예를 들면, 도 1의 프로세서(109))는 1차 연립 방정식의 계수들을 나타내는 행렬 A, 1차 연립 방정식에 대한 해의 제1 추정을 나타내는 벡터 x, 및 1차 연립 방정식의 스칼라 값을 나타내는 벡터 b를 생성할 수 있다. 벡터 x는 순서대로(예를 들면, x1, x2, x3, x4, ...) 배열된 복수의 요소들을 포함할 수 있다.
동작(515)에서, 프로세서는 행렬 A를 벡터 x로 곱하여 벡터 x의 요소들이 벡터 내에 배열된 것과는 상이한 순서(예를 들면, x1, x9, x17, x25, ...)로 곱해질 수 있다. 곱해지는 연속적인 엔트리들은 이웃하는 요소들과 독립적이거나 분리된다. 예를 들면, GS 방법에 따르면 x1은 x9, x17 및 x25와 확실히 독립적이다. 그리하여, 벡터의 복수의 독립적인 요소들은 병렬로 곱해질 수 있다. 일 실시예에서, 프로세서는 복수의 연속적인 요소들을 SIMD 명령들을 이용하여 병렬로 곱할 수 있다.
일 실시예에서, 프로세서는 요소들이 백터 내에 배열된 순서를 실질적으로 재배열하여 상이한 순서(예를 들면, x1, x9, x17, x25, ...)를 생성할 수 있다. 일 실시예에서, 벡터의 요소들은 행렬 형태(예를 들면, 도 3의 행렬(310)에서 행렬(340)까지)로 재배열될 수 있다. 다른 실시예에서 프로세서는 비순차적(out-of-order) 벡터 요소들을 단순히 계산할 수 있다.
동작(520)에서, 프로세서는 1차 연립 방정식에 대한 해의 제2 벡터 추정을 생성할 수 있고, 제2 벡터 추정은 동작(515)의 곱셈의 결과물(product)이다.
동작(525)에서, 프로세서는 제1 벡터 추정 및 제2 벡터 추정 사이의 차(difference)를 결정 또는 측정할 수 있다. 제1 및 제2 벡터 추정이 미리 결정된 양보다 적은 양만큼 다른 경우, 프로세스는 동작(530)으로 진행할 수 있다. 그렇지 않으면, 프로세스는 동작(515)로 진행할 수 있고, 제1 벡터 추정을 제2 벡터 추정으로 대체한다.
동작(530)에서, 프로세서는 LSSLE에 대한 해를 구할 수 있다. 1차 연립 방정식의 해는 제2 벡터 추정이 되도록 설정될 수 있다. 대안적으로, 1차 연립 방정식의 해는 제1 벡터 추정이 되도록 설정될 수 있다. 대안적으로, 1차 연립 방정식의 해는 제1 벡터 추정과 제2 벡터 추정의 평균이 되도록 설정될 수 있다.
동작(535)에서, 프로세서는 입력 프레임 레이트로부터 출력 프레임 레이트로 적어도 하나의 비디오 파일의 세그먼트를 전환하기 위해 LSSLE에 대한 해들을 이용하여 보간 프레임을 생성할 수 있다. 일 실시예에서, 공지된 프레임들의 각각의 쌍(pair) 간의 각각의 보간 프레임은 별도의 LSSLE에 의해 기술될 수 있다. 다른 실시예들에서, 다수의 보간 프레임들은 동일한 LSSLE에 의해 기술될 수 있다. 프로세스는 각각의 보간 프레임이 그들을 나타내는(representative) LSSLE를 이용하여 생성될 때까지 동작들(505-535)을 반복할 수 있다. 일단 각각의 보간 프레임이 적어도 하나의 비디오 파일의 세그먼트를 입력 프레임 레이트에서 출력 프레임 레이트로 전환하기 위해 생성되면, 프로세스는 동작(540)으로 진행할 수 있다.
동작(540)에서, 출력 디바이스(예를 들면, 모니터와 같은 도 1의 디스플레이 디바이스(121))는 그것의 적절한 출력 프레임 레이트로 비디오 파일을 출력할 수 있다.
동작(545)에서, 메모리 유닛(예를 들면, 도 1의 주 메모리(104), ROM(106), DRAM과 같은 데이터 저장소(107))는 출력 프레임 레이트로 비디오 파일을 저장할 수 있다. 메모리 유닛은 (예를 들어, 동작(515)에서) 행렬 A를 벡터 x로 곱한 결과들을 저장할 수 있다.
다른 동작들 또는 일련의 동작들이 사용될 수 있다.
본 발명의 실시예들은, 프로세서 또는 컨트롤러에 의해 실행될 때, 본 명세서에 기술된 방법들을 실행하는 명령들을 인코딩, 포함 또는 저장하는 예를 들면, 메모리, 디스크 드라이브 또는 USB 플래시 메모리와 같은 컴퓨터 또는 프로세서 판독 가능 매체와 같은 물품, 또는 컴퓨터 또는 프로세서 저장 매체를 포함할 수 있다.
비디오 해석(video interpretation)을 위한 방정식 해법(solution method)들 이용하여 실시예들이 기술된다. 그러나 광학 흐름 추정, 수퍼 해상도 및 영상 노 이즈 저감과 같은 다른 컴퓨터 영상/그래픽(computer vision/graphics), 전기 엔지니어링(electrical engineering), 유체 역학(fluid dynamics)과 같은 다른 환경(context)에서 그러한 해법들이 채용될 수 있다.
본 발명이 제한된 개수의 실시예들에 대하여 기술되었지만, 본 발명의 다수의 변형, 수정 및 다른 어플리케이션들이 만들어질 수 있다는 것이 이해될 것이다. 본 발명의 실시예들은 본 명세서의 동작들을 수행하기 위한 다른 장치들을 포함할 수 있다. 그러한 장치들은 논의된 요소들을 포함할 수 있거나, 동일한 목적을 수행하는 대안적인 구성요소들을 포함할 수 있다. 첨부된 청구범위가 본 발명의 진정한 사상 내에 속하는 그러한 모든 수정 및 변경들을 포괄하도록 의도된다는 것이 본 기술분야의 통상의 기술자들에게 이해될 것이다.
도 1은 본 발명의 실시예에 따른 시스템의 개략적인 예시를 나타낸다.
도 2는 본 발명의 실시예에 따른 프로세서 파이프라인의 개략적인 예시를 나타낸다.
도 3은 본 발명의 실시예에 따른, 초기 순서화를 갖는 벡터 x로부터 신규 순서화를 갖는 벡터 x'로의 엔트리들의 재배열의 개략적인 예시를 나타낸다.
도 4a 및 도 4b는 본 발명의 일 실시예에에 따른, 초기 순서를 갖는 벡터 x 및 신규 순서를 갖는 벡터 x'를 각각 나타내는 행렬을 도시한다.
도 5는 본 발명의 실시예에 따른 방법의 흐름도이다.
<도면의 주요 부분에 대한 부호의 설명>
100: 컴퓨터 시스템
101: 버스
104: 주 메모리
106: ROM
107: 데이터 저장 디바이스
109: 프로세서
121: 디스플레이 디바이스
122: 입력 디바이스
125: 녹음 및 재생 디바이스
126: 비디오 디지털화 디바이스
130: 실행 유닛
140: 팩형 명령 세트
150: 레지스터 파일
160: 캐시 버스
165: 디코더
Claims (15)
- 행렬과 벡터를 곱하는 단계 - 상기 행렬은 프레임 레이트들을 변환하기 위해 비디오 파일의 프레임들 사이의 움직임을 추정하는데 이용된 대형 희소 1차 연립 방정식(large and sparse system of linear equations)의 표현이고, 상기 벡터는 상기 1차 연립 방정식에 대한 해의 제1 추정이고, 상기 벡터는 어떤 하나의 순서로 배열된 복수의 요소들을 포함하고, 상기 행렬은 상기 요소들이 상기 벡터에서 배열되는 순서와 상이한 순서로 상기 벡터의 요소들에 의해 곱해지고, 상기 벡터에서의 복수의 요소들은 병렬로 곱해짐 -;상기 1차 연립 방정식에 대한 해의 제2 벡터 추정을 생성하는 단계 - 상기 제2 벡터 추정은 상기 곱하는 것의 결과물임 -; 및상기 제1 및 제2 벡터 추정들이 미리 결정된 양 미만 만큼 상이한 경우에 상기 1차 연립 방정식에 대한 해를 구하는(set) 단계를 포함하는 방법.
- 제1항에 있어서,상기 복수의 요소들은 단일 명령 다중 데이터 명령 세트(single instruction multiple data instruction set)를 이용하여 프로세서에 의해 곱해지는 방법.
- 제1항에 있어서,상기 요소들이 배열되는 순서와 상이한 순서를 생성하기 위해, 상기 벡터의 상기 순서화된 요소들을 재배열하는 단계를 포함하는 방법.
- 제1항에 있어서,비디오 파일을 입력 프레임 레이트로부터 출력 프레임 레이트로 변환하면서, 상기 1차 연립 방정식에 대한 해를 이용하여 보간된 이미지 프레임들을 생성하는 단계를 포함하는 방법.
- 제4항에 있어서,디스플레이상에, 상기 디스플레이의 출력 프레임 레이트로 상기 상기 비디오 파일을 디스플레이하는 단계를 포함하는 방법.
- 제1항에 있어서,상기 요소들이 상기 벡터에서 배열되는 순서와 상이한 순서는, 상기 벡터를 맵핑 행렬에 맵핑하는 것 및 상기 맵핑 행렬을 재배열된 맵핑 행렬로 재배열하는 것에 대응하며, 상기 맵핑 행렬의 이웃하는 요소들은 상기 재배열된 맵핑 행렬에서는 이웃하지 않는 방법.
- 초기 순서를 갖는 초기 벡터에서의 엔트리들을 재배열하여 새로운 순서를 갖는 새로운 벡터를 생성하는 단계 - 상기 초기 벡터에서의 각 엔트리는 상기 초기 벡터에서의 상기 초기 순서로 된 이웃하는 엔트리가 상기 새로운 순서로, 상이한 이웃하지 않는 위치로 이동되도록 재배열됨 -;그 각각의 이동된 이웃하지 않는 엔트리들을 이용하여, 엔트리들이 순환적으로 정의되도록 하는 그 순환적 정의들을 갱신함으로써, 상기 새로운 벡터의 둘 이상의 이웃하는 엔트리들 각각의 해를 병렬로 구하는 단계를 포함하는 방법.
- 제7항에 있어서,상기 벡터를 재배열하고 상기 벡터의 해를 구하는 것에 의해 상기 벡터의 해를 반복적으로 구하는 단계를 포함하고, 각각의 반복은 1차 방정식들의 세트의 해에 대한 연속적인 근사값을 제공하는 방법.
- 제7항에 있어서,상기 벡터 해들은 비디오 파일을 입력 프레임 레이트로부터 출력 프레임 레이트로 변환하기 위한 보간 프레임들을 정의하는 방법.
- 제9항에 있어서,디스플레이상에, 상기 디스플레이의 출력 프레임 레이트로 상기 비디오 파일을 디스플레이하는 단계를 포함하는 방법.
- 행렬과 벡터를 곱하고 - 상기 행렬은 프레임 레이트들을 변환하기 위해 비디오 파일의 프레임들 사이의 움직임을 추정하는데 이용된 대형 희소 1차 연립 방정식의 표현이고, 상기 벡터는 상기 1차 연립 방정식에 대한 해의 제1 추정이고, 상기 벡터는 어떤 하나의 순서로 배열된 복수의 요소들을 포함하고, 상기 행렬은 상기 요소들이 상기 벡터에서 배열되는 순서와 상이한 순서로 상기 벡터의 요소들에 의해 곱해지고, 상기 벡터에서의 복수의 요소들은 병렬로 곱해짐 -, 1차 연립 방정식에 대한 해의 제2 벡터 추정을 생성하고 - 상기 제2 벡터 추정은 상기 곱하는 것의 결과물임 -, 상기 제1 및 제2 벡터 추정들이 미리 결정된 양 미만 만큼 상이한 경우에 상기 1차 연립 방정식에 대한 해를 구하는 프로세스를 실행하기 위한 실행 유닛; 및다이나믹 랜덤 액세스 메모리를 포함하는 시스템.
- 제11항에 있어서,상기 실행 유닛은 단일 명령 다중 데이터 명령 세트를 이용하여 상기 복수의 요소들을 병렬로 곱하는 프로세스를 실행하는 시스템.
- 제11항에 있어서,상기 프로세서는 상기 요소들이 배열되는 순서와 상이한 순서를 생성하기 위해, 상기 벡터의 상기 순서화된 요소들을 재배열하는 시스템.
- 제11항에 있어서,상기 프로세서는, 비디오 파일을 입력 프레임 레이트로부터 출력 프레임 레이트로 변환하면서, 상기 1차 연립 방정식에 대한 해를 이용하여 보간된 이미지 프레임들을 생성하는 시스템.
- 제14항에 있어서,디스플레이의 출력 프레임 레이트로 상기 비디오 파일을 디스플레이하는 디스플레이를 포함하는 시스템.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/109,540 | 2008-04-25 | ||
US12/109,540 US20090268085A1 (en) | 2008-04-25 | 2008-04-25 | Device, system, and method for solving systems of linear equations using parallel processing |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20090113222A true KR20090113222A (ko) | 2009-10-29 |
KR101098736B1 KR101098736B1 (ko) | 2011-12-23 |
Family
ID=40937558
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020090036145A KR101098736B1 (ko) | 2008-04-25 | 2009-04-24 | 병렬 처리를 이용하여 1차 연립 방정식의 해를 구하기 위한 디바이스, 시스템 및 방법 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20090268085A1 (ko) |
EP (1) | EP2112602A3 (ko) |
JP (1) | JP5026464B2 (ko) |
KR (1) | KR101098736B1 (ko) |
CN (2) | CN102855220B (ko) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8204925B2 (en) * | 2008-05-22 | 2012-06-19 | National Instruments Corporation | Controlling or analyzing a process by solving a system of linear equations in real-time |
US9063882B1 (en) * | 2010-09-09 | 2015-06-23 | Sas Ip, Inc. | Matrix preconditioners for simulations of physical fields |
CN102231202B (zh) * | 2011-07-28 | 2013-03-27 | 中国人民解放军国防科学技术大学 | 面向向量处理器的sad向量化实现方法 |
US20140013082A1 (en) * | 2011-12-30 | 2014-01-09 | Intel Corporation | Reconfigurable device for repositioning data within a data word |
US9355068B2 (en) * | 2012-06-29 | 2016-05-31 | Intel Corporation | Vector multiplication with operand base system conversion and re-conversion |
US10095516B2 (en) | 2012-06-29 | 2018-10-09 | Intel Corporation | Vector multiplication with accumulation in large register space |
US9195436B2 (en) * | 2013-10-14 | 2015-11-24 | Microsoft Technology Licensing, Llc | Parallel dynamic programming through rank convergence |
CN103678252B (zh) * | 2013-12-16 | 2016-06-01 | 合肥康捷信息科技有限公司 | 一种基于龙芯3a的线性方程求解函数的并行化处理方法 |
JP2015135621A (ja) | 2014-01-17 | 2015-07-27 | 富士通株式会社 | 演算装置、演算方法および無線通信装置 |
US9721007B2 (en) * | 2014-10-07 | 2017-08-01 | Oracle International Corporation | Parallel data sorting |
WO2017029766A1 (ja) * | 2015-08-20 | 2017-02-23 | 株式会社日立製作所 | 情報処理回路 |
US10074151B2 (en) * | 2015-09-30 | 2018-09-11 | Intel Corporation | Dense optical flow acceleration |
US10762602B2 (en) * | 2017-11-08 | 2020-09-01 | Intel Corporation | Methods and apparatus to enable parallel processing when solving linear equations in a computer vision processing system |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5241608A (en) * | 1988-11-25 | 1993-08-31 | Eastman Kodak Company | Method for estimating velocity vector fields from a time-varying image sequence |
JP2006227152A (ja) | 2005-02-16 | 2006-08-31 | Nippon Telegr & Teleph Corp <Ntt> | 計算装置およびその計算装置を利用した収音装置 |
JP4671041B2 (ja) | 2006-03-27 | 2011-04-13 | 日本電気株式会社 | モジュール化物理リソース群特定方法、その装置及びプログラム |
-
2008
- 2008-04-25 US US12/109,540 patent/US20090268085A1/en not_active Abandoned
-
2009
- 2009-04-23 JP JP2009104914A patent/JP5026464B2/ja not_active Expired - Fee Related
- 2009-04-24 KR KR1020090036145A patent/KR101098736B1/ko not_active IP Right Cessation
- 2009-04-24 EP EP09251173A patent/EP2112602A3/en not_active Withdrawn
- 2009-04-27 CN CN201210162677.6A patent/CN102855220B/zh not_active Expired - Fee Related
- 2009-04-27 CN CN2009101370109A patent/CN101572771B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101572771B (zh) | 2012-07-18 |
CN102855220B (zh) | 2016-02-10 |
EP2112602A2 (en) | 2009-10-28 |
JP5026464B2 (ja) | 2012-09-12 |
CN102855220A (zh) | 2013-01-02 |
EP2112602A3 (en) | 2012-11-07 |
JP2009266230A (ja) | 2009-11-12 |
KR101098736B1 (ko) | 2011-12-23 |
CN101572771A (zh) | 2009-11-04 |
US20090268085A1 (en) | 2009-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101098736B1 (ko) | 병렬 처리를 이용하여 1차 연립 방정식의 해를 구하기 위한 디바이스, 시스템 및 방법 | |
CN111213125B (zh) | 使用simd指令进行高效的直接卷积 | |
KR100329339B1 (ko) | 압축데이터에의한승산-가산연산수행장치 | |
JP4064989B2 (ja) | パック・データの乗加算演算を実行する装置 | |
US6418529B1 (en) | Apparatus and method for performing intra-add operation | |
TWI690896B (zh) | 影像處理器、由其執行之方法、及非暫態機器可讀儲存媒體 | |
KR101354659B1 (ko) | 멀티 코덱을 지원하는 움직임 보상 방법 및 장치 | |
JPH07236143A (ja) | 高速デジタル信号復号化方法 | |
US6212618B1 (en) | Apparatus and method for performing multi-dimensional computations based on intra-add operation | |
US11647227B2 (en) | Efficient transforms and transposes for rate-distortion optimization and reconstruction in video encoders | |
Moravánszky | Dense matrix algebra on the GPU | |
EP2025175B1 (en) | Instruction for producing two independent sums of absolute differences | |
Shahbahrami et al. | Matrix register file and extended subwords: two techniques for embedded media processors | |
JP4963220B2 (ja) | フィルタ演算器及び動き補償装置 | |
Nagayasu et al. | A decompression pipeline for accelerating out-of-core volume rendering of time-varying data | |
JP2006313518A (ja) | 多次元高速フーリエ変換 | |
CN114430820A (zh) | 使用灵活精度运算的矩阵乘法单元 | |
CN112230993A (zh) | 数据处理方法及装置、电子设备 | |
TW201805802A (zh) | 一種運算裝置及其操作方法 | |
CN118051168A (zh) | 数据读取方法、装置、计算机设备、存储介质和程序产品 | |
TW202437762A (zh) | 在圖形處理單元上寫碼視訊資料 | |
US9025658B2 (en) | Transform scheme for video coding | |
CN112584157A (zh) | 一种avs2反变换装置及方法 | |
WO2013145221A1 (ja) | パイプライン型プロセッサ | |
Jara | Analysis and Optimization of JPEG2000 in the TMS320C6701 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
LAPS | Lapse due to unpaid annual fee |