Давеча попробовал на Ñвоём ноутбуке воÑпользоватьÑÑ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸ÐµÐ¹ CUDA.
Ðиже опишу, какие ошибки возникали при уÑтановки и компилÑции. Ошибки раÑпишу более подробно, Ñ‚.к. Ñамому пришлоÑÑŒ их править ища или Ð¸Ð·Ð¾Ð±Ñ€ÐµÑ‚Ð°Ñ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚Ñ‹ уÑтранениÑ. ÐадеюÑÑŒ поиÑковики чаÑто индекÑируют Ñтот Ñайт, мне долго приходилоÑÑŒ выиÑкивать как уÑтранить ту или иную проблему.
Ðоутбук Dell Inspiron 1525:
- Processor: Intel® Core™DuoCPU T5450 1,67 GHz;
- Memory (RAM): 2,00 GB;
- Display adapters: NVIDIA GeForce 8400M GS
СиÑтема: Windows Vista Home Basic.
ВерÑÐ¸Ñ Ð¼Ð°Ñ‚Ð»Ð°Ð±Ð°: Matlab Version 7.5.0.342 (R2007b)
Ð’ качеÑтве C++ компилÑтора иÑпользовал MS Visual Studio и набор библиотек MS Windows SDK v6.0A.
- УÑтановил CUDA, предварительно Ñкачав Ñ Ñайта NVIDIA вÑÑ‘ необходимое http://www.nvidia.ru/object/cuda_get_ru.html (взÑл верÑию 2.2, потому как 2.3 не прошла):
- CUDA Driver: NVIDIA Notebook Driver for Windows Vista 32-bit 185.85
- CUDA Toolkit: CUDA Toolkit 2.2 for Windows Vista 32-bit
- CUDA SDK: CUDA SDK 2.2 code samples for Windows Vista 32-bit
- Скачал набор Ð´Ð»Ñ Ð·Ð½Ð°ÐºÐ¾Ð¼Ñтва работы CUDA в Ñреде (вернее Ñо Ñредой) Matlab Matlab_CUDA-1.1a http://developer.nvidia.com/object/matlab_cuda.html
- Внутри Matlab_CUDA-1.1a еÑть файл README.txt Ñ Ð¾Ð¿Ð¸Ñанием уÑтановки пакета и работы того что еÑть. ОпиÑание, как оказалоÑÑŒ, неполное и требуютÑÑ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ðµ промежуточные дейÑтвиÑ. Опишу более:
Копируем из папки bin файл nvmex.pl в директорию папки Ñ bin-файлами Матлаба F:\Program Files\MATLAB\R2007b\bin
Включаем пакет mex и дейÑтвуем подобно ниже опиÑанному:
mex –setup
Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n? n
Select a compiler:
[1] Borland C++ Compiler (free command line tools) 5.5
[2] Borland C++Builder 6.0
[3] Borland C++Builder 5.0
[4] Compaq Visual Fortran 6.1
[5] Compaq Visual Fortran 6.6
[6] Intel C++ 9.1 (with Microsoft Visual C++ 2005 linker)
[7] Intel Visual Fortran 9.1 (with Microsoft Visual C++ 2005 linker)
[8] Intel Visual Fortran 9.0 (with Microsoft Visual C++ 2005 linker)
[9] Intel Visual Fortran 9.0 (with Microsoft Visual C++ .NET 2003 linker)
[10] Lcc-win32 C 2.4.1
[11] Microsoft Visual C++ 6.0
[12] Microsoft Visual C++ .NET 2003
[13] Microsoft Visual C++ 2005
[14] Microsoft Visual C++ 2005 Express Edition
[15] Open WATCOM C++ 1.3
[0] None
Compiler: 13
The default location for Microsoft Visual C++ 2005 compilers is C:\Program Files\Microsoft Visual Studio 8,
but that directory does not exist on this machine.
Use C:\Program Files\Microsoft Visual Studio 8 anyway [y]/n? n
Please enter the location of your compiler: [C:\Program Files\Microsoft Visual Studio 8] F:\Program Files\Microsoft Visual Studio 9.0
Please verify your choices:
Compiler: Microsoft Visual C++ 2005
Location: F:\Program Files\Microsoft Visual Studio 9.0
Are these correct?([y]/n): y
Warning: MEX-files generated using Microsoft Visual C++ 2005 require
that Microsoft Visual Studio 2005 run-time libraries be
available on the computer they are run on.
If you plan to redistribute your MEX-files to other MATLAB
users, be sure that they have the run-time libraries.
You can find more information about this at:
http://www.mathworks.com/support/solutions…a/1-2223MW.html
Trying to update options file: C:\Users\Illuminati\AppData\Roaming\MathWorks\MATLAB\R2007b\mexopts.bat
From template: F:\PROGRA~1\MATLAB\R2007b\bin\win32\mexopts\msvc80opts.bat
Done . . .
Теперь необходимо изменить файл mexopts.bat находÑщийÑÑ Ð² папке C:\Users\ВашЛогин\AppData\Roaming\MathWorks\MATLAB\R2007b на Ñледующий (иначе ничего не компилитÑÑ), изменив в нём координаты ваших папок
@echo off
rem MSVC80OPTS.BAT
rem
rem Compile and link options used for building MEX-files
rem using the Microsoft Visual C++ compiler version 8.0
rem
rem $Revision: 1.1.10.4 $ $Date: 2006/11/15 14:50:05 $
rem
rem ************************************************************
rem General parameters
rem ************************************************************
set MATLAB=%MATLAB%
set VS80COMNTOOLS=%VS80COMNTOOLS%
set VSINSTALLDIR=F:\Program Files\Microsoft Visual Studio 9.0
set VCINSTALLDIR=%VSINSTALLDIR%\VC
set WINSDKDIR=C:\Program Files\Microsoft SDKs\Windows\V6.0A
set PATH=%VCINSTALLDIR%\BIN;%WINSDKDIR%\bin;%VSINSTALLDIR%\Common7\IDE;%VSINSTALLDIR%\SDK\v2.0\bin;%VSINSTALLDIR%\Common7\Tools;%VSINSTALLDIR%\Common7\Tools\bin;%VCINSTALLDIR%\VCPackages;%MATLAB_BIN%;%PATH%
set INCLUDE=%VCINSTALLDIR%\ATLMFC\INCLUDE;%VCINSTALLDIR%\INCLUDE;%WINSDKDIR%\INCLUDE;%VSINSTALLDIR%\SDK\v2.0\include;%INCLUDE%
set LIB=%VCINSTALLDIR%\ATLMFC\LIB;%VCINSTALLDIR%\LIB;%WINSDKDIR%\lib;%VSINSTALLDIR%\SDK\v2.0\lib;%MATLAB%\extern\lib\win32;%LIB%
set MW_TARGET_ARCH=win32
rem ************************************************************
rem Compiler parameters
rem ************************************************************
set COMPILER=cl
set COMPFLAGS=/c /Zp8 /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo
set OPTIMFLAGS=/MD /O2 /Oy- /DNDEBUG
set DEBUGFLAGS=/MD /Zi /Fd"%OUTDIR%%MEX_NAME%%MEX_EXT%.pdb"
set NAME_OBJECT=/Fo
rem ************************************************************
rem Linker parameters
rem ************************************************************
set LIBLOC=%MATLAB%\extern\lib\win32\microsoft
set LINKER=link
set LINKFLAGS=/dll /export:%ENTRYPOINT% /MAP /LIBPATH:“%LIBLOC%” libmx.lib libmex.lib libmat.lib /implib:%LIB_NAME%.x /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
set LINKOPTIMFLAGS=
set LINKDEBUGFLAGS=/DEBUG /PDB:“%OUTDIR%%MEX_NAME%%MEX_EXT%.pdb”
set LINK_FILE=
set LINK_LIB=
set NAME_OUTPUT=/out:“%OUTDIR%%MEX_NAME%%MEX_EXT%”
set RSP_FILE_INDICATOR=@
rem ************************************************************
rem Resource compiler parameters
rem ************************************************************
set RC_COMPILER=rc /fo “%OUTDIR%mexversion.res”
set RC_LINKER=
set POSTLINK_CMDS=del “%OUTDIR%%MEX_NAME%.map”
set POSTLINK_CMDS1=del %LIB_NAME%.x
set POSTLINK_CMDS2=mt -outputresource:“%OUTDIR%%MEX_NAME%%MEX_EXT%”;2 -manifest “%OUTDIR%%MEX_NAME%%MEX_EXT%.manifest”
set POSTLINK_CMDS3=del “%OUTDIR%%MEX_NAME%%MEX_EXT%.manifest”
- Далее как в README Ñоздаем mexw32-файлы Ð´Ð»Ñ ÑƒÑÐºÐ¾Ñ€ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹
mex fft2_cuda.c -IF:\CUDA\include -LF:\CUDA\lib -lcudart -lcufft
mex fft2_cuda_sp_dp.c -IF:\CUDA\include -LF:\CUDA\lib -lcudart -lcufft
mex ifft2_cuda.c -IF:\CUDA\include -LF:\CUDA\lib -lcudart –lcufft
speed_fft
ЗдеÑÑŒ ура!!! Работает!!!
- ПриÑтупаем ко второй чаÑти. Сначала без CUDA
which Szeta
‘D:\Users\Vasiliy\Matlab\CUDA Experience\Matlab_CUDA_1.1\Szeta.m’
tic; FS_2Dturb(128,1,1,1); toc;
CFL =
0.1017
Gsqav =
1.1995
Elapsed time is 22.721960 seconds.
tic; FS_vortex; toc;
ans =
512
Elapsed time is 315.821864 seconds.
- Теперь Ñ Ð¸Ñпользованием видеокарты. ЗаменÑем в файле nvmexopts.bat параметры компилÑции (оÑбенное внимание обратите на то, что ‘/Zc:wchar_t-’ на ‘/Zc:wchar_t’, без Ñтого возникает куча ошибок). Мой nvmexopts.bat файл
@echo off
rem MSVC80OPTS.BAT
rem
rem Compile and link options used for building MEX-files
rem using the Microsoft Visual C++ compiler version 8.0
rem
rem $Revision: 1.1.10.2 $ $Date: 2006/06/23 19:04:53 $
rem
rem ************************************************************
rem General parameters
rem ************************************************************
set MATLAB=%MATLAB%
set VS80COMNTOOLS=%VS80COMNTOOLS%
set VSINSTALLDIR=F:\Program Files\Microsoft Visual Studio 9.0
set VCINSTALLDIR=%VSINSTALLDIR%\VC
set WINSDKDIR=C:\Program Files\Microsoft SDKs\Windows\V6.0A
set PATH=%VCINSTALLDIR%\BIN;%WINSDKDIR%\bin;%VSINSTALLDIR%\Common7\IDE;%VSINSTALLDIR%\SDK\v2.0\bin;%VSINSTALLDIR%\Common7\Tools;%VSINSTALLDIR%\Common7\Tools\bin;%VCINSTALLDIR%\VCPackages;%MATLAB_BIN%;%PATH%
set INCLUDE=%VCINSTALLDIR%\ATLMFC\INCLUDE;%VCINSTALLDIR%\INCLUDE;%WINSDKDIR%\INCLUDE;%VSINSTALLDIR%\SDK\v2.0\include;%INCLUDE%
set LIB=%VCINSTALLDIR%\ATLMFC\LIB;%VCINSTALLDIR%\LIB;%WINSDKDIR%\lib;%VSINSTALLDIR%\SDK\v2.0\lib;%MATLAB%\extern\lib\win32;%LIB%
set MW_TARGET_ARCH=win32
rem ************************************************************
rem Compiler parameters
rem ************************************************************
set COMPILER=nvcc
set COMPFLAGS=-c -D_WCHAR_T_DEFINED -Xcompiler “/c /Zp8 /GR /W3 /EHsc- /Zc:wchar_t /DMATLAB_MEX_FILE /nologo”
rem COMPFLAGS=-ccbin “F:\Program Files\Microsoft Visual Studio 9.0\VC\bin” -c -D_WCHAR_T_DEFINED -Xcompiler “/c /Zp8 /GR /W3 /EHsc- /Zc:wchar_t- /DMATLAB_MEX_FILE /nologo”
set OPTIMFLAGS=-D_WCHAR_T_DEFINED -Xcompiler “/MD /O2 /Oy- /DNDEBUG”
set DEBUGFLAGS=-D_WCHAR_T_DEFINED -Xcompiler “/MD /Zi /Fd”%OUTDIR%%MEX_NAME%%MEX_EXT%.pdb"
set NAME_OBJECT=-o
rem ************************************************************
rem Linker parameters
rem ************************************************************
set LIBLOC=%MATLAB%\extern\lib\win32\microsoft
set LINKER=link
rem set LINKER=nvcc
set LINKFLAGS=/dll /export:%ENTRYPOINT% /MAP /LIBPATH:“%LIBLOC%” libmx.lib libmex.lib libmat.lib /implib:%LIB_NAME%.x /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
set LINKOPTIMFLAGS=
set LINKDEBUGFLAGS=/DEBUG /PDB:“%OUTDIR%%MEX_NAME%%MEX_EXT%.pdb”
set LINK_FILE=
set LINK_LIB=
set NAME_OUTPUT=/out:“%OUTDIR%%MEX_NAME%%MEX_EXT%”
set RSP_FILE_INDICATOR=@
rem ************************************************************
rem Resource compiler parameters
rem ************************************************************
set RC_COMPILER=rc /fo “%OUTDIR%mexversion.res”
set RC_LINKER=
set POSTLINK_CMDS=del “%OUTDIR%%MEX_NAME%.map”
set POSTLINK_CMDS1=del %LIB_NAME%.x
set POSTLINK_CMDS2=mt -outputresource:“%OUTDIR%%MEX_NAME%%MEX_EXT%”;2 -manifest “%OUTDIR%%MEX_NAME%%MEX_EXT%.manifest”
set POSTLINK_CMDS3=del “%OUTDIR%%MEX_NAME%%MEX_EXT%.manifest”
- Далее
nvmex -f nvmexopts.bat Szeta.cu -IF:\cuda\include -LF:\cuda\lib -lcufft -lcudart
which Szeta
‘D:\Users\Vasiliy\Matlab\CUDA Experience\Matlab_CUDA_1.1\Szeta.mexw32’
tic; FS_2Dturb(128,1,1,1); toc;
CFL =
0.1017
Gsqav =
1.1995
Elapsed time is 13.644046 seconds.
tic; FS_vortex; toc;
ans =
512
Elapsed time is 85.913219 seconds.
Как видите даже на такой «Ñлабой» ÑиÑтеме довольно значительно возраÑтает производительноÑть.