현재 개발중인 애플리케이션에서 OpenCL을 써서 속도를 높이고 있는데...
clEnqueueNDRangeKernel() 함수를 호출할때 갑자기 CL_MEM_OBJECT_ALLOCATION_FAILURE 에러가 나지 않나 나중엔 OUT_OF_RESOURCE 에러도 나고... 그래서 니가 삽질/해결한 방법을 잠시 노트로 남김.
1. 우선 실제 allocation을 하는 메모리가 얼마나 되는지 확인
실제 사용하고 있는 cl_mem 버퍼는 다 더해봐야 3MB 이하. OpenCL 최소 global 메모리 지원이 128MB 이니. 아무 문제가 없음.
2. Notification 함수
이리저리 뒤지다보니 에러가 날 때 notification 하는 함수를 안붙여놨음. 이 함수를 구현해서 컨텍스트를 생성할때 함수포인터를 전달. 그러니 clEnqueueWriteBuffer() 를 호출할때도 CL_MEM_OBJECT_ALLOCATION_FAILURE 발생하는걸 확인. 그래도 여전히 문제 해결엔 도움이 안됨.
3. CPU OpenCL 디바이스로 실행
인텔 CPU에서 아무 문제없이 실행됨... NVidia GPU에서 돌릴때만 문제가 생김... 순간 드라이버 문제가 아닌가 싶어 최신 드라이버 설치.. 아무 문제 없음
4. 메모리 stomp 확인
코드를 잘 살펴보니 allocation한 local memory의 범위를 넘어서 쓰기/읽기를 하고 있었음... 이걸 제거하니 아무 문제 없이 실행.. 드디어 고쳤다.. 만세..!
오늘의 교훈: OpenCL에서 CL_MEM_OBJECT_ALLOCATION_FAILURE 따위의 에러가 나온다면 메모리 stomp를 확인해보세요.
2012년 5월 26일 토요일
2012년 5월 23일 수요일
북미취업 가이드 책이 나왔습니다.
몇년전에 블로그를 통해 연재했던 북미취업 가이드가 드디어 전자책으로 책이 나왔습니다. 몇 년이 지난 만큼 블로그에 있던 내용을 조금 다듬고 내용도 조금 업데이트했습니다. 편집 및 출판은 연두미디어에서 맡아 주었습니다. 현재 애플 아이북스용으로 올라왔고 기타 국내 온라인 출판사 홈피에도 곧 올라온다 합니다. 전자책 구매 방법은 연두미디어의 홈페이지를 참조하시기 바랍니다.
P4SandBox를 3주간 사용해본 소감
몇주전에 말씀드린 것처럼 P4SandBox를 한 3주 사용했습니다. 매우 만족스럽네요. private repo가 꽤 좋아요. 새로운 스트림(브랜치라고 생각하세요)를 만들고 여러 스트림 사이에서 switch하는것도 빠르구요. (뭐 내부적으로 당연히 Perforce의 shelve 기능을 이용하죠). 스트림을 그냥 브랜치 + 자동 shelving이라고 생각하시면 될 거 같아요.
내가 찾은 버그 하나:
내가 찾은 버그 하나:
- 스트림안에서 손수(manually) shelving을 해주면 이걸 다시 unshelve 할수가 없네요 -_-; 따라서 현재 저는 스트림 안에서 아예 manual shelving을 안합니다. 작업중이던걸 shelving하고 다른 작업을 해야 한다면 그냥 간단히 새로운 스트림을 추가하고 말죠. 참고로 이 버그는 P4SandBox에서만 발생하는 버그입니다. 퍼포스의 전통적인 방법은 중앙관리방식을 쓰면 이런 문제는 없어요.
한가지 짜증나는 점:
- copy 또는 merge(Git 에서 push/pull의 개념입니다)를 할 때 change 히스토리를 자동으로 넣어주지 않네요. Perforce측 말로는 다음 버전에 이 기능을 구현한답니다.
피드 구독하기:
글 (Atom)