2020년 9월 26일 토요일

Very Large FFT for TMS320C6678

Introduction

이 백서는 TI의 TMS320C6678 8 코어 고정형 DSP 코어의 1, 2, 4 및 8 DSP 코어에서 16K ~ 1024K 샘플 크기의 1 차원 복합 단 정밀도 부동 소수점 FFT를 구현하는 초대형 FFT (VLFFT) 데모에 대해 설명합니다. C66x DSP 코어의 기능과 추가 된 코어 수에 비례하는 성능 향상을 통해 여러 코어에 걸친 병렬화를 수용하는 아키텍처의 기능을 보여주기위한 부동 소수점 DSP. FFT는 의료 영상, 통신, 군사 및 상업용 레이더, 전자전 (재머, 안티 재머)과 같은 애플리케이션에 사용되는 일반적인 신호 처리 빌딩 블록이므로이 데모의 알고리즘으로 FFT가 선택되었습니다. 1024K 샘플 FFT는 알고리즘이 1GHz에서 TMS320C6678 장치의 8 개 DSP 코어 모두에서 실행될 때 6.4ms에 불과한 것으로 나타났습니다.


TMS320C6678 SoC

TMS320C6678 장치는 TI의 C66x 고정 및 부동 소수점 DSP 코어를 기반으로하는 8 코어 DSP이며 완전한 멀티 코어 권한을 지원하는 TI의 혁신적인 KeyStone ™ 아키텍처를 기반으로합니다.

최대 1.25GHz에서 작동 할 수 있으며이 속도에서 160GFLOPS를 생성 할 수 있으며 일반적인 사용 사례에서 10W 미만을 소비합니다. 또한 DSP 코어 당 512KB의 L2 메모리와 총 8MB의 온칩 메모리를위한 4MB의 공유 메모리가 있으며 모두 ECC를 사용합니다. DDR3 인터페이스는 최대 1600MTPS를 실행할 수 있으며 최대 8GB의 외부 메모리에 액세스 할 수 있으며 64 비트 + 8 비트 ECC 인터페이스입니다. 주변 장치에는 PCIe, Serial RapidIO® 및 기가비트 이더넷, 타사 IP 블록을 통해 FPGA뿐만 아니라 다른 TI DSP, ARM® 및 ARM + DSP 프로세서에 최대 50Gbps 연결을 제공하는 TI의 HyperLink 인터페이스가 포함됩니다. .

VLFFT 데모에서 TMS320C6678 장치는 1333MHz에서 DDR3 전송을 사용하여 1GHz에서 작동합니다.


VLFFT 데모

VLFFT 알고리즘을 사용하려면 입력 데이터를 장치의 외부 메모리에 배치해야합니다. 데모 중에 데이터는 DSP 코어에 의해 액세스, 배포 및 처리 된 다음 출력이 외부 메모리에 배치됩니다. 측정 된주기 수와 시간은이 전체 프로세스를 포함합니다. 다음 크기의 FFT에서 계산을 수행하기 위해 다른 수의 코어 (1, 2, 4 또는 8)를 사용하도록 소프트웨어를 구성 할 수 있습니다.

• 16K

• 32K

• 64K

• 128K

• 256K

• 512K

• 1024K

FFT 구현은 계산 부하를 여러 코어에 분산하고 C66x DSP 코어의 고성능 계산 능력을 완전히 활용하여 최대 성능을 달성하도록 설계되었습니다. 기본적인 데시 메이션-인-타임 접근법은 1 차원 매우 큰 FFT 계산을 2 차원 FFT 계산과 유사한 형태로 공식화하는 데 사용됩니다.

매우 큰 N의 경우 N = N1 * N2로 계수 될 수 있습니다. 크기가 매우 큰 경우 1 차원 입력 배열을 N1 행과 N2 열의 2 차원 배열로 나타낼 수 있으며 다음 단계를 수행하여이 표현에서 매우 큰 1 차원 FFT를 계산할 수 있습니다.

1. 열 방향에서 N1 크기의 N2 FFT 계산

2. 회전 계수로 곱하기

3. N1 크기의 N2 FFT를 행 방향으로 저장하여 N2 x N1 2 차원 배열을 형성합니다.

4. N2 크기의 N1 FFT를 열 방향으로 계산

5. 데이터를 열 방향으로 저장하여 N2 x N1 2 차원 배열 형성

이 알고리즘은 Takahashi가 "Hitachi SR8000 용 고성능 병렬 FFT 알고리즘"에서 자세히 설명합니다. [1] 멀티 코어 구현에서 1 단계는 각 코어에서 N1 크기의 N2 / (코어 수) FFT를 계산하여 수행됩니다. 각 코어에서 N1 / (코어 수) 크기 N2의 FFT를 계산하여 4 단계. 코어 0은 마스터 코어로 사용되며 모든 코어를 동기화하고 나머지 코어는 슬레이브 코어로 사용됩니다. 각 코어에서 N1 및 N2의 크기에 따라 각 코어의 총 FFT 수는 코어 당 L2 SRAM의 크기를 수용하기 위해 여러 개의 작은 블록으로 나뉩니다. 각 데이터 블록은 DMA에 의해 외부 메모리에서 L2 SRAM으로 프리 페치되고 FFT 결과는 DDR에 의해 외부 메모리에 다시 기록됩니다. 각 코어는 2 개의 DMA 채널을 사용하여 외부 메모리 (DDR3)와 내부 메모리 (L2 SRAM)간에 입력 및 출력 샘플을 전송합니다.

댓글 없음:

댓글 쓰기

VITIS Git + Doxygen Config

 Doxygen Configure 1. Vitis 메뉴의 Window->Preference의 C/C++ -> Editor의 Documentation tool comments 기본 설정값을 Doxygen으로 변경 설정 후 함수 바로 위에서 /...