개요

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" 

참고

  1. https://parsec.cs.princeton.edu/parsec3-doc.htm
  2. https://yulistic.gitlab.io/2016/05/parsec-3.0-installation-issues/
  3. https://ve0x10.in/blog/2022/running-parsec-benchmark/