Mac OS X: GNU parallel не может найти количество ядер на удаленном сервере

#macos #bash #parallel-processing #gnu #gnu-parallel

#macos #bash #параллельная обработка #gnu #gnu-parallel

Вопрос:

Я использовал homebrew для установки GNU parallel на свой Mac, чтобы я мог удаленно запускать некоторые тесты на серверах моего университета. Я быстро просматривал учебные пособия, но когда я запустил

 parallel -S <username>@$SERVER1 echo running on ::: <username>@$SERVER1
  

Я получил сообщение

 parallel: Warning: Could not figure out number of cpus on <username@server> (). Using 1.
  

Возможно, это связано с тем, что я никогда не добавлял parallel в свой path и получал предупреждение о том, что «parallel» не была распознанной командой, но parallel все равно выполнялся и все равно повторялся правильно. Этот конкретный сервер имеет 16 ядер, как я могу заставить parallel распознавать их?

Ответ №1:

GNU Parallel менее протестирована на OS X, поскольку у меня нет доступа к установке OS X, поэтому вы, вероятно, обнаружили ошибку.

С 20120322 года GNU Parallel использует их для определения количества процессоров:

 sysctl -n hw.physicalcpu
sysctl -a hw 2>/dev/null | grep [^a-z]physicalcpu[^a-z] | awk '{ print $2 }'
  

И количество ядер:

 sysctl -n hw.logicalcpu
sysctl -a hw  2>/dev/null | grep [^a-z]logicalcpu[^a-z] | awk '{ print $2 }'
  

Можете ли вы проверить, какой результат вы получаете от них?

Какую версию GNU Parallel вы используете?

В качестве обходного пути вы можете заставить GNU Parallel определять 16 ядер:

 parallel -S 16/<username>@$SERVER1 echo running on ::: <username>@$SERVER1
  

Начиная с версии 20140422, вы можете экспортировать свой путь на удаленный сервер:

 parallel --env PATH -S 16/<username>@$SERVER1 echo running on ::: <username>@$SERVER1
  

Таким образом, вам просто нужно добавить каталог, который parallel находится на сервере, к вашему пути на локальном компьютере. Например. parallel на удаленном сервере находится в /home/u/user/bin/parallel :

 PATH=$PATH:/home/u/user/bin parallel --env PATH -S <username>@$SERVER1 echo running on ::: <username>@$SERVER1
  

Информация для Ole

Мой iMac (OSX MAvericks на Intel core i7) выдает следующее, и все выглядит правильно:

 sysctl -n hw.physicalcpu
4


sysctl -a hw
hw.ncpu: 8
hw.byteorder: 1234
hw.memsize: 17179869184
hw.activecpu: 8
hw.physicalcpu: 4
hw.physicalcpu_max: 4
hw.logicalcpu: 8
hw.logicalcpu_max: 8
hw.cputype: 7
hw.cpusubtype: 4
hw.cpu64bit_capable: 1
hw.cpufamily: 1418770316
hw.cacheconfig: 8 2 2 8 0 0 0 0 0 0
hw.cachesize: 17179869184 32768 262144 8388608 0 0 0 0 0 0
hw.pagesize: 4096
hw.busfrequency: 100000000
hw.busfrequency_min: 100000000
hw.busfrequency_max: 100000000
hw.cpufrequency: 3400000000
hw.cpufrequency_min: 3400000000
hw.cpufrequency_max: 3400000000
hw.cachelinesize: 64
hw.l1icachesize: 32768
hw.l1dcachesize: 32768
hw.l2cachesize: 262144
hw.l3cachesize: 8388608
hw.tbfrequency: 1000000000
hw.packages: 1
hw.optional.floatingpoint: 1
hw.optional.mmx: 1
hw.optional.sse: 1
hw.optional.sse2: 1
hw.optional.sse3: 1
hw.optional.supplementalsse3: 1
hw.optional.sse4_1: 1
hw.optional.sse4_2: 1
hw.optional.x86_64: 1
hw.optional.aes: 1
hw.optional.avx1_0: 1
hw.optional.rdrand: 0
hw.optional.f16c: 0
hw.optional.enfstrg: 0
hw.optional.fma: 0
hw.optional.avx2_0: 0
hw.optional.bmi1: 0
hw.optional.bmi2: 0
hw.optional.rtm: 0
hw.optional.hle: 0
hw.cputhreadtype: 1
hw.machine = x86_64
hw.model = iMac12,2
hw.ncpu = 8
hw.byteorder = 1234
hw.physmem = 2147483648
hw.usermem = 521064448
hw.pagesize = 4096
hw.epoch = 0
hw.vectorunit = 1
hw.busfrequency = 100000000
hw.cpufrequency = 3400000000
hw.cachelinesize = 64
hw.l1icachesize = 32768
hw.l1dcachesize = 32768
hw.l2settings = 1
hw.l2cachesize = 262144
hw.l3settings = 1
hw.l3cachesize = 8388608
hw.tbfrequency = 1000000000
hw.memsize = 17179869184
hw.availcpu = 8

sysctl -n hw.logicalcpu
8
  

Комментарии:

1. @mark-setchell Определяет ли GNU Parallel 20140522 правильное количество ядер / процессоров на вашем компьютере? Если это произойдет, я не уверен, что вы хотите, чтобы я сделал с дополнительной информацией.

2. Да, это так. Я просто пытался помочь вам с некоторой информацией о том, что ваш метод выглядит правильно на моем Mac.

3. @MarkSetchell Я все еще озадачен: как вы видите, информация из рабочей системы поможет выяснить, что не так в нерабочих системах?

4. Я просто пытался заверить, что ваш метод по-прежнему корректен в Mavericks. Не волнуйтесь.

5. @ole Tange Я здесь немного запутался. Должен ли на удаленном сервере также быть установлен parallel?