• 分片:简单粗暴细化锁的粒度的通用方法

    引子:Concurrent Hashmap

    假设我们需要一个支持并发的 Hashmap。当然,已经有很多的库实现了这个数据结构,但是这里我们假设我们需要自己编写一个。为了简单起见,我们只支持三种操作:get, putremove

    最朴素的方法

    我们知道 std::unordered_map 是个 Hashmap,但是并不是线程安全的。所以说最简单朴素的方法就是用一个大大的锁锁住它。

    Read on →

  • 熟练使用小工具让自己从机械工作中解脱

    一直以来我都相信熟练地使用各种小工具能大大提升生产力,把人们从无聊的机械工作中解脱出来。昨天我就在做一些无聊的机械工作,正好这些技能就派上了用场。我觉得可以把它分享出来,或许就会有年轻人被安利了。

    Read on →

  • 为实验室建立公用GPU服务器

    需求的产生

    现在深度学习风生水起,为了满足人民日益增长的计算需求,相信各个实验室都开始买起了显卡。然而毕竟显卡还是贵,做不到人手一块,所以只能以公用机器的形式出现了。

    大家都在公用机器上跑实验,而各自所需要的软件(比如 Cuda、TensorFlow……)版本却可能不一样,这样很容易因为版本问题而导致程序无法运行。解决这些软件冲突问题是一个又繁琐又耗时的工作,而且常常弄得鸡飞狗跳,最终没有人可以正常运行实验。所以说,我们希望在公用的机器上能够有一定的管理,使得不同的用户不会相互影响。

    这里我列出一些需求:

    • 不同用户之间不能相互影响
    • 用户要能方便地访问自己的“虚拟机”
    • 用户要有足够大的权限,能自由地安装程序,能自由地访问网络
    • 用户不被允许直接操作宿主机
    • 用户要能够使用 GPU
    • 用户能够方便地使用实验室的 NAS
    • 为满足这些需求,额外的开销应该小得可以忽略
    • 管理员应该能轻松地添加新的用户

    下面我将叙述我解决以上需求的方法,以供有需要的人参考。本文的受众应该是实验室的公用机器管理员,有一定的 Linux 基础,或者对此感兴趣的普通用户。

    Read on →

  • Cython 基本用法

    我一直非常喜欢 Python。当人们提到 Python 的时候,经常会说到下面两个优点:

    1. 写起来方便
    2. 容易调用 C/C++ 的库

    然而实际上,第一点是以巨慢的执行速度为代价的,而第二点也需要库本身按照 Python 的规范使用 Python API、导出相应的符号。

    天壤实习的时候,跟 Cython 打了不少交道,觉得这个工具虽然 Bug 多多,写的时候也有些用户体验不好的地方,但已经能极大提高速度和方便调用 C/C++,还是非常不错的。这里就给大家简单介绍一下 Cython(注意区别于 CPython)。Cython 可以让我们方便地:

    • 用 Python 的语法混合编写 Python 和 C/C++ 代码,提升 Python 速度
    • 调用 C/C++ 代码

    Read on →

  • Python 多核并行计算

    以前写点小程序其实根本不在乎并行,单核跑跑也没什么问题,而且我的电脑也只有双核四个超线程(下面就统称好了),觉得去折腾并行没啥意义(除非在做IO密集型任务)。然后自从用上了32核128GB内存,看到 htop 里面一堆空载的核,很自然地就会想这个并行必须去折腾一下。后面发现,其实 Python 的并行真的非常简单。

    Read on →