Ошибка связывания CUDA – Visual Express 2008 – nvcc фатальный из-за (нулевого) файла конфигурации

Я искал экстенсивно для возможного решения моей ошибки за последние 2 недели. Я успешно установил 64-разрядный компилятор Cuda (инструменты) и SDK, а также 64-разрядную версию Visual Studio Express 2008 и Windows 7 SDK с Framework 3.5. Я использую Windows XP 64-bit. Я подтвердил, что VSE может скомпилировать в 64-разрядной версии, поскольку у меня есть все доступные мне 64-битные параметры, используя шаги на следующем веб-сайте: (поскольку Visual Express по сути не включает 64-разрядные пакеты)

http://jenshuebel.wordpress.com/2009/02/12/visual-c-2008-express-edition-and-64-bit-targets/

Обновления реестра для 64-разрядной установки находятся в комментарии пользователя на той же странице, что и указанная выше ссылка.

Я подтвердил 64-битную компиляцию, так как «x64» доступен из выпадающего меню в разделе «Инструменты-> Параметры-> VC ++-каталоги», а компиляция в 64-разрядной версии не приводит к тому, что весь проект «пропущен», , Я включил все необходимые каталоги для 64-битных инструментов cuda, 64 SDK и Visual Express (\ VC \ bin \ amd64).

Вот сообщение об ошибке, которое я получаю при попытке скомпилировать в 64-разрядной версии:

1>------ Build started: Project: New, Configuration: Release x64 ------ 1>Compiling with CUDA Build Rule... 1>"C:\CUDA\bin64\nvcc.exe" -arch sm_10 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin" -Xcompiler "/EHsc /W3 /nologo /O2 /Zi /MT " -maxrregcount=32 --compile -o "x64\Release\template.cu.obj" "c:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK\C\src\CUDA_Walkthrough_DeviceKernels\template.cu" 1>nvcc fatal : Visual Studio configuration file '(null)' could not be found for installation at 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin/../..' 1>Linking... 1>LINK : fatal error LNK1181: cannot open input file '.\x64\Release\template.cu.obj' 1>Build log was saved at "file://c:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\New\New\x64\Release\BuildLog.htm" 1>New - 1 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Вот простой код, который я пытаюсь скомпилировать / запустить в 64-разрядной версии:

 #include  #include  #include  #include  #include  void mypause () { printf ( "Press [Enter] to continue . . ." ); fflush ( stdout ); getchar(); } __global__ void VecAdd1_Kernel(float* A, float* B, float* C, int N) { int i = blockDim.x*blockIdx.x+threadIdx.x; if (i<N) C[i] = A[i] + B[i]; //result should be a 16x1 array of 250s } __global__ void VecAdd2_Kernel(float* B, float* C, int N) { int i = blockDim.x*blockIdx.x+threadIdx.x; if (i<N) C[i] = C[i] + B[i]; //result should be a 16x1 array of 400s } int main() { int N = 16; float A[16];float B[16]; size_t size = N*sizeof(float); for(int i=0; i<N; i++) { A[i] = 100.0; B[i] = 150.0; } // Allocate input vectors h_A and h_B in host memory float* h_A = (float*)malloc(size); float* h_B = (float*)malloc(size); float* h_C = (float*)malloc(size); //Initialize Input Vectors memset(h_A,0,size);memset(h_B,0,size); h_A = A;h_B = B; printf("SUM = %f\n",A[1]+B[1]); //simple check for initialization //Allocate vectors in device memory float* d_A; cudaMalloc((void**)&d_A,size); float* d_B; cudaMalloc((void**)&d_B,size); float* d_C; cudaMalloc((void**)&d_C,size); //Copy vectors from host memory to device memory cudaMemcpy(d_A,h_A,size,cudaMemcpyHostToDevice); cudaMemcpy(d_B,h_B,size,cudaMemcpyHostToDevice); //Invoke kernel int threadsPerBlock = 256; int blocksPerGrid = (N+threadsPerBlock-1)/threadsPerBlock; VecAdd1(blocksPerGrid, threadsPerBlock,d_A,d_B,d_C,N); VecAdd2(blocksPerGrid, threadsPerBlock,d_B,d_C,N); //Copy results from device memory to host memory //h_C contains the result in host memory cudaMemcpy(h_C,d_C,size,cudaMemcpyDeviceToHost); for(int i=0; i<N; i++) //output result from the kernel "VecAdd" { printf("%f ", h_C[i] ); printf("\n"); } printf("\n"); cudaFree(d_A); cudaFree(d_B); cudaFree(d_C); free(h_A); free(h_B); free(h_C); mypause(); return 0; } 

Я решил проблему

  1. установка Windows SDK (не забудьте выбрать все опции x64 для 64-разрядной ОС)
  2. включить «c: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64» в PATH
  3. создать файл vcvars64.bat внутри каталога “c: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64” со следующим содержимым: вызов “C: \ Program Files \ Microsoft SDK \ Windows \ v7.1 \ Bin \ SetEnv.cmd “/ x64

Примечание: я сделал это, потому что:

  1. Я использую VC ++ Express 2010
  2. У меня нет «vcvars64.bat» в любом каталоге?

ОБНОВЛЕНИЕ 06/04/2010:

Хорошо, я нашел решение проблемы. Код в порядке. После выполнения шагов из исходной ссылки выше и добавления в необходимый раздел реестра убедитесь, что Windows SDK нацеливается на правильную версию (7.0), запустив инструмент настройки SDK Windows из меню «Пуск», выберите правильную версию (v7.0), и нажмите «Сделать текущим».

Обязательно включите следующие каталоги для компиляции x64 (в разделе «Инструменты-> Параметры-> Проекты и решения-> Каталоги VC ++): C: \ CUDA \ bin64 C: \ CUDA \ lib64 C: \ CUDA \ include C: \ Program Файлы (x86) \ Microsoft Visual Studio 9.0 \ VC \ bin \ amd64

Теперь есть еще одна вещь, которая может измениться для 64-битной системы. По-видимому, компилятор cuda имеет «жестко закодированный» каталог для 64-битных компиляторов в Visual Express 2008. Чтобы исправить ошибку, скопируйте необходимый файл «vcvars64.bat» и переименуйте его в «vcvarsamd64.bat» следующим образом:

C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ bin \ vcvars64.bat

в

C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ bin \ amd64 \ vcvarsamd64.bat

После изменения программа скомпилировалась и успешно работала.

Я прочитал «другие» публикации по всему Интернету для других решений ошибки: «nvcc fatal: файл конфигурации Visual Studio» (null) », но очень немногие указали выше, как требование получить nvcc для поиска необходимый файл конфигурации визуальной студии.

Отказ от ответственности: я установлен на чистую машину и ОС.

Надеюсь, это поможет другим с подобными проблемами.

Такое же сообщение об ошибке, но другое решение еще раз. Я пытался скомпилировать 32-битные CUDA-библиотеки на 64-битной машине. Мне пришлось добавить аргумент --machine 32 в nvcc вызов, как это было предложено Империаном в комментарии, здесь: Ошибка компиляции CUDA из командной строки

в надежде, это поможет кому-то

Я обнаружил, что мне также пришлось изменить переменные среды CUDA_PATH и CUDA_LIB_PATH, потому что они указывали на инструментальную цепочку x86 (которую я установил после инструментов x64).

После некоторых фальсификаций с некоторыми ошибками компоновщика мне удалось создать приложение x64 CUDA!

  • Отображение и сохранение выходного файла Windows Batch
  • Windows XP - синий экран
  • Как переименовать файлы с помощью F2 в Windows XP без выбора расширения?
  • Могу ли я установить оригинальную копию Windows (OEM) на несколько разделов на одном компьютере?
  • Использование CPU VirtualBox 100% на хосте
  • Иконки, исчезающие из области уведомлений (systray) под WinXP
  • Как долго Microsoft будет поддерживать Windows XP Professional?
  • Что может вызвать медленную производительность SSD?
  • Vista, скрытая от XP?
  • Лучший способ получить информацию о лицензии
  • Как записать звук из командной строки Windows?
  • Interesting Posts

    Как создать программу установки Windows

    Учитывая строку, сгенерируйте регулярное выражение, которое может анализировать * похожие * строки

    Зачем мне сначала устанавливать значения Autologon в реестре до того, как он работает, и могу ли я исправить это?

    Создание пользовательского уведомления, андроида

    Как избежать обратных косых черт в строке R

    Пользовательские события в jQuery?

    Cloned XP не будет загружаться должным образом – застрял перед выбором экрана входа / выбора пользователя

    Проблема с VIM

    DialogFragment и onDismiss

    Polymer 1.0: Как передать аргумент функции Polymer из атрибута?

    Абсолютный URL-адрес CSS @ font-face из внешнего домена: шрифты не загружаются в firefox

    Сделать файл / папку скрытой в Windows с Java

    Может ли gigabit ethernet Auto-negotiation обнаружить кабель Cat5 и автоматически понизить режим?

    Программное обеспечение удаленного рабочего стола, которое клиент не должен устанавливать ничего

    Не удалось получить токен доступа из Facebook. Получил OAuthException говорит: «Ошибка проверки кода проверки»

    Давайте будем гением компьютера.