問題タブ [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.
arm - ARM Neon 組み込み関数の適切なリファレンスはありますか?
ARM リファレンス マニュアルでは、個々の手順について詳しく説明していません ( http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348b/BABIIBBG.html )。もう少し詳しいものはありますか?
assembly - MMX 組み込み関数と Microsoft C++ でのスタックの使用
MMX 命令を使用して int32 データ配列から要素を累積的に追加するインライン アセンブラー ループがあります。特に、MMX レジスタが 16 個の int32 に対応できるという事実を利用して、16 個の異なる累積和を並列に計算します。
このコードを MMX 組み込み関数に変換したいと考えていますが、8 つの MMX レジスタを使用して 16 の独立した和を計算するようコンパイラに明示的に指示することはできないため、パフォーマンスが低下するのではないかと心配しています。
誰かがこれについてコメントして、以下のコードを変換して組み込み関数を使用する方法についての解決策を提案できますか?
== インラインアセンブラ (ループ内のみ) ==
- esi はデータ配列の先頭を指します
- edx は、現在のループ反復のデータ配列にオフセットを提供します
- データ配列は、16 個の独立した合計の要素がインターリーブされるように配置されます。
g++ - 組み込みプログラム (SSE) - g++ - ヘルプが必要
stackoverflow に質問を投稿するのはこれが初めてなので、質問やコードの書式設定で行った可能性のあるエラーを見逃さないようにしてください。しかし、私がもっと注意するように、同じことを私に指摘してください。
私は、2 つの 128 ビット (4 つの float 変数を含む) の数値を加算するための単純な組み込みルーチンをいくつか作成しようとしていました。ネット上でいくつかのコードを見つけ、それを自分のシステムで実行しようとしていました。コードは次のとおりです。
私が使用する g++ パラメータは次のとおりです。
私が得るエラーは次のとおりです。
これらのエラーをデバッグしたり、ググったりするのに多くの時間を費やしました。私は組み込み関数の完全な初心者なので、いくつかの重要なことを見落としている可能性があります。
どんな助けでも大歓迎です、
ありがとう、
Sriram。
c++ - ランタイム ライブラリなしで VC++ 組み込み関数を使用する方法
私は、可能な限り最小のバイナリを生成しようとする課題の 1 つに関与しているため、C または C++ ランタイム ライブラリ (RTL)を使用せずにプログラムをビルドしています。DLL バージョンまたは静的バージョンにはリンクしません。#include
ヘッダーファイルさえありません。私はこれでうまくいきました。
などの一部の RTL 関数はmemset()
便利なので、独自の実装を追加してみました。デバッグ ビルドでは正常に動作します (コンパイラが への暗黙的な呼び出しを生成する場所でもmemset()
)。しかし、リリース ビルドでは、組み込み関数を定義できないというエラーが表示されます。リリース ビルドでは、組み込み関数が有効になっておりmemset()
、組み込み関数です。
組み込みの for をリリース ビルドで使用したいと考えてmemset()
います。これはおそらくインライン化されており、私の実装よりも小さくて高速だからです。しかし、私はキャッチ22のようです。を定義しないmemset()
と、リンカーはそれが未定義であると不平を言います。定義すると、コンパイラは、組み込み関数を定義できないと文句を言います。
#pragma
RTL オーバーヘッドを引き込まずに組み込み関数を取得するための定義、宣言、およびコンパイラとリンカー フラグの正しい組み合わせを知っている人はいますか?
Visual Studio 2008、x86、Windows XP+。
問題をもう少し具体的にするには:
そして、私は次のように構築します:
の実装でコンパイルすると、コンパイルmemset()
エラーが発生します。
の実装なしでこれをコンパイルするとmemset()
、リンカ エラーが発生します。
g++ - g++ SSE 組み込みのジレンマ - 組み込みの「飽和」からの値
2 つの大きな (100000 要素以上の) ベクトルの内積を計算するための SSE 組み込み関数を実装する簡単なプログラムを作成しました。このプログラムは、従来の方法で計算された内積と組み込み関数を使用した両方の実行時間を比較します。内積を計算するステートメントの前に (楽しみのために) 内部ループを挿入するまで、すべてがうまくいきます。先に進む前に、コードを次に示します。
これをビルドするには、次の g++ 呼び出しを使用します。
上記の各ループは、両方の関数で合計 N^2 回実行されます。ただし、arr1 と arr2 (2 つの浮動小数点ベクトル) が値 2.5 でロードされる場合、配列の長さは 100,000 であり、両方の場合の結果は 6.25e+10 になります。私が得る結果は次のとおりです。
結果:
result_Conventional = 6.25e+10
result_Intrinsics = 5.36871e+08
これだけではありません。組み込み関数を使用した関数から返される値は、上記の値で「飽和」しているようです。配列の要素と異なるサイズに他の値を入れてみました。しかし、配列の内容の 1.0 を超える値と 1000 を超えるサイズは、上記と同じ値になるようです。
最初は、SSE 内のすべての操作が浮動小数点で行われるためではないかと考えましたが、浮動小数点は e+08 のオーダーの数値を格納できるはずです。
どこが間違っている可能性があるかを確認しようとしていますが、それを理解できないようです。g++ バージョンを使用しています: g++ (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2)。
これに関するヘルプは大歓迎です。
ありがとう、
スリラム。
c++ - アセンブリ/SSE 乗算のヘルプ
非常に重要な数行でコードを改善する方法を見つけようとしています。
a、b、c ... はすべて float です。
SSE の使用を検討することにしましたが、改善が見られないようです。実際には、2 倍遅くなることが判明しました。私のSSEコードは次のとおりです。
標準のインライン アセンブリも使用してみましたが、SSE のように 4 つの浮動小数点をレジスタにパックできるようには見えません。
コメントやヘルプをいただければ幸いです。主に、SSE を使用した計算がシリアル C++ コードよりも遅い理由を理解する必要がありますか?
Windows XP 上の Visual Studio 2005 で、Pentium 4 と HT を使用してコンパイルしています。
前もって感謝します!
c - x86-64 プロセッサのデータ型
これらのデータ型は何のためのものですか? __m64、__m128、__m256 ?
c++ - データが整列していないように見えるのはなぜですか?
いくつかのサイン値とコサイン値を事前に計算し、それらを整列ブロックに格納し、後で SSE 計算に使用する方法を見つけようとしています。
プログラムの最初に、メンバーを持つオブジェクトを作成します。
次に、コンストラクターでそのメンバーを初期化します。
m_sincos を使用すると、次の 3 つの問題に遭遇します。
-データが整列されていないようです。
-変数が正しくないようです
-私を本当に混乱させているのは、これによりすべてが機能することです(ただし、遅すぎます):
optimization - 高速フォーマット変換オープンソースライブラリ
誰かが私にオープンソースフォーマット変換ライブラリをアドバイスできますか?SSE、SSE2用に最適化されています。
変換用のフォーマット:I420、YUY2、RGB(16ビット、32ビット)。
VirtualDubKasumiライブラリしか見つかりませんでした。
gcc - ARMNEONのxorgcc組み込み関数はありません
単純なxor演算の組み込み関数は見つかりませんでした。
参照: http: //gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html
これにNEON命令を使用する方法は本当にありませんか?