热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c++:英特尔SIMD内部类成员的初始化。-C++:initializationofintelSIMDintrinsicsclassmembers

Idontunderstandwhythecommentedanduncommentedlinedontyieldthesameresult(LinuxGCC,wi

I don't understand why the commented and uncommented line don't yield the same result (Linux GCC, with C++11 flag enabled):

我不理解为什么注释和未注释的行不会产生相同的结果(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;
};

When trying to compile the uncommented line I get the following error:

当试图编译未注释的行时,我得到以下错误:

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

which I don't understand because x and y are floatv, not float, so no conversion should be required...

我不明白,因为x和y是floatv,而不是float,所以不需要转换。

Also, in some more complex code, the first version produces memory access violation. Is there something nasty going on behind the scene?

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

PS: above the definition of __m256, in avxintrin.h, there is the following comment:

在avxintrin中,在__m256的定义之上。h,有以下评论:

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

I don't understand what this means, but feel like it could be related :)

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

Many thanks

非常感谢

2 个解决方案

#1


2  

This is related to DR 1467 which did not allow using the list-initialization syntax for copying aggregates. This was recently fixed for classes in GCC and I extended the fix to vectors in r209449. Gcc-4.10 compiles your code.

这与1467博士有关,它不允许使用list初始化语法来复制聚集。这是最近在GCC中固定的类,我将修复扩展到r209449中的向量。gcc - 4.10编译你的代码。

#2


0  

Probably _mm256_setzero_ps() + f returns a float and not a floatv, because f is a float. So you can't initialize floatv values (x and y) with a float using { }, beacuse {}-initialization doesn't allow narrowing (implicit conversion).

可能_mm256_setzero_ps() + f返回一个浮点数,而不是浮点数,因为f是一个浮点数。因此,您不能使用浮点数来初始化floatv值(x和y),因为{}-初始化不允许缩小(隐式转换)。

Maybe

也许

x{static_cast<__m256>(_mm256_setzero_ps() + f) }

will work.

将工作。


推荐阅读
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • Linux设备驱动程序:异步时间操作与调度机制
    本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • C++构造函数与初始化列表详解
    本文深入探讨了C++中构造函数的初始化列表,包括赋值与初始化的区别、初始化列表的使用规则、静态成员初始化等内容。通过实例和调试证明,详细解释了初始化列表在对象创建时的重要性。 ... [详细]
  • 文件描述符、文件句柄与打开文件之间的关联解析
    本文详细探讨了文件描述符、文件句柄和打开文件之间的关系,通过具体示例解释了它们在操作系统中的作用及其相互影响。 ... [详细]
  • 本文详细介绍了C语言中链表的两种动态创建方法——头插法和尾插法,包括具体的实现代码和运行示例。通过这些内容,读者可以更好地理解和掌握链表的基本操作。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • ###问题删除目录时遇到错误提示:rm:cannotremoveusrlocaltmp’:Directorynotempty即使用rm-rf,还是会出现 ... [详细]
author-avatar
手机用户2502906377
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有