개요
Princeton Application Repository for Shared-Memory Computers(PARSEC)은 프린스턴 대학교에서 만든 벤치마크 툴로, 무료로 다양한 범위의 컴퓨팅 벤치마크를 할 수 있게 한다. PARSEC은 병렬컴퓨팅 환경에서 다양한 컴퓨팅 파워를 체크할 수 있도록 설계되었다. PARSEC은 현재 Version 3까지 나와있으며 다음과 같은 벤치마크를 돌릴 수 있다.
프로그램 이름 | 적용 분야 | 병렬화 모델 | 병렬화 정도 | 워킹셋 크기 | 데이터 공유 | 데이터 교환 |
---|---|---|---|---|---|---|
blackscholes | Financial Analysis | data-parallel | coarse | small | low | low |
bodytrack | Computer vision | data-parallel | medium | medium | high | medium |
canneal | Engineering | unstructured | fine | unbounded | high | high |
dedup | Enterprise stroage | pipieline | medium | unbounded | high | high |
facesim | Animation | data-parallel | coarse | large | low | medium |
ferret | Similarity search | pipeline | medium | unbounded | high | high |
fluidanimate | Animation | data-parallel | fine | large | low | medium |
freqmine | Data mining | data-parallel | medium | unbounded | high | medium |
raytrace | Rendering | data-parallel | medium | unbounded | high | medium |
streamcluster | Data mining | data-parallel | medium | medium | low | medium |
swaptions | Financial anlysis | data-parallel | coarse | medium | low | low |
vips | Media processing | data-paralell | coarse | medium | low | medium |
x264 | Media processing | pipline | coarse | medium | high | high |
설치 방법
- PARSEC 3 다운로드
wget http://parsec.cs.princeton.edu/download/3.0/parsec-3.0-core.tar.gz git clone https://github.com/cirosantilli/parsec-benchmark.git # 이 버전은 우분투 22.04에서도 돌릴 수 있게 여러 버그들을 고친 버전임. <참고용>
- Unpakc PARSEC 3
tar -xzf parsec-3.0.tar.gz; cd parsec-3.0
- 환경 변수 설정
bash; source env.sh # PARSEC은 bash shell에서만 env.sh이 정상적으로 작동함. ./configure # github에서 다운 받은 경우 test파일들이 설치되어 있지 않기 때문에 ./configure로 설치해야 함)
- Build/Run/Uninstall
parsecmgmt -a build -p streamcluster (all for building all benchmarks) -n <num of thread> parsecmgmt -a run -p streamcluster (all for running all benchmarks) -n <num of thread> parsecmgmt -a uninstall -p streamcluster
벤치마크 돌리는 법
parsecmgmt -a run -p <test name> -i <input setting> -n <thread num> -c <build conf>
에서 i에 해당하는 인자를 어떤것을 넣느냐에 따라서 벤치마크의 크기를 정할 수 있다.
- test: 제일 작은 테스트용 벤치마크 설정 파일 입력
- simdev: 매우큰 실제 input과 비슷한 벤치마크 설정
- simsmall, simmedium, simlarge: 각각 1s, 5s, 15s 정도 돌릴 수 있도록 고려된 벤치마크 설정
- native: 대략 15분 정도 걸리는 실제와 같은 input을 사용하는 벤치마크 설정
이때 -c 옵션을 통해서 어떤 build configuration을 줄지 설정할 수 있다. 기본 build configuration은 gcc, gcc-hooks, gcc-serial 그리고 icc이며, gcc-openmp, gcc-pthreads, gcc-tbb와 같은 specific parallelization옵션들을 선택할 수 있다.
만약 peak memory usage와 같은 다른 벤치마크 결과도 보고 싶을 경우에는, "/bin/usr/time -v"를 -s 옵션을 통해서 주면 벤치마크가 사용할 default tool이 바뀌어서 peak memory usage도 출력해 준다.
parsecmgmt -a run -p bodytrack -i simlarge -s "/usr/bin/time -v"
에러 핸들링
1. ferret 에서 "error: ‘HUGE’ undeclared (first use in this function)": 모든 HUGE를 DBL_MAX로 교환 하면 된다. 종률 선배(yulistic)님의 스크립트를 사용하면 다음과 같이 편하게 교환할 수 있다.
grep -rl "HUGE" pkgs/apps/ferret | xargs sed -i "s/HUGE/DBL_MAX/g" grep -rl "HUGE" pkgs/netapps/netferret | xargs sed -i "s/HUGE/DBL_MAX/g"