異なる組み込み関数は、異なる命令に対応しているため、異なる組み込み関数があります。
インテルは、倍精度ベクタが単精度ベクタまたは整数ベクトルとは異なる物理レジスタファイルによってバックアップされているプロセッサを設計したり、異なる実行単位を使用したりすることを自由にしたいためです。データが適切なレジスタファイルまたは転送ネットワークにロードされるように指定する方法がない場合、これらのいずれかが追加のレイテンシを追加する可能性があります。
さまざまな命令が「同じこと」を行うが、ロードされているデータが将来の命令によってどのように使用されるかをプロセッサに示唆するヒントが追加されています。これは、プロセッサが、データができるだけ効率的に使用される正しい場所にあることを確認するのに役立ち、プロセッサによって無視される可能性があります。
これは単なる仮説ではありません。浮動小数点演算で消費されるデータをロードするために整数ベクトル・ロード(MOVDQA)を使用するプロセッサには、浮動小数点演算のデータを得るために浮動小数点ロードを使用するよりも時間がかかります(逆も同様です) 。このテーマの詳細については、「Intel Optimization Manual」またはAgner Fogのノートを参照してください。将来的にこのようなパフォーマンスの危険性を避けるために、データの使用方法に合った負荷を使用してください。
'_mm_load_pd'の戻り値の型は' __m128'ではなく '__m128d'です –
@PaulR:これは....世界ではすべての意味があります。私は全く気付かなかった。それを指摘してくれてありがとう。 :) – Mehrdad