Monday, April 13, 2009

동물 커뮤니케이터

애완동물을 좋아하는 것은 아니다. 아니 싫어한다고 하는 편이 맞을까.
아마도 어릴 적에 놀란 기억이 마음 속에 조그만 상처로 남아 그런지 모르겠다.
멀리 사바나의 초원을 달리는 사자나 코끼리가, 동물원에서 멀리 있는 기린이나 곰이,
어쩌면 눈 앞을 지나가는 강아지보다 더 친근할지도 모르는 그런 사람이 바로 나.

애완동물 프로그램도 그래서 잘 보진 않는데, 어쩌다 보게된 동물농장.
동물들과 커뮤니케이션한다는 '하이디'가 나오는 코너를 보고 정말일까 싶어서 보게 된 거지만.
덕분에 아주 오랫만에 눈물 대폭발.
텔레비전을 보고 훌쩍거리는 건 그닥 좋아하진 않지만 눈물이 줄줄 나는 건 어쩔 수 없었다.

'하이디'가 하고 있는 건 동물과 교감하는 특별한 능력이지만,
다른 사람과 이렇게 교감하는 건 더 어려운 일일지도 모르겠다.
마음 속에 상처를 가진 동물들의 마음을 열게 하는 것이 그녀의 특별한 능력.
하지만, 다른 사람들과 대화를 쉽게 할 수 있는 사람의 마음이란 게, 더 쉽게 열리는 건 아닌것 같다.
하이디가 특별한 능력을 가져서 그런 거겠지만.

커뮤니케이션의 기본은, 상대를 존중하고 먼저 마음을 열고 귀를 열고 듣는 것.
그렇지 않고 나는 이래 너는 이래야돼 라고 하는 것은 진짜 커뮤니케이션이 아니다.
마음이 열리지 않으면 기다리고, 상대를 먼저 이해하려고 애쓰는 것이 첫걸음인가보다.

쉽지 않은 일.

꽃님이 얘기를 보면서 또 한번 주룩주룩...

Sunday, April 12, 2009

Mac OS X/Eclipse CDT에서 CUDA 환경 설정

며칠동안 Mac OSX위에서 CUDA 작업환경을 만들려고 이리저리 해보았는데, 역시나 처음이라 그런지 이런저런 문제가 겹친다. 일단 하고 보니 그리 어려운 것은 아닌데, 역시나 처음 하는 일은 무엇이든 그리 쉽지가 않다. 다음에 같은 일을 또 하게 될 것 같은 불길한 예감에 잊지 않고자 posting해둔다.

OSX위에서 사용할 수 있는 C++ IDE는 Xcode나 Eclipse CDT 둘 중에 하나인 것 같은데, (물론 Vi나 emacs가 능숙하다면 그 쪽이 편하겠지만 항상 windows에서만 작업하다보니 둘 다 그리 편하지 않네.) Eclipse를 사용하기로 결정. 이유는, 우선 mac에서만 동작하는 GUI를 만들 생각이 없고, 차후에 linux위에서도 작업하게 될 것 같아서, 이왕이면 같은 IDE를 사용하는게 좋지 않을까 하는 생각에서다.

0. 컴파일러 설치

대부분의 경우에는 gcc, g++등의 컴파일러, 디버거들이 이미 설치되어 있겠지만 osx를 처음 설치했다면 깔려있지 않을 수도 있다. OSX DVD에 XCODE와 같이 들어있으므로 설치해주자. 최신의 xcode 패키지가 필요하다면 https://connect.apple.com/ 에서 다운로드 받는다. (등록필요)

1. CUDA 설치

아래의 링크에서 Toolkit과 sdk를 받아서 설치한다.
http://www.nvidia.com/object/cuda_get.html
MAC OSX의 경우에는 CUDA 전용의 드라이버가 없으므로 신경쓸 필요는 없다. (windows나 linux의 경우에는 같은 다운로드 페이지에서 내려 받아 툴킷 설치전에 설치.)

terminal작업을 위해 .bashrc나 .bash_profile에 library path를 설정한다. (설치 위치를 확인하고 알맞게 설정. 이 경우에는 toolkit이 /usr/local/cuda/에 설치 되었다. 필요하다면 sdk library위치도 확인해서 더 넣어주자.

export LD_LIBRARY_PATH=/usr/local/cuda/lib/
export DYLD_LIBRARY_PATH=/usr/local/cuda/lib:$DYLD_LIBRARY_PATH



1.1 sdk설치

sdk가 설치된 위치에 가서 (내 경우에는 /Developer/CUDA/) sample이 잘 만들어지는지 확인한다. make가 잘 되면 /Developer/CUDA/bin/darwin/release/에 executable이 주루룩 생긴다. 몇 개 실행해보아서 잘 되는지 확인하자.

2 CMAKE 설치

CMAKE는 cross platform build tool로 주어진 시스템에 적합한 makefile이나 IDE에 맞는 프로젝트를 생성한다. http://www.cmake.org/

설치방법은 위 링크를 따라가서 확인. 내 경우에는 macport로 설치했음.

sudo port install cmake

2.1 findCUDA.cmake 설치

아래의 링크를 참고해서 findCUDA.cmake파일을 받는다.
http://www.sci.utah.edu/~abe/FindCuda.html

svn repository에서 받은 후 ccmake로 makefile을 생성해본다. ccmake는 cmake를 메뉴 스타일로 활용할 수 있는 툴인데, 테스트를 위해서 CMAKE_BUILD_TYPE을 Release, CUDA_BUILD_TYPE은 Device로 setting하고 makefile을 만들어 본다. make가 제대로 되면 src밑에 test executable이 생기므로 동작하는지 확인. (아무 에러메시지도 안나오면 성공)

이제 cuda를 사용할 수 있는 cmake환경이 생겼으므로 테스트 프로젝트를 수정하든지 해서 작업을 할 수 있다.

3. Eclipse CDT 프로젝트 생성

cmake는 Eclipse CDT를 위한 프로젝트를 생성할 수 있으므로 다음과 같이 프로젝트와 makefile을 새성한다. (해당 디렉토리에 있는 경우)

ccmake -G"Eclipse CDT4 - Unix Makefiles" .

makefile이 잘 만들어졌는지 보고 make해본다. 문제가 안생기면 OK.

3.1 Eclipse로 import

Eclipse에서 File--Import--Select root directory로 생성된 프로젝트를 import한다. 빌드 후에 실행을 시켜보아서 잘 되면 OK.

하지만 다이나믹 라이브러리를 못찾는 에러가 발생하면, Project proerties -- Run/Debug Settings에 가서, launch configuration을 Edit. Environment탭에서 New를 누르고 "New Environment Variable"창이 뜨면 name에 DYLD_LIBRARY_PATH, value에 cuda library 위치를 넣는다. (여기서는 /usr/local/cuda/lib)

실행시켜보아 잘 되는지 확인. 실행도 잘되면 OK.

3.2 이미 만들어져있는 프로젝트에 findCUDA.cmake 설정

때로는 c로 작업을 한참 하던 프로젝트에 cuda feature를 넣고 싶은 경우가 생긴다. Visual studio의 경우에는 custom rule file을 설정하는 것으로 간단히 할 수 있는데, 이 경우에는 CMakeLists.txt파일을 고쳐서 사용한다. 이건 너무 당연한 거긴 하지만, 테스트 예제를 보고 따라하자.

간단히 설명하면 위에서 받은 findCUDA예제에서 /CMake 디렉토리를 통채로 복사하고, CMakeList.txt에
INCLUDE(${CMAKE_SOURCE_DIR}/CMake/cuda/FindCuda.cmake)
를 적당한 위치에 삽입해준다.

cuda를 라이브러리형태로 링크하게 되는 경우가 많은데 이때는 CMakeList.txt에
CUDA_ADD_LIBRARY(xxx_cuda_lib xxx_cuda.cu )
라는 식으로 라이브러리를 만들고
TARGET_LINK_LIBRARIES(xxx xxx_cuda_lib) 식으로 링크해주자.

Eclipse CDT 프로젝트 생성 및 다이나믹 링크 설정은 위와 동일.