禁用 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 中特定循环的展开 的相关文章

随机推荐

  • 重复一个字符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