Я попробовал в основном все, и я не могу получить vs2013 для компиляции и ссылки на библиотеку cusolver. Я перепробовал все примеры проектов, поставляемых с установочным пакетом cuda, и в основном все примеры работают нормально. Хотя нет образцов, использующих cusolver. Включаемые файлы работают просто отлично. Компоновщик ошибочен, и все остальные ссылки на cuda просто хороши. Я попытался добавить одну строку кода cusolver в прекрасно работающий пример cuda, и он сломался. Вот фрагмент кода:
#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, это было бы полезно)
РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ: Вы не должны включать дополнительные файлы .h или дополнительные библиотеки, добавляя дополнительные библиотеки или дополнительные каталоги включения в другие параметры компоновщика, такие как каталоги cudaLinker или vc ++.
Я только что проверил это на 64-битной Windows 7, сообщество Visual Studio 2013, CUDA 7.
Начните с открытия образца кода vectorAdd cuda. Убедитесь, что вы можете правильно построить этот код. (Это должен быть проект x64. CUDA 7 не поддерживает 32-битные проекты или операционные системы на Windows.) Если вы не можете построить это правильно, ваша проблема не имеет ничего общего с cusolver
Добавьте следующий заголовочный файл вверху vectorAdd.cu:
#include <cusolverDn.h>
Добавьте следующие две строки в начало main
Режим дня:
cusolverDnHandle_t my_handle;
cusolverDnCreate(&my_handle);
Перейдите в Project … vectorAdd Properties … Linker … Input … Дополнительные зависимости. В этом поле вы уже должны найти несколько библиотек, включая cudart_static.lib. Щелкните в этом поле, затем щелкните стрелку раскрывающегося меню справа, затем нажмите <Edit...>
Внизу списка библиотек в окне редактирования добавьте cusolver.lib
на своей собственной линии.
Перестройте проект.