c++ - SSE 类型的容器

标签 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 容器中(或者更好的是,提供正确的方法来做到这一点)?

最佳答案

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

可以在此处找到此类(不太容易实现)的示例: Implementing Allocator example

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

关于c++ - SSE 类型的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12183275/

相关文章:

c++ - 什么是 __aeabi_unwind_cpp_pr1' 以及如何避免它?

gcc - 如何选择GCC使用的汇编器?

c++ - 来自 C++ BB10 的导航 Pane 弹出

c++ - 使用 C++ 提取 HTML 标签

c++ - 如何判断未知类型数组的索引是否为空?

c++ - 与字符串一起使用时对函数模板的 undefined reference (GCC)

c - 在 VM 内的 nfs 共享目录中编译时出现 Exec 格式错误

c - 从已安装的 c 算法库编译测试文件时出错

c++ - 对于所有编译器,C++ 中的 If 语句中的各种条件是否总是具有相同的执行顺序?

C++ 优化器删除具有副作用的对象