• 如何加速矩阵乘法——优化GEMM (CPU单线程篇)

    | /

    矩阵乘法GEMM(General matrix multiply)是一个被广泛使用的基础算法,各种领域都需要应用,例如神经网络的核心计算任务就是矩阵乘法,交易中的各种信号计算也可能用到矩阵乘法。因此矩阵乘法的效率是极其关键的。

    关于如何优化矩阵乘法,我准备写一个较短的系列博文,包括CPU单线程篇、CPU多线程篇、GPU篇。原本计划还有一个稀疏矩阵乘法篇,由于这学期毕业前也没有时间把GPU篇做到满意,因此,稀疏矩阵篇就没了,GPU篇也很不完整。如果日后有时间且有那冲动可能会补上(大概率没有)。


    这是矩阵乘法优化第一篇,CPU单线程篇。

    矩阵乘法对于同样的抽象算法,不同的优化带来的性能差异极大,现代的部分CPU上最朴素的矩阵乘法实现和最优实现甚至可以有百倍以上的性能差距,这比一些有更低时间复杂度的矩阵乘法算法的优化效果都有效。而这都是针对现代CPU的体系结构作出的针对性优化带来的,SIMD向量指令更是增加了CPU的处理大批量数据时的效率。在本文中,我们将介绍如何针对CPU进行单线程GEMM实现的优化。

  • 在程序中重定向标准输入和标准输出的多种方法及原理

    | /

    如何在程序中重定向标准输入和标准输出呢?本文将记录多种方法并介绍背后的原理。

    前一阵子在看一段代码时,虽然猜到那段代码的作用大概是重定向了stdout,但是一时没看明白是怎么完成的重定向。后来一阵学习才发现对stdin和stdout的重定向还有种种方法,而且对这些方法的完全理解需要了解操作系统中的文件描述符的一些实现。

    如果对linux上的重定向很熟悉的话,那么这篇文章的内容就不需要看了。

  • 我们可否说清什么存在?

    | /

    世界上存在什么,不存在什么?

    这似乎是个自然科学的问题,但是,同样是个哲学上的问题,这是本体论的根本问题。

    这个问题的答案,是和一个人对世界的认识论相关的,如果一个人是怀疑论者,那么他可能认为我们不可能搞明白什么存在,什么不存在。如果一个人是自然主义者,那么他可能认为一切都交由自然科学去鉴定。

    鉴于这个问题实在牵扯到了方方面面,而且仍是争论不休的问题,我也只不过是在这里从几个方面记录下自己的想法而已。

  • 将Time Machine备份转移到新磁盘

    | /

    由于之前用来作为Time Machine备份的硬盘只有1t,能记录的快照日期有限,我又购置了一个2t的移动硬盘来作为新的备份磁盘。但是在迁移旧备份到新磁盘的过程却并不简单。

    我先后尝试了官网推荐的拷贝粘贴法、rsync法、磁盘工具的恢复磁盘法、dd法。

  • 通过代理服务器ssh连接内网服务器

    | /

    经常遇到的场景是,公司或学校的服务器都不能直接在外网进行访问,但是存在一个代理服务器,这时候就可以利用代理服务器来访问内网服务器。

    使用跳板机访问内网服务器的场景和姿势都很多,我这里只介绍我碰到的场景。

  • 使用Disqus JS让Disqus评论在国内可用

    | /

    Disqus在国内近几年一直访问不了,那么许多平常访问的游客甚至不知道博客有评论功能,这无疑是让人遗憾的事情。

    要想让Disqus的功能可用,可以使用Disqus API + 反向代理的方法,前端模拟Disqus的评论界面,再使用一个服务器反向代理Disqus API的请求,那么就可以让评论可以在国内网显示出来。

    笔者对Disqus JS项目早有所耳闻,但是一直没有精力去使用,今天正好将其调试好,然而碰到了一些我意想不到的问题,导致花了很长时间。