2013-07-02 1 views
1

최근에 나는 무작위로 knn 검색을 구현하는 Mex 파일 그룹인데 README.md에서 리눅스 배포판을 사용하여 matlab에서이 파일을 컴파일하는 방법을 찾지 못했습니다. 나는이 문제에 어떻게 대처할 수 있는지에 대한 아이디어를 고맙게 생각한다.리눅스 KNN CUDA에서 컴파일하는 방법은 무엇입니까?

답변

4

나는이 KNN 코드 : 코드는 Windows XP OS를 사용하여 작성된 2008 년

위로의 저자입니다. 소스 코드를 제공 했으므로 Linux mex 파일을 생성 할 수 있어야합니다. 은 읽어, 나는 Windows 용 다음 명령 줄을 제공 :

nvmex -f nvmexopts.bat knn_cuda_with_indexes.cu -I'C:\CUDA\include' -L'C:\CUDA\lib' -lcufft -lcudart -lcuda -D_CRT_SECURE_NO_DEPRECATE

이 MEX 파일을 생성하기 위해 리눅스 배포를 적응. 5 년 후에 많은 부분이 변경 될 수 있으므로 몇 가지 사항을 수정해야 할 수 있습니다. 그러나 사용자로부터받은 피드백은 정상적으로 작동 함을 나타냅니다.

Linux에서 CUDA 코드를 컴파일하는 방법에 대해서도 읽어보십시오. NVidia는 아주 멋진 튜토리얼을 제공합니다.

+0

matlab 및 nsight에서 kNN 코드를 컴파일 할 수 있습니다. 다음은 matlab에서 컴파일 할 때 사용한 스크립트입니다. https://www.dropbox.com/s/626buoisasw2gg1/nvmex2.m – mrDataos

+0

[논문] (http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5654017 "논문")에 따르면 . 데이터가 dim = 3 및 n = 65536 인 경우 CUDA 또는 cublas knn보다 ANN 라이브러리를 사용하는 것이 좋습니다. 속도를 높이려면 n을 100000 또는 200000과 같은 더 높은 값으로 늘릴 수 있습니까? – mrDataos

0

또한 nvmex없이 cuda + mex를 컴파일 할 수도 있습니다. MATLAB 명령에서, 단순히

>> !nvcc -c yourfile.cu -Xcompiler -fPIC -I$matlabroot/extern/include -I$matlabroot/toolbox/distcomp/gpu/extern/include 
>> mex yourfile.o -L/usr/local/cuda/lib64 -L$matlabroot/bin/glnxa64 -lcudart -lcufft -lmwgpu 

적절한 경로로 $matlabroot 교체 다음 두 줄을 실행합니다. (참고!! matlab에서 시스템 명령을 호출하십시오) 첫 번째 줄은 객체 파일을 만들고 다음에 mex 링크 라이브러리를 만듭니다.

CUDA 경로를 /usr/loca/cuda-6.0/ 또는 /usr/local/cuda-YOUR_VERSION/으로 수정해야 할 수 있습니다. 또한 쿠다 라이브러리 /usr/local/cuda/lib64 또는 /usr/local/cuda/lib을 확인하십시오.

당신은 당신의 코드를 최적화하려면

단순히 라이브러리 링크 명령은 동일 -O3 -DNDEBUG

>> !nvcc -O3 -DNDEBUG -c yourfile.cu -Xcompiler -fPIC -I$matlabroot/extern/include -I$matlabroot/toolbox/distcomp/gpu/extern/include 

했습니다. 필요에 맞게 추가 경로 포함 -I$path 및 라이브러리 경로 -L$path 또는 -l$library이 필요할 수도 있습니다.