Visual Studio 2013 IDE를 사용하여 CUDA Mex 파일 컴파일

Syed Alam Abbas

Visual Studio 2013을 사용하여 MATLAB 용 CUDA mex 파일 인 다음 프로그램을 컴파일하려고합니다. MATLAB의 공식 웹 사이트에는 CUDA mex 용이 아닌 C ++ Mex 파일 용으로 만 제공
되는 지침이 있습니다.
그래서 Mathworks의 공식 지침을 따르면서 프로젝트 설정을 다음과 같이 추가로 변경했습니다.
1. 설치된 CUDA 6.5 런타임과 함께 Visual studio 프로젝트를 사용하여 프로젝트를 만들었습니다.
2. 내 VS 프로젝트의 링커 속성에 libs (libmx.lib, libmex.lib, libmat.lib, gpu.lib)가
포함되었습니다. 3. 디렉터리 포함 추가 (MATLABROOT) \ toolbox \ distcomp \ gpu \ extern \ include ;

여전히 해결되지 않은 외부 기호 오류가 많이 발생합니다. VS IDE를 사용하여 CUDA Mex를 컴파일하는 데 사용할 수있는 공식 문서가 없기 때문에이를 수행하는 올바른 방법은 무엇입니까? 누구든지 이것을 수행하는 적절한 방법이 무엇인지 알고 있습니까? 확실히 나는 일부 설정을 놓치고 있습니다. 누군가 제발 도와 줄 수 있습니까?

내 프로그램 (MATLAB 예제 파일 mexGPUExample.cu에서 복사)은 다음과 같습니다.

   **
/*
* Example of how to use the mxGPUArray API in a MEX file.  This example shows
* how to write a MEX function that takes a gpuArray input and returns a
* gpuArray output, e.g. B=mexFunction(A).
*
* Copyright 2012 The MathWorks, Inc.
*/
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "mex.h"
#include "gpu/mxGPUArray.h"

/*
* Device code
*/
void __global__ TimesTwo(double const * const A,
    double * const B,
    int const N)
{
    /* Calculate the global linear index, assuming a 1-d grid. */
    int const i = blockDim.x * blockIdx.x + threadIdx.x;
    if (i < N) {
        B[i] = 2.0 * A[i];
    }
}

/*
* Host code
*/

void mexFunction(int nlhs, mxArray *plhs[],
    int nrhs, mxArray const *prhs[])
{
    /* Declare all variables.*/
    mxGPUArray const *A;
    mxGPUArray *B;
    double const *d_A;
    double *d_B;
    int N;
    char const * const errId = "parallel:gpu:mexGPUExample:InvalidInput";
    char const * const errMsg = "Invalid input to MEX file.";

    /* Choose a reasonably sized number of threads for the block. */
    int const threadsPerBlock = 256;
    int blocksPerGrid;

    /* Initialize the MathWorks GPU API. */
    mxInitGPU();

    /* Throw an error if the input is not a GPU array. */
    if ((nrhs != 1) || !(mxIsGPUArray(prhs[0]))) {
        mexErrMsgIdAndTxt(errId, errMsg);
    }

    A = mxGPUCreateFromMxArray(prhs[0]);

    /*
    * Verify that A really is a double array before extracting the pointer.
    */
    if (mxGPUGetClassID(A) != mxDOUBLE_CLASS) {
        mexErrMsgIdAndTxt(errId, errMsg);
    }

    /*
    * Now that we have verified the data type, extract a pointer to the input
    * data on the device.
    */
    d_A = (double const *)(mxGPUGetDataReadOnly(A));

    /* Create a GPUArray to hold the result and get its underlying pointer. */
    B = mxGPUCreateGPUArray(mxGPUGetNumberOfDimensions(A),
        mxGPUGetDimensions(A),
        mxGPUGetClassID(A),
        mxGPUGetComplexity(A),
        MX_GPU_DO_NOT_INITIALIZE);
    d_B = (double *)(mxGPUGetData(B));

    /*
    * Call the kernel using the CUDA runtime API. We are using a 1-d grid here,
    * and it would be possible for the number of elements to be too large for
    * the grid. For this example we are not guarding against this possibility.
    */
    N = (int)(mxGPUGetNumberOfElements(A));
    blocksPerGrid = (N + threadsPerBlock - 1) / threadsPerBlock;
    TimesTwo <<< blocksPerGrid, threadsPerBlock >>>(d_A, d_B, N);

    /* Wrap the result up as a MATLAB gpuArray for return. */
    plhs[0] = mxGPUCreateMxArrayOnGPU(B);

    /*
    * The mxGPUArray pointers are host-side structures that refer to device
    * data. These must be destroyed before leaving the MEX function.
    */
    mxGPUDestroyGPUArray(A);
    mxGPUDestroyGPUArray(B);
}

프로그램을 컴파일하려고 할 때 발생하는 오류 :

Error   66  error LNK1120: 64 unresolved externals  
Error   64  error LNK2001: unresolved external symbol _fltused  
Error   62  error LNK2001: unresolved external symbol _RTC_InitBase 
Error   63  error LNK2001: unresolved external symbol _RTC_Shutdown 
Error   65  error LNK2001: unresolved external symbol mainCRTStartup    
Error   58  error LNK2019: unresolved external symbol __imp__dsign referenced in function "bool __cdecl signbit(double)" (?signbit@@YA_NN@Z)    
Error   60  error LNK2019: unresolved external symbol __imp__fdsign referenced in function "bool __cdecl signbit(float)" (?signbit@@YA_NM@Z)    
Error   61  error LNK2019: unresolved external symbol __imp__hypotf referenced in function hypotf   
Error   59  error LNK2019: unresolved external symbol __imp__ldsign referenced in function "bool __cdecl signbit(long double)" (?signbit@@YA_NO@Z)  
Error   39  error LNK2019: unresolved external symbol __imp_acosf referenced in function "float __cdecl acos(float)" (?acos@@YAMM@Z)    
Error   12  error LNK2019: unresolved external symbol __imp_acoshf referenced in function "float __cdecl acosh(float)" (?acosh@@YAMM@Z) 
Error   40  error LNK2019: unresolved external symbol __imp_asinf referenced in function "float __cdecl asin(float)" (?asin@@YAMM@Z)    
Error   13  error LNK2019: unresolved external symbol __imp_asinhf referenced in function "float __cdecl asinh(float)" (?asinh@@YAMM@Z) 
Error   42  error LNK2019: unresolved external symbol __imp_atan2f referenced in function "float __cdecl atan2(float,float)" (?atan2@@YAMMM@Z)  
Error   41  error LNK2019: unresolved external symbol __imp_atanf referenced in function "float __cdecl atan(float)" (?atan@@YAMM@Z)    
Error   14  error LNK2019: unresolved external symbol __imp_atanhf referenced in function "float __cdecl atanh(float)" (?atanh@@YAMM@Z) D:\GitHub\arrayfire-windows-scripts\SimpleCUDAProj\CUDA_Mex\CUDA_Mex\CUDA_Times_Two.cu.obj  CUDA_Mex
Error   29  error LNK2019: unresolved external symbol __imp_cbrtf referenced in function "float __cdecl cbrt(float)" (?cbrt@@YAMM@Z)    
Error   55  error LNK2019: unresolved external symbol __imp_ceilf referenced in function "float __cdecl ceil(float)" (?ceil@@YAMM@Z)    
Error   36  error LNK2019: unresolved external symbol __imp_copysignf referenced in function "float __cdecl copysign(float,float)" (?copysign@@YAMMM@Z) 
Error   43  error LNK2019: unresolved external symbol __imp_cosf referenced in function "float __cdecl cos(float)" (?cos@@YAMM@Z)   
Error   46  error LNK2019: unresolved external symbol __imp_coshf referenced in function "float __cdecl cosh(float)" (?cosh@@YAMM@Z)    
Error   33  error LNK2019: unresolved external symbol __imp_erfcf referenced in function "float __cdecl erfc(float)" (?erfc@@YAMM@Z)    
Error   32  error LNK2019: unresolved external symbol __imp_erff referenced in function "float __cdecl erf(float)" (?erf@@YAMM@Z)   
Error   8   error LNK2019: unresolved external symbol __imp_exp2f referenced in function "float __cdecl exp2(float)" (?exp2@@YAMM@Z)    
Error   49  error LNK2019: unresolved external symbol __imp_expf referenced in function "float __cdecl exp(float)" (?exp@@YAMM@Z)   
Error   9   error LNK2019: unresolved external symbol __imp_expm1f referenced in function "float __cdecl expm1(float)" (?expm1@@YAMM@Z) 
Error   28  error LNK2019: unresolved external symbol __imp_fdimf referenced in function "float __cdecl fdim(float,float)" (?fdim@@YAMMM@Z) 
Error   56  error LNK2019: unresolved external symbol __imp_floorf referenced in function "float __cdecl floor(float)" (?floor@@YAMM@Z) 
Error   38  error LNK2019: unresolved external symbol __imp_fmaf referenced in function "float __cdecl fma(float,float,float)" (?fma@@YAMMMM@Z) 
Error   7   error LNK2019: unresolved external symbol __imp_fmaxf referenced in function "float __cdecl fmax(float,float)" (?fmax@@YAMMM@Z) 
Error   6   error LNK2019: unresolved external symbol __imp_fminf referenced in function "float __cdecl fmin(float,float)" (?fmin@@YAMMM@Z) 
Error   57  error LNK2019: unresolved external symbol __imp_fmodf referenced in function "float __cdecl fmod(float,float)" (?fmod@@YAMMM@Z) 
Error   19  error LNK2019: unresolved external symbol __imp_frexp referenced in function frexpf 
Error   17  error LNK2019: unresolved external symbol __imp_ilogbf referenced in function "int __cdecl ilogb(float)" (?ilogb@@YAHM@Z)   
Error   15  error LNK2019: unresolved external symbol __imp_ldexp referenced in function ldexpf 
Error   34  error LNK2019: unresolved external symbol __imp_lgammaf referenced in function "float __cdecl lgamma(float)" (?lgamma@@YAMM@Z)  
Error   25  error LNK2019: unresolved external symbol __imp_llrintf referenced in function "__int64 __cdecl llrint(float)" (?llrint@@YA_JM@Z)   
Error   22  error LNK2019: unresolved external symbol __imp_llroundf referenced in function "__int64 __cdecl llround(float)" (?llround@@YA_JM@Z)    
Error   51  error LNK2019: unresolved external symbol __imp_log10f referenced in function "float __cdecl log10(float)" (?log10@@YAMM@Z) 
Error   11  error LNK2019: unresolved external symbol __imp_log1pf referenced in function "float __cdecl log1p(float)" (?log1p@@YAMM@Z) 
Error   10  error LNK2019: unresolved external symbol __imp_log2f referenced in function "float __cdecl log2(float)" (?log2@@YAMM@Z)    
Error   16  error LNK2019: unresolved external symbol __imp_logbf referenced in function "float __cdecl logb(float)" (?logb@@YAMM@Z)    
Error   50  error LNK2019: unresolved external symbol __imp_logf referenced in function "float __cdecl log(float)" (?log@@YAMM@Z)   
Error   24  error LNK2019: unresolved external symbol __imp_lrintf referenced in function "long __cdecl lrint(float)" (?lrint@@YAJM@Z)  
Error   21  error LNK2019: unresolved external symbol __imp_lroundf referenced in function "long __cdecl lround(float)" (?lround@@YAJM@Z)   
Error   52  error LNK2019: unresolved external symbol __imp_modff referenced in function "float __cdecl modf(float,float *)" (?modf@@YAMMPEAM@Z)    
Error   26  error LNK2019: unresolved external symbol __imp_nearbyintf referenced in function "float __cdecl nearbyint(float)" (?nearbyint@@YAMM@Z) 
Error   37  error LNK2019: unresolved external symbol __imp_nextafterf referenced in function "float __cdecl nextafter(float,float)" (?nextafter@@YAMMM@Z)  
Error   53  error LNK2019: unresolved external symbol __imp_powf referenced in function "float __cdecl pow(float,float)" (?pow@@YAMMM@Z)    
Error   30  error LNK2019: unresolved external symbol __imp_remainderf referenced in function "float __cdecl remainder(float,float)" (?remainder@@YAMMM@Z)  
Error   31  error LNK2019: unresolved external symbol __imp_remquof referenced in function "float __cdecl remquo(float,float,int *)" (?remquo@@YAMMMPEAH@Z) 
Error   23  error LNK2019: unresolved external symbol __imp_rintf referenced in function "float __cdecl rint(float)" (?rint@@YAMM@Z)    
Error   20  error LNK2019: unresolved external symbol __imp_roundf referenced in function "float __cdecl round(float)" (?round@@YAMM@Z) 
Error   18  error LNK2019: unresolved external symbol __imp_scalblnf referenced in function "float __cdecl scalbln(float,long)" (?scalbln@@YAMMJ@Z) 
Error   44  error LNK2019: unresolved external symbol __imp_sinf referenced in function "float __cdecl sin(float)" (?sin@@YAMM@Z)   
Error   47  error LNK2019: unresolved external symbol __imp_sinhf referenced in function "float __cdecl sinh(float)" (?sinh@@YAMM@Z)    
Error   54  error LNK2019: unresolved external symbol __imp_sqrtf referenced in function "float __cdecl sqrt(float)" (?sqrt@@YAMM@Z)    
Error   45  error LNK2019: unresolved external symbol __imp_tanf referenced in function "float __cdecl tan(float)" (?tan@@YAMM@Z)   
Error   48  error LNK2019: unresolved external symbol __imp_tanhf referenced in function "float __cdecl tanh(float)" (?tanh@@YAMM@Z)    
Error   35  error LNK2019: unresolved external symbol __imp_tgammaf referenced in function "float __cdecl tgamma(float)" (?tgamma@@YAMM@Z)
Error   27  error LNK2019: unresolved external symbol __imp_truncf referenced in function "float __cdecl trunc(float)" (?trunc@@YAMM@Z) 
Error   2   error LNK2019: unresolved external symbol atexit referenced in function "void __cdecl __nv_cudaEntityRegisterCallback(void * *)" (?__nv_cudaEntityRegisterCallback@@YAXPEAPEAX@Z)   
Error   5   error LNK2019: unresolved external symbol fabs referenced in function "double __cdecl abs(double)" (?abs@@YANN@Z)   
Error   3   error LNK2019: unresolved external symbol labs referenced in function "long __cdecl abs(long)" (?abs@@YAJJ@Z)   
Error   4   error LNK2019: unresolved external symbol llabs referenced in function "__int64 __cdecl abs(__int64)" (?abs@@YA_J_J@Z)
chappjc

귀하의 경우 주요 문제는 잘못된 프로젝트 유형을 선택한 것 같습니다. 아마도 일반 Win32 프로젝트 (DLL 옵션 포함) 대신 MFC DLL을 사용하고있을 것입니다. 그러나 (a) mxGPUArrayParallel Computing Toolbox의 일부인 유형을 사용 하고 (b) NVIDIA CUDA SDK 컴파일러로 컴파일 된 CUDA 커널 (사용자 지정 GPU 장치 코드)을 포함하는 MEX 파일을 빌드하는 데 더 많은 설정이 필요 합니다. nvcc.

일반적인 MEX 관련 설정을 구성했다고 가정하면 CUDA "Build Customization"을 선택하여 .cu 파일의 컴파일러로 nvcc를 구성합니다. 그런 다음 "상위 또는 프로젝트 기본값에서 상속"상자를 선택하여 링크 된 모든 표준 Windows 라이브러리 종속성이 있는지 확인하면서 CUDA 런타임 라이브러리를 지정해야 할 수도 있습니다.

여기에 이미지 설명 입력

이런 식으로 잘 컴파일되고 연결되었습니다.

그러나 여기에 설명 된대로 속성 시트 (MATLAB.props)를 사용하여 Visual Studio 프로젝트 설정했습니다 . 그러면 위에서 언급 한 표준 MEX 설정이 자동으로 적용됩니다. 편집 : 속성 시트에 Parallel Computing Toolbox 지원을 추가했습니다. 위에 표시된대로 cudart_static.lib 부분을 추가하고 CUDA 빌드 사용자 정의를 선택하여 nvcc로 .cu 파일을 컴파일하기 만하면됩니다.

빌드 사용자 지정을 통해 CUDA 6.5 SDK 설정 추가. 먼저 프로젝트 (솔루션 아님)를 마우스 오른쪽 버튼으로 클릭합니다.

여기에 이미지 설명 입력

사용하려는 CUDA 사용자 정의를 확인하십시오 (이 경우 SDK 6.5).

여기에 이미지 설명 입력

그리고 이러한 필드를 편집하고 싶은 경우에 대비하여 절대 편집하지 마십시오.

여기에 이미지 설명 입력

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Visual Studio 2013 IDE를 사용하여 CUDA Mex 파일 컴파일

분류에서Dev

Grunt grunt-contrib-less)를 사용하여 Visual Studio 2013에서 Bootstrap 3.1 LESS 컴파일

분류에서Dev

무엇입니까? 이 컴파일러 오류를 보여주는 @ 기호? -Visual Studio 2013 컴파일러

분류에서Dev

ASPNETCOMPILER가 x64 컴파일러를 사용하여 미리 컴파일 할 수 있도록 Visual Studio 2013 구성

분류에서Dev

Visual Studio 2013에서 Mono로 컴파일

분류에서Dev

Visual Studio 2013을 사용하여 Qt 5.4.1을 컴파일하는 동안 발생하는 문제

분류에서Dev

macOS에서 clang ++를 사용하여 Visual Studio Code의 여러 .cpp 파일 컴파일

분류에서Dev

Visual Studio devolopers 명령 프롬프트를 사용하여 여러 소스 파일 프로그램 C ++ 컴파일

분류에서Dev

Visual Studio 2015 Win64를 사용하여 MySQL 커넥터 컴파일

분류에서Dev

Visual Studio 2013 컴파일 오류-파일 누락

분류에서Dev

Visual Studio 2017의 컴파일러를 사용하여 C ++ 17에서 람다를 사용하여 Kevlin Henney의 Fizzbuzz 컴파일

분류에서Dev

Visual Studio Code를 통해 C ++ 파일을 컴파일하는 방법

분류에서Dev

여러 mex 함수를 컴파일하는 Makefile

분류에서Dev

다운로드 한 Visual Studio를 사용하여 C ++ 소스 코드를 컴파일하는 방법

분류에서Dev

명확하게 형식화 된 Typescript를 사용한 Visual Studio 컴파일 문제

분류에서Dev

g ++ 컴파일러를 사용하여 Visual Studio에서 C ++ 프로그램을 컴파일하면 끝에 %가 생성됩니다.

분류에서Dev

Visual Studio 2013에서 컴파일러 오류 언어 변경

분류에서Dev

Visual Studio 2013에서 이전 C ++ 코드 컴파일

분류에서Dev

Visual Studio 2013으로 C ++ 11 코드 컴파일

분류에서Dev

Visual Studio 2013으로 C ++ 11 코드 컴파일

분류에서Dev

Visual Studio 2013에서 간단한 C 코드 컴파일

분류에서Dev

Visual Studio / C ++에서 fbx SDK를 사용하여 프로젝트를 빌드 할 때 오류 컴파일

분류에서Dev

Visual Studio 2017 RC에서 HHC.EXE를 사용하여 HHP를 CHM으로 컴파일 할 수 없습니다.

분류에서Dev

Visual Studio에서 libuv를 사용하여 간단한 C ++ 프로젝트 컴파일

분류에서Dev

CMake를 사용하여 C ++를 CUDA로 컴파일하는 방법

분류에서Dev

Visual Studio 2013에서 ASPX 파일과 함께 .NET 4를 사용하도록 강제

분류에서Dev

Visual Studio로 NGINX 컴파일

분류에서Dev

Visual Studio로 Cling 컴파일

분류에서Dev

Visual Studio 2013 C ++ 컴파일러에서 출력 화면이 사라지는 것을 방지하는 방법

Related 관련 기사

  1. 1

    Visual Studio 2013 IDE를 사용하여 CUDA Mex 파일 컴파일

  2. 2

    Grunt grunt-contrib-less)를 사용하여 Visual Studio 2013에서 Bootstrap 3.1 LESS 컴파일

  3. 3

    무엇입니까? 이 컴파일러 오류를 보여주는 @ 기호? -Visual Studio 2013 컴파일러

  4. 4

    ASPNETCOMPILER가 x64 컴파일러를 사용하여 미리 컴파일 할 수 있도록 Visual Studio 2013 구성

  5. 5

    Visual Studio 2013에서 Mono로 컴파일

  6. 6

    Visual Studio 2013을 사용하여 Qt 5.4.1을 컴파일하는 동안 발생하는 문제

  7. 7

    macOS에서 clang ++를 사용하여 Visual Studio Code의 여러 .cpp 파일 컴파일

  8. 8

    Visual Studio devolopers 명령 프롬프트를 사용하여 여러 소스 파일 프로그램 C ++ 컴파일

  9. 9

    Visual Studio 2015 Win64를 사용하여 MySQL 커넥터 컴파일

  10. 10

    Visual Studio 2013 컴파일 오류-파일 누락

  11. 11

    Visual Studio 2017의 컴파일러를 사용하여 C ++ 17에서 람다를 사용하여 Kevlin Henney의 Fizzbuzz 컴파일

  12. 12

    Visual Studio Code를 통해 C ++ 파일을 컴파일하는 방법

  13. 13

    여러 mex 함수를 컴파일하는 Makefile

  14. 14

    다운로드 한 Visual Studio를 사용하여 C ++ 소스 코드를 컴파일하는 방법

  15. 15

    명확하게 형식화 된 Typescript를 사용한 Visual Studio 컴파일 문제

  16. 16

    g ++ 컴파일러를 사용하여 Visual Studio에서 C ++ 프로그램을 컴파일하면 끝에 %가 생성됩니다.

  17. 17

    Visual Studio 2013에서 컴파일러 오류 언어 변경

  18. 18

    Visual Studio 2013에서 이전 C ++ 코드 컴파일

  19. 19

    Visual Studio 2013으로 C ++ 11 코드 컴파일

  20. 20

    Visual Studio 2013으로 C ++ 11 코드 컴파일

  21. 21

    Visual Studio 2013에서 간단한 C 코드 컴파일

  22. 22

    Visual Studio / C ++에서 fbx SDK를 사용하여 프로젝트를 빌드 할 때 오류 컴파일

  23. 23

    Visual Studio 2017 RC에서 HHC.EXE를 사용하여 HHP를 CHM으로 컴파일 할 수 없습니다.

  24. 24

    Visual Studio에서 libuv를 사용하여 간단한 C ++ 프로젝트 컴파일

  25. 25

    CMake를 사용하여 C ++를 CUDA로 컴파일하는 방법

  26. 26

    Visual Studio 2013에서 ASPX 파일과 함께 .NET 4를 사용하도록 강제

  27. 27

    Visual Studio로 NGINX 컴파일

  28. 28

    Visual Studio로 Cling 컴파일

  29. 29

    Visual Studio 2013 C ++ 컴파일러에서 출력 화면이 사라지는 것을 방지하는 방법

뜨겁다태그

보관