問題タブ [sse]
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.
c - glibc と SSE の機能
glibc に関する情報と、それが SSE 機能をどの程度使用しているかを調べようとしています。
最適化されている場合、そのまま使用できますか?
大規模な Linux ディストリビューションの 1 つを使用しているとします。その glibc は、可能な限り汎用的で、可能な限り移植可能になるようにコンパイルされているため、最適化されていないと思いますか?
関数 memcpy と memcmp と、これらの関数をできるだけ速く取得する方法に特に興味があります。
gcc - 最新のコンパイラはmmx/3dnow / sse命令をどのように使用しますか?
私はx86命令セットの拡張機能について読んでいますが、それらは非常に特殊な状況でのみ役立つようです(たとえば、SSE3のHADDPD-(Horizontal-Add-Packed-Double))。これらには、意図的に設定するか、その前の一連の命令から発生する必要がある特定のレジスタレイアウトが必要です。gccのような汎用コンパイラは実際にこれらの命令(またはそのサブセット)を使用する頻度はどれくらいですか、それとも主に手動でコーディングされたアセンブラで使用されますか?コンパイラは、SIMD命令を使用するのが適切な場所をどのように検出しますか?
c - インラインasmを使用する関数全体でSSEレジスタを保持するようにGCCを取得します
私はいくつかの高速数学計算を行う必要があるCでプログラムを書いています。インラインSSEアセンブリ命令を使用して、SIMDアクションを取得しています(パックされた倍精度浮動小数点数を使用)。LinuxでGCCを使用してコンパイルしています。
一部のデータをループする必要がある状況にあり、計算に定数係数を使用しています。ループ中はその要素を安全なレジスタに隠しておきたいので、毎回再ロードする必要はありません。
いくつかのコードで明確にするには:
「register」キーワードで何かしてみました。しかし、私が間違っていなければ、その構造体へのポインターしか(一般的なレジスターに)保持できないように見えます。これは、反復ごとに延期する必要があり、貴重な時間を無駄にします。
GCCがxmm1レジスタを変更しないと仮定するのは好きではありません。それは、「鼻から飛び出す悪魔」のようなものではありません:-)。だから私はこれを行うための適切な方法があることを望んでいます。
cpu-architecture - SSE プリフェッチ命令のサイズを決定する方法は?
SSE プリフェッチ命令のインライン アセンブリを含むコードを使用しています。プリプロセッサ定数は、32 バイト、64 バイト、または 128 バイトのプリフェッチの命令が使用されるかどうかを決定します。このアプリケーションはさまざまなプラットフォームで使用されており、これまでのところ、特定の CPU に最適なオプションをそれぞれのケースで調査する必要がありました。これがキャッシュ ライン サイズであることは理解しています。この情報は自動的に取得されますか? /proc/cpuinfo に明示的に存在していないようです。
loops - Visual Studio のループ ベクトル化 (手動および自動) にはどのようなリソースがありますか?
gcc のリソースがいくつか表示されますが、Visual Studio のリソースは表示されません。
参照、例、トリックの宝庫を持っている人はいますか?
c - Intel x86SSESIMD命令の使用を開始する
SSEの使用についてもっと知りたいです。
インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアルを読む以外に、どのような方法で学ぶことができますか?
主に、GCCX86組み込み関数を使用することに興味があります。
c++ - 別のクラスからコンストラクターを呼び出す
このようなクラスがある場合:
そして、このようなクラス:
bar のインスタンスを作成するときに foo のコンストラクターが呼び出されますか?
bar
のを使用しようとするとm_Data
、に値が含まれていても、初期化されていないように見えるためです。:\quad
bar
numbers[4]
具体的には、これはクラッシュします:
どんな助けでも大歓迎です。:)
programming-languages - SIMDプログラミング言語
ここ数年、私は多くのSIMDプログラミングを行っており、ほとんどの場合、コンパイラの組み込み関数(SSEプログラミング用の関数など)またはプログラミングアセンブリに依存して、本当に気の利いたものに到達しています。もの。しかし、これまで、SIMDのサポートが組み込まれているプログラミング言語を見つけることはほとんどできませんでした。
明らかに、HLSL、Cg、GLSLなど、この種のものをネイティブでサポートするシェーダー言語がありますが、少なくとも自動ベクトル化なしでSSEにコンパイルできるが、ベクトル操作のサポートが組み込まれているものを探しています。 。そのような言語は存在しますか?
これは、スポットライトを実行するCgシェーダー(の一部)の例であり、構文の観点から、これはおそらく私が探しているものに最も近いものです。
この言語で本当に必要なものは次のとおりです。
- 組み込みのスウィズル演算子
- ベクトル演算(ドット、クロス、正規化、飽和、反映など)
- カスタムデータ型(構造体)のサポート
- 動的分岐が便利です(forループ、ifステートメント)
c - 単純なバイナリ減算の SSE による理論上の最大速度向上はどれくらいですか?
私のコードの内側のループがハードウェア設計の障壁にぶつかっているのか、それとも私の側の障壁を理解していないのかを把握しようとしています。もう少しありますが、私が答えることができる最も簡単な質問は次のとおりです。
次のコードがある場合:
コード (アセンブリ、組み込み関数など) を完全に制御できるが、アーキテクチャ以外のランタイム環境を制御できない (つまり、マルチユーザー環境に依存しているため、OS カーネルが特定のプロセスに時間を割り当てる方法については何もできません)。
現在、コードで 3 倍のスピードアップが見られます。SSE を使用すると、3 倍のスピードアップが示すよりもはるかに多くのベクトルの深さが得られると考えていました (おそらく、3 倍のスピードアップは、理論上の最大値が 4 倍であることを示しています)。スループット)。(コンパイラがそれらを自動昇格させるほど賢くなかった場合に備えて、deltx/delty/deltz を配列にするなどのことを試しましたが、それでも 3 倍の速度しか見られません。) Intel C コンパイラをベクトル化に適切なコンパイラ フラグがありますが、明らかに組み込み関数はありません。