12.07.2015 Views

컴퓨터 비전을 위한 병렬 처리 기법 소개 Introduction to ... - KAIST

컴퓨터 비전을 위한 병렬 처리 기법 소개 Introduction to ... - KAIST

컴퓨터 비전을 위한 병렬 처리 기법 소개 Introduction to ... - KAIST

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

The Children’s Leadership AcademyEMERGENCY CONTACT FORMAgeDate of BirthBanner ID Number/ /Last Name First Name Middle InitialHeightFeet InchesChild’s Health InsuranceName of Insurance Plan:Name of Subscriber:Child’s Usual Source of Medical CareName:Address:WeightSexLbs.□ Male □ FemaleSpecial Conditions, Disabilities, Allergies, or MedicalInformationChild’s Usual Source of Dental CareName:Address:Phone Number ( )PARENT(S)/LEGAL GUARDIAN(S)Name:Relationship <strong>to</strong> Student:Phone Number: ( )EMERGENCY CONTACTSName:Relationship <strong>to</strong> Student:Cell Number (Work Number (Home Number ()________________________)_______________________)_______________________Cell Number (Work Number (Home Number () ________________________)_______________________) _______________________Name:Name:Relationship <strong>to</strong> Student:Relationship <strong>to</strong> Student:Cell Number (Work Number (Home Number ()________________________)_______________________)_______________________Cell Number (Work Number (Home Number () ________________________)_______________________) _______________________Parent/Legal Guardian Consent and Agreement for EmergenciesAs parent/legal guardian, I give consent for my child <strong>to</strong> be transported by Emergency Medical Service. My Child will betransported <strong>to</strong>___________________________ Hospital byAmbulanceService. (Parents/Guardians are responsible for all emergency transportation charges)._______________________________________________Parent/Guardian (Print Name)________________________Date____________________________________________Parent/Guardian SignaturePalo Al<strong>to</strong> College Corporate & CommunityEducation Division will not administer any type ofmedication(s). Palo Al<strong>to</strong> College is not responsiblefor any type of accidents.


2010 년 제 22 회 영상<strong>처리</strong> 및 이해에 관한 워크샵 2010.1.27-1.29장 빠르게 대응하고 있는 언어이다. 셋째로 ASIC,FGPA 등의 개발자 도구와는 다르게 CUDA 의 개발자 도구는 무료로 제공되고 있다는 점이다.간단히 말해서 CUDA 는 C 언어로 GPU 을 다룰수 있게 해주는 개발자 도구라고 할 수 있다. CUDA를 사용하여 GPU 를 효율적으로 활용하기 위해서는CUDA 프로그래밍 모델에 대한 이해와 CUDA 메모리 모델에 대한 이해가 가장 중요하다.2.3.1 CUDA Programming ModelCUDA 에서 GPU 는 CPU 를 보조해주는 보조 연산 장치로 생각하면 된다. 특히, 영상 데이터처럼반복적이고 대량의 데이터를 <strong>처리</strong>하는 부분을 <strong>처리</strong>하기 위해 사용하는 것이 효과적이다.스레드와 블록으로 구성되는 CUDA 프로그래밍모델은 커널을 실행할 때, 몇 개의 블록과 스레드로데이터를 <strong>처리</strong>할 것인지 지정하여야 한다. 이 때 정하여진 블록과 스레드의 사이즈는 프로그래밍 연산수행시간에 상당히 중요한 영향을 미친다. 그 이유는 이들의 사이즈에 따라서 수행되는 GPU 의 멀티프로세서의 개수가 정해지기 때문이다.접근할 수 있어서, 모든 블록이 공유 가능하지만,캐시가 되지 않아서 속도가 가장 느리다. 상수와 텍스처 메모리 역시 그리드 단위로 접근 가능하지만,전역 메모리와 다르게 상수 메모리의 경우 캐시 되고, 텍스처 메모리의 경우 일부만 캐시 된다.이런 메모리 특성을 이해하고 알고리즘에 따라어떤 메모리를 사용할 것인지 신중이 결정하고 사용하면 CUDA 를 이용하여 최적의 성능을 이끌어낼 수 있다.3. <strong>병렬</strong> <strong>처리</strong> <strong>기법</strong> 비교 및 분석<strong>병렬</strong><strong>처리</strong> <strong>기법</strong>을 비교하기 위해 여러 가지 <strong>기법</strong>들이 존재하는데, 순수 <strong>병렬</strong> <strong>처리</strong> 성능 평가를 위해서는 최대한 단순한 알고리즘이 적합하다고 판단하여서 문턱값(Threshold)를 이용한 회색 조(Grayscale)이미지를 이진(Binary) 이미지로 변환하는알고리즘으로 정했다. 성능 평가에 사용된 <strong>컴퓨터</strong>사향은 Intel® Quad CPU 2.83Ghz, 3.25GB RAM,NVIDIA GeForce 9800GT 이다.3.1 OpenMPOpenMP 를 이용한 이미지의 <strong>처리</strong>는 서로의 데이터가 겹치지 않도록 전체 이미지를 동등하게 프로세서의 코어의 개수만큼 분할하고 각 코어에 할당 된 데이터만 <strong>처리</strong>하도록 하였다. 테스트 이미지의 크기는 1280 x 960 이므로 각 코어가 <strong>처리</strong>할 픽셀 수는 각 (1280 x 960) / (코어의 수) 개가 되므로반복문의 횟수가 1/(코어의 수)만큼 줄어 들게 된다.OpenMP 의 경우에는 기존의 C코드에서 거의 변경 없이 적용 가능하다. 픽셀 수는 각 (1280 x 960) /(코어의 수) 개가 되므로 반복문의 횟수가 1/(코어의수)만큼 줄어 들게 된다.이미지의 <strong>처리</strong> 시간은 574 ms 의 결과를 보인다.그림 7. 스레드 블록의 그리드[5]2.3.2 CUDA Memory ModelCUDA 로 최적의 성능을 이끌어 내기 위해서는메모리 모델을 정확히 이해해야만 최적의 성능을이끌어 낼 수 있다.CUDA 메모리에는 레지스터(register), 로컬 메모리(local), 공유 메모리(shared), 전역 메모리(global), 상수 메모리(constant), 텍스처 메모리(texture)가 정의되어 있다.개념적으로 레지스터와 로컬 메모리는 각각의 스레드 별로 독립적으로 접근가능하며, 공유 메모리의경우 각각 블록 별로 접근가능하고, 블록 내의 스레드가 공유할 수 있다. 전역 메모리는 그리드 단위로그림 8. 코어 별 <strong>처리</strong>하는 이미지 영역3.2 MMX/SSE/SSE2MMX 를 이용한 이미지의 <strong>처리</strong>는 테스트 이미지의 한 픽셀이 차지하는 정보의 크기인 8 비트의 데이터를 8 개로 묶어서 한 번에 64 비트의 데이터를<strong>처리</strong>하도록 구성하였다. 반복문 한 번당 8 개의 픽셀 정보를 <strong>처리</strong>하기 때문에 반복문의 수는 1/8 만큼줄어 들게 된다.


2010 년 제 22 회 영상<strong>처리</strong> 및 이해에 관한 워크샵 2010.1.27-1.29연산의 <strong>처리</strong>는 8 비트씩 나누어서 별도로 <strong>처리</strong>하게 되는 것을 [그림 8]을 보면 알 수 있다.MMX 경우의 이미지 <strong>처리</strong> 시간은 141 ms 의 결과를 보이고, SSE2 의 경우에는 101ms 의 결과를보인다.3.3 CUDA그림 9. MMX/SSE/SSE2 방식 연산CUDA 를 이용한 이미지의 <strong>처리</strong>에서는 이미지의비율과 가장 잘 맞는 블록 사이즈를 20 x 15 로 설정하였다. 이렇게 해서 블록당 사용 가능한 스레드의수인 512 개를 만족시켰다. 그래서 4096(64 x 64)개의블록으로 구성된 그리드를 생성하여 1280 x 960 픽셀사이즈의 이미지를 <strong>처리</strong>하도록 디자인하였다.이미지의 <strong>처리</strong> 시간은 15 ms 의 결과를 보인다.OpenMP 의 경우 4 개의 코어를 한번에 돌려서전체 테스트 이미지를 4 분할하여 <strong>처리</strong>하였을 때,C 에 비해서 약 3 배 정도 빠른 성능을 나타낸다.4 배의 속도가 나오지 않은 이유는 데이터의 분할및 병합에 연산이 소모 되었기 때문이다.MMX 의 경우 8 개의 비트를 동시에 <strong>처리</strong>하기때문에 C 에 비해서 거의 8 배 가까운 성능을 나타낸다. MMX 의 경우 OpenMP 와 다르게 거의 8배에 가까운 성능을 보인 이유는 OpenMP 같이데이터의 분할 및 병합에 소모되는 연산이 필요없기 때문이다.SSE/SSE2 의 경우 16 개의 비트를 동시에 <strong>처리</strong>하기 때문에 C에 비해서 거의 14~16 배에 가까운성능을 나타낸다.CUDA 의 경우에는 2 가지의 경우로 나누어서테스트를 진행하였다. 한 가지 경우는 GlobalMemory 에 이미지를 넣어 <strong>처리</strong> 하도록 프로그래밍 하였고, 다른 경우는 Shared Memory 를 이용하여 이미지 <strong>처리</strong>에 사용하였다.그림 10. Block 생성 예그림 12. Global Memory 를 이용한 이미지 <strong>처리</strong>[5]3.4 성능 측정 결과그림 11. 4 가지 <strong>기법</strong>의 <strong>병렬</strong><strong>처리</strong> 성능 비교그림 13. Shared Memory 를 이용한 이미지 <strong>처리</strong>[5]GPU 의 Global Memory 를 이용한 경우에는 C보


2010 년 제 22 회 영상<strong>처리</strong> 및 이해에 관한 워크샵 2010.1.27-1.29다 느린 성능을 나타낸다. 그 이유는 테스트 이미지를 Global Memory 에 저장해 놓았기 때문이다.바이너리 이미지를 구할 때, 원본 이미지의 각각의 픽셀 값들을 하나씩 읽어야 하는데, GlobalMemory 의 경우 400 에서 600 클락 사이클 정도의 메모리 대기 지연이 발생한다[5].하지만, 이에 비해서 공유 메모리의 수행 속도는 전역 메모리를 이용한 것과 비교해서 상당히빠른 것을 알 수 있다. 그 이유는 공유 메모리의경우 메모리 읽기 지연 대기 시간이 4 클락 사이클 밖에 발생하지 않기 때문이다. 하지만, 이 때반드시 공유 메모리와 전역 메모리 간의 데이터복사에 대한 오버헤드도 고려해주어야 한다.이처럼 CUDA 를 이용해서 <strong>병렬</strong> <strong>처리</strong>를 수행할때에는 어느 정도의 블록 사이즈를 사용할 것인지도 중요하지만, 어떤 메모리를 어떻게 사용할것인지에 대해서 충분히 고려하고 작업해야만 좋은 성능을 이끌어 낼 수 있다.4. 결론본 논문에서는 OpenMP 와 MMX/SSE/SSE2,CUDA 를 이용하여 순수 <strong>병렬</strong> <strong>처리</strong>의 성능을 비교해보았다. 성능 테스트에서는 CUDA 가 가장좋은 성능을 보였다. 하지만, 위의 결과들은 어느하나가 모든 상황에서 뛰어나다는 것을 의미하지않는다. 각 <strong>병렬</strong> <strong>처리</strong> <strong>기법</strong>에 맞춰서 알고리즘을어떻게 디자인하느냐가 성능의 차이를 크게 좌우하기 때문이다.본 논문에서 언급한 <strong>병렬</strong> <strong>처리</strong> <strong>기법</strong> 이외에도몇 가지 <strong>병렬</strong> <strong>처리</strong> <strong>기법</strong>이 더 존재한다. 대표적으로 최근에 디지털 미디어를 <strong>처리</strong> 하기 위해 인텔에서 출시한 확장 라이브러리인 Intel® IntegratedPerformance Primitives (Intel® IPP) 과 애플사 최초로 개발하고 AMD, Intel, NVIDIA 등의 기업이 참가하여 표준화 작업 중인 OpenCL (OpenComputing Language) 도 있다. OpenCL 역시CUDA 와 마찬가지로 GPU 의 능력을 그래픽 <strong>처리</strong>이외의 분야에 사용할 수 있도록 도와주는 프레임워크 이다.여기에서 언급하지 못한 많은 다양한 <strong>병렬</strong> <strong>처리</strong> <strong>기법</strong>이 존재한다. 이런 다양한 <strong>병렬</strong> <strong>처리</strong> <strong>기법</strong>들을 이용해서 컴퓨팅 능력을 향상시킨다면, 우리가 연구하는 많은 분야에서 도움이 될 것이라고생각한다. 하지만, 연구에 이런 <strong>병렬</strong><strong>처리</strong> <strong>기법</strong>들을 적용할 시에는 연구 방향에 따라 항상 적합한<strong>기법</strong>이 무엇인지 조사하고, 실험을 거쳐야 최적의성과가 나온다는 것을 보였다.로봇전문 인력양성 사업의 지원으로 수행되었음.참고문헌[1] 김준철, 정용한, 최학남, 김학일, 허욱렬,“ CPU 와 GPU 의 <strong>병렬</strong> <strong>처리</strong>를 이용한 고속 물체 인식 알고리즘 구현” , 제어◦ 로봇◦ 시스템학회 논문지, 제 15 권, 제 5 호, pp. 488-495, 2009.[2] 박은수, 최학남, 김준철, 임유청, 김학일, “ SSE명령어를 이용한 영상의 고속 전<strong>처리</strong> 알고리즘” , 전자공학회 논문지, 제 46 권, SP 편 제 2호, pp. 65-77, 2009.[3] OpenMP 를 이용한 멀티스레드 프로그래밍,2009, http://sunyzero.egloos.com/4227785[4] Intel Architecture Software Developer’s Manual vol.1, 2, 3[5] NVIDIA CUDA, Programming Guide v 2.2.1, 2009,http://kr.nvidia.com/object/cuda_home_kr.html[6] <strong>Introduction</strong> <strong>to</strong> MMX Programming, 2003,http://www.codeproject.com/KB/recipes/mmxintro.aspx[7] <strong>Introduction</strong> <strong>to</strong> SSE Programming, 2003,http://www.codeproject.com/KB/recipes/sseintro.aspx[8] L Dagum, R Menon, "OpenMP: An Industry-Standard API for Shared-Memory Programming,"IEEE Computational Science and Engineering, 1998[9] Wei Yu, Tsuhan Chen, James C. Hoe, "Real timestereo vision using exponential step cost aggregationon GPU", IEEE International Conference on ImageProcessing, Nov 2009[10] W. H. Kim, K. H. An, J. W. Kang, J. H. Joung, M. J.Chung, "Real-Time 3D Terrain Reconstruction BasedOn Stereo Vision With GPS/IMU", The ThirdConference on robot for military, pp. 49-52, Oc<strong>to</strong>ber2008[11] Joshua E. Cates, Aaron E. Lefohn and Ross T.Whitaker, “Medical Image Computing andComputer-Assisted Intervention - MICCAI 2003”,Pages 217-231, September 2004[12] By John D. Owens, Mike Hous<strong>to</strong>n, David Luebke,Simon Green, John E. S<strong>to</strong>ne, and James C. Phillips,“GPU Computing”, Vol.96, No.5, May 2008,Proceedings of the IEEE[13] Ian Buck, “GPU Computing with NVIDIA CUDA”,SIGGRAPH 2007Acknowledgment본 연구는 한국과학기술원 로봇 비전 및 인지연구 센터(Center for Robot Vision and Perception)를 통한 지식경제부/한국산업기술진흥원 융 복합형

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!