В файле arm_neon.h отсутствуют все типы float16_t? - PullRequest
1 голос
/ 06 июля 2011

Я использую инструкцию NEON SIMD для написания части приложения для Android, ориентированной на процессоры Cortex A8. Согласно данного справочного руководства , NEON поддерживает 16-битные и 32-битные числа с плавающей запятой, то есть float16_t и float32_t. Когда я попытался использовать float16_t и все связанные с ним векторные типы, я получил сообщение о том, что этот тип не объявлен. Просматривая содержимое arm_neon.h, я обнаружил, что этот тип действительно необъявлен.

Есть ли причина для этого? Advanced SIMD от ARM, очевидно, поддерживает такие типы данных и инструкции. Кто-нибудь сталкивался / решил это? Это где-нибудь задокументировано?

Ответы [ 3 ]

6 голосов
/ 26 июля 2011

Процессоры Cortex-A8 не поддерживают 16-разрядные числа с плавающей запятой в аппаратном обеспечении.

Процессоры Cortex-A9 do имеют инструкции для преобразования между 16- и 32-немного с плавающей точкой, но это все, что вы получаете (и это все, что должно быть обеспечено в системе IEEE-754 - float16 не предназначен для арифметики, только для компактного хранения).Модель использования заключается в загрузке данных float16, преобразовании их в float32 для выполнения арифметики, а затем преобразовании обратно в float16 перед сохранением.

1 голос
/ 06 июля 2011

Можете ли вы указать пример раздела в документе, который вы связали, где вызываются эти 16-битные операции с плавающей запятой? Я вижу довольно много определенных 16-битных целочисленных операций. Вы используете компилятор ARM или GCC? И вы говорите о SIMD или NEON?

«Технология NEON ™ основана на концепции SIMD с выделенным модулем для обеспечения векторных операций шириной 128 бит по сравнению с 32-битной SIMD в архитектуре ARMv6».

EDIT:

Я попробовал это без жалоб компилятора:

int myfun ( int a)
{
    __fp16 b;

    b=a+1;

    return(b+1);
}

используя эту командную строку:

arm-none-linux-gnueabi-gcc -S -mcpu=mpcore -mfp16-format=ieee -mfpu=neon-fp16  simd.c

Использование Cossourcery Lite 2011.03

arm-none-linux-gnueabi-gcc --version
arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2011.03-41) 4.5.2
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
0 голосов
/ 06 июля 2011

Хм, не слишком знаком с инструкциями SIMD.В документе, который вы опубликовали, не упоминается float16_t, но вместо этого также используется количество дорожек (например, float16x4_t)

Кроме того, вы пытались использовать «Float16_t» вместо «float16_t»?

Это мой домашний ноутбук, поэтому у меня нет доступа к компилятору ARM, но я попробую перепроверить это завтра в офисе

...