4

私は現在、C# でアプリケーションをコーディングしています。これは、比較的小さなコード片が実行時間の 90 ~ 95% を占めるため、SSE を使用することで大きなメリットが得られる可能性があります。コード自体も SSE に最適です (マトリックスおよびベクターベースであるため)。そこで、Mono.Simd を使い始めました。これにより実行時間に大きな違いが生じましたが、それでも十分ではありません。Mono.Simd の問題は、非常に古い SSE 命令 (主に SSE1 と SSE2 からのものだと思います) しかないことです。これにより、たとえば内積 (またはスカラー/内積) が 3 つの命令を必要としますが、 SSE4 を 1 つの命令で実装するだけです (SSE4 は 2006 年から利用可能になっているため、現在のすべてのコンピューターに SSE4 が搭載されていると安全に想定できます)。また、他の多くの機能はありません」

私の質問は、SSE/SIMD を利用するために C# コード内から呼び出すことができる他のライブラリはありますか? C# でインライン アセンブリを使用することも可能であるため、C++ コードを使用することもできるようです。ただし、これによりパフォーマンスがわずかに低下しますが、上記の関数を備えた比較的使いやすい C++ ライブラリを誰かが持っている場合、これは許容されます私は推測する。

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

4

3 に答える 3

12

オープンソースのYeppp! ライブラリ(私が作成したもの) は、SIMD 最適化されたデータ処理関数を提供し、公式バインディングを介して .Net 言語から使用できます。SSE だけでなく、今後の Intel Haswell プロセッサからの AVX2 までの新しい SIMD 拡張もサポートします。ライブラリは、実行するプロセッサに最適なバージョンを自動的に選択します。

于 2013-05-31T02:44:14.830 に答える
1

C# は、クロスプラットフォームである System.Numerics でかなりの数の SIMD/SSE 命令をネイティブにサポートしています。内積はサポートされている命令です。

過去 2 年間積極的に開発してきた nuget.org の HPCsharp nuget パッケージは、この機能を使用して多くのアルゴリズムを高速化します。特定の有用なアルゴリズムが SIMD/SSE およびマルチコアによる高速化を使用できるかどうか教えてください。

于 2019-07-29T02:12:09.707 に答える