라벨이 parallel인 게시물 표시

Data dependence

Data dependence Flow Dependence(True dependence) Anti Dependence Output Dependence Flow Dependence(True dependence) 어떤코드 S1이 메모리 영역에 쓰고난 다음 어떤코드S2가 해당 위치를 읽음 S1과 S2는 동시에 실행하거나 순서를 바꿀수 없음 Anti Dependence 어떤코드 S1이 메모리 영역에서 읽고 , 그다음 어떤코드 S2가 해당 영역에 씀 S1과 S2는 동시에 실행하거나 순서를 바꿀수 없으나 S2코드를 수정하여 dependence를 제거할 수 있음 Output Dependence 어떤코드 S1이 메모리 영역에 쓰고, 그다음 어떤코드 S2가 해당 영역을 읽음 Anti Dependence와 마찬가지로 순서를 바꿀수 없으나 코드 수정으로 dependence 제거 가능 루프 캐리드 디펜던스(Loop-carried dependence) 루프 안에서 이전 이터레이션과 다음 이터레이션에 dependence가 존재 이터레이션들을 각각 동시에 실행 불가능 루프 인디펜던트 디펜던스(Loop-independent depecdence) 루프 안에 있으나 루프와 무관하게 루프안 코드들이 depecdence가 존재(Flow, anti, output 이 loop안에 있으면 loop-independent depecdence라고 하는것 같음)

Frist OpenCL example on Windows

이제 OpenCL 예제 프로그램을 작성하여 보자. 작성하기전 알아야 될 개념은 OpenCL은 가용한 자원들의 집합이 추상화된 platform 과 platform안에 연산유닛이 추상화된 device 라는 개념이 있다. 가용한 platform은 OpenCL에서 사용할수 있도록 알맞은 드라이버가 설치되어 있어야한다. NVidia 그래픽 카드의 경우 CUDA를 설치하면 드라이버가 설치된다. Intel CPU의 경우는 intel opencl 로 구글링하면 " Intel Developer zone " 이 리스팅되는데 이곳( https://software.intel.com/en-us/articles/opencl-drivers )에서 본인에게 알맞은 드라이버를 다운로드 하면 CPU자원을 이용할 수 있다. 실제 C로 작성되는 프로그램은 host 라고 부르며, 병렬로 처리되는 함수를 kernel 이라고 한다. kernel은 C언어에 OpenCL의 예약어를 이용하여 작성할 수 있다. 성격 급하니 이론보다 코딩부터 해보자. 먼저 내가 사용할 수 있는 연산자원이 얼마나 있는지 확인하여 보자. (예제 프로그램은 구글링한 결과를 참고하여 작성하였다. - 출처불명) host 프로그램 예제(getinfo.c) #include <stdio.h> #include <stdlib.h> #include <CL/cl.h> int main() { unsigned int i, j; //플랫폼을 가져오기 위한 배열(실제로는 포인터사용후 메모리 할당 해야함) cl_platform_id platforms[32]; // 플랫폼의 갯수를 저장하기위한 변수 cl_uint num_platforms; // 벤더이름. 1024바이트를 넘지 않았으면 한다. char vendor[1024]; //디바이스를 가져오기 위한 배열(...

Starting OpenCL with MinGW on Windows

이종병렬 프로그래밍에 사용되는 OpenCL 윈도우OS에서 컴파일/실행하기 위해서는  1. NVidia 홈페이지의 CUDA 존에서 툴킷을 다운로드 한다. Windows 8 64비트 용 파일이름은 cuda_6.5.14_windows_notebook_64 이다. 설치는 간단하다. 다음다음 하면 설치된다. 2. 컴파일 하기 위한 환경을 구성해야한다. 윈도우의 경우 VisualStudio Express, MinGW, cygwin 을 이용할 수 있다.  여기서는 MinGW를 설치하였다.(MinGW와 cygwin 의 차이점은 linux환경을 완벽하게 호환되게하는지 안하는지이다.)  MinGW를 검색해서 MinGW installer 설치후 msys, 컴파일러 등 선택하여 설치한다. 설치는 가급적 c: 드라이브 아래 MinGW 폴더로 하길 권장한다. program files 같은곳은 빈칸 때문에 사용할때 불편을 겪을수 있다. 설치가 끝나면 MinGW아래 msys 아래 버전폴더가 있다. 그 속에 보면 msys 배치파일이 있는데 실행하기전 MinGW의 위치를 마운트해주어야 한다. etc 아래 fstab 파일(없으면 생성한다)안에 아래와 같이 적어준다. C:\MinGW   /mingw 배치파일을 실행하여 컴파일러가 동작하는 확인한다. 3. 이제 OpenCL 예제 프로그램을 작성하여 실행해보자