Questions tagged «optimization»

优化是改进方法或设计的行为。在编程中,优化通常采取提高算法速度或减少所需资源的形式。优化的另一个含义是机器学习中使用的数值优化算法。


10
分析Vim启动时间
使用Vim时,我启用了许多插件–多年来,我已经收集了插件。我有点厌倦了Vim现在开始需要多长时间,所以我想介绍一下它的启动情况,并查看我负责的许多插件中的哪一个。 有什么方法可以描述Vim的启动或脚本运行吗?理想情况下,我想知道Vim在加载的每个Vim脚本中花费了多长时间。

11
为什么Magento这么慢?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 Magento通常这么慢吗? 这是我的第一次使用体验,管理面板只需花一些时间即可加载和保存更改。这是带有测试数据的默认安装。 托管该服务器的服务器可超快地服务于其他非Magento站点。Magento使它如此缓慢的PHP代码有什么用,该如何解决?



11
测量C ++中函数的执行时间
我想弄清楚某个函数在我的C ++程序中要花多少时间才能在Linux上执行。之后,我想进行速度比较。我看到了几个时间函数,但最终还是从boost中获得了。计时: process_user_cpu_clock, captures user-CPU time spent by the current process 现在,我不清楚是否使用上面的功能,我是否可以获得该功能唯一的CPU使用时间? 其次,我找不到使用上述功能的任何示例。谁能帮我如何使用以上功能? PS:现在,我习惯于std::chrono::system_clock::now()以秒为单位获取时间,但这由于每次CPU负载不同而给我不同的结果。

13
当95%的情况下的值为0或1时,是否可以对很大的数组进行随机访问优化?
是否有可能对非常大的数组进行随机访问进行任何优化(我目前正在使用uint8_t,而我询问的是哪种更好) uint8_t MyArray[10000000]; 当数组中任意位置的值是 95%的情况下为0或1, 在4%的情况下, 占2 % 在其他1%的情况下介于3到255之间? 那么,有什么比uint8_t数组更好的东西了吗?应该尽可能快地以随机顺序遍历整个阵列,这在RAM带宽上非常繁重,因此当有多个线程同时对不同的阵列执行此操作时,当前整个RAM带宽很快就饱和了。 我问,因为实际上知道几乎所有值(除了5%之外)几乎都是0或1时,拥有如此大的数组(10 MB)感觉非常低效,所以当数组中所有值的95%实际上只需要1位而不是8位,这将使内存使用量减少近一个数量级。感觉必须要有一种内存效率更高的解决方案,该解决方案将大大减少为此所需的RAM带宽,因此也大大加快了随机访问的速度。



3
当限制为959但不是960时,为什么优化了一个简单循环?
考虑以下简单循环: float f(float x[]) { float p = 1.0; for (int i = 0; i < 959; i++) p += 1; return p; } 如果使用gcc 7(快照)或clang(树干)进行编译,-march=core-avx2 -Ofast则会得到非常类似的结果。 .LCPI0_0: .long 1148190720 # float 960 f: # @f vmovss xmm0, dword ptr [rip + .LCPI0_0] # xmm0 = mem[0],zero,zero,zero ret 换句话说,它只是将答案设置为960而不会循环。 但是,如果将代码更改为: …
131 c  gcc  optimization  clang 


2
为什么Clang优化x * 1.0而不优化x + 0.0?
为什么Clang会优化这段代码中的循环 #include <time.h> #include <stdio.h> static size_t const N = 1 << 27; static double arr[N] = { /* initialize to zero */ }; int main() { clock_t const start = clock(); for (int i = 0; i < N; ++i) { arr[i] *= 1.0; } printf("%u ms\n", (unsigned)(clock() - …

15
快速查找C数组中是否存在值?
我有一个具有时间关键ISR的嵌入式应用程序,该应用程序需要循环访问大小为256(最好是1024,但最小为256)的数组,并检查值是否与数组内容匹配。在bool这种情况下,将A 设置为true。 该微控制器是NXP LPC4357,ARM Cortex M4内核,而编译器是GCC。我已经组合了优化级别2(速度慢3),并将函数放在RAM中而不是闪存中。我还使用了指针算术和一个for循环,该循环进行递减计数而不是递增计数(检查if i!=0的速度比检查if的速度快i<256)。总而言之,我最终需要花费12.5 µs的持续时间,因此必须将其大幅缩短以确保可行。这是我现在使用的(伪)代码: uint32_t i; uint32_t *array_ptr = &theArray[0]; uint32_t compareVal = 0x1234ABCD; bool validFlag = false; for (i=256; i!=0; i--) { if (compareVal == *array_ptr++) { validFlag = true; break; } } 绝对最快的方法是什么?允许使用内联汇编。也可以使用其他“不太优雅”的技巧。

3
使用此指针会在热循环中引起奇怪的反优化
最近,我遇到了一个奇怪的取消优化(或者说错过了优化机会)。 考虑使用此函数可以有效地将3位整数的数组拆包为8位整数。它在每次循环迭代中解压缩16个整数: void unpack3bit(uint8_t* target, char* source, int size) { while(size > 0){ uint64_t t = *reinterpret_cast<uint64_t*>(source); target[0] = t & 0x7; target[1] = (t >> 3) & 0x7; target[2] = (t >> 6) & 0x7; target[3] = (t >> 9) & 0x7; target[4] = (t >> 12) & 0x7; …

14
发布前优化Android应用[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我在程序效率方面处于“ 特殊 ”情况。现在我处于一个需要提高应用程序性能并减少电池消耗的阶段。 在提问之前: 首先,我的应用程序工作。它运行良好-没有错误无论如何。 其次,我已经阅读了Android开发人员网站上的优化电池寿命,并且优化了他们所要求的小东西。没有问题的任何。 现在,我很想知道其他开发人员用于优化自己的应用程序的特殊修复程序。用户可能永远不会认识或关注的东西。但是,这些修复程序将增加电池寿命或帮助改善应用程序的维护。 那么,您独特的优化技巧是什么? 我处于一种特殊的情况下,我确实在寻找知识,我认为这将是一个很好的机会,可以分享开发人员有关他们所处的情况的知识。 请对好的答案进行投票,因为这将鼓励优秀的开发人员分享他们的知识。

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.