禁用 GCC 中特定循环的展开

2023-12-11

我有以下 4x4 矩阵向量乘法代码:

double const __restrict__ a[16];
double const __restrict__ x[4];
double       __restrict__ y[4];

//#pragma GCC unroll 1 - does not work either
#pragma GCC nounroll
for ( int j = 0; j < 4; ++j )
{
    double const* __restrict__ aj = a + j * 4;
    double const xj = x[j];

    #pragma GCC ivdep
    for ( int i = 0; i < 4; ++i )
    {
        y[i] += aj[i] * xj;
    }
}

我编译用-O3 -mavx旗帜。内部循环是矢量化的(单个 FMAD)。然而,gcc(7.2)不断展开外循环 4 次,除非我使用-O2或较低的优化。

有没有办法覆盖-O3展开特定循环?

注意。相似的#pragma nounroll如果我使用 Intel icc 就可以。


根据文档,#pragma GCC unroll 1如果你这样放置的话,应该可以工作。如果没有,那么您应该提交错误报告。

或者,您可以使用函数属性来设置优化,我认为:

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

禁用 GCC 中特定循环的展开 的相关文章

  • C++x0 unique_ptr GCC 4.4.4

    我正在尝试使用 C x0 中的 unique ptr 方法是 include
  • 无法关闭 gcc 优化器、automake 中的 Makefile

    我想得到ZBar http zbar sourceforge net 在调试会话中 我可以这样做 但我无法关闭优化器 因此我的调试会话意外地跳转 并且许多变量被标记为optimized out在 Eclipse Indigo 中 我在 Ub
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 如何为 iPhone 构建静态库?

    我想我已经到处寻找问题的答案 但没有运气 我正在尝试创建一个简单的静态库来在 iPhone 设备上运行 但我总是以 XCode 结束 说 文件不属于必需的架构 并且我已经尝试了我发现的每个构建标志 但没有任何运气 我已经让它在模拟器上工作了
  • 隐式转换和编译器的不同行为

    Motivated by this question https stackoverflow com q 51972738 5800831 I created the following code struct X X int struct
  • std::thread::id 的 std::operator== 中的分段错误

    我遇到了一个问题 我不确定如何解决 我相信这是 GCC 和 或 libstdc 中的问题 我正在运行 Ubuntu 14 04 LTS 和 GCC 4 8 2 19ubuntu1 libstdc 3 4 19 我相信 如何找到 Linux
  • 与 SSE 比较 16 字节字符串

    我有 16 字节的 字符串 它们可能更短 但您可能会假设它们在末尾用零填充 但您可能不会假设它们是 16 字节对齐的 至少不总是 如何编写一个例程将它们与 SSE 内在函数进行比较 是否相等 我发现这个代码片段可能会有帮助 但我不确定它是否
  • 所有 CopyConstructible 类型都是 MoveConstructible 类型吗?

    根据工作草案 N3337 与已发布的 ISOC 11 标准最相似的草案 和cppreference com http en cppreference com w cpp concept CopyConstructible 答案是肯定的 N3
  • 为什么 GCC 不会在文件末尾生成任何有关换行符的警告?

    From C11 5 1 1 2 翻译阶段 第 2 段 非空的源文件应以换行符结尾 字符 其前面不得紧接反斜杠 发生任何此类拼接之前的字符 这意味着每个源文件都必须以换行符结尾 Example include
  • 在 gcc 中强制执行 C++98 标准

    我有一项学校作业应该用符合 C 98 的代码编写 我怎样才能强迫g 仅接受遵循此标准的代码 将要 std c 98做这个技巧还是我需要添加额外的标志 Per GCC 标准文档 http gcc gnu org onlinedocs gcc
  • 链接器失败:.gnu.linkonce.t

    我在使用 GCC 3 2 3 链接共享库时遇到问题binutils https en wikipedia org wiki GNU Binutils2 18 当我尝试链接库时出现以下错误 gnu linkonce t 在 rodata 节中
  • 由于符号链接错误,无法在 Mac OSX 10.8.1 中安装 ruby​​-1.9.2

    首先 我尝试了常见的rvm安装 rvm安装1 9 2 但是 显示了以下错误 The provided compiler usr bin gcc is LLVM based it is not yet fully supported by r
  • 列出目标文件中未定义的引用

    所以我正在用 g 构建一堆模块 我使用 c 命中一些源文件来生成 o 目标文件 然后 我有时会使用 ld 的 r 标志组合目标文件 以生成更多 o 文件 在此过程中的某个地方 某个功能没有被包含在内 所以我想做的是找到一个快速工具 它可以查
  • C for 循环索引:新 CPU 中的前向索引更快吗?

    在我订阅的邮件列表上 两位知识渊博的 IMO 程序员正在讨论一些优化的代码 并说了以下内容 在 5 8 年前发布的 CPU 上 向后迭代 for 循环稍微快一些 e g for int i x 1 i gt 0 i 因为比较i归零比将其与其
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 如何正确初始化“min”变量?

    我的代码中有一个小问题 用于从一系列数字中查找最小值 当我初始化时min 0 最小值结果为0 但是当我不初始化时min 答案是正确的 为什么会出现这种情况 Xcode 告诉我应该初始化min多变的 int a 20 0 int max 0
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 优化我的表现

    我正在开发一个使用 Zend Framework 1 11 Doctrine 2 一些 Symfony 2 组件以及其他工具和库的项目 我正在尝试使用 Xdebug 和 Webgrind 优化性能 我已经发现了一些瓶颈 例如解析 Ini 配
  • 字段的 __attribute__((packed)) 如何影响包含该字段的结构?

    如果我有一个打包字段 为什么我的整个结构会被打包 Example include
  • `cosf`、`sinf` 等不在 `std` 中 [重复]

    这个问题在这里已经有答案了 根据这里的讨论 我有报告了一个错误 https bugs launchpad net ubuntu source gcc 8 bug 1831385给 Ubuntu 开发者 编译以下示例 C 程序时 includ

随机推荐

  • 重复一个字符N次

    有没有其他方法可以在php中打印40点 我心里有这个想法 但我认为这是错误的 也许有这样的方法 可以这样做吗 不使用循环 是的 使用str repeat功能 echo str repeat 40
  • 在绘图上绘制日期和时间

    我有几个数据集 我想用日期作为 X 轴 时间作为 Y 轴来绘制 我正在 Jupyter Notebook 中工作 from datetime import date time from plotly import offline as py
  • 当未找到搜索词时,在 R 中使用 -which() 会出现意外行为

    我一直用Rwhich函数从数据框中删除行 我最近发现 如果搜索词不在 data frame 中 则结果是空字符 1 returns A Q S Z as expected LETTERS which LETTERS R 2 returns
  • 如何在 Scala 中测试对象的私有方法

    我有一个示例对象 object Foo private def sayFoo Foo 我想测试私有 sayFoo 方法而不使用以下解决方法 1 没有定义为package private 2 不将其定义为 protected 并在测试类中继承
  • 给定一种颜色的十六进制,如何使该颜色变浅或变深? [复制]

    这个问题在这里已经有答案了 假设我有一个十六进制 例如 5fc9f8 是否有一个函数接受 黑暗级别 10 到 10 并返回反映该级别的十六进制值 我所说的黑暗是指在颜色中添加黑色 删除黑色 import UIKit extension St
  • lxml unicode实体解析问题

    我使用 lxml 来解析从另一个系统导出的 XML 文件 xmldoc open filename etree parse xmldoc 但我得到 lxml etree XMLSyntaxError 实体 eacute 未定义 第 4495
  • 什么是“对于(x:y)”?

    所以我在互联网上查找有关线程的内容 然后我找到了有关线程的博客 教程 但令我困惑的是他使用的这条线 for auto thread threads 不太确定那是做什么的这是我正在谈论的博客的链接LINK感谢为我回答这个问题的人PS你能给我一
  • 如何使用 jQuery 通过 Ajax 使用 Google 翻译?

    我在用Ajax通过 jQuery 我正在尝试使用谷歌翻译服务 该服务似乎不适合我 我究竟做错了什么 我将如何在我的网络应用程序中使用它 你可以这样做 ajax url https ajax googleapis com ajax servi
  • 如何从 main() 返回大于 8 位的数字?

    据我所知 退出代码从返回r0仅使用该寄存器的最低 8 位 如何返回高于 8 位的值 这是 ARMv7 代码 looping s calculates sum of integers from 1 to 100 text balign 4 g
  • Azure 间接对等互连

    假设我的对等互连设置如下 ABC 并且希望在 vnet A 和 C 之间路由流量 目前这可能吗 也许 B 中的 vnet 网关和 UDR 的使用 Thanks 目前来看 这是不可能的 VNet 对等互连位于两个虚拟网络之间 不存在派生的传递
  • Symfony2 身份验证“login_check”路径未找到

    我是 Symfony2 的新手 我正在尝试创建一个基本的注册 登录系统 因此 在 Symfony2 文档的帮助下 我创建了这个 security yml security encoders TestCompany InternetBundl
  • Angular 数据表中的自定义加载

    我试图在角度数据表中实现我的自定义加载 我检查了文档 https l lin github io angular datatables overrideLoadingTpl 建议实施 angular module showcase data
  • 从标准输入读取数组,忽略括号和逗号

    我的代码的示例输入是 1 2 3 4 我希望忽略大括号和逗号 并将数字读入数组 我怎样才能做到这一点 嗯 这可能有用 Ignore all characters up to and including the open curly brac
  • 如何在php中的echo中连接if语句? [复制]

    这个问题在这里已经有答案了 是否可以在 php 的 echo 中连接 if 语句 如何将一些基于条件的 html 附加到 echo 内的 html 类似如下 它会对你有所帮助 尝试这个
  • TLD 优先的类域标识符有何意义?

    TLD first 类域标识符 虽然拗口 但这就是我能想到的全部 多年来我在不同的地方看到过这些用法 并且想知道这个约定背后的历史 原因是什么 因为您可能会认为有一种真正的方式来提及域 我不使用 Java 但我通过探索发现命名空间通常是这样
  • 在xcode中添加不同的图像到不同的注释视图

    我试图将不同的图像添加到不同的注释视图中 换句话说 我想要一张独特的图片对应于每个独特的引脚 这是我正在尝试的 MKAnnotationView mapView MKMapView mapView viewForAnnotation id
  • 在 Python 中使用 Selenium 下载 Chrome 无头文件

    在无头模式下 Chrome 默认禁止文件下载 然而 最近他们在 DevTools 中添加了一个选项来启用此行为 https chromedevtools github io devtools protocol tot Page method
  • AFHTTPRequestOperationManager 的子类?

    我发现自己重复了很多代码AFHTTPRequestOperationManager在我的代码中 所以我正在考虑对其进行子类化 这样我就可以将其设置为单例 并将所有代码放入子类中 而不是将其分散到我的项目中 然而 在 AFNetworking
  • 如何将滑块添加到 QMenu 中?

    我的上下文菜单有很多项目 我需要一个滑块来控制它 但我没有找到任何功能可以做到这一点 我该怎么办 从 Stack Overflow 上的另一个帖子中 我发现了这个技巧 submenu gt setStyleSheet QMenu menu
  • 禁用 GCC 中特定循环的展开

    我有以下 4x4 矩阵向量乘法代码 double const restrict a 16 double const restrict x 4 double restrict y 4 pragma GCC unroll 1 does not