가속기 프로그래밍 겨울학교
병렬처리의 기초와 작업 스케줄러 ‘천둥’ 활용 방법
병렬처리의 기초: CPU 전력장벽과 멀티코어, Accelerator 이해하기
알겠습니다, “병렬처리의 기초: CPU 전력장벽과 멀티코어, Accelerator 이해하기” 부분을 처음 접하는 사람도 이해할 수 있도록 자세히 설명드리겠습니다.
병렬처리의 기초 이해하기: CPU 전력장벽과 멀티코어, Accelerator 우리가 사용하는 컴퓨터나 스마트폰 내부에는 CPU(Central Processing Unit)라는 ‘중앙처리장치’가 있습니다. 이 CPU는 컴퓨터의 두뇌와 같은 역할을 하며, 우리가 컴퓨터에게 내리는 모든 명령을 처리합니다.
하지만 CPU는 작동 시간이 길어질수록 발생하는 열로 인해 과열될 위험이 있습니다. 이는 CPU의 전력장벽이라는 문제와 관련이 있습니다. CPU는 전력을 소모하여 작동하는데, 이 전력소모량은 CPU의 작동 속도인 ‘core clock frequency’에 비례합니다. 즉, CPU의 작동 속도를 높일수록 더 많은 전력을 소모하게 되며, 이로 인해 발생하는 열도 증가하게 됩니다.
이런 문제를 해결하기 위해 고안된 방법이 바로 멀티코어입니다. 멀티코어는 두 개 이상의 독립적인 CPU 코어를 하나의 칩 안에 담아, 병렬적으로 작업을 처리합니다. 이로써 하나의 CPU 코어에서 발생하는 열을 분산시킬 수 있어 전력장벽 문제를 해결할 수 있습니다.
그리고 CPU 외에도 특정 작업을 가속화하는 역할을 하는 Accelerator라는 장치도 있습니다. FPGA(Field-Programmable Gate Array)와 GPU(Graphics Processing Unit)가 대표적인 예시로, 복잡하고 계산이 많은 작업을 CPU 대신 처리하여 전체 시스템의 부하를 줄이는 역할을 합니다.
이렇게 CPU와 Accelerator가 함께 작동하는 시스템을 이종(Heterogeneous) 컴퓨터 시스템이라고 합니다. CPU는 일반적인 명령을 처리하고, GPU나 FPGA 같은 Accelerator는 특정 계산 집중적인 작업을 처리함으로써, 전체 시스템의 성능을 향상시킵니다.
병렬처리의 성능을 예측하는 데에는 Amdahl의 법칙이 주로 사용됩니다. 이 법칙은 병렬화 가능한 부분과 병렬화 불가능한 부분의 비율, 그리고 병렬처리를 위해 사용하는 프로세서의 개수 등을 고려하여 병렬처리의 최대 성능을 예측하는 이론입니다.
이처럼 병렬처리의 기초를 이해하는 것은, 병렬처리 시스템을 효과적으로 설계하고 운영하는 데 필수적입니다. 이를 바탕으로 병렬처리의 세계를 더욱 깊이 있게 탐색해보시기 바랍니다.
병렬프로그래밍과 폰노이만 아키텍처, 그리고 파이프라이닝
먼저, 병렬프로그래밍은 여러 개의 CPU 또는 CPU 코어가 동시에 작업을 수행하는 프로그래밍 방식입니다. 이는 큰 규모의 문제를 빠르게 해결하기 위해 사용되며, 특히 데이터 분석, 머신러닝, 과학 계산 등에 활용됩니다. 병렬프로그래밍에서는 OpenCL과 CUDA라는 툴이 주로 사용됩니다. OpenCL은 다양한 플랫폼에서 병렬컴퓨팅을 지원하는 오픈소스 표준이고, CUDA는 NVIDIA의 GPU를 대상으로 한 병렬컴퓨팅 플랫폼과 API입니다.
다음으로, 폰노이만 아키텍처는 컴퓨터의 기본적인 구조를 설명하는 모델입니다. 이 아키텍처는 입력장치, 출력장치, 주기억장치(메모리), 그리고 중앙처리장치(CPU)로 구성되어 있습니다. 사용자로부터 입력받은 데이터는 메모리에 저장되며, CPU는 메모리에서 명령어를 가져와 해석하고 실행합니다. 이 과정을 ‘머신코드’의 Fetch, Decode, Execute라는 3단계로 나눌 수 있습니다.
마지막으로, 파이프라이닝은 병렬처리의 중요한 기법 중 하나입니다. 이는 여러 개의 명령어를 동시에 처리하기 위해 명령어 처리 과정을 여러 단계로 나누는 기법입니다. 각 단계는 독립적으로 동작하여, 여러 명령어가 동시에 각 단계를 진행하게 됩니다. 파이프라이닝에는 In-order 실행과 Out-of-Order 실행이 있습니다. In-order 실행은 명령어가 들어온 순서대로 실행되는 것을 말하고, Out-of-Order 실행은 명령어가 들어온 순서와 상관없이 실행 준비가 된 명령어부터 먼저 실행되는 것을 말합니다. 이러한 파이프라이닝 기법은 Superscalar CPU에서 활용되며, 이는 여러 개의 명령어를 동시에 실행할 수 있는 CPU를 말합니다.
이렇게 병렬프로그래밍, 폰노이만 아키텍처, 그리고 파이프라이닝은 병렬처리에서 중요한 역할을 하는 개념들입니다. 이들을 이해하고 활용함으로써, 효율적인 병렬처리 시스템을 구축하고 운영할 수 있습니다.
천둥(Thor) 작업 스케줄러 사용법
천둥(Thor)은 작업 스케줄링을 위한 도구로, 다양한 기능을 제공합니다. 작업 추가, 작업 상태 확인, 실행 결과 확인 등의 기본적인 작업부터 GPU 사용, timeout 설정 등의 고급 기능까지 다양하게 활용할 수 있습니다. 또한, 천둥과 함께 사용할 수 있는 여러 파이썬 스크립트도 제공되어, 이를 활용하면 작업 스케줄링을 더욱 효율적으로 진행할 수 있습니다.
1
thor
작업추가
1
thorq --add --mode single ./exec 10
작업 상태 확인
1
thorq --stat 400000
실행 결과 확인
1
cat task_400000.stdout
GPU 사용하기
1
thorq --add --mode single --device gpu/7970 ./exec
timeout 설정
1
thorq --add --mode single --timeout 100 ./exec
기타
1
2
thorq --kill-all
thorq --stat-all
plot_input.py
1
./plot_input.py <입력파일> <new.png>
plot_output.py
1
./plot_output.py <입력파일> <출력파일> <new.png>
gen_input.py
1
./gen_input.py <점개수> <클러스터개수> <생성할입력파일>