問題タブ [auto-vectorization]

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.

0 投票する
2 に答える
37042 参照

gcc - gcc でベクトル化するには?

v4 シリーズのコンパイラーは、AMD Athlon や Intel Pentium/Core チップなどの最新の CPU でSIMDgccプロセッサーを使用してループを自動的にベクトル化できます。これはどのように行われますか?

0 投票する
8 に答える
133568 参照

vectorization - 「ベクトル化」とは何ですか?

何度か、matlab、fortran ...他の...でこの用語に出くわしましたが、それが何を意味し、何をするのかについての説明を見つけたことがありません。だから私はここで、ベクトル化とは何ですか、そしてそれは例えば「ループがベクトル化される」とはどういう意味ですか?

0 投票する
3 に答える
12686 参照

gcc - GCC の使用中にベクトル化を無効にするにはどうすればよいですか?

次のコマンドを使用してコードをコンパイルしています。

これにより、すべての最適化が有効になります。

しかし、他の最適化を維持しながら、ベクトル化を無効にしたいと考えています。

0 投票する
1 に答える
421 参照

c# - CLR C++ ライブラリでの SIMD の使用

C# と Visual Basic と .NET CLR は、ユーザー インターフェイスや基幹業務アプリケーションなどの優れた開発環境です。

ただし、実行タイミングが前後するコードをたくさん書いておりO(n^3): n > 1000、いくつかの場所ではそれよりも高くなっています。基本的に、これらのループは 1 つの大きな配列から読み取り、簡単な計算を行い、5 つまたは 6 つのテストを行い、結果を同じサイズの 2 つ目の配列に書き込みます。

そのほとんどは、Intel Fortran プログラムを 64 ビットの世界に持ち込むために移植されたコードです。そのコードの自動ベクトル化を行わないと、実行時間が大幅に遅くなることに注意してください。.NET は、現在販売されているすべての Intel プロセッサに見られる SIMD 操作の使用をサポートしていません。

熟練したプログラマーが移植できる厳密なアルゴリズムで関数が既に記述されているため、そのプログラマーにコードを C++ CLR ライブラリに移植するように依頼することもアプローチの 1 つかもしれないと考えました。

  • 自動ベクトル化され、C#/VB プログラムが呼び出すための CLR インターフェイスを提供する C++ ライブラリを取得することは可能ですか?
  • いいえの場合、回避策はありますか? COM インターフェイスはそのような回避策の 1 つですか?
  • はいの場合、それはどのような形を取る必要がありますか?
0 投票する
1 に答える
1519 参照

gcc - GCC で関数内の特定のループの自動ベクトル化を無効にする

関数内の特定のループの自動ベクトル化をオフにしたいと考えています。GCCでこれを行うにはどうすればよいですか? 関数全体の自動ベクトル化をオフにできることはわかって__attribute__((optimize("no-tree-vectorize")))いますが、関数内の個々のループに対してこれを行うにはどうすればよいですか (MSVC では add を使用できます#pragma loop(no_vector))。

0 投票する
1 に答える
37 参照

c - VC2013 でコード ブロックが自動ベクトル化されない理由

コード ブロックは、mozilla firefox の qcms transform_util.c からのものです。

このループの場合:

VC2013 では以下が表示されます。

e:\mozilla\hg\nightly\mozilla-central\gfx\qcms\transform_util.c(490) : info C5002: 故「500」,循環未向量化

MSDN ( http://msdn.microsoft.com/en-us/library/jj658585.aspx ) には次のように表示されます。

しかし、上記のループには if/break/continue がありません。ベクトル化できない理由がわかりません。

0 投票する
2 に答える
264 参照

c - SSE 命令によるベクトル化の理解

SSE 命令によるベクトル化がどのように機能するかを理解しようとしています。

ベクトル化が行われるコード スニペットを次に示します。

そして私のコンパイルコマンド:

アセンブラコードの出力は次のとおりです。

私は何年も前にアセンブラーを練習してきましたが、レジスタ %rdi、%rax、および %rsi の上にあるものを知りたいです。

%xmm0 は、2 つの倍精度浮動小数点数 (16 バイト) を格納できる SIMD レジスタです。

しかし、同時追加がどのように実行されるかわかりません:

私はすべてがここで起こると思います:

%rax は "x" 配列を表しますか?

%rsi は C コード スニペットで何を表していますか?

最終結果 (たとえば、 a[0]=a[0]+b[0] は %rdi に格納されますか?

ご協力いただきありがとうございます