問題タブ [intrinsics]

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 投票する
4 に答える
3203 参照

c - SSE組み込み関数を使用して、4つのドット積をCの連続した配列に格納する最も効率的な方法

SSE組み込み関数を使用して、Intelx86Nehalemマイクロアーキテクチャ用にいくつかのコードを最適化しています。

私のプログラムの一部は4つの内積を計算し、各結果を配列の連続したチャンクの前の値に追加します。すなわち、

各ドット積の結果を保持するために4つの一時xmmレジスタを使用してこれを実行していることに注意してください。各xmmレジスタでは、結果は他の一時的なxmmレジスタに対して一意の32ビットに配置され、最終結果は次のようになります。

tmp0=R0-ゼロ-ゼロ-ゼロ

tmp1=ゼロ-R1-ゼロ-ゼロ

tmp2=ゼロ-ゼロ-R2-ゼロ

tmp3=ゼロ-ゼロ-ゼロ-R3

次の手順でそれらを合計することにより、各tmp変数に含まれる値を1つのxmm変数に結合します。

最後に、ドット積の4つの結果すべてを含むレジスタを配列の連続部分に追加して、配列のインデックスがドット積によって増分されるようにします(C_0nは、更新される配列に現在ある4つの値です)。 ; C_2は、これら4つの値を指すアドレスです):

ドット積の結果を取得して、それらを配列の連続するチャンクに追加するための、より回りくどく、より効率的な方法があるかどうかを知りたいです。このようにして、ゼロ以外の値が1つしかないレジスタ間で3つの加算を実行しています。これを回避するためのより効果的な方法があるはずです。

私はすべての助けに感謝します。ありがとうございました。

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

c - Testing for builtins/intrinsics

I have some code that uses gcc intrinsics. I would like to include code in case the intrinsic is missing. How can I do this?

does not work.

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

asp.net-mvc-2 - asp.net mvc 2内でfakeiteasyを使用して、単体テストの目的でユーザーログインを偽造するにはどうすればよいですか?

ASP.NET MVC 2の学習と使用を開始したばかりで、コードの単体テストにも深く関わっています。私の質問は、テスト内でクレデンシャルを渡すことによってユーザーログインをシミュレートする方法です。

私はMSpecを使用していて、テストを作成するためにfakeiteasyに頭を悩ませようとしています。これまでのところ、認証されていないユーザーがページにアクセスしようとしたときに、1つのテストを正しく記述した(テスト条件に合格した)と思います。

ここまでは順調ですね。ただし、認証されたユーザーがホームコントローラーにアクセスしたときのシナリオをテストしたいと思います。私は認証されたユーザーをシミュレートする方法に固執しており、どんな助けやアドバイスも歓迎します。

TIA、

デビッド

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

c++ - C++ クラスを組み込み型にキャストする方法

基本的な C++ クラスの質問:

現在、次のような単純なコードがあります。

私が望むのは、「sType」をクラスに変換して、「return array[ (int)s ]」行を変更する必要がないようにすることです。例 (疑似コード)

助けてくれてありがとう。

0 投票する
4 に答える
10715 参照

c++ - _mm_sfence _mm_lfence と _mm_mfence をいつ使用する必要がありますか?

「Intel 最適化ガイド Guide For Intel Architecture」を読みました。

ただし、いつ使用するかについてはまだわかりません

マルチスレッド コードを記述するときにこれらをいつ使用する必要があるか、誰か説明できますか?

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

memory - さまざまなOSのアトミックメモリアクセスの明確化

私は現在、学習体験としての趣味のプロジェクトとして、WindowsC++ライブラリをMacOSに移植しています。Win Interlocked *関数を使用していくつかのコードに出くわしたので、一般的にこのテーマについて調べようとしてきました。

ここSOで関連する質問を読んで、OSに応じてこれらの操作を行うさまざまな方法があることを理解しています。WindowsではInterlocked*、MacOSではOSAtomic *であり、コンパイラにはこのための組み込み(組み込み)操作があることもわかりました。

gccの組み込みのアトミックメモリアクセスを読んだ後、組み込みのものとOSAtomic*またはInterlocked*のものの違いは何ですか?つまり、gccを使用しているときにMacOSを使用している場合、OSAtomic *またはgcc組み込みのどちらかを選択できませんか?gccを使用してWindowsを使用している場合も同じです。

また、Windows Interlocked *には、インラインバージョンと組み込みバージョンの両方が用意されていることも読みました。組み込みまたはインラインのどちらかを選択するときに考慮すべきことは何ですか?

一般的に、OSには何を使用するかという複数のオプションがありますか?それとも、これも「状況次第」ですか?もしそうなら、それは何に依存していますか?

ありがとう!

0 投票する
0 に答える
490 参照

compiler-errors - CUDA FORTRAN の組み込み関数が機能しない

ISHFT(I, SHIFT)Fortran 関数を使用して、CUDA カーネルでビット シフトを実行しようとしています。Iこれにより、整数がSHIFTビット単位で右にシフトされます。

問題は、SHIFT 引数に変数を渡すと、カーネルで ISHFT が機能しないことです。これが私のコードのカーネル部分です:

これIはデバイス整数で、値 1 でshiftカーネルに渡される引数です。cuda_bitshift

pgf90 test.cufこれを(を使用して)コンパイルしようとすると、次のように表示されます。

ishftただし、2 番目の引数 inを variable ではなく 1に置き換えると機能しますshift。また、たとえば、シフトで算術を使用できる場合は、正常にI = I + shift機能します。

これは組み込み関数が CUDA で動作しないことに関係していますか、それとも何か間違っていますか?

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

c++ - c ++SSESIMDフレームワーク

オープンソースのC++x86 SIMD組み込み関数ライブラリを知っている人はいますか?

Intelは、統合されたパフォーマンスプリミティブライブラリで必要なものを正確に提供していますが、著作権がいたるところにあるため、それを使用することはできません。

編集

私はすでにコンパイラーによって提供される組み込み関数を知っています。私が必要としているのは、それらを使用するための便利なインターフェースです。

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

gcc - gcc、simd 組み込み関数、高速数学の概念

みなさん、こんにちは :)
浮動小数点、SIMD/数学組み込み関数、および gcc の高速数学フラグに関するいくつかの概念を理解しようとしています。より具体的には、x86 CPU で gcc v4.5.0 で MinGW を使用しています。

私はしばらくの間検索してきましたが、それが私が(私が思うに)現時点で理解していることです:

フラグなしでコンパイルすると、fp コードは標準の x87 になり、simd 組み込み関数はなくなり、math.h 関数は msvcrt.dll からリンクされます。

mfpmathmssen、および/またはmarchを使用して mmx/sse/avx コードを有効にすると、gcc はOnftree-vectorizeなどの最適化フラグも指定した場合にのみsimd 命令を実際に使用します。その場合、組み込み関数は gcc によって自動的に選択され、一部の数学関数 (math.h の標準の数学関数についてまだ話している) は組み込み関数になるか、インライン コードによって最適化されますが、他のいくつかは msvcrt から取得されます。 dll. 最適化フラグを指定しない場合、これは変更されますか?

特定の simd データ型 ( v4siv8qiなどの gcc 拡張機能として利用できるもの) を使用する場合、組み込み関数を直接呼び出すか、自動決定を gcc に任せるかを選択できます。適切なフラグを介して simd 命令を有効にしない場合でも、Gcc は標準の x87 コードを選択できます。繰り返しますが、最適化フラグを指定しない場合、これは変化しますか?

私の発言のいずれかが間違っている場合は、私を修正してください:p

今質問:

  1. 組み込み関数を使用するために x86intrin.h を含める必要はありますか?
  2. libm をリンクする必要はありますか?
  3. 速い数学は何かと関係がありますか? それがIEEE標準を緩和することは理解していますが、具体的にはどのように?その他の標準機能は使用されていますか? 他のライブラリがリンクされていますか?それとも、いくつかのフラグがどこかに設定されているだけで、標準の lib の動作が異なるのでしょうか?

助けてくれる人に感謝します:D