質問

(これが暴言のように聞こえる場合は申し訳ありませんが、それは本当の質問であり、本当の答えに感謝します)

Cは非常に古いので、当時それを追加することは意味がないかもしれないことを理解しています(MMXは当時も存在しませんでした)。しかし、それ以来、C99がありましたが、それでもSIMD変数の標準はありません(私が知っている限り)。

「SIMD変数」とは、次のようなことを意味します。

vec2_int a = {2, 2};
vec2_int b = {3, 3};
a += b;

また、これは構造体で実行できることを理解しており、(理論的に)コンパイラは、とにかく適切な場合にSIMDを使用するように最適化する必要があります。

しかし、私は最近からの投稿を見ました QTラボ これには、最適化に依存するのではなく、「__m128i」(明らかに標準以外のように見える)などのタイプの例が含まれます。 QTはこれをQTの速度を大幅に改善していると宣伝していることを考慮して、少なくとも一部のプログラマでは、コンパイラの最適化が不十分であると推測しています。

それがただのCであれば、Cは愚かだったと思います。しかし、私の知る限り、C ++、Java、C#などの新しい言語もこれらを含めません。 C#にはmono.simdがありますが、原始的なタイプではありません(そして、C#には「小数」キーワードがあるため、タイプを保存しようとしているとは思わない)。

だからここに私が気づいていることは次のとおりです。ベクトルのプリミティブタイプを持つ言語は例外であり、ルールではないようです。ベクトルプリミティブタイプは非常に明白に見えるため、これらのタイプを含めないためのまともな理由がある必要があると思います。

ここの誰かが、なぜこれらのタイプが頻繁に除外されているのか知っていますか?それらを追加することに対する理論的根拠へのいくつかのリンク?

役に立ちましたか?

解決

すべてのプロセッサがSIMDの指示をサポートしているわけではないためです。 CやC ++などの言語は、デスクトップコンピューターに加えて、マイクロコントローラーなどのさまざまな種類のハードウェアで使用するように設計されています。

現在、アルゴリズムのベクトル化は自動ではありません(ただし、積極的に調査されています)。 「ベクトル化可能」のアルゴリズムは、実行環境のSIMD機能を活用するために明示的に記述する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top