C++ではなくC#でビデオ処理ライブラリを作成することを検討しています。 C++には、生のビデオフレームバッファ上のポインタを操作する利点があります。 C#では代わりにそのバッファにMemoryStreamがあり、前後に探索できます。C#での未処理メモリストリームのパフォーマンス
各ピクセルに1つずつ数式を適用する必要があります。 C++でのアセンブリ最適化を使用する場合は、8 x 8または16 x 16です。
これをC#で行う方法は、C++で行う方法とSSE2アセンブリで行う方法と比べてどうでしょうか?
C#が、それはオンザフライ最終コンパイルを行いますので、それは、そのようなAVXおよびAVX2など、すべてのCPU固有の命令を使用することができ、そしてどれだけそれをするのかという利点を持っていますか?
このようなタスクでC#のパフォーマンスを最大限に引き出すためのベストプラクティスはありますか?
カーソルをMemoryStream内に移動すると、ポインタと比較して構文が複雑になります。これを単純化する方法はありますか?
編集:ここと他の場所のコメントに基づいて、2つのオプションがあるようです。
System.Numerics.Vectors
https://msdn.microsoft.com/en-us/library/dn879696(v=vs.110).aspx#Anchor_4numpyのscipyのダウンロードとはPythonで、このような作業のために人気のオプションであり、.NET
https://www.infoq.com/news/2011/07/NumPy-NET
どれに移植されていますこれらの2つの選択肢の賛否両論と限界についてのアイデア? System.Numerics.Vectorsはx64のみで動作しますか? SciPyはSIMD最適化を使用していますか?
C++ SIMDに近い性能が同じ関数(C++、SSE2、AVX)のいくつかのバージョンを記述することなく、C#で得ることができる場合、これは大きな利点を有するであろう。そうでなければそれを使用しない場所でのSIMD最適化が可能になります。
EDIT2:System.Numerics.Vectorsが移動するための方法であるので、どこにも私は、numpyのscipyのダウンロードとサポートSIMD最適化することを読み込むことはできません。
C#は '安全でない 'コンテキストでもポインタをサポートしますが、SSEのサポートが不足しているためC++よりパフォーマンスが悪いです。 – Dai
何でも可能ですが、長年にわたって非常に慎重に手作業でチューニングされた既存のコーデック実装と競合しています。年を取ることができる場合にのみ、これを行うことを検討してください。 –
これは、.NETを使用したAviSynthプラグインの開発用です。このようなプラグインを開発しているプログラマーのコミュニティ全体があります。主にC++およびアセンブリで使用されます。 http://forum.doom9.org/showthread.php?t=144663 –