【问题标题】:Dynamically allocate SIMD Vector as array of doubles将 SIMD 向量动态分配为双精度数组
【发布时间】:2013-05-15 18:38:37
【问题描述】:

我是向量的新手,我一直在阅读 gcc documentation 试图了解它。

是否可以在运行时动态分配向量的大小?似乎您必须在 typedef 中执行此操作,例如:

typedef double v4sf __attribute__((vector_size (16)));

我想将向量的值设置为双精度数组。我试过这样:

v4sf curr_vect = double_array;

其中 double_array 显然是一个双精度数组。但这无法编译。有没有可能做这两件事?

【问题讨论】:

  • double *vec = malloc(sizeof(*vec) * 16; 怎么样?
  • @H2CO3 这将无法正确对齐。
  • @Mysticial 哦,对不起。在这种情况下,posix_memalign() 应该可以解决问题。
  • @H2CO3 是的,可以。
  • @Mysticial 你介意我写一个答案吗?

标签: c vector simd


【解决方案1】:

如果您的平台符合 POSIX,您可以使用 posix_memalign() function 实现对齐的动态内存分配:

double *p;
if (posix_memalign((void **)&p, 16, sizeof(*p) * 16) != 0) {
    perror("posix_memalign");
    abort();
}

p[0] = 3.1415927;
// ...

free(p);

【讨论】:

  • 抱歉我的无知,但是我在哪里声明和初始化向量?
  • @rheotron 你不会有typedef。如示例中所示,它将只是double *vector;。您分配对齐的内存,然后为每个成员分配一个值。
  • 啊 - 我明白你的意思了。它似乎正确分配了内存。虽然,它似乎没有做矢量减法。有什么想法吗?
  • @rheotron 它应该。 “它似乎没有正确地进行矢量减法” - 究竟是什么错误?你的代码呢?
  • 尝试在此处粘贴代码。没用 - 在这里链接:pastebin.com/fdTaCkBj
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多