числа с плавающей запятой половинной точности [дубликаты]

Я хочу использовать числа с плавающей запятой половинной точности в С++ на процессоре ARM. Я хочу использовать числа половинной точности для арифметических целей. Я не знаю, как я могу определить половинные числа в С++? Есть ли какой-либо тип данных для половинных чисел в С++?

заранее спасибо


person Sooora    schedule 17.10.2019    source источник
comment
В стандартном С++ ничего нет, хотя здесь есть несколько ссылок: stackoverflow.com/questions/5766882/. Обратите внимание, что IEEE754 стандартизирует половинную точность.   -  person Bathsheba    schedule 17.10.2019
comment
Также обратите внимание, что многие аппаратные средства не поддерживают обработку fp16 — что вы на самом деле пытаетесь сделать и на каком процессоре Arm?   -  person solidpixel    schedule 17.10.2019
comment
@solidpixel Я хочу использовать тип данных _Float16 (который предназначен для арифметических целей с числами половинной точности) на Rasberry pi 3.   -  person Sooora    schedule 20.10.2019
comment
Cortex-A53 в Pi 3 не поддерживает аппаратную обработку FP16; все будет преобразовано в FP32 при загрузке и обратно в FP16 в магазине (что не бесплатно). Вы уверены, что хотите пойти по этому пути?   -  person solidpixel    schedule 20.10.2019
comment
FWIW и GCC, и LLVM теперь стандартно поддерживают _Float16 для сборок AArch64; вам просто нужно получить достаточно новый компилятор. Но обратите внимание, что он будет эмулироваться или преобразован в FP32 на большинстве ядер Arm, поскольку только некоторые из новых имеют встроенные арифметические операторы FP16.   -  person solidpixel    schedule 20.10.2019
comment
Архитектура @solidpixel ARM с плавающей запятой (VFP) обеспечивает аппаратную поддержку операций с плавающей запятой в арифметических операциях с плавающей запятой половинной, одинарной и двойной точности. Версия FPU VFPv3, которую можно найти в архитектурах Cortex-A, поддерживает формат половинной точности IEEE и альтернативный формат половинной точности.   -  person Sooora    schedule 20.10.2019
comment
Поддержка полуплавающих значений VFPv3+fp16 и VFPv4 для ARMv7 обеспечивает только преобразование типов с аппаратным ускорением в FP32 или из него. Это позволяет вам хранить данные в структурах как FP16, но все фактические арифметические инструкции по-прежнему являются обычными инструкциями FP32. Таким образом, вы платите накладные расходы за преобразование типа после загрузки или перед сохранением. Если вам действительно нужны арифметические операции FP16 с аппаратным ускорением, вам нужна поддержка ARMv8.2, которой нет у Cortex-A53.   -  person solidpixel    schedule 20.10.2019
comment
@solidpixel о, да. спасибо за предупреждение. Я думаю, что я должен использовать серию cortex-A7 для своей цели. и еще один вопрос. какую библиотеку следует использовать для математических функций половинной точности? (например, ‹quadmath.h› для чисел четверной точности)   -  person Sooora    schedule 20.10.2019
comment
У меня нет личного опыта с ним, извините - я использую FP16 только для передачи данных на графические процессоры;)   -  person solidpixel    schedule 20.10.2019
comment
@solidpixel, согласно моему исследованию, при реализации ARMv8.2-FP16 ARMV8 (Cortex-A53) поддерживает тип данных половинной точности для аппаратной обработки данных. Я прав?   -  person Sooora    schedule 22.10.2019
comment
Cortex-A53 не реализует Armv8.2, это версия 8.0, поэтому вы фактически получаете ту же функциональность, что и Armv7 VFPv4. т.е. вы получаете встроенную поддержку преобразования типов между fp16 и fp32, но не инструкции по обработке данных fp16.   -  person solidpixel    schedule 23.10.2019