問題タブ [avx]
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.
x86 - 新しい命令セットの開発
Intel は、SSE の 256 ビット操作への拡張を含むAVXと呼ばれる新しい命令セットをリリースする予定です。つまり、4 つの倍精度要素または 8 つの単精度要素のいずれかです。
AVX をサポートするハードウェアがまだないことを考えると、AVX 用のコードを開発するにはどうすればよいでしょうか? より一般的に言えば、開発者は、たとえば、サポートする CPU がリリースされたときにソフトウェアを準備したい場合など、存在しないハードウェア用のコードをどのように記述できるでしょうか?
x86 - AVX 命令セットを現在サポートしているアセンブラはどれですか?
AVX (高度なベクトル拡張) 命令をいくつか試してみたいと思います。Intel がこれらの命令を含むソフトウェアをテストするためのエミュレーターを提供していることは知っていますが (この質問を参照)、手動で 16 進コードを書きたくないので、どのアセンブラーが現在 AVX 命令セットを認識しているかという疑問が生じます。
Windows で動作し、Intel 構文を受け入れるようにできるアセンブラに最も興味があります。
c++ - Intel AVX組み込み関数:互換性ライブラリはありますか?
Intel AVX組み込み関数ライブラリはありますか?コンパイル時にSSE2整数組み込み関数が使用できない場合に、MMX組み込み関数にフォールバックする「sse2mmx.h」ヘッダーに似たものを探しています。したがって、AVX用の同様のライブラリがあれば、AVX拡張機能が利用できない場合にほぼ最適な速度になる、新しいハードウェア用に最適化されたコードを記述できます。グーグルはこれまであまり役に立たなかった:(
x86 - C++ での SSE/AVX の x86 CPU ディスパッチ
SSE(2) 組み込み関数を使用した手動最適化の恩恵を受けるアルゴリズムがあります。さらに、このアルゴリズムは、将来的に 256 ビット AVX レジスターの恩恵を受けることもできます。
私の質問は、最善の方法は何ですか
- コンパイル時にクラスの可用性バリアントを登録します。したがって、私のクラスがたとえば:で
Foo
ある場合、どのクラスがコンパイルされているかを実行時に決定する手段が必要です。FooSSE2
FooAVX
- 現在の CPU の機能を確認します。最低レベルでは、これは
cpuid
呼び出しになります。 - 何がコンパイルされ、何がサポートされているかに基づいて、実行時に何を使用するかを決定します。
上記のほとんどをハッキングできますが、いくつかのベストプラクティスが出現したに違いないほど一般的な問題のようです. #ifdef
理想的には、私は混乱を避けようとしています
xcode - Xcode 4 は AVX をサポートしていますか?
gcc -mavx
Xcode 4 のダウンロードに時間とお金を費やす前に、Sandy Bridge CPU (つまり、主流の gcc ビルド)で AVX 命令セットをサポートするバージョンの gcc (または LLVM などの他のコンパイラ) が付属しているかどうか教えてもらえますか? 公開されているリリース ノートをどこにも見たことがないので、確認するのは簡単ではありません。また、AVX をサポートしていない限り、Xcode 4 はまだ必要ありません。
gpu - マザーボードにビデオ カードが含まれていない場合、i5 2600K で AVX の手順を使用できますか?
私が読んだすべてのことから、i5 2500K プロセッサは、外部 GPU を検出すると統合グラフィックスを無効にします。ビデオ ポートが内蔵されていないマザーボードを使用しているため、PCI ビデオ カードを追加する必要があります。専用 GPU を搭載していないビデオ カードが見つかりません。AVX 命令を使用するには、オンボード ビデオを備えたマザーボードを使用する必要があるということですか?
visual-c++ - AVX命令を使用すると、exp()の最適化が無効になりますか?
AVX組み込み関数を使用してVC++でフィードフォワードネットを作成しています。このコードは、C#のPInvokeを介して呼び出しています。関数exp()を含む大きなループを計算する関数を呼び出すときの私のパフォーマンスは、160Mのループサイズで約1000msです。AVX組み込み関数を使用する関数を呼び出し、その後exp()を使用するとすぐに、同じ操作でパフォーマンスが約8000ミリ秒に低下します。exp()を計算する関数は標準Cであり、AVX組み込み関数を使用する呼び出しは、処理されるデータに関して完全に無関係である可能性があることに注意してください。ある種のフラグが実行時にどこかでトリップしています。
言い換えると、
または、不思議なことに、
ここでどのようなメカニズムが起こっているのか、あるいはどのように解決策を追求するのかについて、私は迷っています。私はIntel2500Kcpu \Win7を使用しています。VSのExpressバージョン。
ありがとう。
gcc - GCC でのベクトル型 __m128、__m256 とのオーバーロードの競合
新しい Intel の Sandy Bridge プロセッサで AVX 命令をいじり始めました。MinGW64のGCC 4.5.2、TDM-GCC 64ビットビルドを使用しています。
ostream が vector typesなどをコンソール__m256
に出力できるように、operator<< をオーバーロードしたいと考えています。__m128
しかし、私は過負荷の競合に遭遇しています。次のコードの 2 番目の関数は、「以前の宣言と競合しています」というエラーを生成しますvoid f(__vector(8) float)
。
コンパイラは 2 つのタイプを区別できず、両方を考慮しているようf(float __vector)
です。
これを回避する方法はありますか?私はオンラインで何も見つけることができませんでした。どんな助けでも大歓迎です。
gcc - GCC でスタックを 32 バイト境界に揃えるには?
Windows 64ビットターゲット用のGCC 4.6.1に基づくMinGW64ビルドを使用しています。新しい Intel の AVX 命令をいじっています。私のコマンドライン引数は-march=corei7-avx -mtune=corei7-avx -mavx
.
しかし、スタックにローカル変数を割り当てるときに、セグメンテーション違反エラーが発生し始めました。GCC は整列された move と をVMOVAPS
使用して移動し、これらの命令には 32 バイトの整列が必要です。ただし、Windows 64 ビットのスタックには 16 バイトのアラインメントしかありません。VMOVAPD
__m256
__m256d
GCC のスタック アラインメントを 32 バイトに変更するにはどうすればよいですか?
使用してみ-mstackrealign
ましたが、16バイトにしか整列しないため、役に立ちませんでした。とにかく16バイトに整列し__attribute__((force_align_arg_pointer))
ます。これに対処する他のコンパイラ オプションを見つけることができませんでした。どんな助けでも大歓迎です。
編集:
を使用してみ-mpreferred-stack-boundary=5
ましたが、GCC によると、このターゲットでは 5 はサポートされていません。私はアイデアがありません。