SSE类型的容器

时间:2012-08-29 17:20:16

标签: c++ gcc

我正在尝试将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;
}

但是如上所述,在不提供复制对象的情况下进行分配会产生编译器错误,而分配提供对象时会编译但会出现段错误。任何人都可以解释为什么我不能将这些SSE对象存储在这样的STL容器中(或者更好,提供正确的方法)?

1 个答案:

答案 0 :(得分:2)

要使其正常工作,您必须实现自定义分配器。要使用它,它是类型旁边的参数: 的std ::矢量&lt; SSEType,CustomAlloc&gt;容器; CustomAlloc是分配器的位置。 你必须使用alligned_malloc或memalign来获取Allocater中的内存,但这是在这里取得成功的方法。

这里可以找到这样一个例子(不那么容易实现): Implementing Allocator example

我已经对SSE做了很多,我发现,这是使用alligned malloc最简单的方法,并将其用于我的计算。