1
typedef float v4sf __attribute__ ((mode(V4SF)));

これはGCCにあります。同等の構文を知っている人はいますか?

VS 2010__attribute__では、このタイプのストレージ クラスがなく、モードが定義されていないと表示されます。

インターネットで検索したらそう書いてあった

__attribute__( aligned( size ) )GCCと同等

以前の UNIX 開発者や複数のプラットフォームで動作するコードを書いている人にとっては、GCC で 属性(aligned( ... ))を使用して同じ結果を得ることができます。

詳細については、こちらを参照してください: http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Type-Attributes.html#Type-Attributes

完全な GCC コードはこちら: http://pastebin.com/bKkTTmH1

4

2 に答える 2

5

VC++ でアライメント ディレクティブを探している場合は、__declspec(align(16)). (またはあなたが配置したいものは何でも)

使用例は次のとおりです。

__declspec(align(16)) float x[] = {1.,2.,3.,4.};

http://msdn.microsoft.com/en-us/library/83ythb65.aspx

attribute(GCC の場合) と__declspec(VC++ の場合) の両方がコンパイラ固有の拡張機能であることに注意してください。

編集 :

コードをもう一度見てみる__attribute__と、VC++ でコンパイルするには、行を VC++ に相当するものに置き換えるだけでなく、さらに多くの作業が必要になります。

VC++ には、使用しているこれらのマクロ/関数が含まれていません。

  • __builtin_ia32_xorps
  • __builtin_ia32_loadups
  • __builtin_ia32_mulps
  • __builtin_ia32_addps
  • __builtin_ia32_storeups

これらすべてをSSE 組み込み関数に置き換えるだけのほうがよいでしょう。これは GCC と VC++ の両方で動作します。


組み込み関数に変換されたコードは次のとおりです。

float *mv_mult(float mat[SIZE][SIZE], float vec[SIZE]) {
    static float ret[SIZE];
    float temp[4];
    int i, j;
    __m128 m, v, r;

    for (i = 0; i < SIZE; i++) {
        r = _mm_xor_ps(r, r);

        for (j = 0; j < SIZE; j += 4) {
            m = _mm_loadu_ps(&mat[i][j]);
            v = _mm_loadu_ps(&vec[j]);
            v = _mm_mul_ps(m, v);
            r = _mm_add_ps(r, v);
        }

        _mm_storeu_ps(temp, r);
        ret[i] = temp[0] + temp[1] + temp[2] + temp[3];
    }

    return ret;
}
于 2011-11-28T00:11:12.067 に答える
1

V4SF とその友人たちは、GCC の「ベクター拡張」に関係しています。

http://gcc.gnu.org/onlinedocs/gcc-3.1/gcc/Vector-Extensions.html#Vector%20Extensions

http://gcc.gnu.org/onlinedocs/gcc-3.1/gcc/X86-Built-in-Functions.html

MSVS/MSVC でどれだけサポートされているかはわかりません。ここにいくつかのリンクがあります:

http://www.codeproject.com/KB/recipes/sseintro.aspx?msg=643444

http://msdn.microsoft.com/en-us/library/y0dh78ez%28v=vs.80%29.aspx

http://msdn.microsoft.com/en-us/library/01fth20w.aspx

于 2011-11-28T00:13:20.827 に答える