程序设计实现笔记——性能

优化的第一要义是不做。

  • 如果你已经选择了正确的算法,那么只有到了写程序的最后,才有可能要关心执行的优化问题。
  • 如果你必须做这件事情,进行工作的基本循环应该是:测量,把注意力集中到若干个做一点修改就能产生最大改进的地方,验证你所做修改的正确性,然后再测量。
  • 在能停下的时候立刻停下来。在这里还应该保留那个最简单的版本,作为计时和验证正确性的基础。

找到瓶颈:

Don Knuth写到: “一个程序中少于百分之四的部分通常占了程序一半以上的执行时间。

自动计时测量。

U n i x系统里有关命令的名字是 time

%time slowprogram

real 7.0

user 6.2

sys 0.1


使用轮廓程序。除了可靠的计时方法外,在性能分析中最重要的工具就是一种能产生轮廓文件的系统。轮廓文件是对程序在哪些地方消耗了时间的一种度量。在有些轮廓文件中列出了执行中调用的各个函数、各函数被调用的次数以及它们消耗的时间在整个执行中的百分比。



%cc -p spamtest.c -o spamtest

%spamtest

%prof spatest


在改造一个程序,设法把它弄得更快之前,首先应该确定它确实太慢。然后应该通过计时工具和轮廓文件,弄清时间到底跑到哪里去了。在你知道发生了什么之后,有一些可以采用的策略。

使用更好的算法或数据结构。要使程序运行速度快,最重要的因素是算法与数据结构的选择,有效的算法和不那么有效的算法造成的差距是巨大的。例如用链表代替二维数组表示稀疏矩阵

让编译程序做优化。有一种毫不费力的改变就可能产生明显的加速效果,那就是打开编译系统的所有优化开关。在打开了优化程序之后,应该重新运行回归测试集,就像你自己做了什么改动一样。

调整代码。只要数据有足够的规模,算法的正确选择就会显示它的作用。

  • 收集公共表达式


  • 用低代价操作代替高代价的。
比较两个距离,不需要求平方根,直接比较两个距离的平方即可

  • 高速缓存频繁使用的值。以缓冲方式保存的值无须重新计算。
  • 写专用的存储分配程序。经常可以看到这种情况,程序里的惟一热点就是存储分配,表现为对m a l l o c和f r e e的大量调用。如果程序中需要的经常是同样大小的存储块,采用一个特定用途的存储分配器取代一般的分配器,有可能使速度得到实质性提高。这种特定的存储分配器调用m a l l o c一次,取得基本存储块的一个大数组,在随后需要时一次送出去一块,这是一个代价很低的操作。释放后的存储块接在一个自由表的最后,这使它们可以立即重新投入使用。
  • 对输入输出做缓冲。
  • 特殊情况特殊处理。通过使用特殊代码去操作同样大小的对象,特殊用途的分配器可以比通用分配器节约时间和空间开销,还可能减少碎片问题。
  • 预先算出某些值。有时可以让程序预先计算出一些值,需要时拿起来就用,这也可能使程序运行得更快些
  • 如果精度不太重要,那么就尽量使用具有较低精度的数据类型。short代替int,float代替double
  • 在某个低级语言里重写代码。低级语言程序的效率可能更高。。但这是最后一招,是不该轻易采用的,因为它破坏了可移植性,也使将来的维护和修改都变得更加困难。


不要优化那些无关紧要的东西。例如:操作系统的空转循环




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA自学笔记——设计与验证JMB FPGA(可编程逻辑门阵列)是一种可编程的硬件平台,可以实现各种数字电路的设计与验证。本文将简要介绍使用FPGA自学设计与验证JMB(低功耗、高效能、集成度高的多媒体芯片)的过程。 首先,我们需要了解JMB的功能和特性。JMB是一种面向多媒体应用的芯片,具备低功耗、高效能和高集成度的优势。我们需要详细研究JMB的硬件架构和内部模块,包括处理器核、存储器模块、图像和音频处理模块等。 接下来,我们可以使用FPGA开发板来设计和验证JMB。首先,我们需要熟悉FPGA设计工具,例如Vivado或Quartus等。这些工具提供了图形化界面和硬件描述语言(HDL)等设计方法。我们可以使用HDL编写JMB的功能模块,并将其综合为FPGA可执行的位流文件。 在设计完成后,我们需要验证JMB的功能和性能。我们可以使用仿真工具(例如ModelSim或ISE Simulator)来模拟JMB在不同情况下的行为。通过设计测试程序并运行仿真,我们可以验证JMB的各个模块是否正确地工作,是否满足设计要求。 在验证完成后,我们可以将位流文件下载到FPGA开发板中进行智能芯片的物理实现和测试。通过与外部设备的连接以及相关测试程序的运行,我们可以验证JMB在实际硬件中的功能和性能。 总结起来,学习FPGA设计与验证JMB,我们需要熟悉JMB的硬件架构和内部模块,并使用FPGA开发工具进行设计与验证。通过仿真和物理实现测试,我们可以验证JMB的功能和性能。这些过程需要理论知识和实践经验的结合,希望这些笔记能够给你提供一些参考和指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值