Ошибка синтаксиса команды версии AWK CUDA при запуске из Makefile

В конфигурационном файле apache24 вы увидите строкуServerName:80:

  1. Оставьте поле пустым.
  2. Затем под этой строкой в ​​пустом месте напишите:
    ServerName www.name (of your official domain or website.com:80)
  3. Сохраните файл конфигурации.
  4. Перейдите к cmd, откройте его как администратор, измените dirтуда, где находится apache24
  5. Затем cd apache24, затем cd bin, затем httpd.exe

Вы увидите, что проблема решена.

3
06.05.2021, 12:11
2 ответа

Часть проблемы заключается в том, что вы используете $(nvidia-smi...)вместо $(shell nvidia-smi...). Это легко решается.

Вы также должны использовать $$2вместо простого $2, чтобы makeне расширил его (, возможно, расширив его до нуля, в результате чего выражение awk будет просто {print }и напечатает всю строку ).

напр. с минималистомMakefile:

all:
    CUDA="$(shell nvidia-smi -q | awk -F': ' '/CUDA Version/ {print $$2}')"

Обратите внимание на двоеточие, за которым следует пробел в разделителе полей -Fawk.

$ make
CUDA="Not Found"

На самом деле это правильное значение для моей системы, у меня не установлена ​​CUDA.

Кстати, важно понимать, что, хотя некоторый синтаксис make немного похож на синтаксис оболочки, он сильно отличается... и, что еще хуже, сходство может упростить написание make-файлов с ошибками.

См. Makefile :, как правильно sed редактировать переменную , чтобы получить хороший ответ, относящийся к вашему вопросу.


В более общем плане вы, вероятно, обнаружите, что вывод nvidia-smi -qбудет намного легче обрабатывать с помощью awk (или sedили perlили чего-то еще ).

напр. в моей системе:

$ nvidia-smi -q | grep -i version
Driver Version                            : 460.56
CUDA Version                              : Not Found
    VBIOS Version                         : 86.06.0E.00.38
    Inforom Version
        Image Version                     : G001.0000.01.03

$ nvidia-smi -q | awk -F': ' '/CUDA Version/ {print $2}'
Not Found

У меня не установлены компоненты CUDA, поэтому я просто получаю сообщение "не найдено". Я могу получить полезный результат для версии драйвера:

$ nvidia-smi -q | awk -F': ' '/Driver Version/ {print $2}'
460.56

nvidia-smiтакже имеет различные опции --query-gpu. например.

$ nvidia-smi --query-gpu=driver_version,vbios_version --format=csv
driver_version, vbios_version
460.56, 86.06.0E.00.38

Как ни странно, версия CUDA не входит в число query-gpuвариантов. Подробную информацию см. в nvidia-smi --help-query-gpu.

3
28.07.2021, 11:34

Предполагая, что GNU make:

Добавьте ключевое слово shellперед командой nvidia-smiи удвойте количество долларов в команде awk. Сходство в синтаксисе make n shell является источником путаницы.

ver_cuda:
    CUDA = $(shell nvidia-smi | awk -F"CUDA Version:" 'NR==3{split($$2,a," ");print a[1]}')
    VER_CUDA ?= $(CUDA)
4
28.07.2021, 11:34

Теги

Похожие вопросы