问题标签 [loop-unrolling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
loop-unrolling - 循环展开如何减少分支惩罚?
我试图理解循环展开的概念,根据维基百科,它限制/最小化分支惩罚?
现在,我明白了循环展开是什么。它基本上是增加循环增量步骤,并重复循环内的语句。
但是,我不太明白这对分支惩罚有何帮助?
c++ - Is array initialization in for loop slower then non-for loop initialization in C++
I was wondering if this code
will be slower than initializing array line by line like this
It seems like if there is no compiler optimization for this, the for loop would be slower since it need to create a new variable i
, check the conditional statement and increment i
. I was wondering if there is actually a compiler time optimization that optimizes scenarios like this.
counter - Chisel:如何对展开循环中递增的变量进行建模
假设我有一个布尔的 Vec。我想填充一个相同大小的新 Vec,其值等于我在原始 Vec 中看到的这个索引的真实值的数量。我想结合起来做。
有了 HLS 背景和编码风格,我想写这样的东西:
但是我知道这是在创建一个组合循环,但是我找不到对其进行建模的好方法。不知何故,我需要生成循环的新变量迭代并在迭代之间传递它。
c++ - 在特殊情况函数中展开 for 循环
所以我正在尝试优化一些代码。我有一个带有可变大小循环的函数。但是,为了提高效率,我想用 1、2 和 3 大小的循环制作完全展开的特殊情况。到目前为止,我的方法是将循环大小声明为 const 参数,然后定义调用 main 函数的包装函数,并将其传递给 const 值的文字。我已经包含了一个代码片段,它说明了我想到的那种事情。
所以我的问题是我期望我的编译器(GCC)在 specialCase 中展开 for 循环是否合理。我的意思是显然我可以复制 - 将 someFunction 的内容粘贴到 specialCase 中并用 3 替换 a 但为了清楚起见,我宁愿只在我的代码中处理 someFunction 的一个定义。
python - 如何展开列表理解
由于我是 Python 新手,因此我试图理解以下代码。我知道代码计算了powerset,但这条线subsetlist = [ subset + [item] for subset in result]
有点难以理解。我如何才能将这条复合线分解为简单的 for 循环以便理解。
这是我试图让它更简单的方法,但它似乎不起作用。我的 IDLE 卡住了,不打印任何东西。
c - 循环展开,性能实验室
我试图通过循环展开来优化这段代码,
但是,我以前没有真正做过,所以当我尝试时,我得到了这个
运行代码时,它不起作用,它给我这个错误:
“错误:维度 = 96, 9216 错误
例如,以下两个像素应该具有相等的值:
src[9215].{红、绿、蓝} = {22543,1426,53562}
dst[9120].{红、绿、蓝} = {0,0,0}"
对我做错了什么或我应该做什么的任何帮助表示赞赏
编辑我用这个更新了我的代码
我不再收到错误(耶!)但这实际上并没有加快它,实际上它减慢了它。也许我做错了什么,但是,我不知道是什么。
编辑我更新了代码看起来像
c - C:如果矩阵大小为 4096x4096,则矩阵乘法会卡住
这是代码,C中的矩阵乘法,矩阵的填充是整数。循环嵌套和循环展开的优化。运行良好,直到 N 为 7168。对于 N 8196,内存不足。如果运行它,只需屏幕,等待获取时间结果。这是我的电脑(Asus A456UQ)发出的警报还是代码仍然错误?
c - 循环展开不适用于剩余元素
我有一个典型的矩阵乘法算法。我正在尝试应用和理解循环展开,但是当我尝试展开 k 次时,当 k 不是矩阵大小的倍数时,我在实现算法时遇到了问题。(结果我得到了非常大的数字)。这意味着我在展开后不知道如何处理剩余的元素。这是我所拥有的:
假设 size aka n
是 12。当我展开 4 次时,此代码有效,这意味着它永远不会进入剩余循环。但是当它发生时,我不知道发生了什么!如果有人能指导我哪里出错了,我会非常感激。我是新手,很难弄清楚。
c - 矩阵优化 - 使用内在函数和循环展开时出现分段错误
我目前正在尝试使用内在函数和循环展开来优化矩阵运算。有分段错误,我无法弄清楚。这是我所做的更改代码:
编辑: 这里是矩阵的结构。我没有修改它。
编辑:我尝试使用 gdb 来确定是哪一行导致了分段错误,并且看起来确实如此_mm256_load_ps()
。我是否以错误的方式索引到矩阵,以至于它无法从正确的地址加载?还是对齐内存的问题?
performance - 当一个循环展开时,最后的迭代叫什么?
如果一个循环被 N 展开,将主体复制 N 次并将行程计数减少 N 倍,则在循环之后您可能需要 0 到 N-1 次“最终迭代”——如果您的原件会发生非零情况trip-count 不是 N 的倍数。
这些最终迭代称为什么?
例如,以下循环:
可以展开 4 倍,如下所示:
...作者可能会将整个正文简化为sum += i *4 + 6
1。您还需要一些“最终迭代”处理,这可能与原始循环一样简单:
1事实上,编译器可能会在简化原始循环方面做得更好,通常将其完全删除并通过基于求和公式的乘法直接计算最终结果。毕竟,这只是一个例子。