0

私は基本的にすべてを試しましたが、vs2013 をコンパイルして cusolver ライブラリに対してリンクすることができません。cuda インストール パッケージに付属するすべてのサンプル プロジェクトを試しましたが、基本的にすべてのサンプルが正常に動作します。cusolver を使用したサンプルはありませんが。インクルードファイルは問題なく動作します。リンカにエラーがあり、他のすべてのcuda関連のリンクは問題ありません。完全に機能するcudaサンプルに1行のcusolverコードを追加しようとしましたが、壊れました。コード スニペットは次のとおりです。

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "cusolver_common.h"
#include "cusolverDn.h"
#include <stdio.h>

cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size);

__global__ void addKernel(int *c, const int *a, const int *b)
{
    int i = threadIdx.x;
    c[i] = a[i] + b[i];
}

int main()
{
    cusolverDnCreate(new cusolverDnHandle_t);

    return 0;
}

ビルド出力は次のとおりです。

1>------ Build started: Project: The cudan, Configuration: Release x64 ------
1>  Compiling CUDA source file kernel.cu...
1>  
1>  c:\Users\Gdizzle\documents\visual studio 2013\Projects\The cudan\The cudan>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include"     --keep-dir x64\Release -maxrregcount=0  --machine 64 --compile -cudart static     -DWIN32 -DWIN64 -DNDEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /O2 /Zi  /MD  " -o x64\Release\kernel.cu.obj "c:\Users\Gdizzle\documents\visual studio 2013\Projects\The cudan\The cudan\kernel.cu" 
1>  kernel.cu
1>kernel.cu.obj : error LNK2001: unresolved external symbol cusolverDnCreate
1>c:\users\gdizzle\documents\visual studio 2013\Projects\The cudan\x64\Release\The cudan.exe : fatal error LNK1120: 1 unresolved externals

プロジェクト プロパティ -> vc++ およびリンカー オプションにディレクトリを追加しようとしましたが、役に立ちませんでした。何か案は?この1つのライブラリが機能しないのはとても奇妙です。

(また、GPUプログラミングを使用して最小二乗法で連立方程式を解く方法について他のアイデアがあれば、それは役に立ちます)

編集の更新: cudaLinker や vc++ ディレクトリなどの他のリンカー オプションに追加のライブラリまたは追加のインクルード ディレクトリを追加して、追加の .h ファイルや追加のライブラリを含めないでください。

4

1 に答える 1

3

Windows 7 64 ビット、Visual Studio 2013 Community、CUDA 7 でこれをテストしました。

  1. vectorAdd cuda サンプル コードを開くことから始めます。このコードを正しくビルドできることを確認してください。(x64 プロジェクトである必要があります 。CUDA 7 は 32 ビット プロジェクトまたは Windows 上のオペレーティング システムをサポートしていません。 ) これを正しくビルドできない場合、問題は cusolver とは関係ありません。

  2. 次のヘッダー ファイルを vectorAdd.cu の先頭に追加します。

    #include <cusolverDn.h>
    
  3. mainルーチンの先頭に次の 2 行を追加します。

    cusolverDnHandle_t my_handle;
    cusolverDnCreate(&my_handle);
    
  4. Project...vectorAdd Properties...Linker...Input...Additional Dependencies に移動します。このフィールドには、cudart_static.lib を含む多数のライブラリが既にあるはずです。このフィールドをクリックし、右側のドロップダウン メニューの矢印をクリックしてから、[<Edit...> 編集ウィンドウのライブラリ リストの一番下にあるcusolver.lib行に追加] をクリックします。

  5. プロジェクトを再構築します。

于 2015-05-23T23:49:04.637 に答える