如果行程计数不恒定,为什么 #pragma-unrolled 循环的性能会下降?

2024-01-27

我有以下使用循环展开的代码:

#pragma unroll
for (int i=0;i<n;i++)
{
    ....
}

在这里,如果 n 是一个定义的常数,则一切正常。然而,如果 n 是一个变量,性能就会急剧下降。我注意到大约有 3 次指令被发出和执行。我想我正在寻找一种在运行时展开循环的方法,这可能是不可行的。


CUDA 是一种编译语言。循环展开是一种编译器优化。运行时循环展开意味着某种运行时解释器或动态代码生成。这显然不可能发生。

这是有道理的unrolledcase 执行的指令与朴素循环一样多或更多,因为编译器将用循环内容的重复来替换循环。如果展开的案例执行less指令,这意味着编译器正在预先计算部分或全部循环内容并用恒定结果替换代码。

这完全取决于循环中包含的内容。

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

如果行程计数不恒定,为什么 #pragma-unrolled 循环的性能会下降? 的相关文章

随机推荐

  • 确保 C# 中静态方法的线程安全

    我目前在静态类 方法中有一些代码 但我想检查它是否是线程安全的 从我读到的内容来看 我认为这应该没问题 但我内心深处的某些想法告诉我 这可能不是 我的网页的数据处理阶段使用外部 Web 服务来创建订单记录 这可能会非常慢 可能需要 30 4
  • AngularJS TypeScript 指令链接函数

    我正在尝试使用 TypeScript 创建 AngularJS 指令 我的指令需要 ngModel 并且我还使用在指令中注入的自定义服务 我的主要问题是我的服务无法在链接功能中使用 这是我想要实现的目标的示例 module app dire
  • 当启用 wifi 并且 WifiManager.EXTRA_WIFI_STATE 不可用时,android.net.wifi.STATE_CHANGE 不会广播

    显现
  • 在swift中下载并解析json

    我正在尝试从网站获取 JSON 并解析它 然后再将其放入 iOS 视图中 这是我的代码 func startConnection let urlPath String http binaenaleyh net dusor var url N
  • C# WebClient 非英文请求标头值编码

    我想将一些自定义标头添加到网络请求的标头中 我通过 WebClient Headers Add Header Value 方法来执行此操作 ASCII 字符没有问题 但非 ASCII 字符有问题 是否可以改变 标头编码值 None
  • xtable 用于条件单元格格式表的显着 p 值

    我正在使用 xtable 生成要放入 Latex 中的表格 并且想知道是否有一种方法可以对单元格进行条件格式设置 以便所有重要的 p 值都呈灰色 我在 TexShop 中使用 Knit 这是一个使用的示例diamondsggplot2 中的
  • 在 iPhone 上向屏幕外的 FBO 写入然后读取;在模拟器上有效但在设备上无效?

    我正在尝试在 iPhone 上进行一些图像处理 基于 Apple 的 GLImageProcessing 示例 最终我想做的是将图像加载到纹理中 执行示例代码中的一项或多项操作 色调 饱和度 亮度等 然后读回生成的图像以供以后处理 保存 在
  • Spring测试@ContextConfiguration和静态上下文

    我的抽象测试类有以下代码 我知道XmlBeanFactory with ClassPathResource已弃用 但这不太可能是问题所在 RunWith SpringJUnit4ClassRunner class ContextConfig
  • 如何使用 pyplot 使一个轴占据多个子图

    我想在一个图中包含三个图 该图应具有二乘二的子图布局 其中第一个图应占据前两个子图单元格 即整个第一行图单元格 其他图应位于单元格 3 和 4 中第一个图的下方 我知道 MATLAB 通过使用subplot像这样命令 subplot 2 2
  • 从 TIFF 文件中提取 JPEG

    背景我有一个大的 TIFF 文件 它是用 JPEG 压缩的 TIFF 标准中的新压缩率为 7 并且是平铺的 我需要做的是将这些图块提取到单独的 jpg 文件中 我需要能够在不解压缩 重新压缩图像数据的情况下完成此操作 因为这将需要太多的计算
  • 找不到有效的 GoogleService-info.plist

    FIRApp configure FirebaseApp configure in Swift could not find a valid GoogleService Info plist in your project Please d
  • Java Guava Multimap和Cache的结合

    有没有番石榴的组合之类的东西Cache and Multimap功能可用吗 本质上 我需要一个集合 其中条目在给定时间后过期 例如Cache但我有非唯一的密钥 并且我需要条目独立过期 我认为路易斯 沃瑟曼在上面的评论之一中提供了答案 即没有
  • 如何在CSS中修剪图像?

    好的 问题是 我的应用程序允许用户插入任何图像 由他们决定插入很大或很长的图像 但是当我租用图像时我想要width 50px and height 100px 好吧 如果我这样做的话 myImage width 50px height 10
  • 更改 GKE 上 LoadBalancer 的 IP 地址

    我想更改 Google Cloud 中 LoadBalancer ingress nginx controller 的 IP 地址 我现在已经通过 LoadBalancer 分配了 IP 地址 请参阅屏幕截图 不幸的是 它没有在 GKE 中
  • bash 从函数内部退出脚本

    在某些情况下 您希望从函数内部终止脚本 function die if fatal fatal
  • Javascript - 使用 iframe-in 值填充输入

    我想用我的 iframe in 值填充输入 我有两个html文件 1 html 和 2 html第一个 1 html 是这样的
  • 确定给定名称的类是否存在

    这可能是一个愚蠢的问题 但我四处搜寻却一无所获 我有一个代码 class A let className A 我需要检查是否className对应于现有的类 这一切都不在全局范围内 并且在 node js 中运行 所以我无法使用window
  • 在 C++ 中修改 const int [重复]

    这个问题在这里已经有答案了 运行下面的代码显示 x ptr 那么为什么x和 ptr不相等呢 const int x 10 int ptr int x ptr ptr 1 cout lt lt x lt lt lt lt x lt lt lt
  • Python 中的队列与 JoinableQueue

    在Python中使用多处理模块时有两种队列 Queue 可连接队列 它们之间有什么区别 Queue from multiprocessing import Queue q Queue q put item Put an item on th
  • 如果行程计数不恒定,为什么 #pragma-unrolled 循环的性能会下降?

    我有以下使用循环展开的代码 pragma unroll for int i 0 i