1

NEON SIMD命令を使用して、CortexA8プロセッサを対象としたAndroidアプリの一部を記述しています。このリファレンスマニュアルによると、NEONは16ビットと32ビットのfloat、つまりとをサポートしていfloat16_tますfloat32_t。とそれに関連するすべてのベクトルタイプを使用しようとするfloat16_tと、このタイプが宣言されていないというエラーが発生しました。の内容を調べてみるとarm_neon.h、このタイプは実際に宣言されていないことがわかりました。

これには理由がありますか?ARMのAdvancedSIMDは、明らかにそのようなデータ型と命令をサポートしています。誰かがこれに遭遇/解決しましたか?それはどこかに文書化されていますか?

4

3 に答える 3

6

Cortex-A8プロセッサは、ハードウェアで16ビットフロートをサポートしていません。

Cortex-A9プロセッサに、16ビットと32ビットの浮動小数点を変換する命令がありますが、取得できるのはそれだけです(IEEE-754システムで提供する必要があるのはこれだけです。float16は算術演算を目的としたものではなく、コンパクトストレージ)。使用モデルは、float16データをロードし、それをfloat32に変換して算術演算を実行してから、保存する前にfloat16に変換し直すことです。

于 2011-07-25T21:29:58.527 に答える
1

うーん、SIMDの手順にあまり詳しくありません。あなたが投稿したドキュメントはfloat16_tについて言及していませんが、代わりにレーン数も使用しています(例:float16x4_t)

また、「float16_t」の代わりに「Float16_t」を試しましたか?

これは私の自宅のラップトップなので、ARMコンパイラにアクセスできませんが、明日オフィスでこれを再確認します。

于 2011-07-05T21:45:18.103 に答える
1

リンクしたドキュメントで、これらの16ビット浮動小数点演算が呼び出されるセクションの例を指定できますか?かなりの数の16ビット整数演算が定義されているのがわかります。ARMのコンパイラまたはgccを使用していますか?そして、あなたはSIMDまたはNEONについて話しているのですか?

「NEON™テクノロジーは、ARMv6アーキテクチャの32ビット幅のSIMDと比較して、128ビット幅のベクトル操作を提供する専用モジュールを備えたSIMDの概念に基づいています。」

編集:

私はコンパイラの苦情なしでこれを試しました:

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

codesourceryliteの使用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.
于 2011-07-05T22:10:03.917 に答える