Categories:
Parsec 3.0 Benchmark
参考课件
- https://parsec.cs.princeton.edu/download/tutorial/3.0/parsec-tutorial.pdf
- https://arco.e.ac.upc.edu/wiki/images/8/8a/Seminar_Parsec3.pdf
- http://www.cs.ucy.ac.cy/courses/EPL605/Fall2014Files/EPL605Lab8_PARSEC3.pdf
- CSEP 548 — HW 5 (washington.edu)
- https://github.com/csail-csg/parsec
CSEP 548 非常值得学习
前言 - 没有”饱和”的说法
其实计算机现在还有很多问题可以优化/改进,不要觉得卷就放弃。卷不代表没有进步的空间。
毕竟真正的进步通常也就那么几个天才在推进,大部分人都是小打小闹的。
所以即使很卷,你进去了也不会有太大区别。
这个 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 gccgcc-serial
Build serial version of suite with gccgcc-hooks
Build parallel version of suite with PARSEC hooks enabled with gccicc
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
- 有 Pthreads , OpenMP , Intel TBB 三种线程模式,分别是
- 默认的 build configuration 可以用
比如 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 simulatorssimlarge
Large-sized input for performance measurements with microarchitectural simulatorsnative
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]