본문 바로가기

개발관련/OpenCL6

First Kernel 이미지 convolution 과정 #includeusing namespace std; void convolve(float *pInput,float* pFilter,float* pOutput, const int nInWidth,//input image height const int nWidth,//output image widthconst int nHeight, // output image height const int nFilterWidth,//filter sizeconst int nNumThreads){for (int yOut = 0; yOut < nHeight; yOut++){const int yInTopLeft = yOut;for (int xOut = 0; xOut < nWidth; xOut++){.. 2014. 8. 29.
이클립스에서 opencl 테스트 window 7AMD Eclipse luna 작업 환경은 위와 같다. 일단은 이클립스와 opencl을 연동했다. 위와 같이 세팅을 해주고 빌드를 하면 아래와 같은 오류가 계속 났다. 하루 종일 났다. 진심 많이 참아가면서 이 오류를 해결하려고 애썼다. 근데 해결이 안됬다... ㅅㅂ.. amd 홈피가서 영어로 써가면서 질문도해보고 구글링도 다 뒤졌는데 되지 않았다. 참고로 컴파일러는 MinGW를 사용했다. 저 에러를 잡기위해서 순수 24시간을 투자했다. 그러다 25시간 될 무렵 혹여나 하는 마음에 우분투 환경에서 테스트 해보았다.우분투에서 리눅스 gcc 컴파일러를 사용했고 세팅은 위와 같이 똑같이 해주었더니 빌드도 잘되고 프로그램이 잘 돌아갔다. 컴파일러 차이였던 것일까... 하... 그래도 우분투 환경에.. 2014. 8. 13.
고속 푸리에 변환 고속 푸리에 변환을 해보았다. 오늘 하루 종일 이것만 했다. 책에 있는 code를 그대로 사용해도 안되서 정말 디버깅이고 뭐고 하루 종일 error 찾는데 시간을 다 보냈다. 그래도 error는 일단 잡아서 원하는 output이 나왔기 때문에 시간낭비는 아니라고 생각한다. 일단 푸리에 변환을 해서 얻은 공간 주파수 성분에 저주파 성분을 제거하는 과정을 공부했다. 보통 이미지 파일을 불러올 땐 프로젝트 파일 안에 이미지 파일을 넣어서 이미지를 불러오는 식이다. OpenCL도 마찬가지로 프로젝트 폴더 안에 이미지를 넣어서 불러왔다. /* Read image */readPGM(&ipgm, "lena.pgm"); 아직 OpenCL에 익숙하지 않아서 정확히 맞는진 모르겠지만 아마 readPGM 을 이용하여 이미지.. 2014. 7. 30.
OpenCL 기초 공부(2) 프로그램 분할 방법 1. 데이터 병렬2. 테스크 병렬 이 둘의 차이점은 같은 커널을 사용하는가(데이터 병렬) 아니면 다른 커널을 사용하는가(테스크 병렬)이다. 함수 설명clEnqueueNDRangeKernel() - 데이터 병렬로 커널을 실행한다. clEnqueueTask() - 테스크 병렬로 커널 실행한다. clEnqueuReadBuffer() - 병렬로 메모리를 읽는다.clEnqueuWriteBuffer() - 병렬로 메모리를 쓴다. 태스크 병렬과 이벤트 오브젝트 커맨드 큐에 전달한 태스크는 기본적으로 병렬 실행된다. (의존 관계가 있는 태스크끼리는 병렬 실행하면 안된다.)따라서 OpenCL에서는 이벤트 오브젝트를 사용해 태스크의 실행 순서를 지정한다. 이벤트 오브젝트 : 커맨드 큐에 전달한 명령의 .. 2014. 7. 30.