タグ付けされた質問 「simd」

12
TensorflowをSSE4.2およびAVX命令でコンパイルする方法は?
これは、Tensorflowが機能しているかどうかを確認するスクリプトの実行から受け取ったメッセージです。 I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use …

5
x86 SIMD組み込みのヘッダーファイル
異なるx86 SIMD命令セット拡張(MMX、SSE、AVXなど)の組み込み機能を提供するヘッダーファイルはどれですか。そのようなリストをオンラインで見つけることは不可能のようです。私が間違っている場合は修正してください。

8
64ビット整数のパックされた8ビット整数を並列に1で減算、ハードウェアSIMDなしのSWAR
私が64ビット整数を持っている場合、それを8要素のパックされた8ビット整数の配列として解釈しています。1ある要素の結果が別の要素の結果に影響を与えることなくオーバーフローを処理しながら、各パック整数から定数を減算する必要があります。 私は現在このコードを使用していますが、機能しますが、パックされた各8ビット整数の減算を並列に実行し、メモリアクセスを行わないソリューションが必要です。x86では、psubbパックされた8ビット整数を減算するようなSIMD命令を並列で使用できますが、コーディング対象のプラットフォームはSIMD命令をサポートしていません。(この場合はRISC-V)。 したがって、SWAR(レジスタ内のSIMD)を実行して、のバイト間のキャリー伝播を手動でキャンセルしようとしています。uint64_tこれと同等の処理を実行します。 uint64_t sub(uint64_t arg) { uint8_t* packed = (uint8_t*) &arg; for (size_t i = 0; i < sizeof(uint64_t); ++i) { packed[i] -= 1; } return arg; } これはビット演算子で実行できると思いますが、よくわかりません。SIMD命令を使用しないソリューションを探しています。独自のソリューションを実装できるように、非常に移植性のあるCまたはC ++のソリューション、またはその背後にある理論だけを探しています。
77 c++  c  bit-manipulation  simd  swar 

1
std :: vectorがアライメントされたメモリを割り当てるための最新のアプローチ
次の質問には答えが古いしかし、関連、およびユーザーからのコメントされたマルク・Glisseは十分に議論されていない可能性があり、この問題に対する17 ++ C以来の新たなアプローチがあることを示唆しています。 すべてのデータにアクセスしながら、SIMDでアライメントされたメモリを適切に動作させようとしています。 Intelでは、タイプのfloatベクトルを作成し__m256、サイズを8分の1に削減すると、メモリが整列されます。 例えば std::vector<__m256> mvec_a((N*M)/8); 少しハックな方法で、ベクトル要素へのポインタを浮動小数点にキャストできます。これにより、個々の浮動小数点値にアクセスできます。 代わりに、私std::vector<float>はを正しく調整して、__m256segfaultingなしで他のSIMDタイプにロードできるようにしたいと思います。 私はaligned_allocを調べてきました。 これにより、正しく整列されたCスタイルの配列が得られます。 auto align_sz = static_cast<std::size_t> (32); float* marr_a = (float*)aligned_alloc(align_sz, N*M*sizeof(float)); ただし、これをどのように行うかわかりませんstd::vector<float>。のstd::vector<float>所有権を与えるmarr_a ことは可能ではないようです。 カスタムアロケーターを作成する必要があるという提案をいくつか見ましたが、これは多くの作業のように思われ、おそらく最新のC ++にはもっと良い方法がありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.