KR20110079495A - Simd 멀티코어 프로세서 아키텍처 상의 어레이 데이터 전치 - Google Patents

Simd 멀티코어 프로세서 아키텍처 상의 어레이 데이터 전치 Download PDF

Info

Publication number
KR20110079495A
KR20110079495A KR1020100108204A KR20100108204A KR20110079495A KR 20110079495 A KR20110079495 A KR 20110079495A KR 1020100108204 A KR1020100108204 A KR 1020100108204A KR 20100108204 A KR20100108204 A KR 20100108204A KR 20110079495 A KR20110079495 A KR 20110079495A
Authority
KR
South Korea
Prior art keywords
matrix
simd
format
rows
transposed
Prior art date
Application number
KR1020100108204A
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 KR20110079495A publication Critical patent/KR20110079495A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/141Discrete Fourier transforms
    • G06F17/142Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • G06F7/785Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using a RAM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Discrete Mathematics (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)

Abstract

SIMD 멀티코어 프로세서 아키텍처 상에서 어레이 데이터를 전치하는 시스템, 방법 및 제조 물품이 개시된다. SIMD 포맷의 행렬이 수신될 수 있다. 행렬은 종래의 데이터 포맷의 행렬 M의 SIMD 전환을 포함할 수 있다. 행렬의 각각의 요소로부터 행렬 M의 전치의 SIMD 전환의 요소에의 매핑이 정의될 수 있다. SIMD 전치된 행렬 T는 행렬 M 및 정의된 매핑에 기초하여 생성될 수 있다. 행렬 M의 열에 대해 동작하도록 행방향 알고리즘이 수정 없이 T에 적용될 수 있다.

Description

SIMD 멀티코어 프로세서 아키텍처 상의 어레이 데이터 전치{TRANSPOSING ARRAY DATA ON SIMD MULTI-CORE PROCESSOR ARCHITECTURES}
본 발명의 실시예는 일반적으로 멀티코어 프로세서 아키텍처 상에서 효율적인 고속 퓨리에 변환(FFT; fast Fourier transform)을 수행하는 것에 관한 것이다. 보다 상세하게는, 본 발명의 실시예는 SIMD 멀티코어 프로세서 아키텍처 상에서 효율적인 FFT를 위해 맞추어진 포맷의 어레이 데이터를 전치(transposing)하는 것에 관한 것이다.
일부 현재 이용 가능한 프로세서는 "SIMD(single instruction, multiple data)" 확장을 지원한다. SIMD는 단일 명령이 다수의 데이터 아이템들에 대해 병행하여 동작한다는 것을 나타낸다. 예를 들어, "add" SIMD 명령은 8개의 16 비트 값들을 동시에 가산할 수 있다. 즉, add 연산(단일 동작)이 단일 클록 사이클에서 8개의 개별 데이터 값들 세트(다수의 데이터)에 대하여 수행된다. 통상적으로, 데이터 값들은 벡터의 요소들로서 공급될 수 있다. 따라서, SIMD 프로세싱은 또한 벡터 처리(vector processing)라고도 불린다. SIMD 명령은 단일 명령의 일부로서 다수의 동작을 수행함으로써 실행 속도를 급격하게 증가시킨다. SIMD 확장의 잘 알려져 있는 예로는, "MMX(multimedia extension)" 명령, SSE 명령, 및 "VMX(vectored multimedia extension)" 명령을 포함한다.
SIMD 멀티코어 프로세서 상에서 효율적으로 고속 퓨리에 변환(FFT)을 계산하는 것은 난제인 것으로 증명되었다. 대형 일차원 FFT(1D FFT; one-dimensional FFT)에 대하여, 데이터 처리의 더 큰 독립적 블록 그룹들로 인해 더 많은 양의 병렬처리(parallelism)가 획득될 수 있다. 그러나, 1D FFT는 복잡도(complexity) O(N log N)를 갖는 근본적으로 반복적인 알고리즘이다. 따라서, 더 작은 크기의 1D FFT의 경우, 단일 행 병렬처리의 양이 매우 작다. 또한, FFT를 수행하기 위한 현행 라이브러리는 상대적으로 더 작은 데이터 어레이에 대해 수행되는 FFT(예를 들어, 256 x 256 픽셀, 512 x 512 픽셀, 또는 1024 x 1024 픽셀의 이미지 크기에 대해 수행되는 FFT)에 맞추어지지 않는다. SIMD 병렬처리 정도가 더 큰 크기의 1D FFT로부터 추출되지만, 작은 양의 행 내(intra-row) 알고리즘 병렬처리만이 더 작은 크기에서 추출된다. 게다가, 멀티코어 FFT에 대한 현행 라이브러리는 단독형이며, 입력/출력(IO)에 대한 동작 계산(compute-operation-to-I/O) 최적화에 요구되는 작업의 기능적 파이프라이닝을 허용하지 않는다.
본 발명은 SIMD 멀티코어 프로세서 아키텍처 상의 어레이 데이터 전치를 제공하고자 한다.
본 발명의 하나의 실시예는, 동작을 수행하도록 SIMD 멀티코어 프로세서 아키텍처를 구성하는 것을 포함하는, SIMD 멀티코어 프로세서 아키텍처 상에서 행렬을 전치하는 방법을 포함한다. 상기 동작은 일반적으로, 제1 포맷의 행렬 M을 SIMD 포맷의 행렬 S로 전환하고 - 상기 SIMD 포맷은 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 데이터 행(row)에 대해 1D FFT 동작을 동시에 수행할 수 있도록 함 - , 상기 행렬 S의 각각의 요소에 대하여 SIMD 포맷의 행렬 M의 전치에서의 요소에의 매핑을 검색하고 - 상기 매핑은 상기 행렬 M의 전치에 대하여 S의 SIMD 포맷을 보존함 - , 상기 검색된 매핑에 기초하여 SIMD 전치된 행렬 T를 생성하는 것 - 전치된 SIMD 행렬 T는 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 전치된 데이터 행에 대해 1D FFT 동작을 동시에 수행할 수 있도록 함 - 을 포함할 수 있다.
본 발명의 다른 실시예는 프로세서에 의해 실행될 때 SIMD 멀티코어 프로세서 아키텍처 상에서 행렬을 전치하기 위한 동작을 수행하도록 구성되는 프로그램을 포함하는 컴퓨터 판독가능한 저장 매체를 포함한다. 상기 동작은 일반적으로, 제1 포맷의 행렬 M을 SIMD 포맷의 행렬 S로 전환하고 - 상기 SIMD 포맷은 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 데이터 행에 대해 1D FFT 동작을 동시에 수행할 수 있도록 함 - , 상기 행렬 S의 각각의 요소에 대하여 SIMD 포맷의 행렬 M의 전치에서의 요소에의 매핑을 검색하고 - 상기 매핑은 상기 행렬 M의 전치에 대하여 S의 SIMD 포맷을 보존함 - , 상기 검색된 매핑에 기초하여 SIMD 전치된 행렬 T를 생성하는 것 - 전치된 SIMD 행렬 T는 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 전치된 데이터 행에 대해 1D FFT 동작을 동시에 수행할 수 있도록 함 - 을 포함할 수 있다.
본 발명의 또 다른 실시예는 프로세서 및 상기 프로세서에 의해 실행될 때 SIMD 멀티코어 프로세서 아키텍처 상에서 행렬을 전치하기 위한 동작을 수행하도록 구성되는 프로그램을 포함하는 메모리를 갖는 시스템을 포함한다. 상기 동작은 일반적으로, 제1 포맷의 행렬 M을 SIMD 포맷의 행렬 S로 전환하고 - 상기 SIMD 포맷은 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 데이터 행에 대해 1D FFT 동작을 동시에 수행할 수 있도록 함 - , 상기 행렬 S의 각각의 요소에 대하여 SIMD 포맷의 행렬 M의 전치에서의 요소에의 매핑을 검색하고 - 상기 매핑은 상기 행렬 M의 전치에 대하여 S의 SIMD 포맷을 보존함 - , 상기 검색된 매핑에 기초하여 SIMD 전치된 행렬 T를 생성하는 것 - 전치된 SIMD 행렬 T는 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 전치된 데이터 행에 대해 1D FFT 동작을 동시에 수행할 수 있도록 함 - 을 포함할 수 있다.
본 발명에 따르면, SIMD 멀티코어 프로세서 아키텍처 상의 어레이 데이터 전치를 제공할 수 있다.
본 발명의 상기 언급한 특징, 이점 및 목적을 달성하고 상세하게 이해할 수 있도록, 상기에 간략하게 요약된 본 발명의 보다 구체적인 설명이 첨부 도면에 예시되어 있는 본 발명의 실시예를 참조함으로써 이루어질 수 있다.
그러나, 첨부 도면은 단지 본 발명의 통상의 실시예를 예시한 것이며 따라서 본 발명의 범위를 한정하는 것으로 간주되어서는 안 되고, 본 발명에 대하여 기타 실질적으로 동등한 실시예들을 인정할 수 있다는 것을 유의하여야 한다.
도 1은 본 발명의 하나의 실시예에 따른 SIMD 멀티코어 프로세서 아키텍처 상에서 어레이 데이터를 전치하는 시스템을 도시하는 블록도이다.
도 2는 본 발명의 하나의 실시예에 따라 4x4 행렬에 대해 2D FFT를 수행하는 데이터 흐름을 도시한다.
도 3은 본 발명의 하나의 실시예에 따라 4방식(four-way) SIMD 포맷의 8x8 행렬에 대해 SIMD 전치를 수행하는 데이터 흐름을 도시한다.
도 4는 본 발명의 하나의 실시예에 따라 행렬의 세그먼트들을 동시에 전치하는 데이터 흐름을 도시한다.
도 5는 본 발명의 하나의 실시예에 따라 행렬의 세부부분(subdivision)들을 동시에 전치하는 데이터 흐름을 도시한다.
도 6은 본 발명의 하나의 실시예에 따라 SIMD 멀티코어 프로세서 아키텍처에 대해 효율적인 FFT를 수행하는 방법을 도시하는 흐름도이다.
도 7은 본 발명의 하나의 실시예에 따라 SIMD 포맷의 데이터를 전치하는 방법을 도시하는 흐름도이다.
도 8은 본 발명의 하나의 실시예에 따라 SIMD 트랜스포저(transposer)의 컴포넌트를 도시하는 블록도이다.
본 발명의 실시예는 SIMD 멀티코어 프로세서 아키텍처 상에서 효율적인 다차원 FFT에 맞추어진 포맷의 어레이 데이터를 전치하는 기술을 제공한다. 어레이 데이터는 행 우선 순서(row-major order)로 저장된 다차원 어레이로부터 SIMD 포맷으로 전환될 수 있다. SIMD 포맷의 전환된 데이터는 일련의 블록들로 구성될 수 있으며, 각각의 블록은 SIMD 벡터 프로세서가 r 개의 행들에 대해 동시에 동작할 수 있도록 다수의 행들(r 개의 행들)로부터 데이터를 인터리브(interleave)한다. 즉, 각각의 단일 벡터 명령은 한 번에 r 개의 행 요소들을 처리한다(각각의 행에 대하여 하나씩). 그 결과, 더 작은 크기의 1D FFT의 실행은 멀티코어 프로세서에서 최적화된다. 더 작은 크기의 1D(일차원) FFT의 예로는 256 x 256, 512 x 512, 1024 x 1024, 및 2048 x 2048 행렬에 대해 수행된 FFT를 포함한다.
더 작은 크기의 1D FFT에 대한 단일 행 병렬처리를 증가시키기 위해, 본 발명의 실시예는 다수의 부동 소수점(floating point) 값을 동시에 처리하도록 SIMD 벡터 명령에 구성된 SIMD 데이터 구조를 제공한다. 예를 들어, Cell BE 프로세서는 단일 SIMD 벡터 명령에서 4개의 단일 정밀 부동 소수점 값들을 동시에 처리할 수 있다. SIMD 데이터 구조는 Cell BE 프로세서와 같은 SIMD 멀티코어 프로세서 상에서 FFT를 처리하도록 맞추어질 수 있다. 또한, 하나의 실시예에서, FFT 알고리즘은 SIMD 데이터 구조와 함께 사용하기 위해 최적화될 수 있다.
또한, 더 높은 차원의 FFT에 필요한 동작이 이 데이터 구조를 사용하여 구축될 수 있다. 예를 들어, 이미지 처리 분야에서, 이미지 데이터는 일반적으로 2차원 어레이로서 저장된다. 또한, 2차원 어레이의 데이터는 통상적으로 종래의 행 우선 순서(예를 들어 C 프로그래밍 언어에 의해 사용됨) 또는 열 우선(column-major) 순서(예를 들어 FORTRAN 프로그래밍 언어에 의해 사용됨)로 저장된다. 이미지 뷰어와 같이 이미지 데이터에 대해 동작하는 애플리케이션은 통상적으로 이미지 데이터가 행 우선(또는 열 우선) 순서로 저장될 것으로 예상하며, 통상적으로 2차원 어레이는 픽셀 위치에 대응하는 (x, y) 픽셀 포맷으로 이미지 데이터를 저장한다.
본 발명의 실시예는 더 작은 크기의 FFT(예를 들어 MRI 디바이스로부터 캡쳐된 256 x 256, 512 x 512, 또는 1024 x 1024 크기 이미지의 이미지 데이터)가 SIMD 멀티코어 프로세서 아키텍처 상에서 효율적으로 처리될 수 있게 해주는 데이터 구조에 대해 동작한다. 종래의 행 우선 순서로 저장된 데이터는 다수행(multi-row) SIMD 1D FFT 알고리즘에 맞추어진 SIMD 데이터 포맷으로 변환될 수 있다. SIMD 데이터 포맷을 사용하기 위해, FFT 알고리즘은 한 번에 r 개 행들 및/또는 열들에 대해(예를 들어, r = 4) 표준 기수(radix)-2 또는 기수-4 알고리즘(또는 기타 기수(n) FFT 알고리즘들의 조합)을 수행하도록 수정될 수 있다. 단일 명령을 사용하여 처리될 수 있는 행들 또는 열들의 수는 프로세서의 SIMD 레지스터에 맞추어질 수 있는 부동 소수점 데이터 요소들의 수에 대응한다. 128 비트 SIMD 레지스터의 경우, r = 4, 즉 4개의 단일 정밀 부동 소수점 값들이 레지스터에 배치될 수 있다.
상술한 바와 같이, 여기에 개시된 기술은 SIMD 전치 동작을 정의한다. SIMD 전치 동작은 이미 SIMD 포맷인 데이터(예를 들어 이미지)를 전치하는데 사용될 수 있다. 하나의 실시예에서, 벡터 다수행 FFT 코드가 한 번에 r 개 행들 그룹의 데이터를 처리한 후에(예를 들어 128 비트 SIMD 레지스터 및 4바이트 부동 소수점 데이터의 경우 r = 4), 데이터는 행 우선 순서(또는 열 우선 순서)로 데이터를 수신할 것으로 예상하는 통상의 애플리케이션에 의한 보기 및/또는 부가적인 처리를 위해 종래의 행 우선 순서로 다시 전환될 수 있다.
다음에서는, 본 발명의 실시예를 참조한다. 그러나, 본 발명이 구체적으로 기재된 실시예에 한정되지 않는다는 것을 이해하여야 한다. 대신에, 다른 실시예와 관련되든 아니든 다음의 특징 및 구성요소들의 임의의 조합을 본 발명을 구현하고 실시하는데 생각해볼 수 있다. 또한, 본 발명의 실시예들은 다른 가능한 해결책 이상의 그리고/또는 종래 기술 이상의 이점을 달성할 수 있지만, 소정의 실시예에 의해 특정 이점이 달성되는지 아닌지의 여부가 본 발명을 한정하는 것은 아니다. 따라서, 다음의 양상, 특징, 실시예 및 이점은 단지 설명을 위한 것이며, 청구항(들)에 명시적으로 인용되어 있는 것을 제외하고는 첨부된 청구항의 제한 또는 구성요소로서 간주되어서는 안 된다. 마찬가지로, "본 발명"의 인용은 본 명세서에서 개시된 임의의 발명의 내용의 일반화로서 해석되어서는 안 되고, 청구항(들)에 명시적으로 인용되어 있는 것을 제외하고는 첨부된 청구항의 제한 또는 구성요소인 것으로 간주되어서는 안 된다.
본 발명의 하나의 실시예는 컴퓨터 시스템과 함께 사용하기 위한 프로그램 제품으로서 구현된다. 프로그램 제품의 프로그램(들)은 (본 명세서에 기재된 방법을 포함하는) 실시예의 기능을 정의하고, 다양한 컴퓨터 판독가능한 저장 매체 상에 포함될 수 있다. 예시적인 컴퓨터 판독가능한 저장 매체는, (i) 정보가 영구적으로 저장되는 기록 불가능한 저장 매체(CD-ROM 드라이브에 의해 판독 가능한 CD-ROM 디스크와 같은 컴퓨터 내의 판독 전용 메모리 디바이스), (ii) 변경할 수 있는 정보가 저장되는 기록가능한 저장 매체(예를 들어, 디스켓 드라이브 또는 하드 디스크 드라이브 내의 플로피 디스크)를 포함하지만, 이에 한정되지 않는다. 이러한 컴퓨터 판독가능한 저장 매체는 본 발명의 기능을 지시하는 컴퓨터 판독가능한 명령을 가질 때 본 발명의 실시예가 된다. 다른 매체로는 무선 통신 네트워크를 포함한 컴퓨터 또는 전화 네트워크와 같이 이를 통해 정보가 컴퓨터에 전달되는 통신 매체를 포함한다. 후자의 실시예는 구체적으로 인터넷 및 기타 네트워크로/로부터 정보를 전송하는 것을 포함한다. 이러한 통신 매체는 본 발명의 기능을 지시하는 컴퓨터 판독가능한 명령을 가질 때 본 발명의 실시예가 된다. 광범위하게, 컴퓨터 판독가능한 저장 매체 및 통신 매체를 여기에서 컴퓨터 판독가능한 매체로 칭할 수 있다.
일반적으로, 본 발명의 실시예를 구현하도록 실행된 루틴은 운영 시스템의 일부 또는 특정 애플리케이션, 컴포넌트, 프로그램, 모듈, 객체 또는 명령 시퀀스일 수 있다. 본 발명의 컴퓨터 프로그램은 통상적으로 네이티브 컴퓨터에 의해 기계 판독가능한 포맷 그리고 그에 따라 실행가능한 명령으로 변환될 다수의 명령으로 구성된다. 또한, 프로그램은 프로그램에 국부적으로 상주하거나 또는 메모리나 저장 디바이스에서 발견되는 변수 및 데이터 구조로 구성된다. 또한, 이후에 기재되는 다양한 프로그램들은 본 발명의 특정 실시예로 구현되는 애플리케이션에 기초하여 식별될 수 있다. 그러나, 다음의 임의의 특정 프로그램 명명은 단지 편의상 사용된 것이며, 따라서 본 발명은 이러한 명명에 의해 식별 및/또는 부여된 임의의 특정 애플리케이션에서만 사용하는 것으로 한정되어서는 안 된다는 것을 알아야 한다.
다음에서는, 프로세서(PPU) 및 그의 L1 및 L2 캐시를 갖는 파워 프로세서 요소(PPE; power processor element)를 포함하는 Cell BETM 컴퓨터를 참조한다. 각각의 Cell BE 컴퓨터는 또한 각각이 SPU(synergistic processor unit)를 제공하는 다수의 SPE(synergistic processor element) 및 로컬 저장공간 뿐만 아니라 고대역폭 내부 요소 상호접속 버스(EIB; element interconnect bus)를 포함한다. 여기에서는 Cell BE 컴퓨터 아키텍처에 관련하여 기재되었지만, 본 발명의 실시예는 다른 프로세서 아키텍처와 함께 사용하도록 적응될 수 있다.
도 1은 본 발명의 하나의 실시예에 따라 SIMD 멀티코어 프로세서 아키텍처 상에서 어레이 데이터를 전치하기 위한 시스템(100)을 도시하는 블록도이다. 시스템(100)은 컴퓨터(110)를 포함한다. 도시된 바와 같이, 컴퓨터(110)는 Cell BE 컴퓨터이다. 또한, 컴퓨터(110)는 네트워크를 통하여 다른 컴퓨터에 연결되어 있다. 일반적으로, 네트워크는 통신 네트워크 및/또는 WAN(wide area network)일 수 있다. 특정 실시예에서, 네트워크는 인터넷이다.
도시된 바와 같이, Cell BE 컴퓨터(110)는 Cell PPU(120), 8개의 Cell SPU(130, 132), 요소 상호접속 버스(140), 메모리(150), 및 저장 디바이스를 포함한다. 일반적으로, 컴퓨터(110)는 메모리(150) 및 임의의 저장 디바이스(예를 들어, 하드 드라이브, 플래시 메모리, 또는 CD나 DVD-ROM과 같은 컴퓨터 판독가능한 저장 매체)로부터 명령 및 데이터를 획득하는 하나 이상의 프로세서(120, 130, 132)를 포함한다. 각각의 프로세서(120, 130, 132)는 명령, 로직, 및 수학적 처리를 수행하는 프로그램가능한 로직 디바이스이다. 또한, 컴퓨터(110)는 저장장치, 예를 들어 하드디스크 드라이브, 플래시 메모리 디바이스, 광 매체 등을 포함할 수 있다. 메모리(150)는 컴퓨터(110)의 동작을 관리하도록 구성된 운영 시스템을 포함한다. 운영 시스템의 예로는, UNIX, 마이크로소프트 윈도우(Microsoft Windows®) 운영 체제 버전, 및 리눅스(Linux®) 운영 체제의 배포를 포함한다(유의: 리눅스는 미국 및 기타 국가에서의 Linus Torvalds의 상표임).
컴퓨터(110)는 또한 디스플레이, 키보드 마우스, 네트워크 인터페이스 디바이스 등과 같은 기타 주변 디바이스를 포함할 수 있다. 도시된 바와 같이, 컴퓨터(110)의 메모리(150)는 SIMD 트랜스포저(170) 및 행렬(154)을 포함한다. 행렬(154)은 행렬(152)의 세분된 부분을 나타내는 복수의 행렬 세그먼트(154, 156, 158, 160)를 포함한다. 특히, 각각의 세그먼트는 SIMD 트랜스포저(170)에 의해 전치될 요소들의 집합을 나타낸다. 도 2 내지 도 8과 관련 설명은 컴퓨터(110) 상에서 실행되는 SIMD 트랜스포저(170)의 구조 및 연산을 상세하게 설명한다. 하나의 실시예에 따라, 하나 이상의 셀 SPU(130, 132)의 로컬 저장공간은 SIMD 트랜스포저(170) 및 행렬 세그먼트(154, 156, 158, 160)를 포함한다.
도 2는 본 발명의 하나의 실시예에 따라 4 x 4 행렬에 대해 2D FFT를 수행하기 위한 데이터 흐름(200)을 도시한다. 도시된 바와 같이, 데이터 흐름(200)은 행 우선 포맷의 행렬(210)을 포함한다. 행렬(210)은 값 v1 내지 v16을 포함한다. 또한, 행렬(210)(그리고 도 2의 모든 다른 행렬들)은 물리적 메모리에 순차적으로 저장될 수 있다. 예를 들어, 행렬(210)(값 v1 내지 v16을 포함함)의 각각의 개별 셀은 메모리(150)의 순차적 메모리 어드레스에 대응할 수 있다. (행 우선 포맷과 같은) 종래의 데이터 포맷의 행렬에 대한 동작을 나타내는 단계 211, 213, 215, 217을 통하여 2D FFT가 행렬(210)에 대해 수행될 수 있다. 행렬(218)은 행렬(210)의 2D FFT의 결과를 나타낸다.
행렬(210)과는 달리, 행렬(220)은 다수의 행들이 동시에 처리될 수 있도록 행렬 값들이 메모리에 정렬되어 있는 SIMD 포맷으로 도시되어 있다. 예를 들어, SIMD 포맷의 행렬에 대한 동작을 나타내는 단계 221, 223, 225, 227을 통하여 2D FFT가 SIMD 포맷의 행렬(220)에 대해 수행될 수 있다. 또한, SIMD 포맷으로부터 행 우선 포맷으로의 역전환이 수행되어(예를 들어, 단계 229를 통하여) 행렬(210)의 2D FFT의 결과를 나타내는 행렬(218)을 생성할 수 있다.
행 우선 포맷의 행렬(210)에 대한 2D FFT는 행방향(row-wise) 1D FFT(단계 211을 통하여) 다음에 열방향(column-wise) FFT(단계 213, 215, 217을 통하여)를 포함할 수 있다. 단계 211에서, 1D FFT가 행렬(210)의 행들에 대해 수행되어 행렬(212)을 생성할 수 있다. 예를 들어, 행렬(210)의 제1 행(즉, v1, v2, v3, v4)에 대한 1D FFT는 v1', v2', v3', v4'를 생성할 수 있다. 단계 213에서, 행렬(212)은 행렬(214)을 생성하도록 전치될 수 있다. 즉, 행렬(212)은 행렬(212)의 주요 대각(main diagonal)(즉, v1', v6', v11', v16')에 의해 반사될(reflected) 수 있다. 예를 들어, v2'와 v5'가 위치를 바꾼다.
단계 215에서, 행방향 1D FFT가 행렬(214)의 행들에 대해 수행될 수 있다. 사실상, 단계 215의 행방향 1D FFT는 단계 213에서 수행된 전치 동작으로 인해 행렬(212)의 열들에 대해 동작한다. 예를 들어, 행렬(214)의 제1 행(즉, v1', v5', v9', v13')에 대한 1D FFT는 v1", v5", v9", v13"을 생성할 수 있다. 단계 217에서, 제2 전치 동작이 행렬(216)에 대해 수행되어 행렬(218)을 생성할 수 있다(그리하여 행렬(218)의 행들은 행렬(210)의 행들에 대응함). 즉, 행렬(216)은 행렬(216)의 주요 대각(즉, v1", v6", v11", v16")에 의해 반사될 수 있다. 예를 들어, v5"와 v2"가 위치를 바꾼다. 행렬(218)(즉, v1" 내지 v16")은 행 우선 포맷의 행렬(210)의 2D FFT(즉, 주파수 도메인 표현)를 나타낸다.
대안으로서, 행 우선 포맷의 행렬(210)은 행렬(210)의 2D FFT의 계산 동안 행 병렬처리를 이용하도록 SIMD 포맷의 행렬(220)로 전환될 수 있다(단계 219를 통하여). 행 병렬처리는 SIMD 포맷의 데이터가 메모리에 정렬되어 있는 정확한 방식으로 인해 이용될 수 있다. 즉, SIMD 포맷의 행렬은 메모리에 순차적으로 저장된 다수의 부동 소수점 값들을 동시에 처리하도록 SIMD 벡터 명령을 사용하도록 구성된다. 예를 들어, Cell BE 프로세서는 단일 SIMD 벡터 명령으로 4개 단일 정밀 부동 소수점 값들을 동시에 처리할 수 있다. SIMD 포맷의 행렬은 이러한 SIMD 멀티코어 프로세서 상에서 FFT를 처리하기 위해 맞추어질 수 있다. 도 2에 예시된 예에서, 행렬(220)은 2개 행들이 동시에 처리될 수 있게 한다. 즉, 하나의 SIMD 벡터 명령(단일 명령)이 2개의 단일 정밀 부동 소수점 값들(다수 데이터)에 대해 동작할 수 있다.
단계 229에서, 행 우선 포맷의 행렬(210)은 SIMD 포맷의 행렬(220)로 전환될 수 있다. SIMD 포맷은 다음과 같이 기재될 수 있다. 2차원 어레이의 요소들은 행 우선 순서(즉, 행들이 순서대로 저장됨) 또는 열 우선 순서(즉, 열들이 순서대로 저장됨)와 같은 임의의 종래의 순서대로 저장될 수 있다. 설명을 위해, 2차원 데이터가 다음 값들을 갖는 4 x 4 행렬이라고 가정하자:
표 Ⅰ - 2차원 데이터 예
Figure pat00001
이러한 4 x 4 행렬은 2차원 어레이로서 나타날 수 있다. 다음과 같은 소스 코드 구문이 2차원 어레이를 선언하는데 사용될 수 있다:
표 Ⅱ - 어레이 선언 예 - C 소스 코드
Figure pat00002
C 프로그래밍 언어는 행 우선 순서를 사용하기 때문에, 상기 선언에 기초하여, 요소들은 다음과 같이 순차적 메모리 어드레스로(1 내지 16으로서 표기됨) 메모리(150)에 저장된다:
표 Ⅲ - 행 우선 순서 예
Figure pat00003
대안으로서, 4 x 4 행렬은 열 우선 순서를 사용하는 2차원 어레이로서 나타날 수 있다. 열 우선 순서를 사용하는 프로그래밍 언어의 예로는 FORTRAN이 있다. 이 경우에, 요소들은 다음과 같이 순차적 메모리 어드레스로 메모리(150)에 저장된다:
표 Ⅳ - 열 우선 순서 예
Figure pat00004
하나의 실시예에서, SIMD 포맷터(formatter)는 데이터를 일련의 블록들로 변환하며, 각각의 블록은 데이터의 r개 행들을 나타낸다. 그러면, 데이터의 r 개 행들은 SIMD 동작을 사용하여 동시에 처리될 수 있다. 블록들의 수는 b로 나타날 수 있다. m이 2차원 데이터의 행들의 수를 나타내는 경우, 블록의 수 b는 식 b = m/r에 의해 계산될 수 있다. 예를 들어, 각각의 블록이 데이터의 2개 행들을 나타내는 경우(즉, r = 2), 4 x 4 행렬(즉, m=4)은 2개 블록들을 포함한다(4/2=2). 블록 1은 첫 번째 2개 행들을 포함하고(즉, 값 1 2 3 4 및 5 6 7 8을 포함하는 행들) 블록 2는 마지막 2개 행들을 포함한다(즉, 값 9 10 11 12 및 13 14 15 16을 포함하는 행들). SIMD 포맷터는 차례대로 순차적으로 메모리에 블록들을 배치한다. 그러나, 각각의 블록 내에서, SIMD 포맷터는 각각의 행의 첫 번째 요소가 각각의 행의 두 번째 요소에 앞서도록(순차적 메모리 어드레스에 대하여) 각각의 행의 요소들을 인터리브한다.
예를 들어, 행렬(220)의 블록 1은 행렬(210)의 제1 행 및 제2 행으로부터의 값들을 포함한다. 그러나, SIMD 포맷터는 행들의 첫 번째 요소들 전부, 즉 값 1과 5가, 행들의 두 번째 요소들 중 임의의 요소, 즉 값 2와 6 전에 오도록, 요소들을 인터리브한다. 마찬가지로, 행들의 두 번째 요소들 전부, 즉 값 2와 6이, 행들의 세 번째 요소들(순차적 메모리 어드레스에 대하여), 즉 값 3과 7의 임의의 것에 앞서고, 그 이후도 마찬가지다. 구체적으로, 행렬(210)로부터의 2차원 데이터가 SIMD 포맷으로 변환된 행렬(220)에 도시되어 있다. SIMD 포맷의 데이터의 요소들은 다음과 같이 순차적 메모리 어드레스로 메모리(150)에 저장된다:
표 Ⅴ - SIMD 포맷 예
Figure pat00005
SIMD 포맷의 2차원 데이터는 일련의 2개 블록들로서 나타날 수 있으며, 각각의 블록은 데이터의 2개 행들을 나타낸다(r = 2). 각각의 블록 내에서, 데이터의 2개 행들로부터의 데이터는, 2개 행들의 첫 번째 요소들 전부가 2개 행들의 두 번째 요소들 중 임의의 요소 전에 오도록, 그리고 모든 요소에 대하여 마찬가지로 오도록, 인터리브된다. 보다 일반적으로, SIMD 포맷에서, 블록의 행들의 i 번째 요소들 전부는 블록의 행들의 (i+1) 번째 요소들 중 임의의 요소 전에 온다. 각각의 요소는 정수, 더블, 또는 플로트(float)와 같은 임의의 데이터 유형으로 이루어질 수 있다. 또한, 각각의 요소는 또한 복소수, 예를 들어 메모리에 순차적으로 저장된 2개의 16 비트의 플로트로 나타난 복소수일 수 있다. 복소수는 또한 2개 어레이, 즉 복소수의 실수부에 대한 제1 어레이 및 복소수의 허수부에 대한 제2 어레이로서 나타날 수 있다.
SIMD 포맷에서, 2차원 데이터는 한 번에 r개 행들의 동시 처리를 위해 맞추어진다. 구체적으로, 각각의 SIMD 명령은 단일 SIMD 명령으로 처리되는 총 r 개 요소들에 대하여 r개 행들 각각으로부터의 하나의 요소를 처리할 수 있다. 결과적으로, SIMD 포맷은 알고리즘이 (SIMD 포맷을 이용하여 작업하도록 수정되면) 계산 동안 행 병렬처리를 이용할 수 있도록 하기 때문에 다수행 SIMD 1D FFT 알고리즘에 대하여 맞추어진다.
단계 219에서, SIMD 포맷터는 행 우선 포맷의 행렬(210)을 SIMD 포맷의 행렬(220)로 전환한다. 특정 예에서, 행렬(220)은 2방식 SIMD 포맷으로 이루어진다(r = 2, 즉 각각의 블록은 데이터의 2개 행들을 나타냄). 예를 들어, 행렬(220)의 제1 행은 (행렬(210)에서와 같은 v1, v2, v3, v4 대신에) v1, v5, v2, v6이 된다.
SIMD 포맷의 행렬(220)에 대한 2D FFT는 행방향 1D FFT(단계 221을 통하여) 다음에 열방향 FFT(단계 223, 225, 227을 통하여)를 포함할 수 있다. 단계 221에서, 1D FFT가 행렬(220)의 요소들(행렬(220)의 행들에 대응함)에 대해 수행되어 행렬(222)을 생성할 수 있다. 예를 들어, 행렬(210)의 제1 행에 대응하는 행렬(220)의 요소들(즉, v1, v2, v3, v4)에 대한 1D FFT는 v1', v2', v3', v4'를 생성할 수 있다. 단계 221에서 수행된 1D FFT는 SIMD 포맷의 행렬(220)의 행 병렬처리를 이용할 수 있다. 예를 들어, 행들(v1, v2, v3, v4) 및 (v5, v6, v7, v8)는 단일 SIMD 벡터 명령을 사용하여 동시에 처리될 수 있다. 수행되는 1D FFT는 SIMD 포맷의 행렬(220)과 함께 SIMD 벡터 명령을 사용하도록 수정된 임의의 스칼라 1D FFT 알고리즘을 포함할 수 있다.
단계 223에서, SIMD 트랜스포저(170)는 행렬(224)을 생성한다. 구체적으로, SIMD 트랜스포저(170)는, 행렬(210)의 행(예를 들어, v1, v2, v3, v4)에 대응하는 행렬(222)의 위치(예를 들어, v1', v2', v3', v4')에 대한 동작이 행렬(210)의 열(예를 들어, v1, v5, v9, v13)에 대해 동작하도록, 행렬(222)을 재정렬한다. 예를 들어, SIMD 트랜스포저(170)는 v1', v2', v3', v4'의 위치를 v1', v5', v9', 및 v13'과 각각 바꾼다. 하나의 실시예에서, 전치는 전치된 SIMD 포맷의 행렬(224)에서의 요소들의 새로운 위치를 나타내는 정확한 인덱스들을 기재한다. 즉, 매핑은 SIMD 포맷의 행렬의 각각의 요소를 SIMD 전치된 행렬의 요소에 연관시킨다. 표 Ⅵ은 2방식 SIMD 포맷의 4 x 4 행렬에 대한 예시적인 매핑을 나타낸다:
표 Ⅵ - 요소 매핑 예( 2방식 SIMD , 4 x 4 행렬)
Figure pat00006
Figure pat00007
이 특정 예에서, SIMD 트랜스포저(170)는 표 Ⅵ의 정의된 매핑을 사용하여 행렬(222)을 행렬(224)로 전환한다. 즉, 매핑은 SIMD 포맷의 행렬(222)을 SIMD 전치된 행렬(224)로 전환하며, 그리하여 행렬(210)의 행(예를 들어, v1, v2, v3, v4)에 대응하는 행렬(222)의 위치들(예를 들어, v1', v2', v3', v4')에 대한 동작이 행렬(210)의 열(예를 들어, v1, v5, v9, v13)에 대해 동작한다. SIMD 전치된 행렬은 전반적으로 행 우선 포맷의 행렬(210)의 전치의 SIMD 전환을 수행하는 것과 동등한 것일 수 있다.
표 Ⅵ의 예에서, SIMD 트랜스포저(170)는 행렬(222)의 중간 2개 행들을 바꾸고, 행렬(222)의 각각의 행의 중간 2개 요소들을 바꾼다.
실시예들은 2방식 SIMD 포맷의 4 x 4 행렬의 SIMD 전치 동작을 참조하여 여기에 기재되어 있지만, 당해 기술 분야에서의 숙련자라면, 본 발명의 실시예들은 다른 행렬 크기(예를 들어 256 x 256 행렬, 그리고 2의 제곱이 아닌 다른 크기를 갖는 행렬을 포함함), 다른 행렬 유형(예를 들어 더 높은 차원의 행렬, 예를 들어 3D 및 4D 행렬), 및 기타 SIMD 포맷 유형(예를 들어 4방식 SIMD)을 지원하도록 적응될 수 있다는 것을 알 것이다.
단계 225에서, 행방향 1D FFT(단계 221의 동작과 동일함)는 행렬(224)의 요소들에 대해 수행될 수 있다. 사실상, 단계 225의 행방향 1D FFT는, 단계 223에서 수행된 전치 동작으로 인해, 행렬(210)의 열에 대응하는 행렬(224)의 요소들에 대해 동작된다. 예를 들어, 행렬(210)의 제1 열에 대응하는 행렬(224)의 요소들, 즉 (v1', v5', v9', v13')에 대한 1D FFT는 (v1", v5", v9", v13")를 생성할 수 있다. 단계 227에서, 제2 SIMD 전치 동작은 행렬(228)을 생성하도록 행렬(226)에 대해 수행될 수 있다(그리하여 행렬(228)의 행들은 행렬(220)의 행들에 대응함). 예를 들어, SIMD 트랜스포저(170)는 표 Ⅵ의 매핑을 역으로 수행하여 행렬(228)을 생성할 수 있다. 단계 229에서, 행렬(228)은 행렬(228)을 생성하도록 SIMD 포맷으로부터 다시 (행 우선 포맷과 같은) 종래의 데이터 포맷으로 전환될 수 있다.
도 3은 본 발명의 하나의 실시예에 따라 4 방식 SIMD 포맷의 8 x 8 행렬에 대해 SIMD 전치를 수행하기 위한 데이터 흐름(300)을 도시한다. 데이터 흐름(300)에서, 부호 "v1" 내지 “v64"(그리고 v1' 내지 v64')는 "1" 내지 "64"를 읽도록 단순화된다. 즉, "1" 내지 "64"는 실제 숫자 값을 나타내지 않지만, 행렬(310)의 행렬 요소들을 나타낸다. 도시된 바와 같이, 데이터 흐름(310)은 행 우선 포맷의 행렬(310)을 포함한다. 행렬(310)(그리고 도 3의 모든 기타 행렬)은 물리적 메모리에 순차적으로 저장될 수 있다. 예를 들어, 행렬(310)의 각각의 개별 셀(부호 1 내지 64를 포함함)은 메모리(150)의 순차적 메모리 어드레스에 대응할 수 있다. 단계 315(도 2의 단계 219 및 221에 대응함)에서, 행렬(310)은 행렬(320)을 생성하도록 4방식 SIMD 포맷으로 전환된다(그리고 1D FFT가 행렬(310)의 행들에 대해 수행됨). 단계 325(도 2의 단계 223에 대응함)에서, SIMD 트랜스포저(170)는 행렬(330)을 생성하도록 행렬(320)에 대해 SIMD 전치를 수행한다. 8 x 8 행렬에 대한(또는 임의의 크기의 행렬에 대한) 매핑은 (예를 들어, 표 Ⅵ의) 4 x 4 행렬에 대한 매핑을 생성하는 일반적인 기술을 사용하여 생성될 수 있다.
즉, 언급한 바와 같이, 전치된 행렬에 대하여 SIMD 포맷을 보존하는데 매핑이 사용될 수 있다 - 행렬의 다수의 행들이 동시에 처리될 수 있게 함 - . 하나의 실시예에서, 소정의 행렬 크기(예를 들어, 4 x 4, 8 x 8, 256 x 256 등)에 대한 매핑이 하드코딩될 수 있으며, SIMD 트랜스포저가 전치된 SIMD 포맷된 행렬을 생성하도록 SIMD 포맷된 행렬의 요소들을 어떻게 바꿔야 하는지 식별하는데 사용될 수 있다.
따라서, 일반적으로, SIMD 트랜스포저(170)는 행렬(310)의 행에 대응하는 행렬(320)의 위치들(예를 들어, 1 내지 8)에 대한 동작이 행렬(310)의 열(예를 들어, 1, 9, 17, 25, 33, 41, 49, 및 57)에 대해 동작하도록 행렬(320)을 재정렬한다. 예를 들어, SIMD 트랜스포저(170)는 v2', v10', v18', v26'의 위치를 각각 v9', v10', v11', 및 v12'와 바꾼다. SIMD 전치된 행렬은 행 우선 포맷의 행렬(310)의 전치를 수행한 것과 동등한 것일 수 있다.
단계 335(도 2의 단계 225에 대응함)에서, 1D FFT가 행렬(330)의 요소들(행렬(310)의 열에 대응함)에 대해 수행될 수 있다. 단계 335에서 수행된 1D FFT는 SIMD 포맷의 행렬(320)의 요소들(행렬(310)의 열에 대응함)의 열 병렬처리를 이용할 수 있다. 예를 들어, 4개 열들 (1, 9, 17, 25, 33, 41, 49, 57), (2, 10, 18, 26, 34, 42, 50, 58), (3, 11, 19, 27, 35, 43, 51, 59), 및 (4, 12, 20, 28, 36, 44, 52, 60)이 단일 SIMD 벡터 명령을 사용하여 동시에 처리될 수 있다.
도 4는 본 발명의 하나의 실시예에 따라 행렬을 전치하기 위한 데이터 흐름(400)을 도시한다. 도시된 바와 같이, 데이터 흐름(400)은 0 내지 15의 행렬 인덱스를 사용하여 행 우선 포맷의 행렬(410)을 포함한다. 단계 450에서, SIMD 트랜스포저(170)는 행렬(410)을 복수의 세그먼트들(412, 414, 416, 418)로 나눈다. SIMD 트랜스포저(170)는 행렬의 크기와 컴퓨터(110)의 처리 요소들의 카운트에 기초하여 행렬을 복수의 세그먼트들로 나눌 수 있다. 설명을 위해, SIMD 트랜스포저(170)는 행렬(410)을 4개 세그먼트들: (0, 1, 4, 5), (2, 3, 6, 7), (8, 9, 12, 13), 및 (10, 11, 14, 15)로 나눈다. 컴퓨터(110)의 처리 요소들은 4개 세그먼트들을 동시에 전치할 수 있다.
단계 452에서, Cell SPU(1321-4) 상의 SIMD 트랜스포저(170)는 세그먼트들(412, 414, 416, 418)을 전치한다. 예를 들어, Cell SPU(1321)는 전치된 세그먼트(422)를 생성하도록 세그먼트(412)를 전치한다. 단계 454에서, 복수의 처리 요소들 각각 상에서 실행되는 SIMD 트랜스포저(170)는 전치된 세그먼트들(422, 424, 426, 428)을 CELL SPU(132)의 로컬 저장공간으로부터 메모리(150)로 이동시킨다. 예를 들어, 세그먼트(414)에 대해 동작하는 CELL SPU(1322)는 행렬(430)의 전치된 세그먼트(424)를 저장한다. 단계 454 후에, Cell PPU(120) 상에서 실행되는 SIMD 트랜스포저(170)는, 필요한 경우, 전치 동작을 완료하도록 행렬(430)을 더 재조직할 수 있다. 예를 들어, SIMD 트랜스포저(170)는 전치 동작을 완료하도록 상이한 세그먼트들(422, 424, 426, 428)로부터의 요소들을 바꿀 수 있다. 그 결과의 행렬은 전반적으로 행렬(410)의 전치의 SIMD 전환과 동등한 것일 수 있다.
도 5는 본 발명의 하나의 실시예에 따라 행렬의 세부부분들을 동시에 전치하기 위한 데이터 흐름(400)을 도시한다. 각각의 전체 세그먼트가 각각의 처리 요소의 로컬 저장공간에 의해 수용되는 도 4와는 달리, 도 5는 각각의 세그먼트가 임의의 처리 요소의 로컬 저장공간의 크기를 초과하는 시나리오를 예시한다. 도시된 바와 같이, 데이터 흐름(500)은 256 x 256 행렬(510)을 포함한다. 단계 551에서, 하나의 실시예에 따라 SIMD 트랜스포저(170)는 행렬(510)을 복수의 세그먼트들로 나눈다. 예를 들어, SIMD 트랜스포저(170)는 행렬(510)을 4개 세그먼트들(520, 530, 540, 550)로 나눌 수 있다. SIMD 트랜스포저(170)는 또한 처리 요소(132)에 의해 전치될 각각의 세그먼트(520, 530, 540, 550)를 할당할 수 있다. 예를 들어, SIMD 트랜스포저(170)는 제1 Cell SPU(132)에 세그먼트(520)를, 제2 Cell SPU(132)에 세그먼트(530)를, 제3 Cell SPU(132)에 세그먼트(540)를, 그리고 제4 Cell SPU(132)에 세그먼트(550)를 할당할 수 있다.
그러나, 처리 요소(132)의 로컬 저장공간은 전체 세그먼트를 수용할 수 없을 수 있다. 예를 들어, 세그먼트(520)는 Cell SPU(132)에 대한 로컬 저장공간의 크기를 초과할 수 있다. 하나의 실시예에서, SIMD 트랜스포저(170)는 (Cell SPU와 같은) 처리 요소의 로컬 저장공간의 크기에 기초하여 세그먼트를 복수의 세부부분들로 나눌 수 있다. 예를 들어, SIMD 트랜스포저(170)는 세그먼트(520)를 4개의 세부부분(522, 524, 526, 528)들로 나눌 수 있다. 각각의 세부부분(522, 524, 526, 528)은 처리 요소(132)의 로컬 저장공간의 크기를 초과하지 않는 크기로 이루어질 수 있다.
단계 552에서, 각각의 처리 요소는 각각의 할당된 세그먼트(520, 530, 540, 550)의 제1 세부부분(522, 523, 542, 552)을 동시에 전치하여 제1 전치된 세부분(562, 572, 582, 592)을 생성한다. 단계 552에서, 각각의 처리 요소는 각각의 할당된 세그먼트(예를 들어 요소(520))의 제2 세부부분(예를 들어, 요소(524))을 동시에 전치하여 제2 전치된 세부부분(예를 들어, 요소(564))을 생성하며, 모든 세부부분들이 전치될 때까지 마찬가지로 행해진다.
도 6은 본 발명의 하나의 실시예에 따라 SIMD 멀티코어 프로세서 아키텍처 상에서 효율적인 FFT를 수행하기 위한 방법(600)을 도시하는 흐름도이다. 도시된 바와 같이, 방법(600)은 단계 610에서 시작되며, 여기에서는 SIMD 트랜스포저(170)가 종래의 데이터 포맷의 행렬을 수신한다. 예를 들어, SIMD 트랜스포저는 도 2의 행렬(210)을 수신할 수 있다. 단계 620에서, SIMD 트랜스포저(170)는 행렬을 SIMD 포맷으로 전환한다. 도 2는 매트리스(220)가 생성되는 예를 도시한다(예를 들어, 단계 219를 통하여). 중요하게, SIMD 벡터 프로세서는 SIMD 포맷의 행렬의 다수의 행들(이 특정 예에서는 2개 행)에 대해 동시에 동작할 수 있다. 단계 630에서, SIMD 트랜스포저는 수신된 행렬의 각각의 행에 대하여 1D FFT를 수행한다. 도 2는 행렬(222)이 생성되는 예를 도시한다(예를 들어, 단계 221을 통하여).
단계 640에서, SIMD 트랜스포저(170)는 행렬을 SIMD 전치할 수 있다. 도 2는 행렬(224)이 생성되는 예를 도시한다(예를 들어, 단계 223을 통하여). 단계 650에서, SIMD 트랜스포저(170)는 수신된 행렬의 각각의 열에 대하여 1D FFT를 수행한다. 도 2는 행렬(226)이 생성되는 예를 도시한다(예를 들어, 단계 225를 통하여). 단계 660에서, SIMD 트랜스포저(170)는 행렬에 대해 또 다른 SIMD 전치를 수행할 수 있다. 예를 들어, 도 2에 도시된 바와 같이, 행렬(226)은 행렬(228)로 SIMD 전치된다(예를 들어, 단계 227을 통하여). 단계 670에서, SIMD 트랜스포저는 행렬을 다시 종래의 데이터 포맷으로 전환할 수 있다. 예를 들어, SIMD 트랜스포저는 행렬(218)을 생성하도록 도 2의 단계 229를 수행할 수 있다. 단계 670 후에, 방법(600)은 종료된다.
실시예들은 여기에서 SIMD 전환, 1D FFT, 및 SIMD 전치를 수행하는 SIMD 트랜스포저(170)를 참조하여 기재되어 있지만, 여기에 기재된 실시예들은 예시적인 것이며 본 발명을 한정하고자 하는 것이 아니고, 다른 실시예들을 광범위하게 생각해볼 수 있다. 예를 들어, 전환, 전치, 및 FFT 기능은 다양항 방식으로 조직된 다양한 소프트웨어 모듈에 의해 수행될 수 있다.
도 7은 본 발명의 하나의 실시예에 따라 SIMD 포맷의 데이터를 전치하기 위한 방법(700)을 도시하는 흐름도이다. 방법(700)은 도 1의 SIMD 트랜스포저(170)에 의해 수행될 수 있다. 방법(700)의 단계들은 도 6의 단계 640 내지 660에 대응하며, 표 Ⅵ 및 표 Ⅶ의 요소 매핑 예와 함께 설명되어 있다.
도시된 바와 같이, 방법(700)은 단계 710에서 시작되며, 여기에서는 SIMD 트랜스포저(170)가 SIMD 포맷의 행렬을 수신한다. 예를 들어, SIMD 트랜스포저는 도 2의 행렬(222)을 수신할 수 있다. 단계 720에서, SIMD 트랜스포저(170)는, 행렬의 크기와 컴퓨터(110) 상의 처리 요소들의 카운트에 기초하여, 행렬을 복수의 세그먼트들로 나눈다. 도 4는 도 4의 행렬(410)이 4개 세그먼트들(412, 414, 416, 418)로 나누어진 예를 도시한다.
단계 730에서, SIMD 트랜스포저(170)는 처리 요소에 각각의 세그먼트를 할당한다. 예를 들어, SIMD 트랜스포저(170)는 제1 Cell SPU(132)에 도 4의 세그먼트(412)를 할당할 수 있다. SIMD 트랜스포저(170)는 또한 세그먼트가 할당된 처리 요소의 로컬 저장공간의 크기를 초과하는지 결정할 수 있다. 그러한 경우, SIMD 트랜스포저(170)는 각각의 세그먼트를 복수의 세부부분들로 나눌 수 있으며, 각각의 세부부분들은 할당된 처리 요소의 로컬 저장 공간의 크기를 초과하지 않는다. 예를 들어, SIMD 트랜스포저(170)는 도 5의 세그먼트(520)를 세부부분들(522, 524, 526, 528)로 나눌 수 있다.
단계 740에서, 각각의 할당된 처리 요소 상에서 실행되는 SIMD 트랜스포저(170)는 행렬의 각자의 세그먼트를 전치할 수 있다. 예를 들어, 도 4의 제1 Cell SPU(132)는 세그먼트(412)를 전치하여 전치된 세그먼트(422)를 생성할 수 있다. 단계 750에서, 각각의 할당된 처리 요소는 전치된 세그먼트를 각각의 로컬 저장공간으로부터 메인 메모리(150)로 산란시킬(scatter) 수 있다. 예를 들어, 도 4의 제3 Cell SPU(132)는 전치된 세그먼트(426)를 메인 메모리(150)에서의 전치된 행렬(430)의 세그먼트 위치(424)로 산란시킬 수 있다. 단계 760에서, SIMD 트랜스포저(170)는 전치 동작을 완료하도록 필요에 따라 전치된 행렬(430)을 재조직하는 것을 수행한다. 예를 들어, SIMD 트랜스포저(170)는 전치 동작을 완료하도록 세그먼트들 간에 요소들을 바꿀 수 있다. 단계 760 후에, 방법(700)은 종료된다.
도 8은 본 발명의 하나의 실시예에 따라 도 1의 SIMD 트랜스포저(170)의 컴포넌트를 도시하는 블록도(800)이다. 도시된 바와 같이, SIMD 트랜스포저(170)는 행렬 관리자(810), 세그먼트 생성기(820), 세그먼트 관리자(830), 전치 관리자(840), 및 재조직자(850)를 포함한다. 도시된 바와 같이, 행렬 관리자(810)는 SIMD 포맷의 행렬(152)을 수신하도록 구성될 수 있다. 예를 들어, 행렬 관리자(810)는 도 2의 행렬(222)을 수신할 수 있다. 또한, 세그먼트 생성기(820)는 수신된 행렬(152)에 기초하여 복수의 세그먼트(180)를 생성할 수 있다. 예를 들어, 세그먼트 생성기(820)는 도 4의 세그먼트들(412, 414, 416, 418)(도 1의 세그먼트들(154, 156, 158, 160)에 대응할 수 있음)을 생성할 수 있다. 세그먼트 생성기(820)는 또한 각각의 세그먼트에 대하여 복수의 세부부분들을 생성할 수 있다. 예를 들어, 세그먼트 생성기(820)는 세그먼트(520)에 대하여 도 5의 세부부분들(522, 524, 526, 528)을 생성할 수 있다.
세그먼트 관리자(830)는 처리 요소에 각각의 세그먼트를 할당할 수 있다. 예를 들어, 세그먼트 관리자(830)는 처리 요소(132)에 도 4의 세그먼트(412, 414, 416, 418)를 할당할 수 있다. 또한, 전치 관리자(840)는 SIMD 행렬로부터 SIMD 전치된 행렬에의 매핑을 정의한다. 예를 들어, 전치 관리자(840)는 표 Ⅵ(4 x 4 행렬의 경우)의 매핑을 정의할 수 있다.
전치 관리자(840)는 행렬(152)의 각각의 세그먼트를 전치한다. 예를 들어, 각각의 처리 요소(132) 상에서 실행되는 전치 관리자(840)는 도 4의 각각의 할당된 세그먼트(412, 414, 416, 418)를 전치할 수 있다. 전치 관리자(840)는 또한 전치된 세그먼트를 처리 요소의 로컬 저장공간으로부터 메인 메모리(150)로 산란시킬 수 있다. 예를 들어, 도 4의 제3 처리 요소(132) 상에서 실행되는 전치 관리자(840)는 전치된 세그먼트(426)를 메인 메모리(150)에서의 전치된 행렬(430)의 세그먼트 위치(424)로 산란시킬 수 있다. 또한, 재조직자(850)는 하나의 실시예에 따라 행렬(152)의 전치를 완료하도록 필요한 경우 메모리(150) 내의 요소들을 재정렬한다. 예를 들어, 재조직자(850)는 세그먼트(180)들 간에 요소들을 재정렬할 수 있다.
물론, 여기에 기재된 실시예들은 예시적인 것이며 본 발명을 한정하고자 하는 것이 아니고, 다른 실시예들을 광범위하게 생각해볼 수 있다. 당해 기술 분야에서의 숙련된 자라면, 예를 들어, 본 발명의 실시예들은 다른 크기의 행렬(예를 들어, 512 x 512 행렬), 다른 수의 처리 요소(예를 들어, 32 개의 처리 요소), 및 다른 수의 블록당 행들(예를 들어, 8방식 SIMD, 16 방식 SIMD 등)을 지원하도록 적응될 수 있다는 것을 알 것이다.
유리하게, 본 발명의 실시예는 SIMD 멀티코어 프로세서 아키텍처 상에서 어레이 데이터를 전치한다. 하나의 실시예에서, SIMD 트랜스포저는 SIMD 포맷의 행렬을 수신할 수 있다. 행렬은 종래의 데이터 포맷의 행렬 M의 SIMD 전환을 포함할 수 있다. SIMD 트랜스포저는 행렬의 각각의 요소로부터 M의 전치의 SIMD 전환의 요소로의 매핑을 정의할 수 있다. 또한, SIMD 트랜스포저는 M과 정의된 매핑에 기초하여 SIMD 전치된 행렬 T를 생성할 수 있다. M의 열에 대해 동작하도록 수정 없이 행방향 알고리즘이 T에 적용될 수 있다.
전술한 바는 본 발명의 실시예들에 관한 것이지만, 본 발명의 기타 및 부가적인 실시예가 본 발명의 기본 범위로부터 벗어나지 않고서 고안될 수 있으며, 본 발명의 범위는 다음 청구항에 의해 결정된다.
110: 컴퓨터
120: Cell PPU
130, 132: Cell SPU
140: 요소 상호접속 버스
150: 메모리

Claims (10)

  1. SIMD(single instruction, multiple data) 멀티코어 프로세서 아키텍처 상에서 행렬을 전치(transpose)하는 컴퓨터 구현 방법에 있어서,
    제1 포맷의 행렬 M을 SIMD 포맷의 행렬 S로 전환하고 - 상기 SIMD 포맷은 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 데이터 행(row)에 대해 1D FFT(one-dimensional fast Fourier transform) 동작을 동시에 수행할 수 있도록 함 - ;
    상기 행렬 S의 각각의 요소에 대하여 SIMD 포맷의 행렬 M의 전치에서의 요소에의 매핑을 검색하고 - 상기 매핑은 상기 행렬 M의 전치에 대하여 S의 SIMD 포맷을 보존함 - ;
    상기 검색된 매핑에 기초하여 SIMD 전치된 행렬 T를 생성하는 것 - 전치된 SIMD 행렬 T는 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 전치된 데이터 행에 대해 1D FFT 동작을 동시에 수행할 수 있도록 함 -
    을 포함하는 동작을 수행하도록 상기 SIMD 멀티코어 프로세서 아키텍처를 구성하는 것을 포함하는 컴퓨터 구현 방법.
  2. 청구항 1에 있어서, 상기 SIMD 포맷의 행렬은 행렬 M의 r 개 행들의 동시 처리를 위해 구성되고, 전환된 데이터는 일련의 블록들을 포함하며, 각각의 블록은 r개의 인터리브된(interleaved) 행들을 생성하기 위해 순차적 메모리 어드레스에 대하여 r개의 연속 행들의 첫 번째 요소들이 r개의 연속 행들의 임의의 두 번째 요소에 앞서도록 인터리브되어 있는 행렬 M의 r개의 연속 행들을 포함하는 것인 컴퓨터 구현 방법.
  3. 청구항 1에 있어서, 상기 제1 포맷은 행 우선 포맷과 열 우선 포맷 중 하나인 것인 컴퓨터 구현 방법.
  4. 청구항 1에 있어서, 상기 동작은,
    상기 행렬 S에 기초하여 s 개의 세그먼트들을 생성하고;
    상기 s 개의 세그먼트들을 상기 SIMD 멀티코어 프로세서 아키텍처의 s 개의 처리 요소들에 할당하는 것을 더 포함하며, 상기 SIMD 전치된 행렬 T를 생성하는 것은,
    각자의 처리 요소 상에서 각각의 세그먼트를 전치하는 것을 포함하는 것인 컴퓨터 구현 방법.
  5. 청구항 4에 있어서, 상기 각자의 처리 요소 상에서 각각의 세그먼트를 전치하는 것은 각자의 처리 요소에 국부적인 메모리 상에서 일어나며, 상기 전치된 행렬 T를 생성하는 것은, 상기 처리 요소들 각각에 의해, 임의의 처리 요소에 국부적이지 않은 메모리에 각각의 전치된 세그먼트를 산란시키는(scattering) 것을 더 포함하는 것인 컴퓨터 구현 방법.
  6. 청구항 4에 있어서, 상기 각자의 처리 요소 상에서 각각의 세그먼트를 전치하는 것은,
    각각의 세그먼트를 d 개의 세부부분(subdivision)들로 나누고 - 각각의 세부부분은 상기 각자의 처리 요소에 국부적인 메모리의 크기를 초과하지 않음 - ;
    각자의 처리 요소 상에서 상기 각각의 세그먼트의 각각의 세부부분을 전치하는 것을 포함하는 것인 컴퓨터 구현 방법.
  7. 청구항 1에 있어서, 상기 행렬 M은 256x256, 512x512, 또는 1024x1024 크기의 행렬로 MRI 디바이스로부터 캡쳐된 이미지 데이터의 일부를 저장하는 것인 컴퓨터 구현 방법.
  8. 컴퓨터 판독가능한 저장 매체로서,
    제1 포맷의 행렬 M을 SIMD 포맷의 행렬 S로 전환하고 - 상기 SIMD 포맷은 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 데이터 행에 대해 1D FFT 동작을 동시에 수행할 수 있도록 함 - ;
    상기 행렬 S의 각각의 요소에 대하여 SIMD 포맷의 행렬 M의 전치에서의 요소에의 매핑을 검색하고 - 상기 매핑은 상기 행렬 M의 전치에 대하여 S의 SIMD 포맷을 보존함 - ;
    상기 검색된 매핑에 기초하여 SIMD 전치된 행렬 T를 생성하는 것 - 전치된 SIMD 행렬 T는 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 전치된 데이터 행에 대해 1D FFT 동작을 동시에 수행할 수 있도록 함 -
    을 포함하는 동작을 수행함으로써 SIMD 멀티코어 프로세서 아키텍처 상에서 행렬을 전치하도록 구성되는 애플리케이션 프로그램을 저장하는 컴퓨터 판독가능한 저장 매체.
  9. 청구항 8에 있어서, 상기 SIMD 포맷의 행렬은 행렬 M의 r 개 행들의 동시 처리를 위해 구성되고, 전환된 데이터는 일련의 블록들을 포함하며, 각각의 블록은 r개의 인터리브된 행들을 생성하기 위해 순차적 메모리 어드레스에 대하여 r개의 연속 행들의 첫 번째 요소들이 r개 연속 행들의 임의의 두 번째 요소에 앞서도록 인터리브되어 있는 행렬 M의 r개의 연속 행들을 포함하는 것인 컴퓨터 판독가능한 저장 매체.
  10. 시스템에 있어서,
    SIMD 멀티코어 프로세서; 및
    메모리를 포함하고, 상기 메모리는,
    제1 포맷의 행렬 M을 SIMD 포맷의 행렬 S로 전환하고 - 상기 SIMD 포맷은 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 데이터 행에 대해 1D FFT 동작을 동시에 수행할 수 있도록 함 - ;
    상기 행렬 S의 각각의 요소에 대하여 SIMD 포맷의 행렬 M의 전치에서의 요소에의 매핑을 검색하고 - 상기 매핑은 상기 행렬 M의 전치에 대하여 S의 SIMD 포맷을 보존함 - ;
    상기 검색된 매핑에 기초하여 SIMD 전치된 행렬 T를 생성하는 것 - 전치된 SIMD 행렬 T는 상기 SIMD 멀티코어 프로세서 아키텍처 상의 복수의 코어들이 각각 상기 행렬 M의 전치된 데이터 행에 대해 1D FFT 동작을 동시에 수행할 수 있도록 함 -
    을 포함하는 동작을 수행함으로써 상기 SIMD 멀티코어 프로세서 아키텍처 상에서 행렬을 전치하도록 구성되는 애플리케이션 프로그램을 포함하는 것인 시스템.
KR1020100108204A 2009-11-04 2010-11-02 Simd 멀티코어 프로세서 아키텍처 상의 어레이 데이터 전치 KR20110079495A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/612,037 2009-11-04
US12/612,037 US8539201B2 (en) 2009-11-04 2009-11-04 Transposing array data on SIMD multi-core processor architectures

Publications (1)

Publication Number Publication Date
KR20110079495A true KR20110079495A (ko) 2011-07-07

Family

ID=43926625

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100108204A KR20110079495A (ko) 2009-11-04 2010-11-02 Simd 멀티코어 프로세서 아키텍처 상의 어레이 데이터 전치

Country Status (4)

Country Link
US (1) US8539201B2 (ko)
JP (1) JP5689282B2 (ko)
KR (1) KR20110079495A (ko)
CN (1) CN102053948B (ko)

Cited By (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9342282B2 (en) 2012-08-16 2016-05-17 Samsung Electronics Co., Ltd. Method and apparatus for dynamic data configuration
KR20170025097A (ko) * 2015-08-27 2017-03-08 삼성전자주식회사 푸리에 변환을 수행하는 방법 및 장치
WO2018174927A1 (en) * 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatuses for tile diagonal
KR20190061981A (ko) * 2017-11-28 2019-06-05 삼성전자주식회사 Simd 연산을 이용하여 이미지 데이터의 주파수 변환을 수행하는 전자 장치 및 전자 장치의 동작 방법
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11048508B2 (en) 2016-07-02 2021-06-29 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US11249761B2 (en) 2018-09-27 2022-02-15 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US11275588B2 (en) 2017-07-01 2022-03-15 Intel Corporation Context save with variable save state size
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11416260B2 (en) 2018-03-30 2022-08-16 Intel Corporation Systems and methods for implementing chained tile operations
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11699468B2 (en) 2021-06-01 2023-07-11 SK Hynix Inc. Memory device, semiconductor system, and data processing system
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11847185B2 (en) 2018-12-27 2023-12-19 Intel Corporation Systems and methods of instructions to accelerate multiplication of sparse matrices using bitmasks that identify non-zero elements
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply
US12001887B2 (en) 2020-12-24 2024-06-04 Intel Corporation Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008129900A1 (ja) * 2007-04-12 2008-10-30 Nec Corporation アレイプロセッサ型データ処理装置
US8484276B2 (en) * 2009-03-18 2013-07-09 International Business Machines Corporation Processing array data on SIMD multi-core processor architectures
JP5760532B2 (ja) * 2011-03-14 2015-08-12 株式会社リコー プロセッサ装置及びその演算方法
US9201899B2 (en) * 2011-10-14 2015-12-01 Panasonic Intellectual Property Management Co., Ltd. Transposition operation device, integrated circuit for the same, and transposition method
SG10201604445RA (en) * 2011-12-01 2016-07-28 Univ Singapore Polymorphic heterogeneous multi-core architecture
CN102521209B (zh) * 2011-12-12 2015-03-11 浪潮电子信息产业股份有限公司 一种并行多处理器计算机的设计方法
CN104011645B (zh) * 2011-12-22 2018-06-26 英特尔公司 用于产生其中在连续位置中的整数相差恒定整数跨度且最小整数从零偏移整数偏移量的整数序列的处理器、方法、系统和含有指令的介质
EP2798475A4 (en) * 2011-12-30 2016-07-13 Intel Corp TRANSPOSED INSTRUCTION
CN102929724B (zh) * 2012-11-06 2016-04-13 无锡江南计算技术研究所 基于异构众核处理器的多级访存方法、离散访存方法
US9412063B2 (en) 2013-12-27 2016-08-09 International Business Machines Corporation Transform architecture for multiple neurosynaptic core circuits
US9406015B2 (en) 2013-12-27 2016-08-02 International Business Machines Corporation Transform for a neurosynaptic core circuit
TWI570573B (zh) 2014-07-08 2017-02-11 財團法人工業技術研究院 矩陣轉置電路
SE539721C2 (en) * 2014-07-09 2017-11-07 Device and method for performing a Fourier transform on a three dimensional data set
US10635909B2 (en) * 2015-12-30 2020-04-28 Texas Instruments Incorporated Vehicle control with efficient iterative triangulation
US10095445B2 (en) 2016-03-29 2018-10-09 Western Digital Technologies, Inc. Systems and methods for offloading processing from a host to storage processing units using an interconnect network
KR102526754B1 (ko) 2016-07-13 2023-04-27 삼성전자주식회사 3차원 영상 처리 방법 및 장치
KR102654862B1 (ko) * 2016-08-31 2024-04-05 삼성전자주식회사 영상 처리 방법 및 장치
US11748625B2 (en) 2016-12-30 2023-09-05 Intel Corporation Distributed convolution for neural networks
EP3563304B1 (en) * 2016-12-30 2022-03-09 Intel Corporation Deep learning hardware
US10169296B2 (en) 2016-12-30 2019-01-01 Intel Corporation Distributed matrix multiplication for neural networks
CN107168683B (zh) * 2017-05-05 2020-06-09 中国科学院软件研究所 申威26010众核cpu上gemm稠密矩阵乘高性能实现方法
US10853559B2 (en) 2019-03-27 2020-12-01 Charter Communications Operating, Llc Symmetric text replacement
CN111444134A (zh) * 2020-03-24 2020-07-24 山东大学 分子动力学模拟软件的并行pme的加速优化方法及系统
US11593454B2 (en) * 2020-06-02 2023-02-28 Intel Corporation Matrix operation optimization mechanism
CN112433760B (zh) * 2020-11-27 2022-09-23 海光信息技术股份有限公司 数据排序方法和数据排序电路
KR102527829B1 (ko) * 2021-08-19 2023-04-28 한국기술교육대학교 산학협력단 Cpu와 gpu를 사용하는 행렬 전치기반 2d-fft 연산 장치 및 이를 이용한 데이터 연산 방법
US20240020129A1 (en) * 2022-07-14 2024-01-18 Nxp Usa, Inc. Self-Ordering Fast Fourier Transform For Single Instruction Multiple Data Engines

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7197625B1 (en) * 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6243730B1 (en) * 1999-05-04 2001-06-05 Sony Electronics, Inc. Methods and systems for performing short integer chen IDCT algorithm with fused multiply/add
US6625721B1 (en) * 1999-07-26 2003-09-23 Intel Corporation Registers for 2-D matrix processing
US20030084081A1 (en) * 2001-10-27 2003-05-01 Bedros Hanounik Method and apparatus for transposing a two dimensional array
US6963341B1 (en) * 2002-06-03 2005-11-08 Tibet MIMAR Fast and flexible scan conversion and matrix transpose in a SIMD processor
US7386703B2 (en) * 2003-11-18 2008-06-10 International Business Machines Corporation Two dimensional addressing of a matrix-vector register array
US20070106718A1 (en) * 2005-11-04 2007-05-10 Shum Hoi L Fast fourier transform on a single-instruction-stream, multiple-data-stream processor
US7937567B1 (en) * 2006-11-01 2011-05-03 Nvidia Corporation Methods for scalably exploiting parallelism in a parallel processing system
US7979672B2 (en) * 2008-07-25 2011-07-12 International Business Machines Corporation Multi-core processors for 3D array transposition by logically retrieving in-place physically transposed sub-array data
US8484276B2 (en) * 2009-03-18 2013-07-09 International Business Machines Corporation Processing array data on SIMD multi-core processor architectures

Cited By (71)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9342282B2 (en) 2012-08-16 2016-05-17 Samsung Electronics Co., Ltd. Method and apparatus for dynamic data configuration
KR20170025097A (ko) * 2015-08-27 2017-03-08 삼성전자주식회사 푸리에 변환을 수행하는 방법 및 장치
US11698787B2 (en) 2016-07-02 2023-07-11 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US11048508B2 (en) 2016-07-02 2021-06-29 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US11080048B2 (en) 2017-03-20 2021-08-03 Intel Corporation Systems, methods, and apparatus for tile configuration
US11288069B2 (en) 2017-03-20 2022-03-29 Intel Corporation Systems, methods, and apparatuses for tile store
US11263008B2 (en) 2017-03-20 2022-03-01 Intel Corporation Systems, methods, and apparatuses for tile broadcast
US10877756B2 (en) 2017-03-20 2020-12-29 Intel Corporation Systems, methods, and apparatuses for tile diagonal
US11200055B2 (en) 2017-03-20 2021-12-14 Intel Corporation Systems, methods, and apparatuses for matrix add, subtract, and multiply
US11977886B2 (en) 2017-03-20 2024-05-07 Intel Corporation Systems, methods, and apparatuses for tile store
US11847452B2 (en) 2017-03-20 2023-12-19 Intel Corporation Systems, methods, and apparatus for tile configuration
US11163565B2 (en) 2017-03-20 2021-11-02 Intel Corporation Systems, methods, and apparatuses for dot production operations
US11567765B2 (en) 2017-03-20 2023-01-31 Intel Corporation Systems, methods, and apparatuses for tile load
US11714642B2 (en) 2017-03-20 2023-08-01 Intel Corporation Systems, methods, and apparatuses for tile store
US11086623B2 (en) 2017-03-20 2021-08-10 Intel Corporation Systems, methods, and apparatuses for tile matrix multiplication and accumulation
US11360770B2 (en) 2017-03-20 2022-06-14 Intel Corporation Systems, methods, and apparatuses for zeroing a matrix
WO2018174927A1 (en) * 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatuses for tile diagonal
WO2018174926A1 (en) * 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatuses for tile transpose
US11288068B2 (en) 2017-03-20 2022-03-29 Intel Corporation Systems, methods, and apparatus for matrix move
US11275588B2 (en) 2017-07-01 2022-03-15 Intel Corporation Context save with variable save state size
WO2019107708A1 (ko) * 2017-11-28 2019-06-06 삼성전자 주식회사 Simd 연산을 이용하여 이미지 데이터의 주파수 변환을 수행하는 전자 장치 및 전자 장치의 동작 방법
KR20190061981A (ko) * 2017-11-28 2019-06-05 삼성전자주식회사 Simd 연산을 이용하여 이미지 데이터의 주파수 변환을 수행하는 전자 장치 및 전자 장치의 동작 방법
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11609762B2 (en) 2017-12-29 2023-03-21 Intel Corporation Systems and methods to load a tile register pair
US11645077B2 (en) 2017-12-29 2023-05-09 Intel Corporation Systems and methods to zero a tile register pair
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11416260B2 (en) 2018-03-30 2022-08-16 Intel Corporation Systems and methods for implementing chained tile operations
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US11714648B2 (en) 2018-09-27 2023-08-01 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US11954489B2 (en) 2018-09-27 2024-04-09 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US11403071B2 (en) 2018-09-27 2022-08-02 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US11748103B2 (en) 2018-09-27 2023-09-05 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US11579880B2 (en) 2018-09-27 2023-02-14 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US11249761B2 (en) 2018-09-27 2022-02-15 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US11507376B2 (en) 2018-09-28 2022-11-22 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US11954490B2 (en) 2018-09-28 2024-04-09 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US11675590B2 (en) 2018-09-28 2023-06-13 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US11392381B2 (en) 2018-09-28 2022-07-19 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US11614936B2 (en) 2018-11-09 2023-03-28 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US11893389B2 (en) 2018-11-09 2024-02-06 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US11847185B2 (en) 2018-12-27 2023-12-19 Intel Corporation Systems and methods of instructions to accelerate multiplication of sparse matrices using bitmasks that identify non-zero elements
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11900114B2 (en) 2019-06-26 2024-02-13 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
US12001887B2 (en) 2020-12-24 2024-06-04 Intel Corporation Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator
US12001385B2 (en) 2020-12-24 2024-06-04 Intel Corporation Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator
US11699468B2 (en) 2021-06-01 2023-07-11 SK Hynix Inc. Memory device, semiconductor system, and data processing system

Also Published As

Publication number Publication date
US20110107060A1 (en) 2011-05-05
CN102053948A (zh) 2011-05-11
US8539201B2 (en) 2013-09-17
JP2011100452A (ja) 2011-05-19
JP5689282B2 (ja) 2015-03-25
CN102053948B (zh) 2013-09-11

Similar Documents

Publication Publication Date Title
KR20110079495A (ko) Simd 멀티코어 프로세서 아키텍처 상의 어레이 데이터 전치
US8484276B2 (en) Processing array data on SIMD multi-core processor architectures
Buatois et al. Concurrent number cruncher: a GPU implementation of a general sparse linear solver
US7640284B1 (en) Bit reversal methods for a parallel processor
KR20200027011A (ko) 가속화된 수학 엔진
US20080208944A1 (en) Digital signal processor structure for performing length-scalable fast fourier transformation
KR920001618B1 (ko) 직교변환 프로세서
JP2021507335A (ja) 行列入力を行列プロセッサ用のベクトル化入力に変換するためのシステムおよび方法
US4821224A (en) Method and apparatus for processing multi-dimensional data to obtain a Fourier transform
US7461114B2 (en) Fourier transform apparatus
US8880575B2 (en) Fast fourier transform using a small capacity memory
Li et al. VBSF: a new storage format for SIMD sparse matrix–vector multiplication on modern processors
JP2000231513A (ja) N次元矩形データアレイの任意の所与次元におけるパラレルデータアクセスのためのメモリアーキテクチャ
CN113767371B (zh) 用于高性能向量处理的地址生成的方法
Cormen et al. Performing out-of-core FFTs on parallel disk systems
US7657587B2 (en) Multi-dimensional fast fourier transform
US6728742B1 (en) Data storage patterns for fast fourier transforms
Al Badawi et al. Faster number theoretic transform on graphics processors for ring learning with errors based cryptography
US20140089370A1 (en) Parallel bit reversal devices and methods
CN116051345A (zh) 图像数据处理方法、装置、计算机设备及可读存储介质
Zheng Encrypted cloud using GPUs
US20200372095A1 (en) Fast fourier transform device, data sorting processing device, fast fourier transform processing method, and program recording medium
US6438568B1 (en) Method and apparatus for optimizing conversion of input data to output data
Al Na'mneh et al. An efficient bit reversal permutation algorithm
KR20100033979A (ko) 병렬 프로세서용 어드레싱 디바이스

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application