gpt4 book ai didi

C++:英特尔 SIMD 内在函数类成员的初始化

转载 作者:行者123 更新时间:2023-11-30 04:05:57 25 4
gpt4 key购买 nike

我不明白为什么注释行和未注释行不会产生相同的结果(Linux GCC,启用了 C++11 标志):

#include "immintrin.h"


typedef __m256 floatv;

struct floatv2{
public:

//floatv2(const float f):x(_mm256_setzero_ps() + f ), y(_mm256_setzero_ps() + f ) {}; // succeeds
floatv2(const float f):x{_mm256_setzero_ps() + f }, y{_mm256_setzero_ps() + f } {}; // fails

//private:
floatv x, y;
};

尝试编译未注释的行时出现以下错误:

error: cannot convert ‘__m256 {aka __vector(8) float}’ to ‘float’ in initialization

我不明白,因为 xy 是 floatv,而不是 float,所以不需要转换...

此外,在一些更复杂的代码中,第一个版本会产生内存访问冲突。幕后发生了什么令人讨厌的事情吗?

PS:avxintrin.h中__m256的定义上面,有如下注释:

/* The Intel API is flexible enough that we must allow aliasing with other
vector types, and their scalar components. */

我不明白这是什么意思,但感觉可能是相关的:)

非常感谢

最佳答案

这与 DR 1467 有关它不允许使用列表初始化语法来复制聚合。这最近已针对 GCC 中的类进行了修复,我将修复扩展到 r209449 中的 vector . Gcc-4.10 编译您的代码。

关于C++:英特尔 SIMD 内在函数类成员的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23070982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com