问题标签 [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.
opengl - GLSL着色器在需要时不展开循环
我的 9600GT 讨厌我。
片段着色器:
如果a=25
程序以 3000 fps 运行。
如果a=26
程序以 20 fps 运行。
如果aa
不出现 <=32 的大小问题。
视口大小为 1000x1000。
仅当大小aa
大于 32 时才会出现问题。
作为阈值a
的值随循环内对数组的调用而变化(aa[i]=aa[i+1]+aa[i-1]
给出不同的截止日期)。
我知道gl_FragColor
已弃用。但这不是问题。
我的猜测是,如果 a>25 和 size(aa)>32,GLSL 不会自动展开循环。为什么。之所以取决于阵列的大小,是人类不知道的。
这里解释了一个非常相似的行为:
http ://www.gamedev.net/topic/519511-glsl-for-loops/
手动展开循环确实可以解决问题(3000 fps),即使aa
大小>32:
c# - 替代 if, else if
我有很多 if,else if 语句,我知道必须有更好的方法来做到这一点,但即使在搜索 stackoverflow 之后,我也不确定如何在我的特定情况下这样做。
我正在解析文本文件(账单)并根据账单上是否出现某些字符串将服务提供商的名称分配给变量(txtvar.Provider)。
这是我正在做的一个小样本(不要笑,我知道这很乱)。总而言之,大约有 300 个 if 和 else if。
我想使用类似 switch 语句的东西来提高效率和可读性,但我不确定如何比较 BillText。我正在寻找这样的东西,但不知道如何使它工作。
我绝对对想法持开放态度。
我需要能够确定评估值的顺序。可以想象,在解析数百个略有不同的布局时,我偶尔会遇到一个问题,即没有明确唯一的指标来说明账单属于哪个服务提供商。
haskell - 是否有类似于函数式编程的循环展开的优化?
免责声明:我对 ghc 编译管道知之甚少,但我希望通过这篇文章了解更多信息,例如,比较命令式与函数式是否与代码编译相关。
如您所知,循环展开通过复制其中的代码来减少循环的迭代次数。这提高了性能,因为它减少了跳转次数(以及与之相关的惩罚)和 AFAIR,创建了更大的代码块,为更好的寄存器重命名优化留出了空间。
我想知道,对于函数式编程,是否有等效于循环展开的方法?我们能否“展开”一个函数,打开/扩展它的定义,以首先减少对所述函数的调用次数和/或创建更大的代码块——然后为更多代码重写优化留出空间(如寄存器重命名或一些 FP相等的)?
可以“展开”或“扩展”函数定义的东西,例如使用函数评估(可能与某种策略混合)以便在空间与时间之间进行权衡。
我想到的一个例子:
将展开到
再一次:
有两件事在起作用:map4 的多个案例(以及列表上的后续测试)可能会降低性能,或者减少 map4 的调用次数会提高性能。也许这可以减少惰性评估造成的一些持续开销?
好吧,编写测试代码似乎并不难,所以在提出标准来推出它之后,这就是我所拥有的:
嗯,展开似乎有一些效果^1!map4 似乎快了 16%。
那么问题的时间:
- 以前讨论过这个吗?类似的东西已经实施了吗?
- 真的是减少map4的评估次数提高了速度吗?
- 这可以自动化吗?
- 我可以按块评估吗?即:如果 (fx) 被完全评估,则完全评估 (f x4) 之前的所有内容。
- 这种展开的任何其他形式都在起作用吗?
- 这会导致函数大小的膨胀如何?
- 为什么这不是一个好主意?
1:我也展开了 fib,因为这种优化也会以这种形式发生,但是性能增益是在欺骗一个(非常)糟糕的算法。
c - 使用 gcc 展开循环的正确方法
我想使用 gcc 对此代码进行循环展开,但甚至使用标志。
我得到的汇编代码包含一个 10000 次迭代的循环
有人能告诉我如何在 gcc 中正确实现循环展开吗
c++ - C++ 循环展开性能差异(Project Euler)
我有一个关于 Project Euler 问题和使用循环展开进行优化的问题。
问题描述:2520是可以被1到10中的每一个数字整除而没有余数的最小数字。能被 1 到 20 的所有数整除的最小正数是多少?
解决方案:
现在,注释掉 CODE BLOCK #1 或 CODE BLOCK #2 会给我正确的答案 (232792560)。但是,代码块#2 比代码块#1 快得多。
代码块 #1:3,580,000 个周期(我刚刚在代码块 #1 中添加了中断,它运行得更快。但是仍然比复合 IF 语句慢得多。)
代码块 #2:970,000 次循环
有谁知道为什么会出现这种巨大的性能差异?
c - 循环展开多维数组
我最近尝试在这个多维数组中展开内部 i 和 j 循环,但是 filter->get(i,j) 总是弄乱图像的纹理。谁能帮助我展开 i 和 j 循环?谢谢。
我的尝试:
原来的:
c - C中的非递归阶乘
我有一个简单的问题要问你。我编写了这段代码来计算一个数字的阶乘,而无需递归。
如您所见,我的代码使用循环展开来优化执行中的时钟周期。现在我被要求在同一代码中添加双向并行性,知道怎么做吗?
ios - 在 iOS 的片段着色器中循环与展开
我的片段着色器之一模拟了一些基本的 OpenGL ES 1.1 多纹理特性。
作为其中的一部分,我声明了以下 GLSL 函数:
k_GL_XXX
常量位于着色器的#defined
顶部。
为了执行多重纹理,这个函数被多次调用。对于 iOS 下的 SGX GPU,这是使用 for 循环成功完成的:
哪里u_cc3TextureCount
是 int 制服并且MAX_TEXTURES
是。#defined
2
奇怪的是,尝试手动展开此循环不起作用,并且不会绘制任何内容:
更奇怪的是,更基本的也没有:
至少可以说,这是完全出乎意料的行为!
我已经确认 is 的值u_cc3TextureCount
,2
因此所有这三种方法都应该产生相同的结果。
我试图展开循环的原因是几个 GPU,包括一些 Android GPU,以及 iPad Air 中的新 Apple A7 GPU 不能与循环正常工作。我正在尝试找到一种applyTexture()
多次调用该函数的方法,该方法适用于所有 GPU。
有人能向我解释为什么这种基本的循环展开不起作用吗?
loop-unrolling - 矩阵乘法的循环展开
我需要比天真的方法更好地实现矩阵乘法 这里是我使用的方法:1-删除了使性能更好的错误依赖项 2-使用了递归方法,然后我需要尝试循环展开。问题是每次我使用它时,它都会使性能最差我找不到它的解释我需要帮助这里是代码
c++ - C++:循环优化和循环展开(循环或不循环)
更新:
这个讨论比我预期的更深入,所以当这个问题突然出现在我脑海中时,我正在使用我实际正在处理的代码来更新它。在我的 C++ 入门课程中,决定谁是井字游戏的赢家需要 8 到 16 行代码。
注意:这旨在与课程保持一致,
注 2: token 是 x 或 o 或 ' ' 的字符
这是一个优化问题。如果这是重复,我很抱歉,但我无法在其他地方找到答案。
基本上,它归结为以下代码是否会更好地循环:
这对他们只需键入 100 行 cout 行的系统是否或多或少会造成负担?
我很好奇,因为看起来我们不仅执行了 100 行计算,而且还为内存分配了一个新变量,并强制计算机处理 100 个数学方程并输出数据。
我可以理解编译器可能会提供某种程度的优化,但我有兴趣在更一般的层面上了解。首先,我使用 VisualStudio 2012 或 MingGW (g++) 进行编译。