저는 컴퓨터 과학을 처음 접했고 단 정밀도 또는 배정 밀도와 같은 방식으로 현대 건축에서 반 정밀도를 지원하는지 궁금합니다. 2008 년 개정 된 IEEE-754 표준은 4 중 정밀도와 반 정밀도를 모두 도입했다고 생각했습니다.
주석
- 이 태그는 MATLAB이지만 MATLAB은 ‘ t (아직) 16 비트를 지원하지 않습니다. 부동 소수점.
- 자세한 정보가있는 스택 교환 질문을 참조하세요. stackoverflow.com/questions/49995594/ …
- 단지 CPU를 의미하는지 아니면 CPU와 GPU를 모두 의미하는지 명확히 할 가치가 있습니다.
- Max Barraclough의 의견에 감사드립니다. 그래픽 처리 장치 (GPU)에서만 정밀도를 변경할 수 있다는 사실은 몰랐습니다. 나는 그것이 둘 다에서 이루어져야한다고 생각했다. 귀하의 의견은 매우 유용합니다.
답변
IEEE float16 스토리지 형식 em에 대한 인텔 지원 >
Intel은 Ivy Bridge (2013) 이후 프로세서의 스토리지 유형으로 IEEE half를 지원합니다. 스토리지 유형은 메모리 / 캐시 용량 / 대역폭 이점을 얻을 수 있지만 IEEE 반 정밀도 형식으로 변환 한 후 단 정밀도로 계산이 수행됨을 의미합니다.
BFloat16에 대한 인텔 지원
인텔은 Cooper에서 BF16에 대한 지원을 발표했습니다. 호수 및 사파이어 급류.
-
https://software.intel.com/content/dam/develop/public/us/en/documents/architecture-instruction-set-extensions-programming-reference.pdf (2020 년 6 월 업데이트 319433-040은 AMX BF16에 대해 설명 함)
저는 Intel에서 일합니다. 공식 출처를 인용하고 있으며 소문 등에 대해서는 언급하지 않겠습니다.
IEEE FP16과 BF16의 상대적 장점에 대해 궁금해하는 것이 좋습니다. 이 주제에 대한 많은 분석이 있습니다. https://nhigham.com/2018/12/03/half-precision-arithmetic-fp16-versus-bfloat16/ .
비 Intel 하드웨어 지원
다음 다른 프로세서에 대한 정보입니다. 필요한 경우 공급 업체에 확인하세요.
http://on-demand.gputechconf.com/gtc/2017/presentation/s7676-piotr-luszcek-half-precision-bencharking-for-hpc.pdf 에는 다음 하드웨어 지원이 나열되어 있습니다.
- AMD-MI5, MI8, MI25
- ARM-V8.2-A의 NEON VFP FP16
- NVIDIA-Pascal 및 Volta
NVIDIA Ampere는 FP16도 지원합니다 ( https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/ ).
댓글
- 이 답변의 첫 번째 부분은 약간 오해의 소지가 있습니다. Ivy Bridge는 실제로 F16C에 대한 지원을 도입했으며 이는 기술적으로 반 정밀도 부동 소수점이 ” 지원 “임을 의미하지만 유일한 지침입니다. 제공되는 것은 반 정밀도 부동 소수점과 변환 할 수있는 것들입니다. 어떤 작업도 수행 할 수 없으므로 다음 질문의 요구 사항을 거의 충족하지 못합니다. ” 현대 아키텍처가 다음과 같은 방식으로 반 정밀도를 지원하는지 궁금합니다. 단 정밀도 또는 배정 밀도입니다. ” 단순한 저장 형식입니다. 당신은 ‘ 메모리 대역폭 / 공간에 대한 ALU 변환주기를 거래하고 있습니다.
- 말 그대로 스토리지 유형이라고 말했고 모든 절약은 더 좁은 데이터에서 비롯되며 컴퓨팅은 단 정밀도로 수행됩니다. 오해의 소지가 전혀 없습니다. 가능한 지원의 절반 인 지원이 무엇인지 말씀 드렸습니다.
- 모두 감사합니다. 실제로 이러한 각 댓글이 유용하다는 것을 알았습니다. 질문을 한 최초의 이유는이 정확한 것에 대해 다른 사람들이 주장하는 것을 들었 기 때문입니다.
- @AsadMehasi : Stack Overflow 관련 : 반 정밀도 Intel 칩의 부동 소수점 연산 -Skylake 이후 통합 GPU에서는 가능하지만 IA 코어에서는 저장 /로드시
float
로 /에서 변환하는 경우에만 가능합니다. (다가오는 HW에서 BFloat가 지원 될 때까지)
답변
제 생각에는 그다지 균일하지는 않습니다. 저 정밀도 산술은 기계 학습에서 약간의 견인력을 얻은 것 같지만 “사람들이 저 정밀도가 의미하는 바에 대한 다양한 정의가 있습니다. IEEE-754 절반 (10 비트 가수, 5 비트 지수, 1 비트 부호)이 있습니다. 정밀도보다 동적 범위를 선호하는 bfloat16 (7 비트 가수, 8 비트 지수, 1 비트 부호) 및 다양한 기타 형식 (NVidia의 19 비트 TensorFloat, AMD의 fp24 등). 이 물건의 대부분은 특수 목적의 GPGPU 유형 하드웨어에서 실행됩니다.
반대로, float 및 double은 IEEE-754 준수, 32 비트 (23/8/1) 및 64 비트 (52/11/1) 표현과 같이 일반적으로 합의 된 의미를 갖습니다.
댓글
- 확실히 비표준이지만 광학 컴퓨팅 은 효과적으로 절반을 사용합니다. -정밀 (또는 그 이하) 부동 소수점 연산.
답변
허용되는 답변은 개요를 제공합니다. NVIDIA 프로세서 지원에 대한 몇 가지 세부 사항을 추가하겠습니다. 여기서 설명하는 지원은 16 비트, IEEE 754 준수, 부동 소수점 산술 지원 (추가, 곱하기, 곱하기 더하기 및 다른 형식과의 변환 포함)입니다. .
Maxwell (2015 년 경)
최초 IEEE 754 FP16 ( “binary16″또는 “half precision”) 지원은 Maxwell 세대의 cc (컴퓨팅 기능) 5.3 장치에서 제공되었지만이 컴퓨팅 기능은 Tegra TX1 프로세서 (SoC, 예 : Jetson)
파스칼 (2016 년 경)
Pascal 가족 구성원은 “전체 요금”(cc 6.0, 6.2 ) 또는 “낮은 속도”(cc 6.1) FP16 처리량. cc6.2는 다시 Tegra 제품군 인 TX2였습니다. cc 6.0 및 6.1은 GeForce, Quadro 및 Tesla와 같은 다양한 제품군의 다양한 프로세서에서 사용되고 있습니다. 여기서 “전체 속도”는 작업이 half2 데이터 유형을 사용하여 수행되었을 때 해당 프로세서에 대한 IEEE 754 FP32 ( “binary32″또는 “단일 정밀도”) 속도의 두 배에 해당하는 속도를 나타냅니다 (2 개의 절반 수량은 동일한 레지스터 및 명령).
Volta, Turing (2017, 2018)
Volta 및 Turing 가족 구성원 (cc 7.x)은 ” full rate “이며 또한 TensorCore 작업의 형식을 사용합니다.
Ampere (2020 년 5 월)
최근 발표 된 Ampere 아키텍처 A100 GPU 는 FP16도 지원합니다. Volta 및 Turing과 유사한 방식으로, 가수가 동일한 크기 (비트 수) 인 형식 인 TF32 데이터 유형 에 대한 추가 기능을 도입합니다. FP16 가수 및 t 지수는 FP32 지수와 같은 크기입니다. Bfloat16 기능도 Ampere에서 발표되었습니다.
최근 발표 된 Ampere 아키텍처 프로세서 외에 16 비트 부동 소수점 연산에 대한 지원 및 처리량 컴퓨팅 기능 (아키텍처 포함) 전반의 (및 기타 작업)은 CUDA 프로그래밍 가이드의 표 3 에서 찾을 수 있습니다. 처리량은 클럭 당, 멀티 프로세서 당이므로 GPU 유형 및 사양에 따라 확장해야합니다. 이러한 처리량은 TensorCore 작업용이 아니며, 최대 처리량은 일반적으로 half2 데이터 유형 (단일 32 비트 단어에 함께 압축 된 두 개의 절반 수량)을 처리 할 때만 적용됩니다.
Answer
다음을 통해 하드웨어가 반 정밀도를 지원하는지 확인할 수 있습니다.
$ lscpu | grep Flags | grep f16c Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti ssbd mba ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req md_clear flush_l1d
f16c
지침은 여기 에 설명되어 있습니다.
댓글
- F16C의 C는 Conversion을 의미합니다. SIMD ALU 처리량이 아닌 메모리 대역폭 / 캐시 풋 프린트에만 도움이됩니다. 수학을 수행하려면 float로 변환해야하므로 FMA 연산을위한 SIMD 벡터 당 요소 수가 개선되지 않습니다. ‘