gpt4 book ai didi

c++ - Matlab 2013a + MEX C 程序

转载 作者:行者123 更新时间:2023-11-28 06:30:54 25 4
gpt4 key购买 nike

我正在尝试运行一个可以从 matlab2013a 调用的实现 kmeans 的程序。但是,我在这些上得到了未解析的外部符号..

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 文件..

图书馆目录

\外部\lib\win64\微软\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

最佳答案

因此,这是使用 VS2013 使用 CudaToolkit NVCC 和 MEX DLL 为 Windows 8 x64 构建此文件所需的所有包含路径和库依赖项的列表

包括:

C:\Program Files\MATLAB\R2014b\extern\include;$(IncludePath)%(AdditionalIncludeDirectories) $(CudaToolkitIncludeDir)

图书馆:

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

由于使用 VS 正确设置 NVCC 非常费力,我开始使用 Nsight Visual Studio CUDA vector 示例并根据 makefile 手动添加库。除了 -largeArrayDims 之外,它指示编译器使用 64 位寻址。当使用 64 位库时,这是默认选择的。删除 Win32 和调试配置后,我使用 Release x64 配置编译 MEX 文件。

基本上有 2 个主要项目 cudaKmeans(使用 .cu)和 kmeans_serial(使用 .c)正常编译,然后使用 -D TIMEONLY 预处理器指令进行额外计时代码。这意味着我们总共需要 4 个带有 cudaKmeans_Timedemokmeans_serial_Timedemo 的构建项目。我为这 4 个项目使用了 4 个目录,在 bin 目录中生成 4 个 mex 文件(带有 4 个 def 文件),并在主目录中生成解决方案文件(用于构建所有这些项目)。

cudaKmeans 的测试结果: cudaKmeans

cuda 相对于 c 的优势: cgains请注意,由于内存开销,没有任何增益。使用 CUDA 时,具有 C 优化的 CPU 预取器不会带来明显的 yield 。 CPU 是具有大量缓存的服务器级至强 E5,这就是结果显示 CPU 更快的原因。我使用的是 860GTX。

以下是相对于 Matlab 的 yield : matlab gains

相当复杂。老实说,时机似乎不对。由于在 Windows 下解决计时的方式,有点随机。测试代码使用的是垃圾通用计时器而不是 RDTSC,所以我不会太担心这一点。

Herehere是修改后的代码和VS解决方案的链接。我在项目中使用了 CudaToolkit 6.5 和 MATLAB2014b,但将其更改为不同的 MATLAB 版本应该非常容易。请注意,在项目中我选择了 3.0 作为 CUDA 架构(默认为 2.0)。如果您的 GPU 的计算分数 < 3.0,您可能想要更改它。这个库和测试代码有点错误,看起来不像“生产质量”。您最好使用由 Parallel Computing Toolbox 或 this 加速的 Matlab kmeans或者最好是 this

关于c++ - Matlab 2013a + MEX C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27609730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com