Questions tagged «program-optimization»

4
0-1矩阵向量乘法的自动优化
题: 当矩阵密集且仅填充零和一时,是否存在用于生成有效地应用矩阵矢量乘法的代码的确定过程或理论?理想情况下,优化的代码将系统地利用先前计算的信息来减少重复的工作。 换句话说,我有一个矩阵MMM ,我想基于进行一些预计算MMM,这将在以后接收到向量v时使计算MvMvMv效率尽可能高。vvv MMM是在“编译时”已知的矩形密集二进制矩阵,而vvv是仅在“运行时”已知的未知实向量。 示例1 :(滑动窗口) 让我用一个简单的小例子来说明我的观点。考虑矩阵 M=⎡⎣⎢⎢⎢11111111111111111111⎤⎦⎥⎥⎥.M=[11111111111111111111].M = \begin{bmatrix}1 & 1 & 1 & 1 & 1\\ & 1 & 1 & 1 & 1 & 1 \\ & & 1 & 1 & 1 & 1 & 1\\ & & & 1 & 1 & 1 & …

1
是否存在针对终端程序完全优化的编译器?
在安德鲁·W·阿佩尔(Andrew W. Appel)的《现代编译器在ML中的实现》一书中,他说,在第17章中,可计算性理论表明,总是有可能发明新的优化转换,并继续证明完全优化的编译器将解决停顿问题:不产生输出且永不停止的Q可以轻松地用其最佳表示Opt(Q)代替,即“ L:goto L”。因此,完全优化的编译器可以解决停止问题。 所以我的问题是:是否存在用于终端程序的完全优化的编译器?我唯一的想法是:即使保证某个程序可以终止,它仍然可以任意复杂,对于任何具体的优化编译器C,一个人也许可以构造一个以C作为输入的程序,并以某种方式生成较差的程序,如下所示:某种特殊情况。 另外,将自己限制为终止程序有什么含义?

12
用于快速查找字符串之间差异的数据结构或算法
我有一个100,000个字符串数组,长度均为。我想将每个字符串与其他每个字符串进行比较,看看是否有两个字符串相差1个字符。现在,当我将每个字符串添加到数组时,我正在将其与数组中已有的每个字符串进行比较,该字符串的时间复杂度为。kkkn(n−1)2kn(n−1)2k\frac{n(n-1)}{2} k 是否有一种数据结构或算法可以比我已经做的更快地将字符串相互比较? 一些其他信息: 顺序很重要:abcde和xbcde相差1个字符,而abcde和edcba相差4个字符。 对于每一个相差一个字符的字符串对,我将从数组中删除其中一个字符串。 现在,我正在寻找仅相差1个字符的字符串,但是如果可以将1个字符的差异增加到例如2个,3个或4个字符,那就太好了。但是,在这种情况下,我认为效率比提高字符差异限制的能力更为重要。 kkk通常在20-40的范围内。

2
在许多行业使用的编译器中,为什么单静态分配优先于连续传递样式?
根据Wikipedia页面上的静态单分配(SSA)页面,大型和知名项目(例如LLVM,GCC,MSVC,Mono,Dalvik,SpiderMonkey和V8 )使用SSA,而项目使用连续传递样式(CPS)在比较中有点不足。 我的想法是,主要实现功能语言的编译器和解释器更喜欢CPS-特别是,Haskell和Scheme由于对突变的限制或需要一流的连续支持而似乎对CPS风格有强烈的倾向(我想(Smalltalk也可能需要)。我遇到的使用CPS的主要文献似乎是那些主要在Scheme上工作或在某些方面与Scheme相关的文献。 除了采用的势头之外,SSA还用于工业中有什么特殊原因吗?SSA和CPS有密切关系;这意味着很容易用另一种方式陈述,但是对于CPS来说,信息表示可能不太紧凑或效率较低。

2
缺点的什么性质可以消除尾部递归模缺点?
我熟悉基本尾部递归消除的概念,其中可以将返回调用自身直接结果的函数重写为迭代循环。 foo(...): # ... return foo(...) 我还了解,在特殊情况下,如果将递归调用包装在对的调用中,则仍然可以重写该函数cons。 foo(...): # ... return (..., foo(...)) 的什么性质cons允许?除了cons可以包装递归尾部调用而又不破坏我们迭代重写的功能之外,还有哪些功能呢? GCC(但不是Clang)能够优化 “尾递归模乘 ”的示例,但是尚不清楚哪种机制可以发现它或如何进行转换。 pow(x, n): if n == 0: return 1 else if n == 1: return x else: return x * pow(x, n-1)

5
为什么OS设计能够降低功耗?
我已经读到,像Android和iOS这样的操作系统在某种程度上已经过优化,可以延长电池寿命。 我的理解是,CPU在一定时间内执行一定数量的操作,因此我认为您可以通过减少所需的操作数量来加快应用程序的速度,但是由于CPU仍会在y时间内执行x次操作,因此不应影响力量? 另外,如果一个进程占用更多RAM,是否会消耗更多功率?

1
用于编辑距离计算的微优化:有效吗?
在Wikipedia上,给出了自下而上的用于编辑距离的动态编程方案的实现。它没有完全遵循定义。内部单元的计算如下: if s[i] = t[j] then d[i, j] := d[i-1, j-1] // no operation required else d[i, j] := minimum ( d[i-1, j] + 1, // a deletion d[i, j-1] + 1, // an insertion d[i-1, j-1] + 1 // a substitution ) } 如您所见,如果存在匹配项,该算法始终从左上角的邻居中选择值,从而节省了一些内存访问,ALU操作和比较。 但是,删除(或插入)可能会导致较小的值,因此该算法在局部上是不正确的,即,它违反了最佳标准。但是也许错误不会改变最终结果-可能会消除它。 这种微优化有效吗?为什么不呢?

3
数据流分析,抽象解释和类型推断是否等效?
@Babou 对最近一个问题的回答使我想起,我一次看过一篇关于数据流分析的等效性(就可以推断或证明的事实以及运行推理算法的时间复杂性)的论文,抽象解释和类型推断。 在某些子情况下(例如在前向上下文相关的过程间数据流分析与抽象解释之间),对我来说等效性是相对明显的,但对于其他比较而言,这个问题似乎更加微妙。例如,我不知道如何使用Hindley-Milner类型推断来证明可以通过对流量敏感的数据流分析来证明的某些属性。 有哪些开创性的参考文献讨论数据流分析,抽象解释和类型推断之间的等效性(或差异)?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.