問題タブ [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.
android - Androidでのffmpegネオンコンパイル - アセンブラエラー
ネオンをサポートする Android 用の ffmpeg をコンパイルしようとしていますが、次のアセンブラー エラーが発生します。誰かがこれについて手がかりを持っているかどうか教えてください。
android - ネオンをサポートしないアンドロイドでの ffmpeg デコードのパフォーマンス
Androidでffmpegコードをコンパイルし、ネオンサポートなしでarmv5te用にビデオを再生できました。デコードは良好で、ビデオは再生されますが、問題はフレーム レートが非常に悪いことです。最大で 5 fps が得られますが、これは恐ろしいことです。
Androidでffmpegをサポートせずにビデオを再生することに成功した人はいますか? それとも、私が本当に欠けているものはありますか?
編集:構成実行して取得しました
arm - ARM から C への呼び出し規約、保存する NEON レジスタ
通常のレジスタをカバーする同様の投稿があります。NEONレジスタはどうですか。私が覚えている限りでは、レジスタの上半分または下半分のいずれかを関数呼び出し間で保持する必要があります。その情報はどこにも見つかりません、誰かがそれを明確にすることができますか?
ありがとう
AAPCSから、§5.1.1 コア レジスタ:
- r0 ~ r3は、引数およびスクラッチ レジスタです。r0-r1は結果レジスタでもあります
- r4-r8は呼び出し先保存レジスタです。
- r9は callee-save レジスターである場合とそうでない場合があります (AAPCS の一部のバリアントでは、これは特殊レジスターです)。
- r10-r11は呼び出し先保存レジスタです。
- r12~r15は特殊レジスタ
AAPCSから、§5.1.2.1 VFP レジスタの使用規則 (VFP v2、v3、および Advanced SIMD 拡張) :
- s16–s31 (d8–d15, q4–q7)は保存する必要があります
- s0–s15 (d0–d7, q0–q3)およびd16–d31 (q8–q15)は保存する必要はありません
arm - 皮質A9におけるPLDの影響なし
次のプログラムを使用して、PLD
パフォーマンスへの影響を確認しています。しかし、私PLD
が書いた C コードがある場合とない場合のパフォーマンスの違いを見つけることができませんでした。不足しているものや、追加する必要のあるコンパイラ オプションはありますか?
arm - 組み込み関数を使用したネオンの最適化
ARM NEON 組み込み関数について学び、配列内の要素を 2 倍にするために記述した関数のタイミングを計っていました。組み込み関数を使用したバージョンは、単純な C バージョンの関数よりも時間がかかります。
ネオンなし:
ネオンの場合:
配列とベクトルの間のロード/ストア操作に時間がかかり、並列追加の利点が相殺されているかどうか疑問に思っています。
更新: Igor の返信に対する詳細情報。
1.コードは次の場所に掲載されています:
plain.c
plain.s
ネオン.c ネオン
.s
両方のアセンブリ リストのセクション(ラベル) L7 から、ネオン バージョンの方がアセンブリ命令の数が多いことがわかります。
2.arm-gcc で -mfpu=neon を使用してコンパイルしました。他のフラグや最適化はありません。プレーン バージョンでは、コンパイラ フラグはまったくありません。
3.それはタイプミスでした。SIZE はサイズであることを意味していました。両方とも同じです。
4,5.4000要素の配列で試しました。関数呼び出しの前後に gettimeofday() を使用して時間を計りました.NEON=230us,ordinary=155us.
6.はい、それぞれの要素を印刷しました。
7.これを実行しましたが、まったく改善されませんでした。
c++ - ARMNEONがプレーンC++より速くないのはなぜですか?
C++コードは次のとおりです。
これがネオンバージョンです:
テスト機能:
私は両方の亜種をテストしました、そしてここにレポートがあります:
他のタイプもテストしました:
質問:32ビット整数型ではネオンが遅いのはなぜですか?
AndroidNDK用のGCCの最新バージョンを使用しました。NEON最適化フラグがオンになりました。分解されたC++バージョンは次のとおりです。
ネオンの分解バージョンは次のとおりです。
これがすべてのベンチテストです:
質問:32ビット整数型ではネオンが遅いのはなぜですか?
gcc - スタックがアクセスされていない場合でも、arm-gcc がスタック ポインタをデクリメント/インクリメントするのはなぜですか?
このプログラムを arm-elf-gcc-4.5 -O3 -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=softfp でコンパイルする場合:
...これが私が得たものです。@<<< でマークされた 2 つの役に立たない命令に注意してください。
スタックにアクセスすることはありませんが、スタック ポインターはデクリメントされ、同じ量だけインクリメントされます。なんで?
元のコードを変更して、プロローグの最後とエピローグの最初に asm コメントを含めると、次のようになります。
次に、わずかに異なるバージョンを取得します。
スタック ポインターのデクリメント/インクリメントは明らかにプロローグ/エピローグの一部であり、スタックが使用されていない場合でも発生します。それは何らかの標準に準拠するためですか、それとも gcc 最適化のバグですか?
編集:コンパイラは arm-elf-gcc-4.5 (GCC) 4.5.0 で構成されています: /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_cross_arm-elf-gcc/work/gcc-4.5.0/ configure --prefix=/opt/local --infodir=/opt/local/share/info --mandir=/opt/local/share/man --target=arm-elf --program-prefix=arm-elf- --program-suffix=-4.5 --without-included-gettext --enable-obsolete --with-newlib --disable-__cxa_atexit --enable-multilib --enable-biendian --disable-libgfortran --with-gxx -include-dir=/opt/local/arm-elf/include/c++/4.5.0/ --enable-languages=c,c++,objc --build=x86_64-apple-darwin10 --enable-fpu
編集:次のCソースを使用して問題を特定できました。として宣言されている float32x4x2_t など、ベクトル型の配列を一時として使用する場合にのみ発生しますが、struct { float32x4_t val[2]; }
これらの一時はレジスタに作成されます。これはバグだと思うので、報告しました。
assembly - NEON アセンブリと非ベクトル関数の混合
私は自分の質問に対する答えを見つけたと思います。NEON/VFP レジスタでスカラー計算を行うトリックを実行できる VFP 用の「fmacs」命令があります。
私はNEONまたはARMプログラミングに非常に慣れていません...
上三角行列を NEON レジスタにロードし、単精度を使用してベクトルの外積を積分 (累積) したいと考えています。基本的な考え方は、A += x'*x です。ここで、A は上三角行列です。一部の操作は、quad または double レジスターで NEON 命令 "vmla.f32" を使用して操作をベクトル化することで実行できます。ただし、一度に 1 つの精度レジスタを操作するだけでよい場合もあります。つまり、2 つまたは 4 つの単精度レジスタを操作する必要はありません。以下の例では(動作しません)、次の行に興味があります
NEON レジスタを使用して 1 つの単精度演算を実行したいと考えています。
コードスニペット:
assembly - NEON ASMコードの実行速度はCコードよりもはるかに遅いですか?
NEONを使用してiPhoneARMの特定の問題に対してガウスニュートン最適化を実装しようとしています。以下の最初の関数は、私の元のC関数です。2つ目は、私が書いたNEONasmコードです。私はそれぞれを100,000回実行しましたが、NEONバージョンはCバージョンよりも7〜8倍長くかかります。読み込み(vld1.32)がほとんどの時間かかると思います。いくつかの指示を削除して実験しました。
誰かがこの問題について何か洞察を持っていますか?ありがとう!
iphone - ビデオからフレームを読み取るときに、OpenGL ES 2.0 で使用するために 16 ビット ピクセル形式に変換する方法 (AV Foundation)
OpenGLを使用して、1280x720 のクイックタイム ビデオの各フレームで画像処理を行っています。次にフレームが読み戻され、これらから新しいビデオが作成されます。問題は、大量のデータをOpenGLとの間で( glTexImage2DとglReadPixelsを使用して) 転送する必要があるため、プロセスが非常に遅くなることです。
現在、AVAssetReaderTrackOutputインスタンスのピクセル形式としてkCVPixelFormatType_32BGRAを使用しています。時間を短縮するために、代わりに 16 ビット ピクセル形式を使用したいと考えています。残念ながら、このような形式に変更すると、AVAssetReaderTrackOutput の copyNextSampleBufferメソッドを呼び出すときに空のフレームが表示されます。AV Foundation で 16 ビット ピクセル形式を使用した経験のある人はいますか?
AV Foundation にフォーマットを変更してもらうことができない場合は、おそらく NEON 命令を使用して、「手動で」32 ビットから 16 ビットに変換できると思いますか? どんな助けでも大歓迎です。