Main Content

반정밀도란?

IEEE® 754 반정밀도 부동소수점 형식은 1비트의 부호 표시자 s, 5비트의 편향 지수 e, 10비트의 소수부 f로 이루어진 16비트 워드입니다.

Schematic showing bit allocation for half-precision data type.

half형 숫자는 16비트로 저장되므로, 32비트를 사용하는 single형 숫자나 64비트를 사용하는 double형 숫자보다 적은 메모리를 필요로 합니다. 하지만 더 적은 비트로 저장되므로 half형 숫자는 single형 또는 double형 숫자보다 더 낮은 정밀도로 표현됩니다.

아래 표에는 지원되는 부동소수점 데이터형의 범위, 편향 및 정밀도가 나와 있습니다.

데이터형

하한

상한

지수 편향

정밀도

Half(반정밀도)

2−14 ≈ 6.1·10−5

(2−2-10) ·215≈ 6.5·104

15

2−10 ≈ 10−3

Single(단정밀도)

2−126 ≈ 10−38

2128 ≈ 3 · 1038

127

2−23 ≈ 10−7

Double(배정밀도)

2−1022 ≈ 2 · 10−308

21024 ≈ 2 · 10308

1023

2−52 ≈ 10−16

반정밀도 데이터형을 소개하는 비디오를 보려면 반정밀도란?모델링 및 코드 생성 시 반정밀도 수학 연산을 참조하십시오.

반정밀도 응용 사례

동적 범위가 크거나 동적 범위를 알 수 없는 알고리즘(예: 피드백 루프 내의 적분기) 또는 고정소수점으로 설계하기 어려운 연산을 사용하는 알고리즘(예: atan2)에는 부동소수점 표현을 사용하는 것이 유리할 수 있습니다. 반정밀도 데이터형은 16비트의 메모리만 차지하지만, 부동소수점 표현에서 반정밀도 데이터형은 동일한 크기의 정수 데이터형이나 고정소수점 데이터형보다 더 넓은 동적 범위를 처리할 수 있습니다. 따라서 반정밀도는 영상 처리와 그래픽스 응용 분야에 특히 적합합니다. 심층 신경망에 반정밀도를 사용하면 훈련과 추론에 필요한 시간을 줄일 수 있습니다. 룩업 테이블의 저장 시간을 반정밀도로 사용하면 룩업 테이블의 메모리 사용량을 줄일 수 있습니다.

MATLAB 예제

  • 안개 보정 (GPU Coder) — 안개 낀 영상을 보정하는 영상 처리 알고리즘은 컨벌루션, 영상 컬러스페이스 변환, 히스토그램에 기반한 대비 확장을 사용하여 입력 영상을 향상시킵니다. 이 예제는 영상 처리 연산에 반정밀도 데이터형을 사용하여 CUDA® MEX를 생성하고 실행하는 방법을 보여줍니다.

    Image of a road before and after applying fog rectification algorithm.

  • Sobel 메서드를 사용한 경계 검출을 반정밀도 유형으로 수행 (GPU Coder) — Sobel 경계 검출 알고리즘은 입력 영상을 받아서 입력 영상의 경계에 해당하는 높은 공간 주파수 영역이 강조 표시된 출력 영상을 반환합니다. 이 예제에서는 입력 영상과 Sobel 연산자 커널 값에 사용된 반정밀도 데이터형을 사용하여 CUDA MEX를 생성하고 실행하는 방법을 보여줍니다.

    Image of peppers before and after applying Sobel edge detection algorithm.

  • Generate Code for Sobel Edge Detection That Uses Half-Precision Data Type (MATLAB Coder) — 이 예제에서는 반정밀도 부동소수점 숫자를 사용하여 영상의 Sobel 경계 검출을 수행하는 MATLAB® 함수에서 독립 실행형 C++ 라이브러리를 생성하는 방법을 보여줍니다.

Simulink 예제

  • 반정밀도 자속 기준 제어 알고리즘 — 이 예제는 단정밀도와 반정밀도를 모두 사용하여 자속 기준 제어(FOC) 알고리즘을 구현합니다.

  • Image Quantization with Half-Precision Data Types — 이 예제에서는 양자화가 영상에 미치는 영향을 보여줍니다. 고정소수점 데이터형이 항상 용인 가능한 결과를 생성하지는 않지만, 고정소수점 데이터형과 동일한 비트 수를 사용하는 반정밀도 데이터형은 단정밀도 결과와 견줄 만한 결과를 생성합니다.

    Quantization effect shown on an image of a chessboard for fixed-point, half-precision, and single-precision data types.

  • Digit Classification with Half-Precision Data Types — 이 예제에서는 배정밀도와 반정밀도로 훈련된 신경망 분류 모델의 결과를 비교합니다.

  • Convert Single Precision Lookup Table to Half Precision — 이 예제는 단정밀도 룩업 테이블을 반정밀도를 사용하도록 변환하는 방법을 설명합니다. 반정밀도를 저장 유형으로 사용하고, 룩업 테이블 계산은 단정밀도를 사용하여 수행됩니다. 반정밀도로 변환하면 원하는 시스템 성능은 그대로 유지하면서 Lookup Table 블록의 메모리 크기를 절반으로 줄일 수 있습니다.

임베디드 애플리케이션에 반정밀도를 사용할 때의 이점

반정밀도 데이터형은 단정밀도와 배정밀도 같은 다른 부동소수점 유형에 비해 메모리를 적게 사용합니다. 반정밀도 데이터형은 16비트의 메모리만 차지하지만, 부동소수점 표현에서 반정밀도 데이터형은 동일한 크기의 정수 데이터형이나 고정소수점 데이터형보다 더 넓은 동적 범위를 처리할 수 있습니다.

FPGA

반정밀도 데이터형은 하드웨어에서 사용될 경우 단정밀도 데이터형보다 훨씬 적은 면적을 사용하고 낮은 대기 시간을 가집니다. 반정밀도는 낮은 동적 범위 응용 분야에 특히 유리합니다.

다음 플롯에서는 Xilinx® Virtex® 7 하드웨어에서 자속 기준 제어 알고리즘 구현에 반정밀도를 사용할 때의 이점을 보여줍니다.

Comparison of Fmax, DSPs, LUTs, and Slices for single vs half precision.

GPU

반정밀도 데이터형을 지원하는 GPU에서는 산술 연산이 단정밀도 또는 배정밀도보다 빠릅니다.

수많은 연산이 필요한 딥러닝 같은 응용 분야에서 반정밀도를 사용하면 심각한 정밀도 손실 없이 상당한 성능 이점을 얻을 수 있습니다. GPU Coder™를 사용하면 Deep Learning Toolbox™에서 훈련된 다양한 딥러닝 신경망의 예측에 최적화된 코드를 생성할 수 있습니다. NVIDIA® GPU를 위한 NVIDIA TensorRT 고성능 추론 라이브러리의 이점을 활용하도록 코드 생성기를 구성할 수 있습니다. TensorRT는 신경망 계층을 결합하고 커널 선택을 최적화하여 대기 시간, 처리량, 메모리 효율성을 개선합니다. 또한 성능은 더욱 높이고 메모리 요구 사항은 줄이기 위해 TensorRT의 정밀도 모드(FP32, FP16 또는 INT8)를 활용하도록 코드 생성기를 구성할 수도 있습니다.

CPU

반정밀도 데이터형을 지원하는 CPU에서는 산술 연산이 단정밀도 또는 배정밀도보다 빠릅니다. 반정밀도 데이터형을 기본 지원하는 ARM® 타깃의 경우 MATLAB 또는 Simulink®에서 네이티브 반정밀도 C 코드를 생성할 수 있습니다. 반정밀도를 사용한 코드 생성 항목을 참조하십시오.

MATLAB의 반정밀도

MATLAB의 많은 함수가 반정밀도 데이터형을 지원합니다. 지원되는 함수의 전체 목록은 half 항목을 참조하십시오.

Simulink의 반정밀도

Simulink의 신호와 블록 출력값은 반정밀도 데이터형을 지정할 수 있습니다. 반정밀도 데이터형은 파라미터와 일부 블록의 시뮬레이션과 코드 생성에 대해 지원됩니다. 반정밀도를 지원하는 블록을 보려면 명령줄에 다음을 입력하십시오.

showblockdatatypetable

반정밀도를 지원하는 블록에는 Half로 레이블이 지정된 열에 X가 표시됩니다. Simulink의 반정밀도 지원에 대한 자세한 내용은 The Half-Precision Data Type in Simulink 항목을 참조하십시오.

반정밀도를 사용한 코드 생성

C/C++ 코드 생성, GPU Coder를 사용한 CUDA 코드 생성, HDL Coder™를 사용한 HDL 코드 생성에는 반정밀도 데이터형이 지원됩니다. GPU 타깃의 경우 반정밀도 데이터형은 최대 성능을 위해 NVIDIA GPU에서 사용 가능한 네이티브 반정밀도 데이터형을 사용합니다.

MATLAB 및 Simulink의 반정밀도에 대한 세부적인 코드 생성 지원은 Half Precision Code Generation SupportThe Half-Precision Data Type in Simulink 항목을 참조하십시오.

기본적으로 특수한 반정밀도 유형(ARM 컴파일러의 _Float16_fp16 데이터형)을 지원하는 임베디드 하드웨어 타깃의 경우 Embedded Coder® 또는 MATLAB Coder™를 사용하여 네이티브 반정밀도 C 코드를 생성할 수 있습니다. 자세한 내용은 Generate Native Half-Precision C Code from Simulink ModelsGenerate Native Half-Precision C Code Using MATLAB Coder 항목을 참조하십시오.

참고 항목

| | |

관련 항목