爱意满满的作品展示区。
zjcqoo

目前最快的 js 版 scrypt 算法

  •  
  •   zjcqoo · Feb 28, 2017 · 5294 views
    This topic created in 3388 days ago, the information mentioned may be changed or developed.
    最近鼓捣的一个项目,移植了个浏览器版的 scrypt 算法: https://github.com/EtherDream/WebScrypt

    由于 scrypt 对性能要求很高,所以做了各种优化。

    先是用 emscripten 编译成 asm.js ,不过速度还是不够理想,比 native 慢太多了。

    于是用浏览器的 profiles 找出最 heavy 的代码,发现 blockmix 和 salsa8 函数消耗了一大半计算,重点优化。

    这里用了最笨的办法,在 C 代码上把循环和数组都手动展开,比如 int X[16] 的数组拆成 int X0, X1 ..., X15(其实完全可以用 clang 实现,不过暂时没找到选项,反正手动也很简单)。

    这么一折腾 Chrome 上性能提升近 2 倍!

    最后优化体积,毕竟 emscripten 编译出来的 js 有上万行。于是写了个小脚本( src/mod_asmjs/c-bind/reduce.js ),把最核心的逻辑提取出来,包括内存初始化数据。

    这样体积从大几百 K 降到小几十 K 。

    还有就是 scrypt 支持并发维度(参数 P ),所以这里用 Worker 来实现。如果 P > 1 ,这个脚本可甩现有的 js 版 scrypt 好多倍- -

    另外为了提升体验,加了进度回调和终止的功能。不过加上这个之后,性能下降了 10% 左右。

    因为原先的计算过程是完整的,现在被切分成了好几块,中间有些调度开销。(终止功能 没有用 Worker 的 terminate 方法,因为那样 Worker 就废了,下次用还得重新创建。所以是在小块任务调度时停止的)

    大家看看还有什么地方可以优化的,可以讨论下~
    11 replies    2017-03-08 10:32:13 +08:00
    est
        1
    est  
       Feb 28, 2017
    @zjcqoo LZ 就是 etherdream 呀。
    123s
        2
    123s  
       Feb 28, 2017
    厉害
    ywt474000158
        3
    ywt474000158  
       Feb 28, 2017
    很强势
    zjcqoo
        4
    zjcqoo  
    OP
       Feb 28, 2017
    @est 哈哈是啊😀
    DesignerSkyline
        5
    DesignerSkyline  
       Feb 28, 2017
    可以,思路很不错
    mywaiting
        6
    mywaiting  
       Mar 1, 2017
    一直有关注 这三胖头像的博主, XSS 系列很给力~
    Canrz
        7
    Canrz  
       Mar 1, 2017
    囧, etherdream ,想起了以前博客园那篇猥琐风骚的网线攻击
    peneazy
        8
    peneazy  
       Mar 1, 2017
    看着很牛逼的样子
    lwbjing
        9
    lwbjing  
       Mar 1, 2017
    厉害了我的哥。。
    g0thic
        10
    g0thic  
       Mar 1, 2017
    牛逼
    strwei
        11
    strwei  
       Mar 8, 2017
    这头像记得很久以前我也用过
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2434 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 16:11 · PVG 00:11 · LAX 09:11 · JFK 12:11
    ♥ Do have faith in what you're doing.