Программа Matlab 2013a + MEX C

0

Я пытаюсь запустить программу, которая реализует kmeans, который можно вызвать из matlab2013a. Тем не менее, я получаю нерешенные внешние символы на них.

Error   10  error LNK2001: unresolved external symbol _mxCreateNumericMatrix_730    D:\Users\VinayB\Documents\Visual Studio 2013\Projects\kmeans_ba\kmeans_ba\kmeans_serial.obj kmeans_ba

Error   11  error LNK2001: unresolved external symbol _mxGetData    D:\Users\VinayB\Documents\Visual Studio 2013\Projects\kmeans_ba\kmeans_ba\kmeans_serial.obj kmeans_ba

Error   12  error LNK2001: unresolved external symbol _mxGetN   D:\Users\VinayB\Documents\Visual Studio 2013\Projects\kmeans_ba\kmeans_ba\kmeans_serial.obj kmeans_ba

Error   13  error LNK2001: unresolved external symbol _mxGetPr  D:\Users\VinayB\Documents\Visual Studio 2013\Projects\kmeans_ba\kmeans_ba\kmeans_serial.obj kmeans_ba

Error   14  error LNK2001: unresolved external symbol _mexPrintf    D:\Users\VinayB\Documents\Visual Studio 2013\Projects\kmeans_ba\kmeans_ba\kmeans_serial.obj kmeans_ba

Error   15  error LNK2001: unresolved external symbol _mxGetM   D:\Users\VinayB\Documents\Visual Studio 2013\Projects\kmeans_ba\kmeans_ba\kmeans_serial.obj kmeans_ba

Я включил соответствующие каталоги и файлы lib.

Библиотечные каталоги

\extern\lib\win64\microsoft\extern\lib\win32\microsoft

Включить каталоги

<matlab dir>\extern\include
<matlab dir>\extern\include\win64

Дополнительные зависимости

cudart.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib
libemlrt.lib
libeng.lib
libfixedpoint.lib
libmat.lib
libmex.lib
libmwblas.lib
libmwblascompat32.lib
libmwcgir_construct.lib
libmwimreconstruct.lib
libmwimregionalmax.lib
libmwippreconstruct.lib
libmwlapack.lib
libmwmathutil.lib
libmwrtiostreamutils.lib
libmwservices.lib
libmwsilpilprofiling.lib
libmwslexec_parallel.lib
libmwsl_fileio.lib
libmwsl_solver_rtw.lib
libmx.lib
libut.lib
mclbase.lib
mclcommain.lib
mclmcr.lib
mclmcrrt.lib
mclxlmain.lib
ne_mli.lib
ne_rtl.lib
physmod_common_foundation_core_util.lib
rtwcg.lib
SimulinkBlock.lib
  • 0
    как выглядит ваш источник? как вы его компилируете?
  • 2
    Вам не нужно вручную перечислять какие-либо из этих зависимостей. Утилита MATLAB "mex" является способом компиляции этого программного обеспечения.
Показать ещё 3 комментария
Теги:
visual-studio-2013

1 ответ

1

Итак, вот список всех включенных путей и зависимостей библиотек, необходимых для его создания для Windows 8 x64 с CudaToolkit NVCC и MEX DLL, используя VS2013

Включает:

C:\Program Files\MATLAB\R2014b\extern\include; $ (IncludePath)% (дополнительныеIncludeDirectories) $ (CudaToolkitIncludeDir)

Libs:

C:\Program Files\MATLAB\R2014b\extern\lib\win64\microsoft
$ (CudaToolkitLibDir)

libmx.lib libmat.lib libmex.lib cublas.lib cuda.lib cudart.lib cufft.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid. lib odbc32.lib odbccp32.lib

Поскольку правильная настройка NVCC с VS довольно трудоемкая, я начал с примера вектора Nsight Visual Studio CUDA и добавил файлы libs вручную в соответствии с make файлом. Помимо -largeArrayDims, который является признаком для компилятора использовать 64-битную адресацию. При использовании 64-битных библиотек по умолчанию выбран. После удаления конфигураций Win32 и Debug я использовал конфигурацию Release x64 для компиляции файлов MEX.

В основном есть 2 основных проекта cudaKmeans (с использованием.cu) & kmeans_serial (с использованием.c), скомпилированных в обычном порядке, а затем с директивой препроцессора -D TIMEONLY для дополнительного кода синхронизации. Это означает, что нам нужно в общей сложности 4 проекта сборки с cudaKmeans_Timedemo & kmeans_serial_Timedemo. Я использовал 4 каталога для этих 4 проектов, чтобы генерировать 4 файла mex (с 4 файлами def) в каталоге bin с файлом решения (для создания всех этих проектов) в основном каталоге.

Результаты испытаний для cudaKmeans: Изображение 174551

Прибыль для cuda против c: Изображение 174551 Обратите внимание, что из-за нехватки памяти нет усиления. Предварительная программа CPU с оптимизацией C не несет ответственности за отсутствие явных преимуществ при использовании CUDA. ЦП - это серверный класс Xeon E5 с большим количеством кеша, поэтому результаты показывают, что процессор работает быстрее. Я использовал 860GTX.

Вот выигрыш против Matlab: Изображение 174551

Совсем смешанная сумка. Честно говоря, время кажется ошеломляющим. Немного случайный из-за того, что синхронизация времени разрешена под окнами. В тестовом коде использовались универсальные таймеры мусора, а не RDTSC, поэтому я не стал бы слишком беспокоиться об этом.

Здесь или здесь есть ссылка на модифицированный код и решение VS. Я использовал CudaToolkit 6.5 и MATLAB2014b для проектов, но изменение его на другой MATLAB ver должно быть очень простым. Обратите внимание, что в проектах я выбрал 3.0 в качестве дуги CUDA (по умолчанию было 2.0). Возможно, вы захотите изменить это, если ваш графический процессор имеет оценку вычислений <3.0. Эта библиотека и тестовый код немного ошибочны и не смотрят "качество продукции". Возможно, вам лучше использовать Matlab kmeans, ускоренный Parallel Computing Toolbox, или это или желательно это

Ещё вопросы

Сообщество Overcoder
Наверх
Меню