제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇BOAZ Bigdata
데이터 엔지니어링 프로젝트를 진행한 백발백준 팀에서는 아래와 같은 프로젝트를 진행했습니다.
백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇
20기 유하준 한국외국어대학교 산업공학과
20기 안지완 중앙대학교 소프트웨어학과
20기 정태형 경기대학교 응용통계학과
20기 최윤서 숙명여자대학교 일반대학원 통계학과
지난 3년여간 비트라는 제품을 Python으로 개발하면서 얻게된 경험들을 나눕니다. 주로 기술적인 의사결정의 방법들과 실수들, 또 그런 실수들을 어떻게 수습하고 다듬어 왔는지 이야기 하고, 그런 과정들을 통해 비트라는 Python 프로젝트를 어떻게 개발하여 관리하는지를 다룰 예정입니다. 상세한 사례보다는 조금은 메타적인 이야기를 하여 가급적 많은 분들에게 도움이 되고자 하였습니다.
- 비교적 오랜시간 동안 많은 인원이 투입된 프로젝트가 어떻게 개발하고 머지하는지,
- 품질 관리를 왜 해야하고 또 어떻게 하는지,
- 적정한 기술을 선택함에 있어 어떻게 해야하는지
같은 부분을 상세하게 다룰 예정입니다.
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇BOAZ Bigdata
데이터 엔지니어링 프로젝트를 진행한 백발백준 팀에서는 아래와 같은 프로젝트를 진행했습니다.
백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇
20기 유하준 한국외국어대학교 산업공학과
20기 안지완 중앙대학교 소프트웨어학과
20기 정태형 경기대학교 응용통계학과
20기 최윤서 숙명여자대학교 일반대학원 통계학과
지난 3년여간 비트라는 제품을 Python으로 개발하면서 얻게된 경험들을 나눕니다. 주로 기술적인 의사결정의 방법들과 실수들, 또 그런 실수들을 어떻게 수습하고 다듬어 왔는지 이야기 하고, 그런 과정들을 통해 비트라는 Python 프로젝트를 어떻게 개발하여 관리하는지를 다룰 예정입니다. 상세한 사례보다는 조금은 메타적인 이야기를 하여 가급적 많은 분들에게 도움이 되고자 하였습니다.
- 비교적 오랜시간 동안 많은 인원이 투입된 프로젝트가 어떻게 개발하고 머지하는지,
- 품질 관리를 왜 해야하고 또 어떻게 하는지,
- 적정한 기술을 선택함에 있어 어떻게 해야하는지
같은 부분을 상세하게 다룰 예정입니다.
A method of exploring the behavior of the initial model through DoE and obtaining key data to create a machine learning model to replace the physical model.
[AWS Dev Day] 인공지능 / 기계 학습 | 기계 학습 싸고 빠르게 하는 방법 - Amazon SageMaker 편 - 김필호 AW...Amazon Web Services Korea
기계 학습을 기반한 서비스를 개발하기 위해서는, 데이터 준비, 모델 훈련과 배포의 다양한 과정을 반복적으로 진행해야 합니다. AWS에서는 각 과정별로 사용자가 각자 워크로드에 맞춘 가장 비용 효율적인 ML 프레임워크인 Amazon SageMaker 관리형 서비스를 제공하고 있습니다. 본 세션에서는 SageMaker를 활용하는 방법과 함께 어떻게 하면 모델 생성, 학습 및 배포를 위한 자원을 가장 효율적이고 경제적으로 사용할 수 있는 방법을 소개합니다.
Exploring Deep Learning Acceleration Technology Embedded in LLMsTae Young Lee
Lab's research presentation
I am a doctoral student at Seoul National University of Science and Technology and am currently the head of the Applying LLMs to Various Industry (AL2VI) Lab.
Amazon SageMaker 모델 빌딩 파이프라인 소개::이유동, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스...Amazon Web Services Korea
Amazon SageMaker 에서 제공하는 기계 학습을 위한 CI/CD 서비스, Aamzon SageMaker Pipelines 를 사용하기 위해 기계 학습의 라이프 사이클과 MLOps 의 개념과 AWS 에서의 MLOps 에 대한 오버뷰를 소개합니다. 또한, Amazon SageMaker Pipelines 의 세부적인 사용법을 스크린샷과 함께 소개합니다.
[PYCON Korea 2018] Python Application Server for Recommender System Kwangseob Kim
한글 수정: https://www.slideshare.net/kimkwangseop/pycon-korea-2018-python-application-server-for-recommender-system-110602118
추천 시스템을 위한 어플리케이션 서버 개발 후기
@ PYCON Korea 2018
link: https://www.pycon.kr/2018/program/33
A method of exploring the behavior of the initial model through DoE and obtaining key data to create a machine learning model to replace the physical model.
[AWS Dev Day] 인공지능 / 기계 학습 | 기계 학습 싸고 빠르게 하는 방법 - Amazon SageMaker 편 - 김필호 AW...Amazon Web Services Korea
기계 학습을 기반한 서비스를 개발하기 위해서는, 데이터 준비, 모델 훈련과 배포의 다양한 과정을 반복적으로 진행해야 합니다. AWS에서는 각 과정별로 사용자가 각자 워크로드에 맞춘 가장 비용 효율적인 ML 프레임워크인 Amazon SageMaker 관리형 서비스를 제공하고 있습니다. 본 세션에서는 SageMaker를 활용하는 방법과 함께 어떻게 하면 모델 생성, 학습 및 배포를 위한 자원을 가장 효율적이고 경제적으로 사용할 수 있는 방법을 소개합니다.
Exploring Deep Learning Acceleration Technology Embedded in LLMsTae Young Lee
Lab's research presentation
I am a doctoral student at Seoul National University of Science and Technology and am currently the head of the Applying LLMs to Various Industry (AL2VI) Lab.
Amazon SageMaker 모델 빌딩 파이프라인 소개::이유동, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스...Amazon Web Services Korea
Amazon SageMaker 에서 제공하는 기계 학습을 위한 CI/CD 서비스, Aamzon SageMaker Pipelines 를 사용하기 위해 기계 학습의 라이프 사이클과 MLOps 의 개념과 AWS 에서의 MLOps 에 대한 오버뷰를 소개합니다. 또한, Amazon SageMaker Pipelines 의 세부적인 사용법을 스크린샷과 함께 소개합니다.
[PYCON Korea 2018] Python Application Server for Recommender System Kwangseob Kim
한글 수정: https://www.slideshare.net/kimkwangseop/pycon-korea-2018-python-application-server-for-recommender-system-110602118
추천 시스템을 위한 어플리케이션 서버 개발 후기
@ PYCON Korea 2018
link: https://www.pycon.kr/2018/program/33
1. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
C++ 태스크 기반 병렬 프로그래밍
김규래
서강대학교 전자공학과
April 6 2019
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 1 / 54
2. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
세션에서 다룰 내용
1 성능 최적화의 기본 원칙들
2 병렬 컴퓨팅 개요
3 병렬 컴퓨팅 방법 비교
4 Task Parallelism
5 Task Parallelism 프레임워크
6 Example
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 2 / 54
3. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
무조건 측정, 또 측정한다!
“성능을 실제로 벤치마킹 해보기 전까지는 절대 성능을 논하지
말아야 한다.”
Chandler Carruth, CppCon 2015
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 3 / 54
4. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
알고리즘적인 최적화가 최우선
복잡도의 벽은 많은 경우 넘어서기가 힘듭니다. 1
1
Devopedia. 2018. "Algorithmic complexity." Version 6, December 7.
Accessed 2019-03-23. https://devopedia.org/algorithmic-complexity
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 4 / 54
5. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
라이브러리, 프레임워크 교체를 먼저
Version Speedup
Python 1
C 47
C parallelized 366
C parallelized & memory opt 6727
SIMD instructions 62806
프레임워크/시스템/언어에 따른 성능의 장벽은 생각보다 높습니다.2
2
Leiserson et al., There’s Plenty of Room at The Top, Under Review
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 5 / 54
6. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
성능 최적화의 두가지 관점
Latency 최소화
각 연산을 수행하는데 걸리는 시간을 최소화
CPU Clock 조정, 캐시 최적화, strength reduction
Throughput 최대화
동일 시간에 처리하는 데이터의 양을 최대화
파이프라이닝, 병렬화
데이터의 양이 동일할 경우 전체적인 Latency 감소 효과
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 6 / 54
7. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
병렬화를 통한 Throughput 최대화
Throughput = sockets ×
cores
socket
×
cycles
second
×
operations
cycle
병렬화를 하는 다양한 수단들
CPU 에서 제공하는 SIMD instruction 을 사용
Multithreading (Shared-memory parallelism)
Distributed Computing (Distributed-memory parallelism)
GPU, Xeon Phi 같은 병렬화에 특화된 하드웨어 사용
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 7 / 54
8. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
병렬화를 통한 Throughput 최대화
Throughput = sockets ×
cores
socket
×
cycles
second
×
operations
cycle
병렬화를 하는 다양한 수단들
CPU 에서 제공하는 SIMD instruction 을 사용
Multithreading (Shared-memory parallelism)
Distributed Computing (Distributed-memory parallelism)
GPU, Xeon Phi 같은 병렬화에 특화된 하드웨어 사용
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 8 / 54
9. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
병렬화를 통한 Throughput 최대화
Throughput = sockets ×
cores
socket
×
cycles
second
×
operations
cycle
병렬화를 하는 다양한 수단들
CPU 에서 제공하는 SIMD instruction 을 사용
Multithreading (Shared-memory parallelism)
Distributed Computing (Distributed-memory parallelism)
GPU, Xeon Phi 같은 병렬화에 특화된 하드웨어 사용
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 9 / 54
10. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
병렬화를 통한 Throughput 최대화
Throughput = sockets ×
cores
socket
×
cycles
second
×
operations
cycle
병렬화를 하는 다양한 수단들
CPU 에서 제공하는 SIMD instruction 을 사용
Multithreading (Shared-memory parallelism)
Distributed Computing (Distributed-memory parallelism)
GPU, Xeon Phi 같은 병렬화에 특화된 하드웨어 사용
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 10 / 54
11. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
병렬의 근본적 한계
병렬화를 통해서 얻어낼 수 있는 성능은 매우 제한적입니다.
병렬화는 최후의 수단입니다.
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 11 / 54
12. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Loop Parallelism vs Task Parallelism
3
3
사진출처: Peter Tröger, Parallel Programming Concepts: Programming
Models
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 12 / 54
13. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Loop Parallelism
데이터에 일괄적으로 수행되는 연산들을 병렬로 실행
기존 코드의 큰 수정 없이 쉽게 병렬화 적용 가능
Fork-join Parallelism, Data Parallelism
#pragma omp parallel for
for(int i = 0; i < N; ++i)
{
c[i] = a[i] + b[i];
}
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 13 / 54
14. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
2D Convolution
4
4
사진출처: https://github.com/vdumoulin/conv_arithmetic
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 14 / 54
15. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
2D Convolution
5
5
사진출처: https://github.com/vdumoulin/conv_arithmetic
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 15 / 54
16. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
2D Convolution
6
6
사진출처: https://github.com/vdumoulin/conv_arithmetic
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 16 / 54
17. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
2D Convolution
7
7
사진출처: https://github.com/vdumoulin/conv_arithmetic
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 17 / 54
18. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
2D Convolution
inline cv::Mat
filter(cv::Mat const& src,
std::vector<float> const& kernel,
size_t m, size_t n)
{
/* ... */
auto dst = cv::Mat(dst_m, dst_n, CV_32FC1);
#pragma omp parallel for schedule(static) collapse(2)
for(size_t i = 0; i < dst_m; ++i)
{
for(size_t j = 0; j < dst_n; ++j)
{
/* load image patch */
float value = dot(buffer, kernel);
dst.at<float>(i, j) = value;
}
}
return dst;
}
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 18 / 54
19. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
2D Convolution
inline cv::Mat
filter(cv::Mat const& src,
std::vector<float> const& kernel,
size_t m, size_t n)
{
/* ... */
auto dst = cv::Mat(dst_m, dst_n, CV_32FC1);
#pragma omp parallel for schedule(static) collapse(2)
for(size_t i = 0; i < dst_m; ++i)
{
for(size_t j = 0; j < dst_n; ++j)
{
/* load image patch */
float value = dot(buffer, kernel);
dst.at<float>(i, j) = value;
}
}
return dst;
}
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 19 / 54
20. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Processing Pipeline
auto smooth = filter(image, gaussian_kernel, 9, 9);
auto x_edge = filter(smooth, sobel_x_kernel, 3, 3);
auto y_edge = filter(smooth, sobel_x_kernel, 3, 3);
auto gradient = sobel_norm(x_edge, y_edge);
auto output = thresholding(x_edge, 0.7, 0.12);
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 20 / 54
21. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Processing Pipeline
auto smooth = filter(image, gaussian_kernel, 9, 9);
auto x_edge = filter(smooth, sobel_x_kernel, 3, 3);
auto y_edge = filter(smooth, sobel_x_kernel, 3, 3);
auto gradient = sobel_norm(x_edge, y_edge);
auto output = thresholding(x_edge, 0.7, 0.12);
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 21 / 54
22. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Example Image
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 22 / 54
23. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Example Output
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 23 / 54
24. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Loop Parallelism Example
8
8
사진출처: Abalenkovs, et al. Parallel Programming Models for Dense
Linear Algebra on Heterogeneous Systems (2015).
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 24 / 54
25. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Loop Parallelism Example
9
9
사진출처: Abalenkovs, et al. Parallel Programming Models for Dense
Linear Algebra on Heterogeneous Systems (2015).
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 25 / 54
26. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Task Parallelism
각 태스크의 종속관계를 파악하고 종속성이 없는 태스크들을
동적으로 병렬화
특수한 언어, 프레임워크를 통해 데이터 종속관계를 모델링
해야 함
Directed Acyclic Graph (DAG) 또는 Computation Tree 를
통해 종속관계 표현
Cilk, HPX, TBB, cpp-taskflow
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 26 / 54
27. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Directed Acyclic Graph (DAG)
사이클이 존재하지 않는 지향성 그래프.
’연산’ 들은 대부분 DAG 로 표현할 수 있습니다.
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 27 / 54
28. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
2D Convolution
10
10
사진출처: https://github.com/vdumoulin/conv_arithmetic
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 28 / 54
29. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Processing Pipeline
auto smooth = filter(image, gaussian_kernel, 9, 9);
auto x_edge = filter(smooth, sobel_x_kernel, 3, 3);
auto y_edge = filter(smooth, sobel_x_kernel, 3, 3);
auto gradient = sobel_norm(x_edge, y_edge);
auto output = thresholding(x_edge, 0.7, 0.12);
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 29 / 54
30. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Pixelwise Computation DAG
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 30 / 54
31. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Pixelwise Computation DAG
Loop 병렬의 경우 픽셀간의 병렬 관계를 한 단계에서만
활용합니다.
1단계에서 모든 픽셀들의 연산이 끝날 때까지 barrier 에서
blocking.
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 31 / 54
32. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Pixelwise Computation DAG
실제로는 병렬 관계가 깊게까지 이어집니다.
이러한 병렬 가능한 구간을 자동으로 감지하기 위해서 DAG
형태로 연산을 표현.
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 32 / 54
33. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Task Parallelism 기본 원리
프로그램 내에 존재하는 ’깊은’ 병렬화 가능 구간, 미세하게
병렬화가 가능한 task들을 종속관계 분석을 통해 병렬화하는 것이
Task parallelism.
1 DAG 생성
2 병렬화 가능한 task 들을 병렬로 실행
3 코어 간의 로드 임밸런스 해소
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 33 / 54
34. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Task Parallelism 기본 원리
프로그램 내에 존재하는 ’깊은’ 병렬화 가능 구간, 미세하게
병렬화가 가능한 task들을 종속관계 분석을 통해 병렬화하는 것이
Task parallelism.
1 DAG 생성
API 또는 Domain Specific Language
2 병렬화 가능한 task 들을 병렬로 실행
DAG 를 순회하면서 task 들을 consume
3 코어 간의 로드 임밸런스 해소
Task Scheduling
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 34 / 54
35. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Task Parallelism 기본 원리
프로그램 내에 존재하는 ’깊은’ 병렬화 가능 구간, 미세하게
병렬화가 가능한 task들을 종속관계 분석을 통해 병렬화하는 것이
Task parallelism.
1 DAG 생성
API 또는 Domain Specific Language
2 병렬화 가능한 task 들을 병렬로 실행
DAG 를 순회하면서 task 들을 consume
3 코어 간의 로드 임밸런스 해소
Task Scheduling
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 35 / 54
36. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
OpenMP 4.0
int fib(int n)
{
int i, j;
if (n<2)
{
return n;
}
else
{
#pragma omp task shared(i)
i = fib(n - 1);
#pragma omp task shared(j)
j = fib(n - 2);
#pragma omp taskwait
return i+j;
}
}
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 36 / 54
37. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
OpenMP 4.0
for(int i=0; i<num_blocks; i++) {
#pragma omp task depend( inout: block_list[i][i] )
diag_func( block_list[i][i] );
for(int j=i+1; j<numBlocks; j++) {
#pragma omp task depend( in: block_list[i][i])
depend(inout: block_list[i][j])
row_func(block_list[i][j], block_list[i][i] );
}
for(int j=i+1; j<num_blocks; j++) {
#pragma omp task depend( in: block_list[i][i])
depend(inout: block_list[j][i])
col_func( block_list[j][i], block_list[i][i] );
/* ... */
}
}
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 37 / 54
38. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
OpenMP Task System
for(int i=0; i<num_blocks; i++) {
#pragma omp task depend( inout: block_list[i][i] )
diag_func( block_list[i][i] );
for(int j=i+1; j<numBlocks; j++) {
#pragma omp task depend( in: block_list[i][i])
depend(inout: block_list[i][j])
row_func(block_list[i][j], block_list[i][i] );
}
for(int j=i+1; j<num_blocks; j++) {
#pragma omp task depend( in: block_list[i][i])
depend(inout: block_list[j][i])
col_func( block_list[j][i], block_list[i][i] );
/* ... */
}
}
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 38 / 54
39. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
OpenMP Task System
OpenMP 4.0 이상을 지원하는 모든 컴파일러에서 사용 가능.
(GCC)
기존 코드의 큰 변경 없이 사용 가능.
Shared-memory 만 지원.
생성할 수 있는 DAG 의 형태가 제한적.
데이터 기반으로 하고 싶을 경우 모든 것을 C스타일 배열만
사용 가능.
GCC 의 경우 아직 Work-stealing 스케줄링이 구현돼 있지
않음.
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 39 / 54
40. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
CppTaskflow
// create three regular tasks
tf::Task A = tf.emplace([](){}).name("A");
tf::Task C = tf.emplace([](){}).name("C");
tf::Task D = tf.emplace([](){}).name("D");
// create a subflow graph (dynamic tasking)
tf::Task B = tf.emplace([] (tf::SubflowBuilder& subflow) {
tf::Task B1 = subflow.emplace([](){}).name("B1");
tf::Task B2 = subflow.emplace([](){}).name("B2");
tf::Task B3 = subflow.emplace([](){}).name("B3");
B1.precede(B3);
B2.precede(B3);
}).name("B");
A.precede(B); // B runs after A
A.precede(C); // C runs after A
B.precede(D); // D runs after B
C.precede(D); // D runs after C
tf.wait_for_all();
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 40 / 54
41. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
CppTaskflow
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 41 / 54
42. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
CppTaskflow
Illinois 대학에서 오픈소스로 개발11.
Shared-memory 만 지원.
그래프 라이브러리들과 유사한 형태의 모던 C++ API.
Work-stealing 알고리즘 탑재.
map, filter, reduce 등의 알고리즘들 제공.
11
Huang et al., “Cpp-Taskflow: Fast Task-based Parallel Programming
using Modern C++” in IPDPS, 2007,
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 42 / 54
43. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
HPX
template <typename Type>
inline hpx::future<int>
traverse(node& t)
{
if(!t.has_children())
return t.compute_result();
auto results = std::vector<hpx::future<Type>>(factor);
for(size_t i = 0; i < factor; ++i)
results[i] = hpx::async(traverse, t.children[i]);
return hpx::when_all(results, t.compute_results()).then(
[](auto f, auto r){
return combine_results(f, r);
}
);
return t.compute_result();
}
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 43 / 54
44. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
HPX
template <typename Type>
inline hpx::future<int>
traverse(node& t)
{
if(!t.has_children())
return t.compute_result();
auto results = std::vector<hpx::future<Type>>(factor);
for(size_t i = 0; i < factor; ++i)
results[i] = hpx::async(traverse, t.children[i]);
return hpx::when_all(results, t.compute_results()).then(
[](auto f, auto r){
return combine_results(f, r);
}
);
return t.compute_result();
}
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 44 / 54
45. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
HPX
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 45 / 54
46. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
HPX
Lousiana 주립대학에서 오픈소스로 개발12.
Shared-memory 와 AGAS 형태의 분산 메모리 프로그래밍
지원.
표준 C++ 기반의 Task Parallelism 과 Loop Parallelism
프로그래밍 지원.
C++ STL 알고리즘들의 병렬 버전 지원.
다양한 Work-stealing 스케줄링 제공.
빌드 시스템을 HPX 에 맞춰야된다는 것이 단점.
12
Kaiser, Hartmut, et al. "Hpx: A task based programming model in a global
address space." Proceedings of the 8th International Conference on
Partitioned Global Address Space Programming Models. ACM, 2014.
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 46 / 54
47. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Example with HPX
auto smooth = filter(image, gaussian_kernel, 9, 9);
auto x_edge = filter(smooth, sobel_x_kernel, 3, 3);
auto y_edge = filter(smooth, sobel_x_kernel, 3, 3);
auto gradient = sobel_norm(x_edge, y_edge);
auto output = thresholding(x_edge, 0.7, 0.12);
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 47 / 54
48. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Example with HPX
inline cv::Mat
filter(cv::Mat const& src,
std::vector<float> const& kernel,
size_t m, size_t n)
{
/* ... */
auto dst = cv::Mat(dst_m, dst_n, CV_32FC1);
#pragma omp parallel for schedule(static) collapse(2)
for(size_t i = 0; i < dst_m; ++i)
{
for(size_t j = 0; j < dst_n; ++j)
{
/* load image patch */
float value = dot(buffer, kernel);
dst.at<float>(i, j) = value;
}
}
return dst;
}
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 48 / 54
49. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Example with HPX
template<template<typename> class Future, size_t Block>
class future_image_block
{
private:
size_t _image_m;
size_t _image_n;
size_t _block_m;
size_t _block_n;
std::vector<Future<std::vector<float>>> _futures;
public:
inline future_image_block()
: _futures(), _image_m(0), _image_n(0)
{}
inline future_image_block(size_t m, size_t n)
: _image_m(m),
_image_n(n),
_block_m(ceil(m / static_cast<float>(Block))),
_block_n(ceil(n / static_cast<float>(Block))),
_futures(_block_m * _block_n)
{}
/* ... */
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 49 / 54
50. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Example with HPX
template<template<typename> class Future, size_t Block>
inline decltype(auto)
filter(future_image_block<Future, Block>& src,
std::vector<float> const& kernel,
size_t m, size_t n)
{
/* ... */
auto dst = future_image_block<Future, Block>(dst_m, dst_n);
for(size_t block_i = 0; block_i < dst.block_rows(); ++block_i)
{
for(size_t block_j = 0; block_j < dst.block_cols(); ++block_j)
{
dst.block(block_i, block_j) = hpx::async(
[&src, &kernel, block_i, block_j, ker_m, ker_n, dst_m, d
return block_filter(block_i, block_j,
ker_m, ker_n,
dst_m, dst_n,
src, kernel);
});
}
}
return dst;
}
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 50 / 54
51. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Example with HPX
template<template<typename> class Future, size_t Block>
inline decltype(auto)
filter(future_image_block<Future, Block>& src,
std::vector<float> const& kernel,
size_t m, size_t n)
{
/* ... */
auto dst = future_image_block<Future, Block>(dst_m, dst_n);
for(size_t block_i = 0; block_i < dst.block_rows(); ++block_i)
{
for(size_t block_j = 0; block_j < dst.block_cols(); ++block_j)
{
dst.block(block_i, block_j) = hpx::async(
[&src, &kernel, block_i, block_j, ker_m, ker_n, dst_m, d
return block_filter(block_i, block_j, ker_m, ker_n,
dst_m, dst_n, src, kernel);
});
}
}
return dst;
}
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 51 / 54
52. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Example with HPX
13
13
Khatami, Zahra, Hartmut Kaiser, and J. Ramanujam. "Redesigning op2
compiler to use hpx runtime asynchronous techniques." 2017 IEEE
International Parallel and Distributed Processing Symposium Workshops
(IPDPSW). IEEE, 2017.
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 52 / 54
53. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Results
Task Parallelism 을 사용할 경우 Loop Parallelism 에 비해서
더 높은 성능을 얻을 수가 있습니다.
Loop Parallelism 에 비해서 파라미터 튜닝을 조금 더 거쳐야
합니다.
비동기 프로그래밍이라서 머리가 좀 더 아픕니다...
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 53 / 54
54. 성능 최적화의 기본 원칙들 병렬 컴퓨팅 개요 병렬 컴퓨팅 방법 비교 Task Parallelism Task Parallelism 프레임워크 Example
Section
감사합니다
김규래 Sogang University Task Parallel Computing in C++ April 6 2019 54 / 54