2012-04-05 35 views
4

SSE(128bit)コールを使用してブルドーザーのOpteronで256bit FMA機能を使用するコードを修正しようとしています。私はこれらの呼び出しのための組み込み関数を見つけることができないようです。AMD FMA 4組み込み関数のリファレンスはどこにありますか?

このフォーラムにいくつかの質問は、(例:How to find the horizontal maximum in a 256-bit AVX vector)これらの組み込み関数を使用していた

私はこれが見つかりました: http://msdn.microsoft.com/en-us/library/gg445140.aspx
http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/index.htm#intref_cls/common/intref_avx_fmadd_ps.htm

をしかし、私はAMDの開発者向けドキュメントに何かを見つけるように見える傾けます。

+0

他の質問は、唯一のAVX命令セットをFMA命令を参照していませんでした。インテルのAVX命令セットはFMAをサポートしていません。 –

+0

はい、私はそれを理解しています。私はちょうど私が見つけることができるものの例を与えていた。 – powerrox

答えて

2

この組み込み関数は、ファイルfma4intrin.hにあります。このファイルからの256ビットの命令と、いくつかの機能属性が取り除かれています。 __buitin*関数は、その名前の一部であるFMA命令を発行します。したがって、組み込みの関数名を検索する場合は、戻り値の後に正しい__builtin_instructionnameを検索し、周囲の関数ラッパーを使用する必要があります。

/* 256b Floating point multiply/add type instructions. */ 
_mm256_macc_ps (__m256 __A, __m256 __B, __m256 __C) 
{ 
    return (__m256) __builtin_ia32_vfmaddps256 ((__v8sf)__A, (__v8sf)__B, (__v8sf)__C); 
} 

_mm256_macc_pd (__m256d __A, __m256d __B, __m256d __C) 
{ 
    return (__m256d) __builtin_ia32_vfmaddpd256 ((__v4df)__A, (__v4df)__B, (__v4df)__C); 
} 

_mm256_msub_ps (__m256 __A, __m256 __B, __m256 __C) 
{ 
    return (__m256) __builtin_ia32_vfmaddps256 ((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C); 
} 

_mm256_msub_pd (__m256d __A, __m256d __B, __m256d __C) 
{ 
    return (__m256d) __builtin_ia32_vfmaddpd256 ((__v4df)__A, (__v4df)__B, -(__v4df)__C); 
} 

_mm256_nmacc_ps (__m256 __A, __m256 __B, __m256 __C) 
{ 
    return (__m256) __builtin_ia32_vfmaddps256 (-(__v8sf)__A, (__v8sf)__B, (__v8sf)__C); 
} 

_mm256_nmacc_pd (__m256d __A, __m256d __B, __m256d __C) 
{ 
    return (__m256d) __builtin_ia32_vfmaddpd256 (-(__v4df)__A, (__v4df)__B, (__v4df)__C); 
} 

_mm256_nmsub_ps (__m256 __A, __m256 __B, __m256 __C) 
{ 
    return (__m256) __builtin_ia32_vfmaddps256 (-(__v8sf)__A, (__v8sf)__B, -(__v8sf)__C); 
} 

_mm256_nmsub_pd (__m256d __A, __m256d __B, __m256d __C) 
{ 
    return (__m256d) __builtin_ia32_vfmaddpd256 (-(__v4df)__A, (__v4df)__B, -(__v4df)__C); 
} 

_mm256_maddsub_ps (__m256 __A, __m256 __B, __m256 __C) 
{ 
    return (__m256) __builtin_ia32_vfmaddsubps256 ((__v8sf)__A, (__v8sf)__B, (__v8sf)__C); 
} 

_mm256_maddsub_pd (__m256d __A, __m256d __B, __m256d __C) 
{ 
    return (__m256d) __builtin_ia32_vfmaddsubpd256 ((__v4df)__A, (__v4df)__B, (__v4df)__C); 
} 

_mm256_msubadd_ps (__m256 __A, __m256 __B, __m256 __C) 
{ 
    return (__m256) __builtin_ia32_vfmaddsubps256 ((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C); 
} 

_mm256_msubadd_pd (__m256d __A, __m256d __B, __m256d __C) 
{ 
    return (__m256d) __builtin_ia32_vfmaddsubpd256 ((__v4df)__A, (__v4df)__B, -(__v4df)__C); 
} 
+0

はい、すでにヘッダーファイルが見つかりました。このファイルと上記の参考用に用意したMSDNリンクを使用しています。しかし、私はこれらの組み込み関数に関するGCC(またはAMD)のドキュメントを見つけることはできません。また、「AMD64アーキテクチャ・プログラマーズ・マニュアル第4巻:128ビットと256ビット・メディア命令」も見つかりましたが、それは私の質問には関係ありません。 – powerrox

0

おそらくこのドキュメントhttp://support.amd.com/TechDocs/43479.pdfが必要です。それだけで完成のためのすべてのXOPとFMA4組み込み

+0

説明はありますが、組み込み関数のドキュメントは表示されません。 –

0

含まれています - 上記のヘッダ、使用のMicrosoftバージョンのために:

#include <immintrin.h> 
関連する問題