为什么矢量化失败?

2023-12-27

我想使用优化我的矢量化代码

-msse2 -ftree-vectorizer-verbose=2.

我有以下简单的代码:

int main(){
  int a[2048], b[2048], c[2048];
  int i;

  for (i=0; i<2048; i++){
      b[i]=0;
      c[i]=0;
  }

  for (i=0; i<2048; i++){
    a[i] = b[i] + c[i];
  }
  return 0;
}

为什么我会收到注释

 test.cpp:10: note: not vectorized: not enough data-refs in basic block.

Thanks!


对于它的价值,添加后asm volatile("": "+m"(a), "+m"(b), "+m"(c)::"memory");接近尾声main,我的副本gcc发出这个:

400610:       48 81 ec 08 60 00 00    sub    $0x6008,%rsp
400617:       ba 00 20 00 00          mov    $0x2000,%edx
40061c:       31 f6                   xor    %esi,%esi
40061e:       48 8d bc 24 00 20 00    lea    0x2000(%rsp),%rdi
400625:       00
400626:       e8 b5 ff ff ff          callq  4005e0 <memset@plt>
40062b:       ba 00 20 00 00          mov    $0x2000,%edx
400630:       31 f6                   xor    %esi,%esi
400632:       48 8d bc 24 00 40 00    lea    0x4000(%rsp),%rdi
400639:       00
40063a:       e8 a1 ff ff ff          callq  4005e0 <memset@plt>
40063f:       31 c0                   xor    %eax,%eax
400641:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
400648:       c5 f9 6f 84 04 00 20    vmovdqa 0x2000(%rsp,%rax,1),%xmm0
40064f:       00 00
400651:       c5 f9 fe 84 04 00 40    vpaddd 0x4000(%rsp,%rax,1),%xmm0,%xmm0
400658:       00 00
40065a:       c5 f8 29 04 04          vmovaps %xmm0,(%rsp,%rax,1)
40065f:       48 83 c0 10             add    $0x10,%rax
400663:       48 3d 00 20 00 00       cmp    $0x2000,%rax
400669:       75 dd                   jne    400648 <main+0x38>

所以它认识到第一个循环只是在做memset到几个数组,第二个循环正在执行向量加法,并对其进行了适当的向量化。

我在用着gcc version 4.9.0 20140521 (prerelease) (GCC).

一台较旧的机器gcc version 4.7.2 (Debian 4.7.2-5)也对循环进行矢量化,但以不同的方式。你的-ftree-vectorizer-verbose=2设置使其发出以下输出:

Analyzing loop at foo155.cc:10


Vectorizing loop at foo155.cc:10

10: LOOP VECTORIZED.
foo155.cc:1: note: vectorized 1 loops in function.

你可能搞砸了你的编译器标志(我用过g++ -O3 -ftree-vectorize -ftree-vectorizer-verbose=2 -march=native foo155.cc -o foo155构建)或有一个非常旧的编译器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么矢量化失败? 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • PHP 警告:113 字节的 POST 内容长度超出了未知中 -1988100096 字节的限制

    用户在我的网站上上传图像时遇到很多问题 他们最多可以上传 6 张图片 最初我必须将 php ini 中的值更改为 upload max filesize 2000M post max size 2000M max execution tim
  • 如何使用最小起订量来测试 MongoDB 服务层?

    我的应用程序和 mongo 数据库之间有一个服务层 我正在尝试使用最小起订量构建单元测试 我对最小起订量很陌生 所以我从我认为是一个微不足道的测试开始 要测试的代码 public List
  • Angular - 如何导入 googleapis 库?

    我正在尝试将 Google Drive API 合并到我的一个项目中 Node js快速入门指南 https developers google com drive api v3 quickstart nodejs要求我导入文件读取和 go
  • 是否存在无法避免 lambda 中的尾随返回类型语法的情况?

    关于之前的问题 是否可以通过 lambda 引用返回 T 类型的对象 而不使用尾随返回类型语法 q 40977730 我想知道是否还有其他重要的案例或例子尾随返回类型语法 当使用 lambda 时 可以not应避免 在 C 14 中 一个有
  • 在 MATLAB 中将 repmat 替换为 bsxfun

    在下面的函数中 我想进行一些更改以使其更快 它本身很快 但我必须在 for 循环中多次使用它 所以需要很长时间 我想如果我用 bsxfun 替换 repmat 会使其更快 但我不确定 我该如何进行这些替换 function out lagc
  • 当 onCreate 中完成 Activity 时,我的 Fragment 的 onCreateView 在 onCreate 之前如何被调用?

    这很奇怪 我有一个简单的应用程序 登录后会显示活动中的片段 该应用程序还有一个不活动的 超时 在此时间后它会完成活动并显示登录屏幕 如果应用程序在超时发生时处于后台 那么当下一次超时时onCreate or onStart事件发生在它完成的
  • 在哪里可以找到 FCM Firebase 注册 ID(在 PHP 中,对于 Ionic 框架)?

    我们已经使用 Ionic 框架构建了一个应用程序 我们是 Ionic 等的初学者 并将设备注册到我们的 Firebase 帐户 以便我们可以发送推送消息 我现在找到了一个通过 cURL 连接到 fcm 的 PHP 片段 我可以设置消息和标题
  • 实现阶乘函数时出现“所有控制路径递归”错误

    对于课堂 我有一个作业 编写一个 C 程序 输出您可以选择的不同方式的数量k一组中的对象n对象 两者n and k应为正整数 该数字由以下公式给出 C n k n k n k 您的程序应该使用两个返回值的函数 第一个应该叫factorial
  • 为什么来自类的java字节码出现新静态内部类的代码出现jvm指令ACONST_NULL

    我尝试新建一个内部静态类 但我发现字节码出现了jvm指令ACONST NULL bwteen NEW DUP and INVOKE SPECIAL 但我知道一门新课是 NEW DUP 调用 特殊 package com hoho api a
  • 自定义 Jackson 对象映射器

    我有一个用例 需要维护两组 JSON 输出 一组具有漂亮的 JSON 属性名称 另一组没有 因此 我决定自定义 ObjectMapper 以便它忽略字段上的 JsonProperty pretty name 注释并使用字段属性名称 在这种情
  • SQL内联if语句类型问题

    我想做一个 MS SQL 查询 返回如下内容 Col1 Col2 Col3 AAA 18 92 18 92 BBB 20 00 40 00 AAA 30 84 30 84 BBB 06 00 12 00 AAA 30 84 30 84 AA
  • 在服务器端java类中读取客户端时区

    我有一个客户端程序 它将时间发送到服务器端程序 我正在使用 Callendar 对象将时间值从客户端传递到服务器 我的客户端程序位于斯里兰卡 服务器位于英国 当我在客户端发送时间 例如 2011 11 21T12 43 41 352 05
  • 如何读取UTF-8的InputStream?

    欢迎大家 我正在开发一个 Java 应用程序 它从互联网调用 PHP 它给我一个 XML 响应 响应中包含这个词 Pr ximo 但是当我解析 XML 的节点并将响应获取到字符串变量中时 我收到这样的词 Pr ximo 我确信问题是我在 J
  • 如何绑定到“MvxLinearLayout”的“ItemClick”?

    我有一个ScrollView最初包裹着两个MvxListView控制 Having ListView控制在一个ScrollView不过 Android 不支持 这是有道理的 因为它们都尝试填充父高度并提供自己的滚动逻辑 我想要的是两个不可滚
  • 使用核心数据实现枚举的最佳方法

    将核心数据实体绑定到枚举值以便我能够为实体分配类型属性的最佳方法是什么 换句话说 我有一个名为Item与itemType我想要绑定到枚举的属性 最好的方法是什么 如果您想将值限制为枚举 则必须创建自定义访问器 因此 首先您需要声明一个枚举
  • 在 C++ 中使用友元函数

    刚刚阅读了有关友元函数的内容 我正在尝试使用 B 类中的友元函数 Print 访问 A 类中的私有变量 number 我正在使用 Visual Studio 我的代码的编译给了我很多不同的错误 例如 C2011 A class 类型重新定义
  • 无法访问作业跟踪器的 hadoop web ui [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 在 javascript 的 google 地图 api 中显示楼层选择器

    当使用 Android 或 iOS 版 Google 地图 API 时 似乎默认启用室内地图 并且当您放大具有室内地图的建筑物时 楼层选择器 控件会自动出现 如何在 Google Maps API for javascript 中获得类似的
  • 使用 ServiceStack.ORMLite 的存储库模式中的事务

    我正在使用 ServiceStack ORMLite 实现存储库模式 如下所示 public class MyRepository IMyRepository private IDbConnectionFactory DbConnectio
  • 为什么矢量化失败?

    我想使用优化我的矢量化代码 msse2 ftree vectorizer verbose 2 我有以下简单的代码 int main int a 2048 b 2048 c 2048 int i for i 0 i lt 2048 i b i