5

聞いたことはあると思いますが、場所がわかりません。

更新:JiTについて話しました

4

3 に答える 3

10

いいえ、マシン コードを自分で記述できるシナリオは .NET にはありません。コード生成は完全にジャストインタイム コンパイラ次第です。マシンのプロセッサの機能に基づいて、コード生成をカスタマイズできることは確かです。ngen.exe を常にターゲット マシンで実行する必要がある大きな理由の 1 つです。.NET 4.5 のジッターが sse4 または avx を利用するために微調整されたかどうかは未解決の問題ですが、私はそれについて何も聞いていません。マイクロソフトは、バグを修正する以外に、ジッターをあまりいじっていません。非常に不安定で、4.5 はサイド バイ サイド バージョンではありません。

ただし、VS-11 には C++ 用の更新されたコード ジェネレーターがあります。ループを自動的にベクトル化することができ、そのために SIMD/AVX 命令を使用します。このブログ投稿で言及されています。簡単なビデオはこちらから入手できます


更新:現在 CTP にあり、RyuJIT というコードネームが付けられている新しい x64 ジッターには、SIMD 命令の基本的なサポートが含まれています。自動ベクトル化を提供する SSE2 の種類。ただし、これは Microsoft.Bcl.Simd パッケージと Vector<> クラスにかなりタイトに閉じ込められており、SIMD を高速に実行するために必要な 16 バイトのメモリ アラインメント要件に対する普遍的なソリューションはありません。

より実り多い道は、前回の Build カンファレンスで発表された.NET Nativeです。C++ コンパイラのバックエンドを使用して事前にコードを生成し、組み込みの自動ベクトル化と自動並列化のサポートを自動的に利用します。それ以外の場合、メモリ アライメントの問題にどのように対処したかについての明確な説明はまだありません。これには独自の問題があり、リフレクションは難しく、現在、実行時の依存関係を事前に判断できる種類のパッケージ アプリでのみサポートされています。Windows ストアおよび電話アプリ。


更新: これは .NET 4.6、System.Numerics.Vectors.dll アセンブリで出荷されました。フレームワークに含まれているものは「安全な」ものであり、MSDN のドキュメントと一致しないことに注意してくださいVector<T>。Nuget パッケージ (バージョン 4.1.0) は一致します。

于 2012-05-27T17:15:18.490 に答える