0%

2018 年计算机组成原理的大作业,五级流水不会写,三级流水写不出来。竟然没想不到多年后还会用到多级流水的思路去设计代码。

移动端算法优化是个很庞大的话题。从计算机体系到指令,涉及到非常广而深的东西。本文尝试以常见的算法为例,阐述算法在单线程场景下的加速与优化,多线程是最后的收尾,没啥可说的。而至于具体的场景,如金字塔、滤波、降噪等,优化的思路都是相同的:减少 IO,一次 IO 完成尽可能多的计算。

本文会使用 Neon, OpenCL 来优化算法,如果有可能也会引入 DSP。本文持续更新,整理算法优化相关的经验。额外的,确保打开了 O3 编译选项,打开 release 模式等,否则会影响算法的执行时间。

之前对 C 语言中宏定义的认知十分简单,包括但不限于停留在以下浅薄的层面:

1
2
#define PI 3.14
#define add(a, b) a + b

上述代码完全是大学课本中的用法。但当我看到实际项目中宏的用法后完全是一头雾水,所以自己也要写出那种高逼格让别人看不太懂的代码。宏远远比我想象的要强大,所以本文为每个宏技巧都配备了一个实用场景。

  • 字符串化操作符,实现一个简单的自动化测试样例
  • 字符串连接,实现一个具备计时功能的宏
  • X 宏,实现根据输入执行不同的函数
  • 特殊宏 __VA_ARGS__,实现一个简单的日志函数

整体的开发感受是:缺乏一个合理的、完整的软件开发流程或规范。

写在前面。希望你不会有快速搭建 UI 界面为他人服务这种迫切的需求。虽然这是我的博客,但是我并不希望你搜到他。对于完全未知的领域,快速搭建、快速学习、不会就去学、不会就查、速成,通过这种方式写出来的代码一定是不好的,心累的,事倍功半的,也一定存在多多少少的 bug 和无法实现的逻辑。

但也有一个好消息,如果你完全不会前端后端,只会 Python,看了本文也能搭建完成的前后端服务,但距离入门的全栈工程师还差很远。

没想到有一天写 python 的时候也会想着如何去节省内存。平时写 python 的时候根本不会关注这些,变量什么的直接创建和使用就完了,也不用考虑内存的释放,反正有垃圾回收机制。只不过这次数据量过大,debug 的时候发现内存一直在申请,导致系统彻底的卡死。

可能也是从事算法的优化工作养成了职业病,每次写代码的时候都会想,这些代码消耗的时间怎么样,占用的空间怎么样,数据结构是否可以继续优化,这些逻辑有没有更优雅的写法。

注:本文程序中使用 psutil 库来监测进程使用的内存大小,需要 pip install psutil一下。

职场新人兼新手程序员斗胆开了新坑「如何写出更好的程序」,所见所得都是来自实际写代码时自己的思考,且已脱敏。这一系列不包含任何复杂的技术,也不包含任何难懂的代码。只是将核心问题暴露出来,针对这些场景,如何写出可维护性更高、更简洁优雅的代码。

目前仅包括 python 装饰器的使用,等某天遇到其他技术也可以减少代码的修改时,会追加到本文。