• 如何加速矩阵乘法——优化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项目早有所耳闻,但是一直没有精力去使用,今天正好将其调试好,然而碰到了一些我意想不到的问题,导致花了很长时间。

  • 通过异步加载非关键js脚本与css样式表来加速网页网页渲染

    | /

    如果我们想要让网页首次渲染的时间尽量提前,那么我们必须加快关键路径上的资源加载。而网页内嵌关键资源,异步加载非关键资源能够让网页的渲染速度达到极致。

    在建博客之初,我是把css样式表和js脚本都放在本站,但是从国外的服务器请求静态资源的延迟实在太大了,因此我后来使用jsDelivr这个在国内也有服务器的CDN来加载静态资源(详情见上一篇文章,使用jsdelivr CDN加速hexo的图片等静态资源加载 )。但是为了追求极致的速度,我不能让html网页传过来后还要去请求css样式表才能开始渲染,即使是使用CDN也是有不可忽视的请求延迟的,因此我现在将渲染需要的关键css样式表内联在html网页中,而异步加载非关键的资源。

  • 自动使用jsdelivr CDN 加速hexo的图片等静态资源加载

    | /

    独立博客的一个十分重要的问题就是图片等静态资源的加载速度,这对于访问博客的体验而言十分的重要,尤其在中国,如果使用国外的服务器而域名也没有备案的话,图片的加载速度能够让人怀疑人生。

    而jsDelivr是一个著名的开源CDN项目,它闻名于免费的javascript CDN,全球部署尤其是在中国也有备案的站点。但是少有人了解它提供的其他免费服务,其中包括一项是对Github仓库的CDN加速,而这便可用来作为我们博客的图片CDN。

  • 什么是价值观

    | /

    我们常常在网络上看到对价值观的讨论,也常看到批判话语如“某某人的价值观不正”。那么,当我们谈到价值观时,我们谈的究竟是什么呢?本文意欲讨论与其相关的一些问题。

    由于笔者几乎没有研究过分析哲学相关的内容,因此行文措辞可能多有不严谨之处,对逻辑十分考究的人权当此文为笔者的梦呓罢。

  • conv1d与conv2d的区别

    | /

    看到这个标题,可能不少人的想法都是“博主真是学艺不精,这么简单的区别都要写下来”。说的没错,我的确才疏学浅了。

    conv1d与conv2d的区别显然在于一个是一维卷积一个是二维卷积,但是这里的“维度”具体是指哪个维度呢?在Word Embedding上使用conv1d和conv2d是一回事吗?

    网络上的许多文章都说这两者完全是一回事,但是他们的理解都是有问题的,几乎把我也误导了,我特此写下这篇文章来记录此事,希望能够帮到思考这个问题的人。