問題タブ [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ビルドシステム、NEONおよび非NEONビルド
armv6用のライブラリを構築したいのですが、デバイスがサポートしている場合に実行時に有効にするネオンコードがいくつかあります。ネオンコードはネオン組み込み関数を使用しており、コンパイルできるようにするには、armeabi-v7aを有効にする必要がありますが、これは通常のcコードに影響します(一部のローエンドデバイスでは壊れます)。
したがって、Androidビルドシステムが過度に煩わしくない場合は、質問する必要はありませんが、armv6用に1つのファイルをコンパイルし、arm7-neon用にもう1つのファイルをコンパイルする方法はないようです。
それが実行可能であれば、誰かが手がかりを与えることができますか?
編集
返信してinternet-inkを無駄にする前に、これらが主なポイントであることを明確にする必要があります
。1)1つのlibのみを作成します。
2) armv6(pre neonデバイス、たとえばarmeabi)で実行されるビルドを作成します。
3)このビルドにNEONコードも含めることを許可します(実行時のCPU検出に基づいて実行できます。CPU検出は質問の範囲外です)。
4) NEONコードはac / cppファイルから取得され、neon組み込み関数を使用して記述されます。
これらの要件のいずれかの部分を省略すると、問題のポイントが完全に失われます
iphone - NEON を使用した RGBA8888 から RGB565 への変換の最適化
NEON ベクトル命令セットを使用して、iOS で画像フォーマット変換を最適化しようとしています。これは似たようなデータの束を処理するため、これによく対応すると思いました。
ただし、私の試みはそれほどうまくいきませんでした.単純なc実装に対してわずかなスピードアップしか達成できませんでした:
iPad 2 での 1 メガピクセルの画像配列:
形式は [min avg max n=タイマー サンプル数] ミリ秒単位です。
C: [14.446 14.632 18.405 n=1000]ミリ秒
NEON: [11.920 12.032 15.336 n=1000]ミリ秒
NEON 実装での私の試みは以下のとおりです。
コードは LLVM 3.0 を介して次のようにコンパイルされました (.loc と余分なラベルは削除されています)。
完全なコードはhttps://github.com/darknoon/DNImageConvertで入手できます。
android - NEONレジスタに0.0を割り当てるときの「即時範囲外エラー」
私が正しく理解していれば、ARM命令は32ビット長であるため、即時値の非常に多くのビットしか保持できません。私がやろうとしているのは、ですvmov.f32 s0, #0.0
、そして私は" immediate out of range
"コンパイラエラーを受け取ります。#0.5
奇妙なことに、たとえば、または(すべて非常にきれいにバイナリで表されている)の即値を使用すると#0.25
、コードがコンパイルされます。のイミディエート値を割り当てようとすると#0.1
、 " garbage after following instruction
"エラーが発生します。これは、ARM命令に収まるより多くのビットでそれらの値を表現しようとしている場合に意味があります。「」が出るの#0.0
はケースだけimmediate out of range
なので、他に説明がなければバグだと思います。
#0.0
他の場所から変換せずに、のイミディエート値を1ワード浮動小数点レジスタに割り当てる方法を知っている人はいますか?そもそもうまくいかないという正当な理由がある場合は、私にも知らせてください。AndroidNDKビルドツールでGNUアセンブラを使用しています。
更新:
vmov.f32 d0, #0.0
動作します。それはますます意味をなさなくなり続けます。
アップデート2:これも機能しません:vmov.s32 s0, #0
android - 必要なヒント: ffmpeg-neon 最適化を使用した Android での aac エンコード
そこで、ffmpegとneonを使用してlibfaac/libx264エンコーダーのパフォーマンスを改善しようとしています.neonをサポートしてffmpegを正常にコンパイルしたようで、ビデオエンコードのパフォーマンスは実際にいくらか改善されていますが、aacエンコードに関してはほとんど実行できません.. .特に aac に関するコードを変更する必要がありますか? これはネオンの fft と何か関係がありますか?まったく無知です。どんなヒントでも大歓迎です!ありがとう
android - ARMネオンを使用して短い配列を浮動小数点に変換する
NEONを使用してAndroidコードを最適化しようと試み始めたところです。ただし、いくつか問題があります。主な問題は、16ビットから浮動小数点への迅速な変換を行う方法を実際に理解できないことです。
vcvt.s32.f32を使用して、複数の32ビットintを1つのSIMD命令でfloatに変換できることがわかりました。ただし、4つのS16のセットを4つのS32に変換するにはどうすればよいですか?VUZP命令と関係があると思いますが、どうしたらいいのかわかりません...
同様に、VCVT.s16.f32を使用して一度に116ビットをフロートに変換することは可能ですが、これは便利ですが、SIMDを使用して変換できないことは非常に無駄に思えます。
私は何年にもわたって多くの異なるプラットフォームでアセンブラを作成してきましたが、ARMのドキュメントは何らかの理由で完全に理解できないと感じています。
そのようなものとして、どんな助けでも大いに感謝されるでしょう。
また、NEONユニットのスループットとレイテンシの数値を取得する方法はありますか?
前もって感謝します!
android - NEON 命令セットを搭載した Android タブレットはありますか?
VLC for Androidの非公式ポートに NEON の手順を使用することに興味があります。
NEON 命令セットを搭載した Android スマートフォンが存在したとしても、NEON を搭載した Android タブレットを見つけることはできませんでした。ヨーロッパで販売されている Android テーブルはありますか?
sse - SSEとNEONの組み込み関数間の変換-シャッフル
SSE3組み込み関数で記述されたコードをNEONSIMDに変換しようとしていますが、シャッフル機能が原因でスタックしています。GCC組み込み関数、 ARMマニュアル、その他のフォーラムを確認しましたが、解決策を見つけることができませんでした。
コード:
vtbl1_u8(uint8x8_t、uint8x8_t)命令は、宛先レジスタに値を割り当てるために使用できるルックアップテーブルを作成しますが、64ビットレジスタでのみ動作します。また、シャッフル操作は、開始時に実行する必要がある比較を実行します。 NEONと私はそれを効率的に行う方法を知りません。
r0 =(mask0&0x80)?0:SELECT(a、mask0&0x0f)// SELECT(a、n)は、aからn番目の8ビットパラメータを抽出します。
r1 =(mask1&0x80)?0:SELECT(a、mask1&0x0f)
..。
最初にマスクの上位ビットをチェックし、次にマスクの下位4ビットを効率的に選択する命令が見つかりません。レジスタ内の各ビットを比較してから、条件が指定されている場合は下位4ビットを選択できることはわかっていますが、私はそれを効率的に行うことを望んでいました。誰かが助けてくれるか、参考になることを願っています。
どうもありがとう、
乾杯!
android - iOS / Android ARMデバイス用の最速のFFTライブラリは何ですか?
iOS / Android ARMデバイス用の最速のFFTライブラリは何ですか?そして、人々がiOS / Androidプラットフォームで通常使用するライブラリは何ですか?vDSPはiOSで最も頻繁に使用されるライブラリだと思います。
編集:私のコードはhttp://anthonix.com/fftsにあり、BSDライセンスを使用しています。AndroidとiOSで動作し、libav、FFTW、vDSPよりも高速です。
EDIT2:誰かがPOWER7マシン(または他のマシン)へのアクセスを提供できる場合は、私にメールしてください。よろしくお願いします。
乾杯、
assembly - ARM Cortex A8 Benchmarks: 誰かがこれらの数値を理解するのを手伝ってくれますか?
私は Android でいくつかのリアルタイム DSP アルゴリズムを作成する作業を行っているため、可能な限りすべてを最適化し、数学を最大限に軽量化するために、ARM をアセンブリで直接プログラムすることにしました。最初はあまり意味のない速度ベンチマークを取得していたので、パイプラインの危険性や二重発行機能などについて読み始めました。取得している数字のいくつかにまだ困惑しているので、誰かが私が取得した理由を明らかにしてくれることを期待してここに投稿しています. 特に、NEON が各操作を正確に 1 サイクルで実行すると主張しているにもかかわらず、異なるデータ型で計算を実行するのに異なる時間がかかる理由に興味があります。私の調査結果は次のとおりです。
私はベンチマークに非常に単純なループを使用しており、2,000,000 回の反復を実行しています。これが私の機能です:
vector add ( vadd
) および signed 32-bit int ( s32
) として指定された計算操作とデータ型に注目してください。この操作は一定時間内に完了します (以下の結果表を参照)。この ARM Cortex-A8 ドキュメントと次のページによると、NEON のほとんどすべての基本的な算術演算は 1 サイクルで完了するはずですが、私が得ているものは次のとおりです。
上記のループ内のすべての操作とデータ型を単純に置き換えることで、それらを実行します。よりも 2 倍速く、よりvadd.u32
2 倍速い理由はありvadd.f32
ますか?vmul.f32
vmul.u32
乾杯!= )
android - ネオン最適化による FFMPEG
ffmpeg を使用して Android で h.264 ビデオ ファイルをデコードしています。パフォーマンスは非常に低いです。パフォーマンスを向上させるために、ffmpeg でネオンの最適化を有効にしたいと考えています。構成ファイルにネオン関連のコマンドを追加したにもかかわらず、パフォーマンスの向上は見られません。私がどこかで間違っているかどうか誰かに教えてもらえますか? 私の設定ファイルは以下の通りです。