問題タブ [simd]
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.
optimization - ARMasmで2つのハーフワードを高速飽和およびシフト
32ビットワードに2つの符号付き16ビット値があり、定数値(1から6まで可能)で右にシフト(除算)し、バイト(0..0xFF)に飽和させる必要があります。
例えば、
- shift=5の0xFFE100AAは、0x00000005になる必要があります。
- 0x23451234は0x00FF0091になる必要があります
次のような擬似コードのように、値を同時に飽和させようとしています。
しかし、私が取得するコードは非常に醜くて遅いです。:)私が今持っている最高の(最速の)ものは、次のように、各半分の別々の飽和です:
しかし、それは10サイクルです。:(もっと速くできますか?
ps:後で、このためのUSAT16命令を見つけましたが、これはARMv6専用です。そして、ARMv5TEとARMv4で動作するコードが必要です。
編集:今、私は私の最初のコードを書き直します:
しかし、それは美しくありません。
c++ - スクリプトの上位の関数からスクリプトの下位の関数を呼び出す
私はコンピューターに私のためにいくつかの仕事をさせる方法を考え出そうとしています。SIMD(SSE2&SSE3)を使用して外積を計算していますが、もっと速くなるかどうか疑問に思いました。現在、私は次のものを持っています:
ご覧のとおり、そこには4つのがあり、それらをとの組み合わせに置き換える_mm_shuffle_ps
ことができるかどうか疑問に思いました。_mm_unpackhi_ps
_mm_unpacklo_ps
a2 a3 b2 b3
a0 a1 b0 b1
紙ではわかりませんでしたが、解決策を考えました。コンピューターに必要な手順を総当たり攻撃させたらどうなるでしょうか。さまざまなオプションを再帰的にステップスルーして、正しい答えが得られるものを確認してください。
私はそれを乗算で動作させました、それは私がそれを返したいときにこれを返します(3、12、27、0):
私がそう言うなら、とてもいいです。
しかし、除算を実装したいときに、問題に遭遇しました。Multiplyは、multiplyを呼び出すだけでなく、divideも呼び出す必要があります。さて、乗算の上に除算を置きます。ただし、divideは、divideを呼び出すだけでなく、スクリプトの下位にあるmultiplyも呼び出す必要があるため、まだ存在していません。
Visual C ++の空のコンソールアプリケーションから始めて、すべてをQuadTests.cppに配置しました。
これらの2つの関数が相互に呼び出すことができることを確認するにはどうすればよいですか?
前もって感謝します。
loops - Visual Studio のループ ベクトル化 (手動および自動) にはどのようなリソースがありますか?
gcc のリソースがいくつか表示されますが、Visual Studio のリソースは表示されません。
参照、例、トリックの宝庫を持っている人はいますか?
c - Intel x86SSESIMD命令の使用を開始する
SSEの使用についてもっと知りたいです。
インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアルを読む以外に、どのような方法で学ぶことができますか?
主に、GCCX86組み込み関数を使用することに興味があります。
programming-languages - SIMDプログラミング言語
ここ数年、私は多くのSIMDプログラミングを行っており、ほとんどの場合、コンパイラの組み込み関数(SSEプログラミング用の関数など)またはプログラミングアセンブリに依存して、本当に気の利いたものに到達しています。もの。しかし、これまで、SIMDのサポートが組み込まれているプログラミング言語を見つけることはほとんどできませんでした。
明らかに、HLSL、Cg、GLSLなど、この種のものをネイティブでサポートするシェーダー言語がありますが、少なくとも自動ベクトル化なしでSSEにコンパイルできるが、ベクトル操作のサポートが組み込まれているものを探しています。 。そのような言語は存在しますか?
これは、スポットライトを実行するCgシェーダー(の一部)の例であり、構文の観点から、これはおそらく私が探しているものに最も近いものです。
この言語で本当に必要なものは次のとおりです。
- 組み込みのスウィズル演算子
- ベクトル演算(ドット、クロス、正規化、飽和、反映など)
- カスタムデータ型(構造体)のサポート
- 動的分岐が便利です(forループ、ifステートメント)
vectorization - 「ベクトル化」とは何ですか?
何度か、matlab、fortran ...他の...でこの用語に出くわしましたが、それが何を意味し、何をするのかについての説明を見つけたことがありません。だから私はここで、ベクトル化とは何ですか、そしてそれは例えば「ループがベクトル化される」とはどういう意味ですか?
loops - Haskell からベクトル コードを生成しますか?
GHC にさまざまな SSE 世代の SIMD コードを生成させることは可能ですか?
例えば。このようなプログラムを取得しました
生成されたコード (64 ビット x86 用にコンパイル) がスカラー モード (C および asm バックエンドの両方) で SSE 命令を使用していることがわかります。したがって、addpd ではなく、addsd です。私が取り組んでいるプログラムの種類では、ベクトル命令の使用はパフォーマンスにとって重要です。私のような初心者が GHC に SSE を使ってコードを SIMDize させる簡単な方法はありますか?
simd - SSE とハイパースレッディング
SSE レジスターは論理プロセッサー間で共有または複製されていますか (ハイパースレッディング)? 通常のプログラムと同じように、SSE を多用するプログラムの並列化によって、同じような高速化を期待できますか (Intel は、ハイパー スレッディングを備えたプロセッサで 30% を主張しています)。
assembly - バイトの高速レジスタ内ソート?
レジスタが 4 バイト (SIMD の場合は 16 バイト) の場合、いくつかの命令でレジスタ内のバイトを効率的にソートする方法が必要です。
前もって感謝します。
c# - Mono.Simd Vector3 (フロート) がありませんか?
ねえ、プロジェクトで Mono の SIMD を使用して座標 (X、Y、Z) を処理しようとしていますが、Vector2 と Vector4 型のサポートしか表示されません。以前にこれに遭遇した人はいますか?回避策はありますか?
前もって感謝します。