問題タブ [neon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
math - NEONを使用したARMアセンブリの高レベルの数学関数
こんにちは、アセンブリは初めてで、いくつかの新しいARMチップでNEONコプロセッサと組み合わせたARMアセンブリに慣れ始めています。方法がわからないことの1つは、sin、cos、tan、expなどの高レベルの数学関数です。これらの数学関数を持つCコードを逆アセンブルすると、それらは外部にあるように見えます。
ios - 画像処理のための arm asm/neon 最適化
私は現在、ios のペイント アプリに取り組んでいます。
NSMutableData バッファへの直接描画を使用し、次のようにブラシでブレンドを適用します。
最適化のための提案はありますか?
以前は neo を使用しようとしましたが、修正できなかったバグがあります (境界ピクセルにバグがありました)。
私はこのようにピクセルを2つずつ繰り返していました:
android - JNI Java 配列を NEON に型キャストする
人々はいつもこれをしていると思いますが、私はここで苦労しています。float の配列を JNI 関数に渡していますが、ARM の NEON SIMD 機能を使用して、この配列に対していくつかの操作を実行するつもりです。私は決してCの専門家ではないので、ちょっと行き詰まっています。これが私がやろうとしていることのスケッチです。
C を使用して配列全体を型キャストする方法を考えなければなりません。また、Java から配列エントリを抽出するときに直接行う方法があるかもしれません ( x = (*env)->GetFloatArrayElements(env,input,0)
)。これについての正しい方法は何ですか?
xcode - ARM NEON アセンブラ エラー: 「命令を条件付きにすることはできません」
アーム情報センターによると、vadd は条件付きで実行できますが、試してみると
Xcode が返す
私が気づいたことの 1 つは、このエラーが発生するのは NEON 命令のみのように思われることです。VFP 命令では、これらのエラーは発生しません。
NEON 条件付き命令を有効にするために設定する必要があるコンパイラ フラグはありますか?
android - Androidに関してネオンとは何ですか?
私はAndroidの初心者です。私の友人は「ネオン」を聞いた。だから私はグーグルをしてこれを見つけました
それを参照すると、ネオンはAndroidOSまたはすべてのモバイルOSのマルチメディアに関連していますね。もっと教えてください。
c++ - NEONとIntelSSE-特定の操作の同等性
いくつかのIntelSSE操作のNEONの同等性を理解するのに問題があります。NEONはQレジスタ全体を一度に処理できないようです(128ビット値のデータ型)。arm_neon.hヘッダーまたはNEON組み込み関数リファレンスに何も見つかりませんでした。
私がやりたいことは次のとおりです。
NEONが提供するシフト操作を見てきましたが、同等の方法が見つかりませんでした(NEONの経験はあまりありません)。上記を行うことは可能ですか(私は方法がわからないと思います)?どんなポインタでも大歓迎です。
c++ - NEON ベクトル データ型のエイリアシング
NEON は、スカラー コンポーネントを使用したベクター データ型のエイリアシングをサポートしていますか?
例(インテル SSE)
上記により、次のことが可能になります。
インテルのエイリアスを使用すると、余分なカウントやインデックスを管理せずに、処理したい次のブロックにポインターを進めることができます。
c++ - Cortex A9 NEON と VFP の使用方法の混乱
Cortex A9 ARM プロセッサ (具体的には OMAP4) 用のライブラリを構築しようとしていますが、浮動小数点演算と SIMD のコンテキストで NEON と VFP のどちらを\いつ使用するかについて少し混乱しています。 . 私は2つのハードウェアコプロセッサユニットの違いを知っていることに注意してください(SO でここでも概説されているように)、それらの適切な使用法に関して誤解があります。
これに関連して、次のコンパイル フラグを使用しています。
私は ARM のドキュメント、多くの wiki (このようなもの)、フォーラム、ブログの投稿を読みましたが、NEON を使用することは、VFP を使用することや、少なくとも NEON を混合することよりも優れていることに誰もが同意しているようです (たとえば、組み込み関数を使用していくつかのアルゴリズムを実装する) SIMD で) VFP はあまり良い考えではありません。これがアプリケーション\ライブラリ全体のコンテキストに適用されるのか、それともコード内の特定の場所 (関数) にのみ適用されるのかは、まだ 100% わかりません。
したがって、組み込み関数も使用したいので、アプリケーションの FPU としてネオンを使用しています。その結果、私は少し問題を抱えており、Cortex A9 でこれらの機能 (NEON と VFP) を最適に使用する方法についての混乱は、解決するのではなく、さらに深まります。アプリのベンチマークを行うコードがいくつかあり、計算が倍精度浮動小数点に基づくカスタムメイドのタイマー クラスを使用します。FPU として NEON を使用すると、完全に不適切な結果が得られます (これらの値を出力しようとすると、ほとんど inf と NaN が出力されます。x86 用にビルドすると、同じコードが問題なく動作します)。そのため、NEON は倍精度浮動小数点を処理しないことが文書化されているため、単精度浮動小数点を使用するように計算を変更しました。. 私のベンチマークではまだ適切な結果が得られません (最悪なのは、x86 で動作しなくなったことです。精度が失われたためだと思いますが、よくわかりません)。したがって、私はほとんど完全に迷っています: 一方では SIMD 機能に NEON を使用したいのですが、FPU として使用すると適切な結果が得られず、他方では VFP と混合することはあまり良い考えではないようです。この分野でのアドバイスは大歓迎です!!
上記のwikiの記事で、NEONのコンテキストで浮動小数点の最適化のために何をすべきかの要約を見つけました:
"
- 単精度浮動小数点のみを使用する
- ボトルネックとなる FP 関数が見つかった場合は、常に NEON 組み込み関数 / ASM を使用してください。コンパイラよりもうまくできます。
- 条件分岐を最小限に抑える
- RunFast モードを有効にする
ソフトFPの場合:
- インライン浮動小数点コード (非常に大きい場合を除く)
- 値ではなくポインターを介して FP 引数を渡し、関数呼び出しの間で整数処理を行います。
"
利用可能なライブラリとリンクできないため、float ABI にはハードを使用できません。ほとんどの推奨事項は私には理にかなっています (「実行モード」は正確には何をすべきか理解していないことと、現時点ではコンパイラよりもうまくできるという事実を除いて)、一貫性のない結果が得られ続けています。今のところ何もわかりません。
Cortex A9/A8 で浮動小数点と NEON を適切に使用する方法と、どのコンパイル フラグを使用する必要があるかについて、誰かが光を当てることができますか?
kinect - SSE2を移行してNEONの本質を武装させる
私はSSE2の組み込みに次のコードを持っています。Kinectからの入力を処理します。
これは基本的に、SSEレジスタ内の11 uint8_t(r0-r10)から8 uint16_tをアンパックします(mmaskは定数であり、以前に作成されています)。次に、境界として機能する2つの配列から、対応する要素を含む2つのレジスタをロードします。それらをチェックし、ゼロ化された基準に適合しない要素を持つレジスタを作成します。次に、それらを保存し、各要素をさらに処理します。movemaskは、どの要素も通過しない場合に最適化として機能します。その場合、処理をスキップできます。
これはうまく機能し、今度はNEONにも移植したいと思います。2つの部分を除いて、そのほとんどは簡単です。SSE2コードからのアセンブラー出力(gcc)を見ると、_mm_setr_epi16で8つのuint16_t移動を実行する代わりに、シフトしてuint32_tに移動し、最後に4つの移動を実行することがわかります。それは効率的だと思われ、コンパイラがそれを処理するので、私はコードを変更しませんでした。NEONの場合は手動で適用する必要がありますか?8 vsetq_lane_u16の代わりに、シフトを実行して4 vsetq_lane_u32を実行しますか?エンディアンに問題がありますか?それは価値がありますか?
同等のものを見つけることができなかったので、最後の部分はムーブマスクです。誰かが何かを提案できますか?
performance - Qualcomm Scorpion デュアルコア ARM NEON コードの問題?
デュアルコア ARM チップセット MSM8660 で最大のパフォーマンスを得るために、ARM アセンブリの最適化とマルチスレッドを使用する Android 用のネイティブ ライブラリを開発しています。いくつかの測定を行っているときに、次のことに気付きました。
- NEON最適化を使用したシングルスレッドライブラリは、 ARMv6最適化を使用したシングルスレッドライブラリよりも高速です(予想どおり)。
- ARMv6最適化を使用したマルチスレッドライブラリは、ARMv6最適化を使用したシングルスレッドライブラリよりも高速です(予想どおり)。
- NEON最適化を使用したマルチスレッドライブラリは、NEON最適化を使用したシングルスレッドライブラリよりも遅くなります(絶対に予想外です!)。
これがなぜなのかについての説明を求めてネット全体を検索してみましたが、これまでのところ何も見つかりませんでした。すべてのコアが同じ NEON パイプラインなどを共有しているように見えますが、すべての回路図は、各コアに独自の NEON ユニットが必要であることを示しているようです。なぜこれが起こっているのか誰にも分かりますか?