pycuda "nvcc fatal: не удается найти компилятор 'cl.exe' в PATH"

ОС: win10

VS: Visual Stadio2015 64bit

CUDA: CUDA8.0

python: python2.7.12 64bit (pycuda)

Я следил за этим сайтом, https://documen.tician.de/pycuda/tutorial.html

import  pycuda.driver as cuda
import pycuda.autoinit
from pycuda.compiler import SourceModule

import numpy

a = numpy.random.randn(4,4)
a = a.astype(numpy.float32)
a_gpu = cuda.mem_alloc(a.nbytes)
cuda.memcpy_htod(a_gpu,a)#transfer the data to the GPU

#executing a kernel
#function: write code to double each entry in a_gpu.
#we write the corresponding CUDA C code, and feed it into the constructor of pycuda.compiler.SourceModule
mod = SourceModule("""
    __global__ void doublify(float *a)
    {
        int idx = threadIdx.x + threadIdx.y*4;
        a[idx] *= 2;
    }
    """)

#If there aren’t any errors, the code is now compiled and loaded onto the device. We find a reference to our pycuda.driver.Function and call it, specifying a_gpu as the argument, and a block size of 4x4:
func = mod.get_function("doublify")
func(a_gpu, block=(4,4,1))

#Finally, we fetch the data back from the GPU and display it, together with the original a:
a_doubled = numpy.empty_like(a)
cuda.memcpy_dtoh(a_doubled, a_gpu)
print a_doubled
print a

но не удалось с ошибкой:

Traceback (most recent call last):
  File "G:/myworkspace/python2.7/cuda/test.py", line 24, in <module>
    """)
  File "D:\python2.7\lib\site-packages\pycuda\compiler.py", line 265, in __init__
    arch, code, cache_dir, include_dirs)
  File "D:\python2.7\lib\site-packages\pycuda\compiler.py", line 255, in compile
    return compile_plain(source, options, keep, nvcc, cache_dir, target)
  File "D:\python2.7\lib\site-packages\pycuda\compiler.py", line 137, in compile_plain
    stderr=stderr.decode("utf-8", "replace"))
CompileError: nvcc compilation of c:\users\gl\appdata\local\temp\tmp8poxqp\kernel.cu failed
[command: nvcc --cubin -arch sm_50 -m64 -Id:\python2.7\lib\site-packages\pycuda\cuda kernel.cu]
[stdout:
nvcc fatal   : Cannot find compiler 'cl.exe' in PATH

]

Кто-то сказал добавить каталог cl.exe в среду. Я сделал, и ошибка та же. Я новичок в CUDA. Как я мог решить эту проблему? Несколько советов?

Я сделал так, как советовал @citizenSNIPS:

добавьте путь к cl.exe, D: \ vs2015 \ VC \ bin.

INCLUDE = C: \ Program Files (x86) \ Windows Kits \ 10 \ Include \ 10.0.10240.0 \ ucrt.

LIB = C: \ Program Files (x86) \ Windows Kits \ 10 \ Lib \ 10.0.10240.0 \ ucrt \ x64 (Я не могу найти C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x64 в моем компьютере).

Возникла новая ошибка:

raceback (most recent call last):
  File "G:\myworkspace\python2.7\cuda\test.py", line 24, in <module>
    """)
  File "D:\python2.7\lib\site-packages\pycuda\compiler.py", line 265, in __init__
    arch, code, cache_dir, include_dirs)
  File "D:\python2.7\lib\site-packages\pycuda\compiler.py", line 255, in compile
    return compile_plain(source, options, keep, nvcc, cache_dir, target)
  File "D:\python2.7\lib\site-packages\pycuda\compiler.py", line 147, in compile_plain
    + (stdout+stderr).decode("utf-8", "replace"), stacklevel=4)
  File "D:\python2.7\lib\idlelib\run.py", line 36, in idle_showwarning_subproc
    message, category, filename, lineno, line))
  File "D:\python2.7\lib\idlelib\PyShell.py", line 65, in idle_formatwarning
    s += "%s: %s\n" % (category.__name__, message)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 147-168: ordinal not in range(128)

сейчас я работаю над этой проблемой, может быть, это потому, что я не добавил C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x64?

3 ответа

Решение

Я добавляю этот код в.py

import sys
reload(sys)
sys.setdefaultencoding('utf8')

и запустить, ошибки нет

Вы могли бы также добавить путь к cl.exe в вашем файле Python. Недостатком является то, что вам придется изменить его, если ваша версия MSVS изменится.

Пример:

import os
if (os.system("cl.exe")):
    os.environ['PATH'] += ';'+r"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64"
if (os.system("cl.exe")):
    raise RuntimeError("cl.exe still not found, path probably incorrect")

Изменить: вам нужно запустить версию MSVS, совместимую с CUDA. Т.е. CUDA v9.0 не поддерживает MSVS2017, а CUDA v9.1 поддерживает только версию 15.4, но не более поздние версии. Попробуйте, если это работает, запустив nvcc.exe из командной строки Native Tools для Visual Studio.

Вам нужно указать путь к cl.exe.

  1. перейдите в "Панель управления \ Все элементы панели управления \ Система" и выберите "Дополнительные параметры системы"
  2. выберите "Значения среды".
  3. в системных переменных найдите PATH, нажмите "Изменить" и добавьте путь к cl.exe. так должно быть:

    C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ bin \

Убедитесь, что при установке Visual Studio вы выбрали установку компилятора 'C++'. он не установлен по умолчанию. если вы этого не сделали, перезапустите установщик Visual Studio и выберите установку компилятора C++.

как только вы закончите с этим, вам может понадобиться добавить следующие системные переменные

INCLUDE = C: \ Program Files (x86) \ Windows Kits \ 10 \ Include \ 10.0.10240.0 \ ucrt

LIB = C: \ Program Files (x86) \ Windows Kits \ 10 \ Lib \ 10.0.10240.0 \ um \ x64; C: \ Program Files (x86) \ Windows Kits \ 10 \ Lib \ 10.0.10240.0 \ ucrt \ x64

см эту ветку здесь

Другие вопросы по тегам