문의를 보내주셔서 감사합니다! 팀원이 곧 연락드리겠습니다.
예약을 보내주셔서 감사합니다! 저희 팀 멤버 중 한 분이 곧 연락드리겠습니다.
코스 개요
개요
- OpenCL이란 무엇인가?
- OpenCL vs CUDA vs SYCL 비교
- OpenCL의 주요 기능 및 아키텍처 개요
- 개발 환경 설정 방법
시작하기
- Visual Studio Code를 활용한 새로운 OpenCL 프로젝트 생성
- 프로젝트 구조 및 파일 구성 탐색
- 프로그램 컴파일 및 실행 방법
- printf와 fprintf를 이용한 출력값 표시법
OpenCL API
- 호스트 프로그램에서 OpenCL API의 역할 이해
- 장치 정보 및 기능을 조회하기 위한 OpenCL API 활용법
- 컨텍스트, 커맨드 큐, 버퍼, 커널 및 이벤트를 생성하는 방법
- 읽기, 쓰기, 복사, 매핑, 언매핑, 실행 명령 등을 대기열에 추가하는 방식
- 오류 및 예외 처리를 위한 OpenCL API 사용법
OpenCL C 언어
- 장치 프로그램에서 OpenCL C의 역할 이해
- OpenCL C를 이용해 장치에서 실행될 커널을 작성하고 데이터 처리하는 방법
- 데이터 타입, 한정자, 연산자 및 표현식 사용법
- 수학 연산, 기하학적 계산, 관계 비교 등을 위한 내장 함수 활용법
- 원자성 연산, 이미지 처리 기능, cl_khr_fp16 등의 확장 및 라이브러리 사용 방법
OpenCL 메모리 모델
- 호스트와 장치 간 메모리 모델의 차이점 이해
- 전역, 로컬, 상수, 프라이빗 메모리 공간의 활용법
- 버퍼, 이미지, 파이프와 같은 메모리 객체 사용법
- 읽기 전용, 쓰기 전용, 읽기-쓰기 등의 메모리 접근 모드 설정 방법
- 메모리 일관성 유지 기법 및 동기화 수단 이해
OpenCL 실행 모델
- 호스트와 장치 간 실행 모델의 차이점 파악
- 워크 아이템, 워크 그룹 및 ND-레인지를 활용한 병렬 처리 설계법
- get_global_id, get_local_id, get_group_id와 같은 함수 사용 방법
- barrier, work_group_reduce, work_group_scan 등의 워크 그룹 내 함수 활용법
- get_num_groups, get_global_size, get_local_size와 같은 장치 정보 관련 함수 사용법
디버깅
- OpenCL 프로그램에서 흔히 발생하는 오류 및 버그 유형 이해
- Visual Studio Code 디버거를 활용한 변수 검사, 중단점 설정 및 호출 스택 확인 방법
- AMD 장치 환경에서 CodeXL을 이용한 OpenCL 프로그램 분석법
- Intel 장치 환경에서 Intel VTune을 활용한 디버깅 및 최적화 방법
- NVIDIA 장치 환경에서 NVIDIA Nsight를 이용한 프로그램 분석법
최적화
- OpenCL 프로그램의 성능에 영향을 주는 요인 파악
- 벡터 데이터 타입 및 벡터화 기법을 활용한 산술 연산 효율 향상 방법
- 루프 언롤링 및 타일링 기술을 이용해 제어 오버헤드 감소 및 지역성 증진 방안
- 로컬 메모리와 관련 함수를 활용한 메모리 접근 성능 최적화 방법
- 프로파일링 도구를 이용해 실행 시간 및 자원 사용량을 측정하고 개선하는 방안
요약 및 향후 학습 방향
요건
- C/C++ 언어 및 병렬 프로그래밍 개념에 대한 기초 지식
- 컴퓨터 아키텍처와 메모리 계층 구조에 대한 이해
- 명령줄 도구 및 코드 에디터 사용 경험
수강 대상
- OpenCL을 활용해 다양한 하드웨어에서 병렬 처리 프로그램을 개발하고자 하는 개발자
- 여러 플랫폼 및 장치 환경에서 실행 가능한 이식성 높고 확장성이 뛰어난 코드를 작성하려는 개발자
- 하드웨어 레벨의 병렬 프로그래밍 방식을 깊이 있게 탐구하고 코드 성능을 최적화하고자 하는 프로그래머
28 시간