Presentation is loading. Please wait.

Presentation is loading. Please wait.

CPU-GPU 이기종 플랫폼에서 하둡 맵리듀스의 가속: CKY 파서 사례 분석

Similar presentations


Presentation on theme: "CPU-GPU 이기종 플랫폼에서 하둡 맵리듀스의 가속: CKY 파서 사례 분석"— Presentation transcript:

1 CPU-GPU 이기종 플랫폼에서 하둡 맵리듀스의 가속: CKY 파서 사례 분석
정보과학회논문지: 컴퓨팅의 실제 및 레터 제20권 제6호, , CSLAB Park Se Won

2 Contents Method Idea Experiment Summary Hadoop Pipes CUDA CKY parser
정적분할 입력 전처리를 통한 부하 균등 GPU 커널의 동적 수행 Experiment 동종수행 이기종 수행 Summary

3 Method Method Hadoop pipes CUDA CKY parser

4 Hadoop pipes Map/ Reduce Task Child JVM C++ wrapper Library
Input key/value launch Child Map/ Reduce Task C++ Map/Reduce class TaskTracker socket Output key/value 그림 1 하둡 파이프의 실행 모델

5 Hadoop pipes(1) #include <hadoop/Pipes.h>
#include <cutil.h> Class mapper: public HadoopPipes::Mapper{ public: void map(MapContext context){ d_abc = cudaMalloc(); cudaMemcpy(d_abc,h_abc,H2D); PaserGPU<<blocks,threads>>(d_abc); cudaMemcpy(h_abc,d_abbc<H2D); cudaFree(d_abc); } 그림 3 하둡 맵리듀스에서 GPU 매퍼

6 Hadoop pipes(2) #define SPLIT_SLOP 1.1
public InputSplit[] getSplits(JObConf job, int numSplits){ totalSize = file.getLen() goalSize = totalSize/numSplits bytesRemaining = totalSize while(bytesRemaining/goalSize > SPLIT_SLOP){ splits.add(new FileSplit(file.path, totalSize - bytesRemaining, goalSize)) bytesRemaining -= goalSize } ... return splits

7 Hadoop pipes(3) #define SPLIT_SLOP 1.1
public InputSplit[] getSplits(JObConf job, int numSplits){ totalSize = file.getLen() cpu_totalSize = totalSize * pf gpu_totalSize = totalSize – cpu_totalSize num_gpu_maptask = num_nodes num_cpu_maptask = numSplits – num_gpu_maptask cpu_goalSize = cpu_totalSize / num_cpu_maptask gpu_goalSize = gpu_totalSize / num_gpu_maptask cnt = 0 splitSize = gpu_goalSize bytesRemaining = totalSize #define SPLIT_SLOP 1.1 public InputSplit[] getSplits(JObConf job, int numSplits){ totalSize = file.getLen() goalSize = totalSize/numSplits bytesRemaining = totalSize

8 Hadoop pipes(4) while(bytesRemaining/goalSize > SPLIT_SLOP){
if( cnt % max_maptask !=0){ splitSize = cpu_goalSize offset = cpu_offset + (cpu_totalSize – cpu_bytesRemaining) cpu_bytesRemaining -= splitSize }else{ splitSize = gpu_goalSize offset = fpu_offset + (gpu_totalSize – gpu_bytesRemaining -= splitSize } splits.add(new FileSplit(file.path, totalSize - bytesRemaining, goalSize)) bytesRemaining -= cpu_bytesRemaining + gpu_bytesRemaining cnt++ ... return splits while(bytesRemaining/goalSize > SPLIT_SLOP){ splits.add(new FileSplit(file.path, totalSize - bytesRemaining, goalSize)) bytesRemaining -= goalSize } ... return splits

9 CUDA

10 CKY parser Cocke-Kasami-Younger, CKY
특정한 문자열에 대해 어떠한 방식으로 생성되는지를 판단하는 파싱 알고리즘 문법에 포함된 규칙의 수: G 문장의 단어 수 n O(|G| 𝑛 2 ) 복잡도

11 Idea Idea 정적분할 입력 전처리를 통한 부하 균등 GPU 커널의 동적 수행

12 Environment CPU 2 * Intel Xeon E5-2630 (6 cores @ 2.3GHz) GPU
Tesla K20c ( GHz) Host Memory 64 GB Device Memory 5 GB System specification WC Bytes CPU(ms) GPU(ms) Sp. Up Min 1 8 3 5 0.6 Max 47 298 36398 937 43.31 Avg 22.6 124.3 6650.5 205.6 26.16 입력 문장들에 대한 정보

13 노드 수 증가에 따른 가속 정도

14 노드 당 매퍼 수에 따른 영향 𝑡𝑖𝑚𝑒 |#𝑚𝑎𝑝𝑝𝑒𝑟=12 𝑡𝑖𝑚𝑒 |#𝑚𝑎𝑝𝑝𝑒𝑟=1

15 . . . 노드 당 매퍼 수에 따른 영향 노드 당 매퍼 증가  I/O 병목 발생 Mapper Mapper Mapper
Hard or Memory

16 정적분할 𝑝𝑓= 𝑛 ∗𝑐𝑝𝑢 𝑛 ∗𝑐𝑝𝑢+𝑚 ∗𝑔𝑝𝑢
전체 입력 중 CPU 매퍼 군이 처리하는 입력의 비율(partition factor) n: CPU 매퍼 수 m: GPU 매퍼 수 cpu: 하나의 CPU매퍼가 처리하는 입력의 양 gpu: 하나의 GPU매퍼가 처리하는 입력의 양 최적의 성능: pf에 의한 양보다 더 낮게 설정

17 입력 전처리를 통한 부하 균등 단어 수에 의해 정렬 GPU1 부하 불균형 GPU2 pf CPU1 CPU2

18 입력 전처리를 통한 부하 균등 Interleaving 단어 수에 의해 정렬 GPU1 GPU2 pf CPU1 CPU2

19 GPU 커널의 동적 수행 CPU Mapper가 GPU Mapper에게 처리할 문장 전달 불가 Mapper 통신불가

20 GPU 커널의 동적 수행 GPU CPU Memory Mapper MODE = CPU
wc = word_count(input_sentence) If(MODE != GPU && wc < threshold) Parser_CPU(input) else Parser_GPU(input) 단어 개수가 역치 미만이면 CPU 그렇지 않은 경우GPU

21 Idea Experiment 동종 수행 이기종 수행

22 동종 수행(Homogeneous Execution)
단일 노드 CPU 수행 단일 노드 GPU 수행 하둡 맵리듀스 이용, 14개 노드 Hadoop XXX(#매퍼) 노드 증가 노드 당 매퍼 증가 12*14 = 168 23*14 = 322

23 이기종 수행(Heterogeneous Execution)
-8.86% 0% 3.16% 12.66%

24 Summary Ver. 1~3 CPU 매퍼 11개, GPU 매퍼 1개 Ver. 1: 정적 분할 이용 (pf) Ver. 2: Input을 단어 수대로 정렬 후 인터리빙 방식으로 매퍼에 할당 Ver. 3: Input을 정렬하지 않고 pf 기반으로 정적으로 분할 후 CPU 매퍼에서 입력에 따라 동적으로 수행  Ver .1 의 pf 값 이용

25 How to use GPU for Hadoop? CPU + GPU
Summary How to use GPU for Hadoop? CPU + GPU


Download ppt "CPU-GPU 이기종 플랫폼에서 하둡 맵리듀스의 가속: CKY 파서 사례 분석"

Similar presentations


Ads by Google