参考课件

CSEP 548 非常值得学习

前言 - 没有”饱和”的说法

其实计算机现在还有很多问题可以优化/改进,不要觉得卷就放弃。卷不代表没有进步的空间

毕竟真正的进步通常也就那么几个天才在推进,大部分人都是小打小闹的。

所以即使很卷,你进去了也不会有太大区别

image-20220714223755558

这个 Parsec 的老课件真的牛逼。包云冈让我这个迷途羔羊仿佛找到出路了。

我不相信那些3个月速成前端的人能够用 JavaScript 做出像炉石开箱的效果

我也不相信他们能用 JavaScript 做 2D 游戏

你相信吗?反正我不信。这些奔着钱来的人,不会意识到这些问题的。但是,请你专注自己的问题。

所以,卷的话,请你专注你的问题就好了。

  • 在”技术问题”多思考。在”维护问题”上越快越好因为你是算法工程师 (不管任何方向)
    • 阿里 PUA : **不难的话,请你干嘛**
  • 不要松懈。字节人都是 11 点下班的。
  • 从完成对别人的承诺开始
    • 按时交作业,按时完成老师的任务,按时完成自己的项目。

编译

配置环境变量 (把一些脚本加入到 search path)

source env.sh

之后就可以直接运行 (需要 search path支持)

parsecmgmt -h

开始之前建议清理一下 (见下)

parsecmgmt -a fullclean -p all
parsecmgmt -a fulluninstall

如果不关心这里面的 workload 都是些啥,可以直接

parsecmgmt -a build -p ${test}
parsecmgmt -a build -p parsec 
parsecmgmt -a run -p ${test}

其中 parsecmgmt 就是一个 driver/script 可以处理参数,实际上你是可以直接手动运行里面的 workload 。(parsecmgmt 就是类似 Makefile)

  • -a 代表 action, 显然有 build 和 run

  • -p 代表 package, 显然就是需要的 package 。可以是 [suite].[PACKAGE][PACKAGE]

    • 一般情况下用 parsec 就够了, 还有 splash2x

    • parsec. prefix is redundant.

  • -c 代表 build configuration (指定 compiler, 要链接的 library)

    • 默认的 build configuration 可以用 parsecmgmt -h 查看
      • gcc Build parallel version of suite with gcc
      • gcc-serial Build serial version of suite with gcc
      • gcc-hooks Build parallel version of suite with PARSEC hooks enabled with gcc
      • icc Build parallel version of suite with Intel compiler
    • 或者开启 parallelizations, 参考 http://wiki.cs.princeton.edu/index.php/PARSEC
      • Pthreads , OpenMP , Intel TBB 三种线程模式,分别是 gcc-pthreads, ` gcc-openmp, gcc-tbb`
      • 单线程模式 gcc-serial

比如 canneal 如果是单线程执行 (可能是通过 macros 有不同的 C statements ? 不过你不用管 parallel )

parsecmgmt -a build -p blackscholes -c gcc-serial 

编译和安装后的 package 名字是 (OSNAME是系统名,看下面的例子)

[ARCHITECTURE]-[OSNAME].[BUILDCONF]

比如可以查看都安装了什么

parsecmgmt -a status -p all


[PARSEC] Installation status of selected packages:
[PARSEC] blackscholes:
[PARSEC] -no installations-
[PARSEC] bodytrack:
[PARSEC] -no installations-
...
[PARSEC] canneal:
[PARSEC] x86_64-linux-gnu.gcc
[PARSEC] x86_64-linux-gnu.gcc-serial

运行

参考 https://github.com/csail-csg/parsec

参考 https://courses.cs.washington.edu/courses/csep548/17au/hw/5.html

parsecmgmt -a run -p [PACKAGE] -c [BUILDCONF] -i [INPUT] -n [THREADS]

为什么需要 -c ? -c 是 parsec 用来寻找 package 的位置。

比如如果使用 clang ,那么生成的位置应该是 pkgs/apps/blackscholes/inst/amd64-linux.clang-serial

可以使用 -d 指定 package 的位置。

如何使用 clang ?

尝试在目录搜索 gcc-serial ,发现 config 目录下有 gcc.bldconf 文件。依葫芦画瓢。其他配置文件同理。

例如

parsecmgmt -a run -p blackscholes -c gcc-serial -i test -n 1

输入集合

  • test Minimal input to verify that programs are executable.
  • simdev Very small input which causes code execution comparable to a typical input for this program. Intended for microarchitectural simulator development.
  • simsmall Small input for performance measurements with microarchitectural simulator.
  • simmedium Medium-sized input for performance measurements with microarchitectural simulators
  • simlarge Large-sized input for performance measurements with microarchitectural simulators
  • native Very large input intended for large-scale experiments on real machines

可选的测试

  • blackscholes: 布莱克-舒尔斯模型,简称BS模型,是一种为金融衍生工具中的期权定价的数学模型。
  • bodytrack: 人体姿态跟踪
  • canneal: 电路板自动布线的退火法
  • dedup: 检测和消除数据流(data stream)中的重复数据
  • facesim: 脸部模拟
  • ferret: 相似图片搜索
  • fluidanimate: 使用 SPH(Smoothed Particle Hydrodynamics) 算法流体模拟
  • freqmine: 业务数据库(transcation database)中经常出现的 patterns
  • raytrace: 光追
  • streamcluster: 聚类(clustering)
  • swaptions: 互换期权
  • vips: 对图片进行变形(滤镜)
  • x264: MPEG-4 AVC / H.264 video encoder 。就是视频编码器

清理 Cleanup

C++ 程序员在吃完饭以后会乖乖清理餐桌,把餐盘放到垃圾桶上面。

Java 程序员吃完饭就直接起身走了。

清理所有临时的directories

parsecmgmt -a fullclean -p all

卸载安装包

parsecmgmt -a fulluninstall

卸载特定的安装包

parsecmgmt -a uninstall -p [PACKAGE] -c [BUILDCONF]