4

SSE タイプを stl コンテナに格納しようとしています。私はこれを試しました:

#include <iostream>
#include <vector>

int main()
{
  typedef int v4sf __attribute__ (( vector_size(4*sizeof(float)) ));

  v4sf a; // compiles

  std::vector<v4sf> v1; // compiles, but nothing is actually allocated

//  std::vector<v4sf> v2(10); // compiler error: can’t convert between vector values of different size

  std::vector<v4sf> v(10, a); // Compiles, but segfaults

  return 0;
}

ただし、前述のように、コピーするオブジェクトを指定せずに割り当てるとコンパイラ エラーが発生し、オブジェクトを指定して割り当てるとコンパイルは行われますが、segfault が発生します。これらの SSE オブジェクトをこのような STL コンテナーに格納できない理由を誰かが説明できますか (または、正しい方法を提供してください)。

4

1 に答える 1

2

機能させるには、カスタム アロケーターを実装する必要があります。それを使用するには、型の次の引数です: std::vector< SSEType, CustomAlloc> コンテナー。CustomAlloc はアロケーターです。アロケーター内のメモリを取得するには alligned_malloc または memalign を使用する必要がありますが、これが成功する方法です。

そのような (あまり簡単ではない実装) の例は、ここにあります: ア ロケーターの実装例

私はすでに SSE で多くのことを行ってきましたが、これはアラインされた malloc を使用し、これを計算に使用する最も簡単な方法であることに気付きました。

于 2012-09-07T21:11:56.723 に答える