parallel/testsuite/tests-to-run/parallel-local-3s.sh

2104 lines
102 KiB
Bash
Executable file

#!/bin/bash
# SPDX-FileCopyrightText: 2021-2024 Ole Tange, http://ole.tange.dk and Free Software and Foundation, Inc.
#
# SPDX-License-Identifier: GPL-3.0-or-later
# Simple jobs that never fails
# Each should be taking 3-10s and be possible to run in parallel
# I.e.: No race conditions, no logins
par_pty() {
parallel 'echo {} > {}' ::: 1 2 3
echo 1 > files
echo 'xargs Expect: 3 1'
echo 3 | xargs -P 1 -n 1 -a files cat -
echo 'parallel Expect: 3 1 via psedotty 2'
cat >/tmp/parallel-script-for-script <<EOF
#!/bin/bash
echo 3 | parallel --tty -k -P 1 -n 1 -a files cat -
EOF
chmod 755 /tmp/parallel-script-for-script
echo via pseudotty | script -q -f -c /tmp/parallel-script-for-script /dev/null
sleep 1
echo 'xargs Expect: 1 3'
echo 3 | xargs -I {} -P 1 -n 1 -a files cat {} -
echo 'parallel Expect: 1 3 2 via pseudotty'
cat >/tmp/parallel-script-for-script2 <<EOF
#!/bin/bash
echo 3 | parallel --tty -k -I {} -P 1 -n 1 -a files cat {} -
EOF
chmod 755 /tmp/parallel-script-for-script2
echo via pseudotty | script -q -f -c /tmp/parallel-script-for-script2 /dev/null
sleep 1
}
par__test_cpu_detection_topology() {
pack() { zstd -19 | mmencode; }
unpack() { mmencode -u | zstd -d; }
repack() { tmp=$(mktemp -d); cd "$tmp" && unpack | tar x && tar c . | pack; }
export -f unpack
# ssh s "(cd /sys/devices/system/cpu; tar c cpu*/topology)" | pack | repack
# repack due to: File shrank by 4093 bytes; padding with zeros
cpu12() {
echo '4-64-64-64 Dell R815 4 CPU 64-core'
echo '
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
4R8QHVIPwAOo4b4aVRBQC1j7DAHI8Cxu
'
}
cpu13() {
echo '1-2-2-2 AMD Neo N36L Dual-Core Processor'
echo '
KLUv/QRorAkAMs0iHIAlzhiAkTYNfqzdobWLDMy5tCJ7i2xpEFTDbgp3bpGkmoGWh4pzHlmY
R1MPXf4/sgy1EIQS/39mqCQRHIkZAAPuhvG02DPzv7GlGCwhLEVgMUM1y3FoT4GJe3RViYJk
URZmaYkO1524AnMQg////////1cJIbWHoUmNFf7/dRjxKF6RuC5+t/fEIDegkaVSlojYaq01
wSkxioQigQS2B/0JO/7LN5lUPSDb1BV4wjMXb7cyPbAEN6DjxQDssWyAIBWbJgMaFG6AAcv1
QjaAIDUfIHA6IH8xF2OHByyd+lccVwCGgP2QUe9F0gdEkfM/QK6PY76agN1zBpPkAAbkICz+
226CXSoHmLRCOklzqQPgeLWT1ajVgsQHkFMnDGU/ymqOiRLADtiBNmNoAAD2ZOgBNAYAFAI3
NTc2NHBoeXNpY2FsX2lkNjYwNTQ2NjAxNTExMTExMTEvoGBv6wahpfBDRIDcA/0PINQnGyBQ
AZESgPtkAwjUISkB8HdlA9BUIKkCYD3ZgKgCghIA98kGKKQKSRWAjz3ZAKIqhKhpA9KqQaaM
FnXIgDNSBWAAdV9kAxqo75QAFpwEDHi2B7JV9QOyKcCiDtfSxQAE7w1YWmLNSRjQRjSAuuv/
AAL+kw1oXFXOTMBI1ABCkv4HkPswJvUGPJ1OutlfvWACzQIAQDE1MTE2MjExF+DwKn6HuAP9
CXz/B1D0lQ0YVu2BIgDUIxtgpAJBDQD2ZgM2SFUA1AZ4gLCdbECj6pFqALo32YAJqz+iL9t/
A2TvyAbYWB2CElp8ByKiPSxNKA7N
'
}
cpu18() {
echo '1-4-8-4 Lenovo E540 i7-4712MQ (PROSA stud organizer)'
echo '
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
2w==
'
}
cpu19() {
echo '1-2-4-2 ThinkPad A475 AMD PRO A12-8830B R7 (64g)'
echo '
KLUv/QRojAoAEk4kHHAlTgfA8cgfWfe8Fj0M/f/7TWS7cdsEWHW6DymHMJ1SXava1RxpCPG/
2Dx1+P8/0grWkIFE9M8Sg+AwGLRSFQ1TBlABd8O9rkTE/8dpSuEkhKYINKdgzXKkypRJLVxr
tURBsigLszx3k7gCcxCD////////ZwnBeB6Gxnicwv//3+GiGw81Fd1CdBN9lzcxCECgga2y
akRhuaY14SUhIqFIMMHZAfsHO5RB3Qd8NDHA/GIA7K9swCKVQfAAqAgwJgSo4Q14+qTg/0D0
gywqmZIDGt4NAL3IBvSq+s1kQLa3BXgAgXbMBixUSNad/FfMhwA9ZNVMeWpAjpz/AbL9HgNU
DKzXcTgC2irA95dZJQfkSgjIkEsOAIoYwAPyPgP8l/cAA9QOIPna8ZLOVQ2A4d82TY2qAlgW
8h/QBDGghg9zmU3fAPdnSIAB+nTkAVwGAFQDMzN0aHJlYWQ3MDI0NjAwM2NvcjY0cGh5c2lj
YWxfaWQ2NjEyNTQ3MQA2MDIyMjQxMjI0MDIq4FGl8DMCo70D/AE8kg2YSN2BQgBuRzaAnSqI
VKJRf0wRzaohA2RDFYABFP2SDWhQRSs1YMnLAQaE6XUMqL0BORVgCRXUAAOM72tMVQMsjzSw
FBj0fm2ABwjbjWzAMpVyjglgR22AAYJ9jKGiAwgnbUBuZwEeEL5nWdTaAKGpUEBDZBH9D9CQ
j2SrutMDFu4GxMNYJAMAgDI1MjQyNjIyNjI1MjIyYzIbqNA+QC8/SnIMEP7//5+m4sYB/d+A
MMgKBAMgWNkAJHngABg0G1DvAwaATQYeFACTrB4TAJhsQC8hkgB8IBuw4MECYEQ2IOcDSIsB
hjyOgCM9CMwDAFgyMjIzMzMzMzMzMyLosbn4maiGDxH8//8/WQ3dDv2HlQ2Aw2MLgBDZgCwk
CQBFNoAJEFoANsgGlDhEaGrxAEZ4UKgNmO3RaB0yVQAGUA5kAxqFMAGoyAb0CwQFwCIbAKoM
Ug0w47IBnKpA1AADBJKyAQXpEQuAFJc8AwBQMzIzMzMzNDMzMxzoQCf/zOYBEBrh//9/VgaR
hQP9AZQN4CEeDoAxswE/lgOMLQZ4PR+qafEAuIaQAOzIBlB+OAF4TDYgnYTc7d3/ABbMbMCD
OFAAXMgGLIKQAnCQDejZI4T+Qz4V1AMAeDMzMTExMTM3MTExMTExMSa8UH1kPcAAAVIs0P8A
FnSzAXOFAwIAlw0wPR8kAAcyFpIA7FU2gJr4kAAgygZw3IcEYDIbcHA6igXgARYlmGwAsUML
wNOyAZ/yoUptwEX5A6s2YGx/XADMsgFZ70MCcCIbsGsJ0QloLBxNAgA4MTExMTExMRXsAGny
O8kO/ZH1/ysbgDt4GNNigLcdQgEQzQa8sY8KgJHZgNEEH5ZaDBAmPAoAjGYDYMQQIgAH2QDK
QESAkg8EKmp0oA==
'
}
cpu20() {
echo '1-16-24-16 8*2 thr + 8*1 thr Intel Core i7-13700HX (user submit)'
echo '
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
8GaAJjAA+Ssb4CbgzYDasgEUILf+kPJfwB2aDUiZcvGCMcDP5UXAzuIz4NMf9h5JDFhqTQbw
tM7vwZgBm3bp9wDOgEwDzHtcMuCnPTIApz3L+4D8FmcApzF/D+AZsGmHvQfX3qMxAz7tMANg
2tB7KOA9LmuGLBkIHAgAVAI4ODg4ODg4ODg4ODg4ODgxODg4ODg4ODg4ODg4ODEwODg4NDg4
WOhBsvidkSluEviRBDcE7xDcELyeADIwxg/9A2UD/omfAemyAdsHl2TAgMpSLBtQei4zwGo2
gMD1Rmw8/wV4e80D2oAiM2BBZQM8a5MB9rIBmWPJALdsACEMMwNeZQPyF2wMUDIboNTwgK68
M4BkNqAe0u1cQ5nsAUnmAZVlBlzKBkxEWBkANxtAwr+xDBiQo182QELHA9CG4Xtc8R7OZMDT
ev49GPse7jJA05oZ0NN4fo8w/B5bfA8YeI8DofcB+b0UFowBZxXXDICZDbDw3WWAwrIBWq8E
oVgbTuQJAJQCODg4ODQ0NDQ1NDQwNDQtNDQ0NDAzNDQ0NDQ2NDQwNDQ0NDQ0NDQ0NTRg6DGe
+BEJRITYAyII/CMIQAj+/1EFuERA/PzpPID9s2IKcMAOVCwZILMBGR5d/MAY4EHBmgGi2YDL
cSUDlswGyN/IACsbwHbhzIDjeYCYJjgDWtkAIgo3A9ZmA6z+ZQYsVjYA3i9nwFo2IJ2GOQME
KRsgeZcUOKD2xMyAbDYgw77NgMVmA1jhrzJAaNkA/WMgBURfmA2QfjcDbDbgoXk/A75lAzoH
QwZc2YCf4bipFzBAb4/ZACjv2wxAygb4mSR2KDAguNkAlP67GQCaB8ROP7EABzSp2DJgWTag
s2F64AC3A8wPHDDIFA8QIgAHECI5MmDMBiiRbjPgKhtApMFkQCkbYOUVRoIx4Co3UhJQQRzc
CQBkAjQ0MDQ0NDQ0NDU0NDY0NDA0NDQ0NDQ1NDA0NDQxNDY0NDQyNzQ0YugxnlDiERksqQMi
CEAI/v8IwQnBmwpoQ+UH/NBswMcpxgyQZgOaDS5ggGQ2QMn3NsEBt3Q7AwLMBvQZb3EdNXH/
urGSrGfAl9kAjOdeBqSyATaMCQPi2QBIoMUFByAf9gyILBsAIfcZkJYN+Dl2BqRlA7SAsTKB
AWTebICE+xmgNBtgDl3PAKdsgHawM2DleYAl9LE3gQFkYjbg/K5lAGDZAB+mu0ow/gsoDrMB
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
Gnfd8IITzjZAXQ==
'
}
export -f $(compgen -A function | grep ^cpu)
test_one() {
eval $1 | head -n1
export PARALLEL_CPUPREFIX=$(mktemp -d)
cd "$PARALLEL_CPUPREFIX" && eval $1 | tail -n +2 | unpack | tar xf -
echo $(parallel --number-of-sockets) \
$(parallel --number-of-cores) \
$(parallel --number-of-threads) \
$(parallel --number-of-cpus)
rm -r "$PARALLEL_CPUPREFIX"
}
export -f test_one
compgen -A function | grep ^cpu | sort | parallel -j0 -k test_one
rm ~/.parallel/tmp/sshlogin/*/cpuspec 2>/dev/null
}
par__test_cpu_detection_cpuinfo() {
pack() { zstd -19 | mmencode; }
unpack() { mmencode -u | zstd -d; }
export -f unpack
# ssh server cat /proc/cpuinfo | pack
cpu1() {
echo '2-8-8-8 Xeon 8 core server in Germany'
echo '
KLUv/QRYbRIARmlzIxBtqgDhSWTqT86MkL9zqf+EhavXzwbElKKZVR0oAgBg5J4gcQBiAGEA
sLnXDwczA4YzTNLcWTvx+utwzbFmQQYUDEZyZ60JhQYkubMk+Zi3NptQSECQAeUFvwJhFAiH
cDh4wAOAnBvxgAeAO2tjk1+UO2vBhWZkzZ31gC+26BM7BrfKhZVvkptwZ0HvoROSSzHkzqKz
e92kzALNss2vjU/N6N5c/Ep8Sms8b5+gcl8Xv41PO951/TZ/oW+kPnF0Z62WGmQJtiR3Flxq
4aE3sZPzVV5X7TNxxHofd9aaOGLIncP26pPPPW5Lp/vEbkHvS6djzJ3Vknyw8ZohD81Bjw7i
U67Vm6RyX7a7r8T6KlKH7J6GTmd9csYzTW+F/iQfmlN6eOm7Nt6N5csZI7r8OBxtd12fKltt
Od0jfCUPYXP96G+DH+ur491XtvvbfdpV9CrGP3btXaE7eoIRdA/MYrEsFE2jNIxCkSgUhkES
ZlmWZVEURUGSJEmYU+XGlZps8XQlJjPYpkofxVzgXV/jBN1LIagxprmzqtwopQfbw7AFMoAw
GMud1fzilGaDPeqj81GuFkZ/UVKXmFBz9EO5PsIncjT4pVpXTx5mux83IFADQJsOKpW46nns
Is7U2ZTFVYV3C3OmxEovTmU8sZyTYlYqcdTzmEUsR6PYOlV4tzAnSqz04lTGE8s5KWalEkc9
j1nEqahrvJxROjsHSSvQhQq1tpf4zCUJFtpLU3TfUioW5HyRY49kj+F7XHNrWzFtIuMXRNui
cMxHAZLOSIU=
' | unpack
}
cpu2() {
echo '1-4-8-4 Core i7-3632QM Acer laptop'
echo '
KLUv/QRYBRkANvyjJDBtnADAQSgjJ0We2YiUIhYo1GYrjfN9LZSRbXi0c1gXhgBQJaUAjQCQ
AFstjEt/y7WLjrldy3NJYZ2SHbJMae46JVsalxR2RPcoxwvjbzHHk8cuBwx/Hia6pGiF4+uD
LbZEjWjxPA9zSVEqFBoYjYRxSdEmmZzMwaXgkuKIbleblwqFBEazaG5wCQeENzw0TuQMELgH
NEQA6JQID4AAuKQoXPEN6JKiPG0SLtElZfIcXNUhy5anHRc0OkjUhEtKc9OULWpkYVxSpmRW
JucuAfLJlS35WxnfpHRMq/Pc1JnSfZSwmrrTg811xj11XM1RssP3ZdxtXhL/3mI84Su1h/1+
nPmNMl+ZP1lSXQLh3bJ17vYHQ1712CNHed9rH5GQfTF4deznbPhVfkPCrgxe134yPOO+8l7b
FUYO2eqSorBjvaVYHOaS8jSi781BlkXpepVJdIJstbBOLikKJA6u3txG3quftJvSzZXoq+5g
jJxCtvXgaW5/Kdd8ail3npR7o5jvek+tvh9kVRN8U/VY7y2u2eZZxFSXRNY1slhy1vWp0PWk
0b22tE2M+x3Zyj1zuxrJG2Z6lPnNsT1kbT+3JY8YCbujzPwG9pv1Ehj5WzZx+5TtooR/ItZu
n2gTDwIf27u4r6buWtkcZfzEEQQETgMtGA5BFDlQg1k8EBRBEEMALSDoeZpGAbRoGo/jNAWN
RcHjNA3DMNCCYZ6GYSDoWTCPwyxSR4XqWHHBT6WQu7wF6ekijecC53bUI+eSwsw6W1vLE11S
OiqMDvfW9CxPs2AUOOugdEhqqZp5Z147oSadsnlqmMiks5kuP1LI1k/hBFkGoZbGvOnc+/j2
veb6au5w6qPbeyWc+lXIV14UBzsgIKMZ0jAPK+HdMhUFdRtVjCeXO5JNULexYjxRJq2g2EaV
8O7CRoIUlGysjsfKBCko2ag6HruIkWyCuo0V44ky2YRS1xX8jOLIPpdShdsmd5zFkNBhyRjs
jWqiDxsGiQbeb74N2hniRTgqfc6PK/sOQHV9UrS1UtKWyvnmCMjuOeEbaVqYTWLEy8KHcwab
fNdt
' | unpack
}
cpu3() {
echo '1-2-4-2 Core i5-2410M laptop firewall'
echo '
KLUv/QRYTRUAdrWRJCBtLACzSvaJv8mdRORLLoVMJ3pdprIRArYowWEZLgRCIHoEDZEAfQCA
ALM94qbc+9LZVuOOaol8MPJ6MQ5Ze00x4WWw8MXBYO6orXj9nTTWluJ4LCCQRrmjVEUCA1Mm
xh21brZJ24vLcUdJ5GPe2qsiAYHBLJYXHKLh4AwMpbEMELwHMDwALJ0HD3AAuKM2MvmlcUcp
uG7G1dxRFPBFBj3ituBWqbDyRXIR7ij3HjqdXGkx7ig6u7dNyitytkd4bl0d/SQPIWtN0d8I
P9bXybu/bPe3+7Qn6FOMf9zYu7pPOoIQbG+YbX5lfGnGdtbiV8KntMbz9h9T+7b4ZXza8a3r
t/nrvlF6xNAdpVrCIE8sRrmj4EoL717ETc5Xedu0T8TQ6qW4o1TE0GLcOWSvPvnaY7aWO6qX
Bo/wgSYMfpLYV2I9vZedbnz1WfmgY+ue1vVVNp789pgt0xflaWz33Wv82Byfcp3eKFM7s939
JdbX3k9ROuT2tDud9ckZ32h6q7uEk4BRhI3/JD9iiK6E7SG6zLO2nPIUkgknzzod8pR3c0oe
XvqukXdk+XJGiC4/k0bZW9enSlY7DONoIIvFQcAsiwJhIAvHY1EUAgZj8WiU5VS5cSVMsni6
E5MXZFGlT3o0LvCuL/KGuaO6e6lzbDWaO6rKjVLyIHsazXoQLCAPAn5xSmZkLYr0LK1tuS8n
pqtw4xNxiyKrK19CfmWUnbn3SHdS3StP91h65T1FfXQ+ytNC6C9K6RPTsUk/lOvp9mMRj/AG
JSDQIqIi7LRUwrvFZJLUAVuxPLHcLdUEdcBUDE/UqSanrs9zRmXkcaNU+bZlG7hrcxA2mUBy
T8tuUnd4augwnjSRdwOqb6To3FJWLMn5yBHIbnjCtm86kCEx8rLwgZ4B68GiZg==
' | unpack
}
cpu4() {
echo '1-2-2-2 AMD Opteron 244 dual core laptop(?)'
echo '
KLUv/QRYvQoANtlJIkBprACDMMQtkTstiphu+tF3RsomRkcLaiECKgDo7qgtvyZCAEQAOQCP
WWerZUFc4QE7AaJ0dHLCDRiLr6TL4r9SgsrIVQLJV2KAb5n7w00ZMBbtzaiO+Sy+EvMajmSi
Qgr5So7s1iYdVgErQYUUnnkPtyjfZG2RNh52qpXhK6WHHVvZHIK4CR1Kxq/UPAsN6DFOFSB8
QWjD66ujsaYGFOWgQBTJV0oNBwwk+UpNDE5H7tHuHf1AB9sTijZ/Mj4kt521vTZ8x5l71n57
zK6I2rXtlfGd3ree1+Yrc13oD7uvlLphkB8qeQvBIZEonvPMg848955fM+pqwyLbO/qQrJaE
GlAOBElC+UrNb2UjF9SM9CEjo3zhZ6TR7qN4CFlrhj5Cu6/dDxAAAieJgnrpvudbNgNUIOzA
MqSoSuBmxjF3/rkp5oAwr3m0DVcImxgIDpyVKKrENj8=
' | unpack
}
cpu5() {
echo '2-24-48-24 24-core (maxwell?)'
echo '
KLUv/QRYdSQAGkNoCyQADcMCI0TLks4mlR/lnQWq4v01q/9MCZihKMz3R7P+/yfjrxe5AKIA
pAAKdnLCyuueNSgYcfRSeGMYCkYcyJs7DVYooYPcjoTeGL10uivYGQ9+6XTHSm+MTkjoHGAf
yJ3mYFNY4MMAgyNJQdQbYyvA/i645o6FGAIMk6Q3hlFBQYNkIeiNsW+6SR2Mx3pjJCRk3tpH
BQUJEIVAeoGnxRUmSQMYgkNwcOABHgCQcyM8wAMAb4yNTT4lbwzD2TfjkbwxKDgwNsQV7A5n
q1ywEirkJnhjPGig88ldHMgbg87udZPyERXKGb+S3vou4UlwFNFxfCj5CkbQTbQ9gi7zrC2n
PIXEdCbP+vzNmTDw0nc9vA/LlzMi6LJhwdF219VQZastp3t0zq7roz8k0PLjP/KO01xT6O+B
H+vrwruftvvbfdoP4k+Mh+zau74vtMJBOO6J2ubXxl/M6N5c/Cb4lNZ43v7yuK+L38anHe+6
fpu/7xsXVzDijWF0ojk84VDojeHsYp0/GMdK3hhVbpQJ6DRDcqSFAMMo9sZohnEm5uHoSPe8
sb/dDp1oxB/kxSvvKVRIJ6T8rIM4jHLxCfO1hTZQrl8Jncl16WHlR7oL9b0rXzr8yvPA+9po
e3vw0TEgFprzJxt99C5BiD+L9l20ft7bTjfCalgJndf2GVzXV+l48h3klp4nZFjb/ebeH3T8
6B6fcn2eoMddbXc/xfra+yf2n7i4w87Q73QGDGOYojCFJYwxxpZiii3EEGMUwyxJKYbQQmsh
i2EUoyhpUQohRSmFEiUpibHE0lJJJaVQQikphBikEFoQhRjDMGtRFKUwlhKFkIQQsha2MJWw
hKXFFkMpscSQhDCEMcyyLEtKTEEWslayLIolSVprIbUkpRCEUkIpIYSYlNCCEKMgtCQIMbYs
ayWJUmullBJCR1Plxk002eLpTph8OE1RKVws6wLeFR6erDdGdy99rwWA56ixqCwgIiKDAAhC
MCMAACxsAhKoQBgGIBAIxsEIwTkOEfxPwgUfLJZYP9vKZrhEZep2u7k7XFK1ZLTlxfNql0Dp
yIyLNj3Wy9LeMRJXK8cgHu09Fq1Yq8b0XW09VsBqLc3ckYn047pXflSABeQzkYdcPcePl78l
oEW3htyWDCvcopK7b0uGSt6uFhO7XBKlKikuaCWPOa6tcXOiBR1jXNPFta0FfQxn6O1mJGr5
2Luq5WO+pnaPdalaeiyWdukXgH8mpTAUl1kS47K2M8j8mHlcElJyq2RtiZDCbSm5+7ZkGJQZ
l7eixcwul0SpiowL2tRYJ0t7x0hcrRyDeLT3WLSiVo7pM9pyrIDRyjFUlvv8H/M+JvuQKzUY
kM7MMXFBQ7TYyblwJnts2KkJO02wk27ZTOpjv06V+jple920PkaXcca67lrtscV1V9y9WuCx
xLUirn8t9NjMkJcZXC01dpO13hjFq01jyqKWjd272jEWZke+Xv7966LvqzZTC0zEIma1yNpX
ketyZer/0g6AFe7sFs2nePnngUV+Cv9cPO6zftzOuDDzXMWe+8I/vwr+ll9K
' | unpack
}
cpu6() {
echo '1-2-2-2 HP Laptop Compaq 6530b'
echo '
KLUv/QRY1Q8A1iZsIyBvqwA3o23SyJIQjJ06dkMYGMYDOkA5MLcI3iHqFTCAyKAwaQBhAFkA
BstXShcNEAYKi5SvtE7UKLU9pSxfKQIb885WFw0MioNgOcKvKEpj4hQRCl8ZFQYcgxYeIAEA
o1y3Cl9pH4NvML5ScuvEp5qvZOHaY88hVuV2QoeFDYLL8JWc9pDRgTtRyleSsXs1SlYBy/iy
37Xnt/nrfN/kED9fKXWEOa5QjeUruZ2su9MgVhjb5NVoHxA/qtfiKyWIH6V83bE2G2zamK2M
eog1Oe0royrGV+oIbA7SWil3TFtbSFglPJxh7EXrr0SZqoVhCAoOAjudN8h/5DK74wjfE/KG
LB/G98jlh0Qlu/Z8TMhmw6h/7hG8c0zbor8Q/pufknefsd3f7suOnkfvvbGy93Quacg9Tt80
tvmT8Sfx6Zm+b4Qv5Xzn7Tsi/ep7y7Isak24byMMsne5FZGVY9CUbeJgLvCeDfKme6XjMMU0
X2nCfTDSHHswjXI4CJSDgsZXam4vRiJEQRD15Eqm8+cej4S574R19KcOX/KM3iyRvrHdfcab
d6yPdi7jbDC+M00HGgDJQBXgHVgYGFDCduKMmpHxiUzAByptDXwxQm8Orkb8MKwzCJ2GRGOh
S1UsIOebOfYk2efwPdf8XqtmFQx7uDu4QYQPJQq2DBQj
' | unpack
}
cpu7() {
echo '1-8-8-8 Huawei P Smart Octa-core (4x2.36 GHz Cortex-A53 & 4x1.7 GHz Cortex-A53)'
echo '
KLUv/QRYZQUAwkkgH1BnrABA24MVyJENxj4WLhwSzxygdYSSvS59MzORDgyGAoEto0jsDTHx
9XOWl0pYpXrUG5qMPlbneFtuptv5FMdasGcns3AXCd8HEEQylmN3Q5V+oUp/WRoo36uHPHs6
+wS+1kuCN9TLzdRNJHYM1hsSQAACYkE8JPWGOHaviyxTDgAkQAkMUAcDFIMBSmCAOhigGAwo
4Wbu07xD5gw177vZqo64sbtwFDXaE3w=
' | unpack
}
cpu8() {
echo '1-4-4-4 x96 quad-core Android TV-box'
echo '
KLUv/QRY5QcAhlE1H1BnKwDIkoetw1FHvrd6TW5nqI4+EQedzut9ABQptb4rACoALAD72HTS
yk/im3vpzs7kbugyATqUkc6ORAG7AF+v3P8qKK0RiLPTzJzcmE4E9W9C+qMuDC+XM+FLV09h
E+lcd0VsFHoHV7lcXB2t29Uq88Yq8xA2UX5yb77KfaSkV6aEdHbosq+3Gs64G9qYPqX1GiuB
6cKRoYzvB4kBdLr1Je+rShcoKVYc2jpeAaUQZCHItkI6rJSUYZOhzs6B+5oNUHsIDIyIs8O9
i6S3AKF1dhYmDgA0xZA5Q837braqI67uHZjSlgNrgIOBQ8Q8pCcNnhe5YjIBX0edag==
' | unpack
}
cpu9() {
echo '1-6-6-6 Kramses 200 USD laptop 6-core'
echo '
KLUv/QRYlQcAgk8uH1AJrABITeNdwrPRAqt9X9oa+rr/FE0XsNM0A4oUUSIDBmKowyiQcm/F
1bpHYhKJN2Fil2uzj1AMCHmi+/CivJxl8wjF8EIlVtlpUwbbQgjFcONYdrmRTnyRTjxjT4OP
mm/LkVuvCdm5F7OevZiFVEfGPxo2fffUHUZGD5s+s6dxzOYK7XH4DUsn6j6caoBSEkDUkz9B
OTi8hVeAAhjSAFdvXeVIHxAInlxbujNlXkPpyffFqMtbiAIVAC1AFUAfSJgbUAKU9wNU9gNU
+QH1Gq2EwfCdq39vKWe7c6q/wBoyA0HbuS0w7lMlg1sHMAcaacWR
' | unpack
}
cpu10() {
echo '4-48-48-48 Dell R815 4 CPU 48-core Opteron 6174'
echo '
KLUv/QRYRSEApj+vIjBLLADDcJR4ZOmSMcbRLoFyVLE7QWmYAUkyhG4uXRgCwJ2sAJ0ApQDz
j2zYCFV5LceJnYZVIM0Qb46jYRWIevMJ5ZWQjNJCjmp8w8bjkeeoRoStN0cvIDkTshH1CaNs
CIZFChDO1ntzcITsMyPCiDSlBpRi7M1xRBwoMI9SSq1JvTn4qbFGUVJkvTkWkLSWbyNOWckZ
HkAvAFQjvnbhBgoEbw6mEDrz5jgmP5UiyXpzQExJoeINGxEDBYIoL8SM2yB4czzSieoDsYSo
N0dUuznWyCIBh4hwwdOxNJ5OR8GA8xeKttona4qP6pVQpZeQPY2P81B457kT23obqtCnrdCf
WheO5eixr3MheBuq8Xfihwo97XTexr5P9MRisX3sr63OnXii9BP0OWFsiP5lnHH3uftRT4pP
lJ7RjamY8Unjtr/QXqo0HkZ6XthH0aW33F+meI70DO2jpo99z23Pz5lKb1jFm+PoBZz2AXlv
jskSB7BxIykJvK9MfOnm6Hkg4pI3x4WYOi5BmhfQHsHdMbUKEhoQ594cbSWti5pA2JIcjm5k
219wO3M2oHd0L3S6nctRQ/QdIE+HJdiT4ox4IaVOYt5GAon4TqngbkB7lmA7VkbQHWKdDpX6
UpSYv5ZS6Xzhbes8MB41dR7JT4V+n4dfCUmHfifkH6SuZ8TLCo4sd0MLOWFLeui4+zQBlyg+
SgvvxKdSB4rylCRxyXvtOcdca6sxpthabymmmFOOYRqzLGxRlKUkK1lqJa29x5hza7WmnHKM
Mcxay6JUU5THJIlb3muKcyxpbT3GGmuKOYZ5bVkcU5S2koQp9t5inFNLa09hzCWvPfXUY865
1dZizqm23lpuMUxjloUtirKUJFHJe+8551xrrTHG2FprIQ+Mt+XbEQyq1Hq8fXpv733fNxdi
ygsIQfqIH6pFZoDlqEGwFQAEQA4AEAACcBMAAAgGEshgGAgBCAKCSSQgOCYK/2sGH+oAS++e
VqS/F4zU7z0u9T1GSvVeu1K9N6t0c0/yY6Xag3up98Qm5T0PSZX3+IzOLfeqIuUexEu952Ap
4T2fk3T3ICSle8dR6vZaKf29IEi/53FS7xlISvesJW0mAjIpo27dS5JU7yEm/T1VkH5vEJK6
vYOlfc9AqdxjqzT3ZpSK1AAym0h99z5VpS1TIwAH5ABuGkB5CC7/HDKKQAjgbgBaw+LsTyLv
1Z/UMvrTdJ7On3T45E9q/GnKFP7IHmOV1p6oStVeqErXXlRKa0/USmsvVKVqL1altScqpbU3
qlJbGwD2iO3o4vIdhC9r3/gEqm4WaLhveaVn2a/WmtxlZf1r5amu/n8Oqy5VPeifi7Z8D+pV
HtHLu3cB1t7Q82P9mJ5lzZxZiTsc5NfnI+/+/t8Hj/tsF7ZZhZabKpETW3DxywH3CuPZ
' | unpack
}
cpu11() {
echo '1-4-8-4 4-core/8 thread Lenovo T480'
echo '
KLUv/QRYvRIA5mt4IyBvKwATk8iUn9xdIuJLbC8JrUxyQsMubiQkFCUoEAiB6BE0eABoAGcA
qSHywcdrlRyy9toiwirB4QyjNF9pL15/I401lSQJQZIYXDA8JMpXgsjHvLXVBcNC0hAoR/gE
hMInksZiMNB4D3iQAFg6FR4QAfCVNjL5hVG+UoLrZlTNV7KALzLnDzcFt8qGle+Ru/CV3HPQ
6eRCKvlKdHZvm5RVjxt7V/dIP9CB7Q1jm18ZH5qxnbX4hfAprfG8fYOofVv8Mj7t+Nb12/x1
3wj9YecrpYYwyBVqWb4SXGjh3Xu4yfkqb4vW8bCjei2+UnrYUcnXIXv1ydceM8V8pV462x9u
yb0vnU0ZfAX8yvPB+8ooO3PvETqcCIN3klFH3xrFeQSxnl+IdfRe9iobT/4+oBnfHrMl+qI4
mO1+bI5PuUZvlKidReeM7e4vsb72PorQITdHu9NZn5zxTNNb3Z/k74Mf62vk3V+2+9t92pHz
KMYHBQUFTcNoGo0GwywMg8FYFmVRFEWtKjcuhEkWT7disoLsqfRBBswF3vU9fsD4St291Dmm
mOYrVblRQh5kDkZVnsxiP3LsbrcdfcTx7jWG5HtHul9efJw39pcIYldefLz2Q+GYgz0a0s4j
3Uh178qXMC8gICMhGnYpKuGdGMVqqIR3FoZMSQ3V8ZiYkhqq4zGLIFFXQ8V6IkZdDRXzxHJI
FKuhEt6JTTFr7sHFkbEspWq3gcg4GEnCDRHCLERgJRyDNg6inUEsukGicXWpWC7nkyOR3f6E
T9+IZeJitNtyLQ6A1ShkK/65
' | unpack
}
cpu12() {
echo '4-64-64-64 Dell R815 4 CPU 64-core'
echo '
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
/q05b9gEeqJ524Ixfxz8jbBi
' | unpack
}
cpu13() {
echo '1-2-2-2 AMD Neo N36L Dual-Core Processor'
echo '
KLUv/QRoPRQA9iRoIyCPmwBAIy3LSinV2zbLlasWEvo1qQe/YpQhuFH+WyAIGgB4ZgBYAFoA
rN2p1bjy7LIA8UeDkReNn89SaykAuHCQiCwGQ1lNF4fz2m42LxTPCBkInIIaHgFxTBzmxB8e
LqAd8KB7WuGp6h3AJYO6QJiKa6okh3YtDRIKq/XLpyEF1lKE7GW0MJ4AECFzLhg3XxbfOEwu
W5iakpR3xxV+P28kM0VyiuofhpzErUMcrfYR1HXlxNZv8iOU9Vz6VPvI+sX95H2yp0ZnR7md
LAYuo3Rn7cHWm4uSibMCraR1e221VWtpsGsaBw01S0aK07b4brGgS1Fs3HtVo2dvmjyJtWTN
Jrfgc9M+iRj+WZ2SjKse2qhIXBrxK0s56dLqSpJHufdbC/cQJsJuD+rb2ye2cOE7g9BJmzH1
U80Prk/gY46rCwzDOJhl4YtHv5qv/e0+P6WPuzgFdWzRwLlb88iDOSNjql/qc5pT6QFZOB21
h3gsRFQskIMCAwSDbQod2CwNJkoZe+XyGYxHJqbqTnJyDnrn2K0Sc+qMFiqZlZRqalxnKDAE
iFNnHPIyW6sjBSmjVv2fZQzcoCUQPqCxgIN0gPYK4Id9CK2Xrhh+6pczlgJU1dW5V1wXneBN
Dso0OEHQ1BAQD8hEOKPSSEqqnbiUo9qSNWNCSqPFwUg3GEdg597rYovkh/VDJS4Jc2hsDA3N
hu0BT8rqVWmlI7y1M7cQWtFBkCZ5dJEVHCEfnkAcxowh8tfz/1gcq4N0e/Ln4LoBaCTxpDA/
K9wEOcdPpxqOgLHqXpMH0AQrQRswgv0G5nqaeJrhzIzcgz0m/QlzxxEQGeDTfXJ21z8GJGDt
hOfZ08YsNAENX1FX
' | unpack
}
cpu14() {
echo '1-1-1-1 Intel Xeon X5675 (mandriva.p)'
echo '
KLUv/QRo1QwABt5WJBCNWAGjFDHykUWSQEvNjTGJMp1z5pZCA7MA9TKhFAAAEwwAAlEASgBI
AI5SkwOF5Y6KYGPe2WtyYNBQJBYf+BmNhuHwhoUCGNfhAQwAd9Q+Bs8wd5RyC8W3mjtK4tpj
j0usy+2ECAubBNfgjoLaIyMEN7IUd5SM3atRcmcRX8r5ztvXxuyOSb/6vowv+117fpu/0PdF
LvGjI+Y4YiluI+sONYkVxjZ5ddqnVyLxYxEk3OFYFuWO2knrL0SZrsaiSTgYisUD3X0ZZ4Px
HQKCcNJzym+QOcJLougixzkdijF6eOVZuvZ8JmSzYdQ/d9aekPwE7xzTlvQn5Mt2X/b0+PTe
IS25h9M3i8n4kfg0azkT7tuIQfYuNyLyckyaskUczAUc09YSCL9ne7iC6V4JQWzCfTBqjj1M
sxpLoqEozR3V3F6M4sN67nlAmHsv+4TKkb8oD7Pdb5RJv9gYKBAixjTqEIhm1AHKWTCgrkEE
YstArr0BOSgXJ4Xmpu4j9PRpQcgRCckdf4fcSFol9GuGecuj5uBxngHakML8
' | unpack
}
cpu15() {
echo '1-1-1-1 Intel(R) Celeron(R) M (eee900)'
echo '
KLUv/QRo5Q0ABp9XIkBrqwCI2LZJIts7o1loU/RrgCM1Bkm4qbLeX6WzKj6uMAFQAE8ARwAL
JHEgV0hbZFGyfUlxhRq4zDo7PSwsEOTgX8Ao1WnCAxwArpC+BU+AuELIaYsvGVyhh9u3mDvM
ktMJGRSuA1XhCrVVZGxQn4RcIRm7lUXJAdxIyRVy+qh7W4cZjDtZmUOV1ofD60XGIAiTIrxC
jbMozzbmbu1cuGx5XSGVkSXEFeoGrlu2294ttv1gcEJoeIJIPGxfGWyxlEiQAYXQw0KHjdim
06c4zJwl7eT3XO6A14X/5rufaPdlO5g73vsyW+/ZzmjHMY79iY99NXwp5ztrX+FgV/auiy/7
nfW8Nl/b9T13mOlmuSmpCfVps+B6l9qInNxyptxH4D13eULQrbK1NaE+2KxbSoFBSiADCKLg
fbGJS5rL2Omcpyxu7rvh1eh3e2cmwr178WNRVMbZSoJ4FJWTKXcnKADAIKuqBxBI54gcFYp3
xUIMqhrUyHoLjYPwgszI7eGRdSUOFMYQlpP0pOoEAV0WM1zTXUey4OeJUEZtb+UNcgLSAYUj
iyXJQ3TVfIX50ANedGFbHwEc/JQzJup4YQ==
' | unpack
}
cpu16() {
echo '2-12-24-12 Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz (vh4)'
echo '
KLUv/QRoXSQA2kAECyUQTWMdEfORapSl6hpfhdTvIB2fCbydyAB94J9MxTuCiACAvIMbrACZ
AJ0AsZ09tMbz9g9R+7b4ZXza8a3rt/nrvhF6PwzyggEXWnj35HyVt0W7ehcKRhyyV5987THr
pbMZ/cgHndfuHbL2epFg40CDHwuibIXX30RjzViOxaAgKlVY4KBJonWzTdpeNNQLAHjkY97a
RoUFCo7EoG7gCPRDLYqAkuARHiCQcyVcAIQAG5k8AgCum9FYFvBFhriCmwG3SgYrn0KuAvcW
nU4uZBwvAIDO7m2TcisfdGzdal1fZePJXweaUUVXaSXbfdbc3Wv82Byfco2+pKidRcQfx/WR
7d5HsR9F6JDbanc665MzPll6qzsFRwEqImz8J/mMp/zimXDyrNEhT3k357N46bs6b2f5ckYE
XV6JRtmqktWWsz3Cc+vq6J0nLTt+JA8ha73or8OP9TXx7qvtPu0I8SjGP27sXd0TrYAI2L4g
lfGhGe/9MFvot4tH1ATfzXjhzNpLJWgtrW25Lxemq3DjUjiGS3CdsoVtufiufAkpO3PvkW6i
Ola0NhuEq/KMFNo70r3ijX2VXnReWzGBOf004o4t9xh65f2iPjof5Wgh4i9K6AvTsUQvyvW1
77Dz3tR5d0731/ur/IWPfL0g+e7wvkIFQ6zosEe4EAkG7ySjjr4tCfEIYl+IdfRedrrx1RXM
0SyIUphGKSQxKh2KMjSHapLD0iSGORpDWpBDUhTTNEmTDktiGKRJiqKWhCBJWZCUlDKkRKm0
KAlRUpIgTHIkhTBKo5Q6HFJKSTFMYzgckJSOdCyIoWGQJSUFORblcEhSoyTLgjDHgiSJUkql
hlEMhyYlwyiwD5Msnu7CZAMyRaUPOiQf8K7P+dK91DlW5Ub5PMhWstw4NAakYRJ+cT7TMVhl
bi1ktdd8Mb6+xKtQEZcDa4DDqMFgxYzIjEiSgiQFSQfARoZG0yQHYsA0SQAhCAFCcIYihEFI
eEU4FDgnBg/CvfDTFEdfCnzKp/dGFGcRJTBac/VP682IZ7JNS8a8Qlfee2qAsyGbznwFCy/m
U1ALcxbXtKQvWrgyn3pamLNRTRuTMDy3ws1ZhXNbn0zs/KfjswDmAk60ueL78UwnwrzC2pwG
8XKdA8G4QlXzjctfmU6/IHBeOaU+Mi2DiV5xvoW/1lQ9L8N6AE/hzUXgVu/lIk5iDv1pu4k5
RtkHE4KPT2MhGjqcCQQPp9nTTpOA087fSVowhrBufLpp4ppGv6jkrAkYzqNwbyg8FOzwJTe/
uFlcfjE0RytY1n2BzX1wHq3S3EPR87qJk8A3bdEymQU4if9RYRQUH0JH1v4o5Y+HZ4/Jcx+p
6C67cHK/roV6KRX5eh5fZ5zfBAGIcypOQhRdDjoqorlsIRh4MyFFCa/+w9rnqQ9IhTJSxUEj
J/m5uPWXdiT61TaAn85i7vm/JHEVLykNoOaGbE6PZXMCHEOy4iJ6P6vgAOxE/spU7N53w3RU
pvPDpg6++vY602wMoPOM5mjPE/5E9C+1WNOag5ef9fYNxh+A4wfWolSv
' | unpack
}
cpu17() {
echo '1-6-12-6 AMD Ryzen 5 4600G with Radeon Graphics (ai)'
echo '
KLUv/QRoxSEA6kH0CiUwS1sdaPiIsqmQTVuLLykLrtQOna/tY8caFQPfvvvkgYUF54EBqgCc
AJkAyXde06cCxnbefuLRr7Zv8mG3a8dv81d9m/NWJGPGgWDrLLta7q3Iq8+i3saCmbNccbml
i/NALHx6KM3SarXOUlc3Gj4KJLiSHCKs/jaaeiAIIgBBDEkEBAsUkCTx6IO62pEo3GLe2Efr
ajjhgbu3Khm8iYvxAwiCMPxwtxEaDL4t3REKANiq145FabDVkvmC9TCwgICu6LaJCwJqIfiU
W+dAPgAAfN2rD3LJLXyKYNTHL341PirGIfQ7rTOcfm80LrOQGc+p5dvtFItlr/ZsKRNQm9Nv
aCqWIW6IaZJduYQKXhGJk18n+3lvPjrlx9+kPFcSZEAkjz4b82X7xeVe+4JaYIvGlL8cn3HC
NwYu55Hi5874uav3FIgXougytnv6xs7aUcEnRbKs+JEfis8+7oyldqMfmyvbfdgP86e1N71g
DNMjlhgOcq7LySv2ml7YRIYPN7LFbC+S37FXd656uupqdTbSXS5TlLQ5X5baSDse8YLuEJy+
AxN7ZPeYMK/MeuW49VxifAFZwcPIcOH6gxuB6WMs44uopcYL1Zc4Ka7iuS6HsuknBlPO1n9U
Xu12oragV3hbX0lWS9/O1IpmWnMe+4kbpvVM7SrFjM2I0bDSLwzF1CfWP3Elo10Z4/RLkiSH
REEhQeFwSCxLQpIgCMQhSQ6HBRFwQCyJIZEwLMoiAFmSZTEYFEVRkuQ4HhgeLImDP4gWFjKI
YZbRvMVzjO/4AS7b4TIeHywXES4nwDuu9IShe6FSGd02ZEAcvYrkJzBcSUCWAgoaHAqJhObV
nuKl4zXsp4YotmYpLnx3ciO92EhJYHzDGBN1o7iwG71IR2rrw6e66DtPFyLGYwxc510tXm1x
BqMiXW5mKZyrfKwFgKGowTykkDGkRkRGZKRJOoBExqg4GQ5COUGLMEUERrgzJMbE/0wgQaYH
7rSgB1fM/kMSWx8VlA5S0OKNuWI8OR/359dtGFxgAconnVldLp+9a9V7SFk+bs+OtlyqzwrK
xcHda6arrSv0SUHpjILKezeeFaB80pjp9b4rw/lQiyR/K5yP+vP9LYeOwRWAt+ciFnSiLUur
rq4cAM/MprXU19jHLpLvmiWBe6zHzaIqO1sZ35yOXlqIa29j88LhLeMSOPNflUdcL2cNG6ti
NPWjEbKXtIVeflMMLyjsWLuCUcxPFBWGmna3DgpIJmairUxU9OPb1XINMjCrs+PJbgrQARvc
19rY5t2tN8ulUxMyLr9RA4/vay9o8CfTq00/5AalMO6Kxg8B8HlNZ18ej/83Xw8IP+brlaoW
nemRDRyMrTRoNR6FdbT66kV1nQt2zfQ7krZmj6IJ9/O6aXGMPXcancqeawY7QJtwnNUtOMQ0
DPeXb9dzDOgUh0ST3w==
' | unpack
}
cpu18() {
echo '1-4-8-4 Lenovo E540 i7-4712MQ (PROSA stud organizer)'
echo '
KLUv/QRobR0A5ricJCBPrAOD/6k2Kdd940OW+jV8IowHH1LHEyOAj3wFiBJCBBssApkAhwCK
APGt67f5676ReksM8kXiMHCphXdPzld5W7WrF2Pi6JC9+uRrj1nyLJ0tyQeh1+4dsvYaI8IJ
QsOfh9mM199IY85DeSBNk7HgUNBUbdL2YuJI8jFv7SRjQWFxlOYHn3hIOIRDwzwegse7gINE
wNKZcIGIgI1MfgGA62ZMHBjwRRZ94pbArZJh5ZvkKri36HRyqWS5AQCd3dsm5TyZapj1uNf4
sTk+ZQdTxegS5Pq9ryJ1yG21O531/XH0VncLZwGnCBv/ST6Tx5AmnDxrdchT3s0pLV76rtAb
Wr6cMaLLK9IoW1Wy2nK2R3hu9JDELDt+JQ8ha40B8WN9jbzZ7tOuolcx/nFj7+oe6QlGsN3h
VManZmxnEq3xvP2Cqn1b/DI+7Y/WXion6lGN1Ot2FE0MKOeq4i5lg8QxcJ2yhW25+Bcl9a58
CSk7c++R6mZHum94Y79hXoRee6JgUEsd3bHlHlOvvMeoj85HuVoY/WI6Fun12k2hdwd1/1X+
Qkm+XpR8h3hf4cSiFSH2CFcUYfBOMurom4OJXlHsS7Gu3stON766Vj7o2LrVur7KFo/HsizK
sjjOw+FwChiI0mgeR6PRNIvyLI7G8zQOA1EejcfjOI0HRHEcx2kaxtFolAUCaRjmeSDKszSY
JDFYiUkWT/dicgLZVOmjCp4PvOuDDnG6lzrHqtwopQfZehKmoUAKGvzilCaUyAo5rflihGi/
vsircIoLgvW9JWYX/XbxUWXguxljQLP2ahhqLa1tuS8r3LgmKNneSVpuawuAjKjxOKIMMozN
BAVJkkI6gETIqDoH8ik1TcCMERAi5sRS/A8FFS4dG3CFtZwlIk6YcimJDtgk5wR1XK4Zk8Un
sMVDxBNion/C2hcU+QlCJ9TqKYENn+w6gVqWVtxECfmm9FkYX4KDEonAOWU2hJsM6RMh0U0p
7+Zac3GHjyoclWW/p4WGjMjik0uVQdh2h0oi5FLuqKQfPYjKWrQQKCqYjDPIvFVSzilypEW1
nRlB9gFqeGTDqWsdgBaiLwZvZEI8R/Gn0z21lUPE919W+l3pW3zYoa67/7ma7JfvqXav1TPR
VPD4FxvYvY+QCPdXlYD+97NAYZox/vWovIVyerIbhrErTRTiye/tcPmHerjHhz10g4iteO9n
zdoA+1KxJ8/shJsDnYcJTIaXxS7ju0nnln2fbenY0DSGz5+q
' | unpack
}
cpu20() {
echo '1-16-24-16 8*2 thr + 8*1 thr Intel Core i7-13700HX (user submit)'
echo '
KLUv/QRoXSEApjqgIyBtrAMBfUS1S7lyNhBkqR+VRby1HGkcIfAfpUMCoQwIwQaLnACNAJAA
LX4Zn3Z86/pt/rpvlN4QgwxJGnClhXdPzld527SrNxLxc8heffK1xyxR1NLZEqah89q9Q9Ze
Rx6cIDR8oTAWS8Xr76OxliwWiwJmsSgVCw7PtG62SduLCSQf89ZOIhYWC8aiCBjvAg4QAUtn
wgUeAv6oy0YmvzQUAFw3Y9JE4IvsecQtgVslw8oXyVVwb9Hp5ErJ4gcAdHZvm5QD7BGu58Hg
6ewn0eXI404y6uhbo55PEvtKrKf3stONr66VDzq2rsrGk7+OMl1Ri2nU1M7i82W7+1OUTuEo
YBRh4z/JPOUXOuzBpSsCTTh51umQp7ybE1q8dFXJasvZHuG5dXX0DqSWHX+Sh5C1jvTr48p2
n/b0fIrxj47gA9ubpTK+NGM7g2iN5+03pvYNz2QRKOeaDpLeVx98DmPW1qNRdqfg+lY8yB7d
PmUL23LxkfZzh2kefc49dlSSHujQBNfHIOcXoz8ppdVKcupC09uTiz36DqTyZBb7k2N3u+3o
3WssyfeOdK/wxr6iXnReO5JgTkP93LHlHkuvvH9RSodMxx69KNe7bZI95K7ad7ip8+6c7j9a
3WcpQ6Z0y6MTi6IopShFUZTicKiGo6EYDNU0GmVgoBgGo5ZFKY2ilFLKQDkcjkaDaTAYjKZZ
GgMDA4ZRmGVZFEUpSqkkOViISRZPFzI5gSyq9EkN5gPv+pw7lu6lzrEqN0roQbaYJmksGoZf
nNB0Eof3bhc6dekbYgbpdzOOOLP2UpS0lta23JGTbEeM16IdnbVuO+1yK4KW29oerb1URpSr
9Lr9BIC6qNFchZCIzIyigjRJY6BGpmY2qTzCGDnKQIgREOGOCktK+F8YfS50VI64g4N04Kg8
wInlxaHDRjUodp8qTXWAoFGlc0zWvXk6ZFSjsvLs62BRTbqi1eWjw0Q1UlKejQ4Q1Uwn6l1+
dGioBiXn2dFBoZp0RKvLR4eDaqSkPBsdCKqZTtS7/OgQUA2K5KWq7+BPN+2nuKBefqrnIDLj
iTm8vZ1dZg5XJf7nQHBS2u05gJzxxhxubs+uM4cVif9zMJiEdvccRGY8jvlTHW4ZohKA86Ij
DK+qoBEOH9Hmb2hZJ2Lb0GRu0CBoyN9SBHNF0+Uszf2tI5lNzcDMQsaCnrfMOgES0v+PL068
ClabXlc8ZfVZ/G2Uif9+TkhUoBF51BvM/Tmub6WUJCRnc4PnthtuTLgx9FKSPYrKXoAnGonL
z2nQFnlhUcsxIwOg1RuiG0BUVysNdZjqnh7tS6AoqOj91PaSDVJOM9idASBdOsPlC43ACeGN
/1hXPh2Qq15MEmKDLoOWe2EE2Y5kjHpuT3nZY0+6YFB4UM/bW+9xShBIaCbgxs5hglN9t63i
' | unpack
}
export -f $(compgen -A function | grep ^cpu)
test_one() {
eval $1 | head -n1
export PARALLEL_CPUINFO="$(eval $1 | tail -n +2)"
echo $(parallel --number-of-sockets) \
$(parallel --number-of-cores) \
$(parallel --number-of-threads) \
$(parallel --number-of-cpus)
}
export -f test_one
compgen -A function | grep ^cpu | sort | parallel -j0 -k test_one
rm ~/.parallel/tmp/sshlogin/*/cpuspec 2>/dev/null
}
par__test_cpu_detection_lscpu() {
pack() { zstd -19 | mmencode; }
unpack() { mmencode -u | zstd -d; }
export -f unpack
# ssh server lscpu | pack
cpu1() {
echo '2-8-8-8 Xeon 8 core server in Germany'
echo '
KLUv/QRodQYA8solITAL5gF7YbnaqsSsYkliK98HHFiNI3FSwNumyBYOykA5Aew4x163Zw87
7XAqwtiSPYwAiCZa/8LET3hd+xO/ZCDAJQlLGEACjIF+VflN4KP1dFkhfg/zHeDC9Esbp39R
LyBo2lZJfWLmstJeIOmA2/WGWC23lWFWY1uv2rAKCd1SESOtGFYhITDsnsJDEK24vW70+1S0
SxQgQIII9QEdLfxiBElVRWsZDqgLA+oSr9kgrmS70kDZt2WvOkEnODfAiaJIAWgWoteFUwLs
8nwc
' | unpack
}
cpu2() {
echo '1-4-8-4 Core i7-3632QM Acer laptop'
echo '
KLUv/QRoxR8AukKICyngcGoTEJCWSciVLZJIKEXuzdZEplGI3JgV4DZJLMuEV2COJ8wwH2L4
BcEAsgChABMIwcjiqQJCoZiUW0AsFAUYGxxMCkBPd7MpzAYHDRQMCMYPfDKB0Xg0HgjoA0wq
D0ABQDr1HjHgLRmcMI9LU6eeZz9JPo1eNlAgeYTs5cQ7gkmFCMyCwjg6MSzIGWEChgHXYy5T
GS0VhsCDolnbn0/bw5PARDQVdVQpwnGHppbyxbLnVuePBucG5TNnZAwB85Syt+DZuhVCTBYl
PPsSYRyPO7Q6D4xGAAaQDLqHha8gkYBxPJpHxHRIxqhXtlpWRBAx+yncNw3H1BiVc4ZWaWAB
l4UrJkeQhfSMvQ6ulXz21FuvuFcqnbGyRyhPSVu1CMKs9uI8I2z+yqVIIE8DZN3SAMd8nsiJ
KluCQ5hNskmvTCh34LRw1J43pezB9QuTCY4pPckXVCRu4OkFBE5I7ROKLG9tS4G0dXLIZOJB
q0W7Re5Oa8kvrU0dFfO1aOKKR2Nyhkb0wSMYaVlqnS0gMNNDZeJBbbVBJ5jGAkJRoOGgSEgC
beE7gxBqNuO5nbOT+wfdE3Mby4qq6aeaXfuu+Om9NbX4wk9n7/ptOfMZyfzI0/PJuesudW72
tv5otNpL0K0raB9ju2/yl656xLSeyz3VPrL74n7yPtnTSY/2OYQh1RgwLHvl86g3jBCho77e
hdUnrjC4YFzqDiMcks2J0NPW9HmEQqFCuYMFBg2FQkQiIrlDPm1wO+OXxnwJvbWIAaP1KX4M
W7TmUWVbDXPn3r+2bxXVFdO7mJZm74Uu5jedchji50xXem9GqHGnbM/VPekaIFMWbuL219Hm
O+voOTp65jBfe+9svluknsa15rGoFln8eiyeT5J6Soqnc6rHdNoNU8mafmvhMqYzFo2D6dq7
xfZxe/pjMa03kjk/OeltV8PsEbY+6O54cDZ7BpahRa6tvb69OtNo18L3CwQbXNjTA3IgUABA
FFkPLUa8gdKoM6utIHa/NrtPEu5DQv8gyge6RJ2RmegWA2w0olDY/5lu43u3KLpQpvV9DWB7
CFzd08L6NLcg3DK2Iii4oCIi1jNIE2hkLi8wQYrBQthc9idpAuBaroQWpoIwMqR3NNkECfJu
sp2IAOACZSd4BLmUzVHl0rV1Cx0Tz3XrtPBCCl8Kvi0Wusx4XxBktMyMQbkszXzEs4pfZzPl
aJcthoylYAaKfS4KyazRcAhc3IKx7ShmMdAXiKvD0NxyiR0chavOhoeEWuhRXAvYVR9j44TQ
yFRTQMEnwBmtgAoLU0YIijDMvRARZYMpA4smUrtjrICOHpSiNYqBXUcja59JvwK0LWESpwSv
+wJQ
' | unpack
}
cpu3() {
echo '1-2-4-2 Core i5-2410M laptop firewall'
echo '
KLUv/QRobR0AFj+vJvCyNgHQEZLJrWwzBCOlyJ2IXthpoGeK2U1oGVrADy9eHBY/BkIIsgCr
AJsAlEmEYJJAgT4kMAcbuFJqZ54PiQiIhAD6wjGQyAQaMNgHYDQPwABQisFDrzx1EfNQOm8p
Nl0bXhRuBTXC4fIZHVQNeAZMRsUTybRytMg6Y8MDxfap0jGdHM0jGYA07/sV7huAFs/ksarn
WgiTCzzWljscee6VTpGwfiyfWadzDA9k6+DD9XUvxStT3bS4dsfyTCgX6JUGIEkAA6iL1ICM
z7hoeCaUiIJwvaKz6qa9nDYZAg03ykcRT905mXTeSObBBR0Z21SuKhHrOltSsTXlO8j+uk15
ttYdr7slc7W22asqzEx2pOuMzW8qM5cK9Iiun2KsazCZK/DUaaqkyfQ1vMIOA+PyVAte/qC5
uMJmezFTRyj0vYLRmOjlbL+KuvT68k7vW4lNha/SOMSymEskUMTg0Fp24hOKchprdxGK5xrQ
aMC4zT5W44ESDCaZiwsmbqIFAS6EAAJJgC5GBfPc0llSeRipaaqMOG2yqCFrpt5l43bzF/x7
rHGHr5I81W/OIWX+5Gv6RVFf2di53Tlcvem1UyTN5K1ItbON/JxNXSq/rWRHuNq1UVcmP5l6
476yvLorZb2S0yu8YQ/icdpNp4m9Y8WMEnuDHWa/WLOB+95Ot2QwNJkLbEBEGYzH1sHYbrmw
XC6gcF+UrfNtp0Ld/L0KAuqFjD81j4u8qEWOOrc8fPLNJjtze2oqp91bRrfSekudcae89E1f
Clr3iI5xOJqyL6VtviSlPU9p7yTmb8tLUk+9aOKw98tiV4vxdVb2qdR25Ji66A2bjBK6DkWi
idsmTzUnP2Vfp0Sudoky8yHWX5T1J1vE7jP2wkh9QmFt9w7X8SrqNfmF8uxuK9lkhO9s4osy
9vUnI7yLcRNJDWMgUASALDIelxSA43If9uHpvXHEbfAybA5yiTzjJGNsNEJhrP/trvE9thy4
EPWxBL9Ev+3Tc4V4y+yIoASj88gBPDh1YC0Hj+9SAIGlXIksTAVhZEDvaLMJEPRuqp2YAOQC
TScOHg0AZWaC3ta8uvJY+7RdpnWcJnqpGYJyWZn52M42vTHmkCoi6xGLgGI6qJBMGjmMBMaA
xU0EY9tRzDJQ4nY0BW6JnRuEi+6GBsRfsKN4C1hVzzGGYiil6i4wwSfBmRYAFSBTdAhduMYs
pN+yYcqIRXOpXTBSQCcPSsga9cCuhh7z/9NC2xMmKUr4tsTH
' | unpack
}
_cpu4() {
echo '1-2-2-2 dual core laptop(?)'
echo '
' | unpack
}
_cpu5() {
echo '2-24-48-24 24-core (maxwell?)'
echo '
' | unpack
}
_cpu6() {
echo '1-2-2-2 HP Laptop Compaq 6530b'
echo '
' | unpack
}
cpu7() {
echo '1-8-8-8 Huawei P Smart Octa-core (4x2.36 GHz Cortex-A53 & 4x1.7 GHz Cortex-A53)'
echo '
KLUv/QRoTQgAgk8yJCCN6AGBEUmyQvipyGwhCMTqQifa7nWt/lvbXsAxLGVACC2ABrswzRtD
KImUazOO/vUjml18lTF9qBAGEXY5CsYxMaQJmQvlLPmUUkqxNMwykSDxhEWqHCIfpf2OZQgg
ZdLvM+rIJC+G7aa00gJkwGCfTnbDLo5dzM83RJu1fUY7MBt7U8faIwxboCh+vj7I3PJBRTbW
eUzRSvacPOCG/0+BH2/nDe6XWOxqWOCfg7IwARWg3YwKnfyYol1NpDlj/LRLvvW/SHMoGAAr
Q5AWDg9qGEBiofABuk3KGsauTvhpnhsa5HVShxsS93JpFOfBzhP4ZgBCDQ0XCuEub/2VgAiV
mwwoAdUl+VI=
' | unpack
}
cpu8() {
echo '1-4-4-4 x96 quad-core Android TV-box'
echo '
KLUv/QRo/QgAtpE4JBCNWAHfG9LkksIm0BaMBALBz/jVBGlPVDQCo6NyBAUAwCBwEC4ALwAv
AE3Pdb/CdQp8qMWbgAkggTgKsm3Q4Oq6V+ENa+PHtSUIlBuYHrM3ylI/2hs93AgNJUKbo6OP
wb9x2qJDORYaBQnn2KA2qCXS+vDEqRwdtcTnrLIx5YhBMcoCQQ+1/s5JT34q++OePenb28ku
oTlh7mAtuGutJaBYGMsEguMR7F0CcdRCLp7AlVI7ohhGqqdtezZt2y92uj4zwajwcja9hKa3
k15PBt3hSVEfciy6hLiCefi5YmHRfBgggCQg1HBWDGNRBoJsaT4B1kZtNKSQAf5kC+J/a19p
9jscIBj33n2UBCmUphwBwqU/HBDKFhi+RQnSA8zN
' | unpack
}
_cpu9() {
echo '1-6-6-6 Kramses 200 USD laptop 6-core'
echo '
' | unpack
}
_cpu10() {
echo '4-48-48-48 Dell R815 4 CPU 48-core Opteron 6174'
echo '
' | unpack
}
Venter_cpu11() {
echo '1-4-8-4 4-core/8 thread Lenovo T480'
echo '
' | unpack
}
cpu12() {
echo '4-64-64-64 Dell R815 4 CPU 64-core'
echo '
KLUv/QRoNR8A2kBECygQbcYJiNmWkVvZhZlEnSKWBFp0GRq85wI/vMgYA62BnzagCgCAQaAg
tQCvAKEAjwPx4OCIj9hIGkchwCHQLBUUOBIPuFJqQyQPQ/N8RmZlcT48wGsAME5t6eD6FrzT
Fh3JwkTcviUdcDSwbahTUw0HHD5jgyoBvsERoUHiQCSL1gksss5oIGEi+1TZls4JQtI8SqJ5
3a9wnQIdJG5RPbdacIstRyZ57o2+cFgrLJ9ZZ2sNCVzbIIKr614GU9t0cO1II3GeL/RGCtME
YADa4lNkfIQHA4nzQM8CcoZOqpn2Tmw2BAmYXrj4UxtulIcgnrpzruj8kCuCB0RkZFOZWqrr
bPkiY8pvcN01m/Jrqzd10eJtb0Bcq+3lqAKP7XWcwbxkJLrO2HymEoIBI2Jrp2dwc0i9MGja
TCVpvWOD3mnbUe+Ra4dHet1Gayp0lIRkaRSHYWCUZ3maR3kUCoVCWTgMjpJwGgKNwjSMYlEW
C4OSeGLhNM5zxnFmG7vgzKLQiS32tjBIJCgMGLdXhZWQMI2ARCK9ML5TaBQc9RyTXyj/pKly
/bEGtbfeFmoN0belJJMR3skI32J8QFIn1HA1P3fJuNt89FhUNvmWEWqIQuCdW4wj/J7OKPMn
Q6RD3vvElJMc+9P0kq/iY18P+Tn7XSqfrVxfQNiVveuSn/zOuK8sr+36qlNS4sdyCRg9Y7TO
YITXIQyBwS2aD7jOrfQGxIMvQIDYBiN746Hh8AWF66Jsnc5RAUlzcWKdU0vyU9utpEwteW5e
5qUtMm1vyysSHS51DIqYQowbkjvhJ7DooGpG7i3he831ZV/0XvVIRvsW9WqWUMT0SLJHUGdk
0GwWZey/qKG2yvpOt4j3wp3AlxFyjvYRFcdPrFXSKSMibM2VGT7WLd739aK1mOxV/AhbD3WQ
fJA0LXf2LNIh1bpWiyFnXW/IZJRnFsh5Fgj7etIb5Rh2IIAAYJCsDt0Itwf3dUHgOS8IC3/b
cx+tCmlszVYPLUY2cy6k32i2tsTCachLepZh+yFZ+9QZqUTqQcGisUgRvvEwh9VHGLSDCXO7
4229V2jZPh1WaFKMZmTN3FKTRx/WIhwGNK8IzwuWRBf5u7SCYK6uBC1MtTDiFrOijJL+3UQ7
keVCzWv4iQk9sM2ASaSnUIZnvcRUvcJqZcM5YIQfVShhtbI0nFeGKOysSdUYXLuFbGw5uKQI
9TqKlwFgqMGU058zcDgdl7WAndaEy5TLvwFg5aqP4zgAYc3lakmdkAAuoQCsBrIlQlAIw4he
PFE6mEJmPV3qB3YDIAGdPCihNatiXaWRte+lXwO0mTBJUQLQlar+
' | unpack
}
cpu13() {
echo '1-2-2-2 AMD Neo N36L Dual-Core Processor'
echo '
KLUv/QRolRgAtnKPJQCPWACgNvIHK2l1aPsb21+AYWrULM1pbgXRH0X4Tira///c/16KAI4A
fQCRyR+um5YG4mTgi0xasEzaa7lUV5OFyut0ci/kJxaLiMa5NE8vRpu8dSo0zmyvSx3bSlU0
TsPR/OC/8kEBKdE8kFVdn9WArD3OUPTcL3qkgDfj8Zm3OjdpJHtOMnxh94O4pK6rEt/OUJoC
yBv9IoHnEcAA62YUoPMWEwpNAQSCRK5Ltlbdth/V6iQJ0+tncaxvbQkzo5mo+W3pRSIx0zXc
S9hZpHYg3HZbSWLvGdGPeg2r+Ah25Zl+8EWsroTVxR2UZ/nz51HewyPPUo21OweiuRCQyPma
ZbyLBnIwYIBg8FwmKpY5TUpEvodzsehwOAYcjkiGg+UxyUfp9qWpk3nbrBMXgKxaOATkEfG5
Ea9UHhAbQE5I9eQbTf1Z5le+pF8xnuIKSrAd8mhGb83Yzib6WjueLr89yh652rfFL6OvHN+4
v0y/7hutV1TiicEGSdcZsTeZYfaLKyTsojrJB+GTTrlQvOEWRoyf+wSlUnF5Y+WDk/ZWCKuG
p59k/Lot36SHoDvJznVfrSw6T5RhmCBDZ6vL1QPNWowh+qo8RpsQsmoE3zRG69usmUIYCnKv
Heb95MPgc/SOsXiear3SVsoKYsQitT1a/Exj00KIxvYIIYli8C0bnfQQ52qvs5+c8U/Suwe5
u1fRRqc8pFPezTlBdCvUkjXL2Y6Z0j0e4WnjdvXR5Cx19E0n1Nde8hCyxhl+ViBABMAoqhrs
g7Hf/B/GILKuc2SwMcJQiDgBwi/gjABrg9JzmNOqR1vTDhyWM8swRNQfQlP0aR5ABZrRgKxQ
LLVBwPczF9136UFQQFcRWm8ZQoe1KIqmjbAGHt6QXhiuOxL3tMSZcblsxP24SlsticeSMQPw
nwvt4I9uNEhBXFEJoUWnhtbCEDvYBbOhnR6FO++GRBrkG7DW9Rm5AoWQy9RySiElwBmtgAoL
UzgEXRjGXoiIssGUkUUTqd0xvoBOHpTCmkWxrpQel//TQhslTAKUqRruSw==
' | unpack
}
cpu14() {
echo '1-1-1-1 Intel Xeon X5675 (mandriva.p)'
echo '
KLUv/QRonQYAwsolIjBpzABoi2gVcBKev0FN8WI7YcCuNoTmTbB1dAmqC8N6MAf9xOhcS6B+
oOLc0Qb145avJCV9NqgRCTRE5ZAsLCJ3UOm9nwP6Pbd+2qihgkUvysD6XJ2vNKuvSDiO7aw/
UJ2JJoBuk5QfQVrssW26Wen4rx+YManHlUC3TAuQBw/M+Gkv5FqfpKYfJIAxwZfHWZafaSUx
ExcgQEik8g6fj08zd4EHssVA93AJ8C7xnA3qlYxXshyLBYN1XHECyZgjRUkKjzkkLOUQtuV4
YQqnBNP0ggo=
' | unpack
}
cpu15() {
echo '1-1-1-1 Intel(R) Celeron(R) M (eee900)'
echo '
KLUv/QRohQoANpVBJCDJVgAHS35yk/0LNr7il7y4NiXZTi5J2xh8EMPkH0ICUAugATkAOAA5
AFDzg//KBxEyshyKJFqSPScHvrD7GRyq62rk2xnH6ldBJBQHNqybEUHnKZJoMR7GO7S16rb9
LK0GBJfkrAs3+uHAsJHJKw7BdVNajAx8kU1wW0JWvkpugQDkdTq5CcuZ9Cq0yVtntJzZXpc6
ttWCsJoH7dvil9FXjm/cX6Zf942XV3RiikGCtXiciQQiTWo61iLRADRNY+EhPZR8lG5P1sJD
appGnczbZqUB6zW9exVt564cI78V+thnfmKZXxkzHRPjH23s3O4WruAE2y8ztjOKvtaOp8tv
j7I/mB0gQIaMujr8eNMPYIxoDLDgY+WX46hwjTmVzU7HpqEtYHxLTLzqx8jKta+0nIvY4e1q
oiCpQLqitFXU0Fyo+a4q4SvbmVMCr0burQ==
' | unpack
}
cpu16() {
echo '2-12-24-12 Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz (vh4)'
echo '
KLUv/QRovSMA6kiMDCngcIhzFH4Td8ruJqLZFq6rg/LAmM8J4PRtw8ZYAfijNgkAOE2YISXG
hNQAwgCwABJRul4TTmKBFGhoFCDgoDw4TGQkJUx0jAYGo2lUCw5oIA2QAgwz4WDSRNHtalOW
CQcNGI6G5gfeoM5oHs1iwIIotcIDQABQuOIbT5ucLI/Kc3BB144OGt0UtYECh0/ZokrEI5hM
iLA0lOXReoFJ1ikTLI1kn7pt6ZQilkazYDS792t0bxElLI7mramnoyCOK95ijivSnts9fzhY
JxyfWWdrCJa4XIsLrq/bQZjapoRrVySL43FFu2fRNAIwAG0SLlZ+wkOCxfFwHpDqEZ1TM20n
sYkgc67nHO3KwAIqK9lUniIMdZ29UDKm/BbXX7O5X456Y9cuoVwp1+tNEea1lec6ZfOZLqWp
vqcVIqJvNV866JBBtn5qgKdC0PTMpS/BI9wm+qhHTChXsEo8PehvuRYle4WJBE+losMXRDzc
ANQMBNZo7TWapC8lcu0mj0wkHjjJ9Zvgn9cOTZspBK23jPAWLv7q1T5V6tXglXbPPWtqfJME
hFEwzOLBEGAWDaMYsGCcwWhM3jiJe3AHpKESW+yNgbBUi4h3PFi7HUPD8Cb42N7F/Xpz07KV
8ZVIPrmyq7+V8U3KyFmd537Oj+6jhNDUdSQ2l9NxNcP3Zdxt/okY3bav4t9bjCt8ffaw39KZ
3yjzJ1fQKwjvlq1ztz/2R6PXnpKQfUX7ORt+lc/crkMqdmXwuvaT4Rn3lffarpD6tNAjHK3H
INJTPussVni94ohn6kLycMVz0CUUiAjKFRQYOBQIyYPEIbont2kXF39qRyf3jsNTXUtjnsOc
Bs+9j2+ur+YOp0rddmJMsvecXgkxsDOc+mYV8hvGwefNk4W2lNfDEUNvy2luqffqlG5upQ+6
g5F6BtmWxM7cfvOffdx5Pu7tYX50u867672+KDp2qOj+rL7ftCAHPuvwOZC03mzz7MFAr6h1
pRZXZ12fCl07bWlzOrKVe30oCZvqDeM4lPmLtTfH9pC1/dyu/mAq9gWhR0/jN5RZ+RWk/pY5
3D5luyhhgIsgQIQYg8joAUWIgGFyHo+2H9H0VAgUhrODQJiKFAXV8DW+RBm3SVsDCbC8Bq07
KGXGx0zhrEhoL0TC+UumTeUY9jUCrBkKh/0502187xaJLlwUWm0uUXXytESfDgGEb4NkqRnw
hh6SeWGWHUwwKJLAJgOwcJUAICETFDQ9MStQHwsQlNeVyIXBLgwRq/f1bAUN4i6zXZkAGNbF
r4UWmZ8oYXG08h4R4SqgQ6xUaE5ULo1bw9Cx8rk6OS10SMFLxNtSqZeTOx8HMOMzSrwtUXV6
BdvV5WraGwmfuVpoygqX6zRBbFeLmaObBRLPgJFBqKCMJobTUMYomLcjxSwECvUOqMBBukMM
4bbPXtAAm2D9K7ytqjEnBktqmyprOEzwz3FpK3A7w6IQoSGMJHxRorxI5ZT116mlsbsI0wBc
tYwCxsaqkbWS1O8AhakwClACiAG09g==
' | unpack
}
cpu17() {
echo '1-6-12-6 AMD Ryzen 5 4600G with Radeon Graphics (ai)'
echo '
KLUv/QRoDScASlLADSnwjGjbQLXf7SEiYhXDl17bzy9x/Sd+rgMwdzVDfBFY6exTLCwOI7dP
BeMAxADHALmu6P54Pbmv7K7puqJDzmEKqgUMAw4FJhIRkkZpEA0NtgwCGBgKPCIXDSS34Eqq
GmTa3FrzSzKFLPQteITC1jntCaMxYUBaK7KxvoaA4Wj5py6hvoeCATHwh+OidqHDuY/Dx+Cs
acKJP72VM2BggDScwJleXCauC9mVpiZhJJA85DbTp6GHBBF/LTGdwGg0FhiaV/3KVi2wCAxH
g+EmpuCquvfB0/QiXPsCwVAI9dtIQWEuXx53vkMD68XymfWl9MBogFyht1lwPAIwAE1tLbh2
CRIIGA0QBuJgeUQf1Km9T76HTGO+cXlLL1bWUynXvGH6WjKvs7nW1+x3qryXbQWfm30l4vYn
Wx19rtJYelyZGWUV8q7jatDh5Yr4l0SKKsYtxnlQPTF86T0hjQivEbLlrPhm6Zq7Ng7LHQ2m
AdKw5HE5fyi3XtbWLZKFgpZK92XuyuH7cp46ZFJb9Gkhl66xK9fYU2sUxuljmmEza/ml7pI7
vTeUhrrk3q4xbVELu1KYfOH3c4cy/7HFuWWtPwwpR+Uhj0b3qK08Utzf63Wn/FyHd7DkNY4N
wJp7CIBDrIM7DOiTmE+NB4wJC6xt48VOYGCuTIgftdTHVJpynkbtad0u6Op1MqmOnaVET9jU
ipjouRE+qfawvqcd96et1lGG0J2blxk1tdT0tIyX5gxVJdPkiq4KkxnG7WOviPjRa9TbsTc+
fDqXTxHbxprKoefS+2v39O3b0wuVTSns1sxqloMyWyNqWimW5zIGH35TUelw8S0Jn1Q5vSOz
LPIOp4vvaOxqrowNU9hZK3ozv2aPzXpqmK+NzY6pPC7lHyqRfq3BJ7sw3sIUzZtE6AKExBXU
OoeYTFyBtQW+YEWhgsJNrOUhrsDKVjXn6GXIf9psmzvD8NN9D5szxWGFB1xcy6ccaUTX1261
TOUnhledzx034k2HmFyjbVQQo7s019eaKRRMXB3kSEVi83uqm6R2e+4SEBEUEwrJ5AcqGPT0
2YNa35OyxdcM+gHK9kqSqmpaJyKqsPltV4RVWmqlj3CSON14sM+2gtYb1RFJO9Vx8N0gKLeQ
j43pT59GBr/0qm3wKVPQGRo/+4NEAgSHw0PyxwOAmCBQhAwZGbcBSJYmAyLVG/5ngAQMQSDK
NQS2pztrYwEu8wFcfeyBYD2uRC8cu9AcDJpOjLQh7rL0Fa7gA0e/PKc048NKtpjWvTy15IMc
q4uFsqler/RyxCH4EQ5D3JoKmIAzHQMGrkiUOpngtr7yKtD1Ck60jerH1Pl5YDli1yPO8eqT
dYGslS4vjnB2tgEI3t9gKaN5ajSqBQofOAWAYQioyBfyMNvbjJC3koCWTuO1A+XEl66LWhlg
zo5pwC8w9OjdaAMFpEBr8cSA+xrfFV0kAXQEhFBoqWCE5A+s4GostEFs069Tkyc460L7alvL
t0B7CQA+l6gZpkZywzEQATxYpIrZvtZvFY+NmLQ76NZvhd72aVyhHWrGgMXCoonW7dgxy4Bi
wCsuGJB+NTPEBrEagkv08IyA+ScYD9t1ilA7hp3bMj0LvwaAVXZjIVR3U0thpwhTAXBxv2tg
gAplMV0DrnilFovCKIxyldJcA2k=
' | unpack
}
cpu18() {
echo '1-4-8-4 Lenovo E540 i7-4712MQ (PROSA stud organizer)'
echo '
KLUv/QRoRSMA+kY8DCrgjmpz6GpWtLK0DL5oW2iXhXfvoPKn9A8udDwya4/7NeYGAKcJM8QO
GxzLAKcAsQDs+6hPMmJJHYLGCeAgIBLgYYmgVKIUJxHYGA4MhkNSoaDySp9Dgk3KbUvjWJpH
L4UVuWnE9bmS6U7MpWFAMq49jSoUJGA4HBon8AeVhvPwWDy0M1QuCztjgTNILOxTeLcsVhq3
DSkL2wQ3gQHKZ2RwJ5qHBaO5uX9hcwvooIlAbQwe+LruxuCSuWw6+HZm0jidejYq8niD09U4
g5HnbtAFOHgrGp95J2MQzQPyhm7QouFg4IVl8S1kPISIAs0D8kAi1SU7p17bDbMmREyXPQ2X
jPILUfG94TwP1pb8W0x+yq4Ocap1fdEliPF5Xz3qTq6H2Wfs9geEt9krsApuem7JNyivZ22S
S0b4jBRdlLGrOxnhWYzSI3eeGzpDKw/ji+bKB7OmPg21Gcb15y4XN5uHJGclk6/gndPFGf5C
8q/fmDO/scyfXEWv3nuTS8/NjuHJRW4d4miVp+JbV0l+zn6Xy19N6iPV+q73VfnJ74v7y/Ib
kGsK214bRfqODZx8ytdWdk3gGqRzoZvOcH54iAqEBg2DA3FU3mgMvKv9sfBJW/BIYzFL15nD
oKkWlwkYW2tFm2iY455PXbce9t4epM4tD51869Qra39zMc3eMvKb+4bc57QHvXmaoBBLHJ3p
w5qk3nKf6TZjm7JaF50iMsXwM2W/mSfUziDmt5ZfJ8HGDwXbIblvN2n0PEj/3BNh1J1BnWx+
QZzoFaVfSrk6r37ua/0Ekp4R0i+YYX3Fl2VxxblaBZq7mES8wbXoE4vExfKGCAgei8QkYkKB
zUXZ6AaVP7dhi/LPcwb1PLfNqdBZkkrBADIyrrk8SRzqO9v1mvLaqDNu7BPLl2qtbpIwq8xA
3xmbJRTRRXOpeApLm+fXSgvbdVCvxHtsAClACOu0+bE9CkVk7XYAz42iCXqBS5hV1lG/VCxv
4HXamITKBM+lIOUHLhEfELXDgFdS+ZUmzKVFat0ql1QmFnTDtHbTe4CLIECEkEFl9ehJVn93
hwA/7BCLC/NZLAEyUgY2GYCFqwTgijC5QVMmWPH62AyCDXK1+OpiWpsP6U0siLvMvrIVqI78
1COnggEzDpYxCkOKML7klSCO9u6RE66GTcJKlT6dDwjE4PrWMDouM98MDrDE4PDA5DeG6CaB
DYzokYTORwA8+4yYLj4VnVRJe84uTm/rnEsY+C+A04PHnWF8hWEQnbvJESu4m6sn6wT5BC+v
sDBKElGGn0xRhN3SZVgAU5GCwRcAhoObABCPBoUzeBrAgoEQA+ZNUNzFFM2M9wkFpc2oy8C/
A9QawIpBoEEQHPbjTLfxvVtKondjLtGyfTorlITmE2YMTTBvR4pZCOjkMroX+5BpthahE0bS
1xmBywKcDyryGSexILNwA7tRbNm7IJSiGy6wym6ow2+fOh7De2BiA65hfTBgShgjwlKbRSEq
jAKUQ0da4Q==
' | unpack
}
cpu20() {
echo '1-16-24-16 8*2 thr + 8*1 thr Intel Core i7-13700HX (user submit)'
echo '
KLUv/QRoxSAACkYADCkAb7g52NOaaG9pWWVp1EK7UMah1zodCwjsgmz4tfgH/PMzcUVV1Ypq
XsoAswCsALDiYJkWExTubWeGpVgcGJDHJOIB4lGeZGEwGAIeDEcjgwMIhuIWQu3JUsEBg1HA
wSwK7ANATDyABIBD7YhoS3eHA3Om60EskArbls+13YO6jZw2UPDw+JZTioWZLA2m9YJ6rPEl
WBpPPSpcqRGaWByNBaN52a9u2cJJWB4NllHHlRweb2CplisQPPc6N+BgzbB8Zo1rIVhc7nIL
rqx7ITwSdUUJ165IlgfkDb3OouEIwAB0vbaA7xMiEiwPSANxmB7RGLXSXkhFBAFR2+2DbxqO
ujGmc6bArOABFfhUVI4ijHSNDdtTSvnL5VmrCJ8rfSlzknddMrlK28miCHPCinONr7nisSeq
9H5BZXO8UjiZSEgevlS5hNyCH6BsR5Yqc1olIsqy+W9bxFW81Uwf4QXxNANhoW0WtTusH5a2
0ufJ94vAYEt+dq5HhTobvNLL1smojkUUDIcD4gSYNx4OjpXsg0MKEFBIpfpiICyMRQ+s9Pt5
/KJaCOnx8UpRA1dHeq0xvcE0DwgzqWd77lBm/tSkY1gYWNSYgl8HvzaCCj73ZRqbCuWxB19P
Z/C5r/coDdTYtMvmxg4V94p3KIzCBT+5M5aKK/yGzvyGMj/y9Hxq7RBH7GHqEEcnvPSaelLg
Y+x2qHy1MO8wqatq14SP3K64rwyv69qkR/BhSjIGkY7PyStX4fzEExFeTlTlNMKgfAqT60IS
8Qa2zyUTiTew3OWeuiSiodHrkh8L68JUDaRifjGsuW5UfkxlqlntLfJz5wHZuGstXFE6a0pf
91BOuQB7s+JwW/R1TmqYkZxWynS1rkmI71Qw9YYPZuNPK79UecWvVVBye25R34Da+A1mm/Pm
yMJK5XSYws9XNmuh9Ib6bU56xVsJcRNhawOdbb4DnT1HZ78c5kOq9dEIK55bjjcn31jzQMmg
uOIVhHk+SXmVkqez5qO27UbdspW62in4YHIgYERmjowe25gv0YehmrYtSaLMaue6Xrq98nOM
A9QCXR3V0KYsBqQoZoiPwlh8RKh53tWjZUWprL3ylrQqiDDDEOLRHq4zbGOme2hNMCsEsvau
NZ2Gpp8FwUqjIVkwEVPnY3oMBhKMUQovJOAE4CGPdWW2gBUTV4IWBlsYWq336+m8y25XUgDk
+1MagrMyTOBdQbB1LmQnbQg+hAOIe1MTg0YdmQGAKxJdp5XfnAXE2YPnHOLYNN5HwIAhVCzv
Ee3uHiX412tBGQsaMBQgI5jVwZ3ghBsvbgU9Itz3kHVkyyKMcCSaWmvuTPAX+ghFcAWSqC+G
KC9ROWX9fWoZ7C7CNABXLKPG2LjX44E/rCicwihACaxZnTc=
' | unpack
}
export -f $(compgen -A function | grep ^cpu)
test_one() {
eval $1 | head -n1
export PARALLEL_LSCPU="$(eval $1 | tail -n +2)"
echo $(parallel --number-of-sockets) \
$(parallel --number-of-cores) \
$(parallel --number-of-threads) \
$(parallel --number-of-cpus)
}
export -f test_one
compgen -A function | grep ^cpu | sort | parallel -j0 -k test_one
rm ~/.parallel/tmp/sshlogin/*/cpuspec 2>/dev/null
}
par_combineexec() {
combineexec() {
stderr=$(mktemp)
parallel --combineexec "$combo" "$@" 2>"$stderr"
# Redirected stderr should give no output
cat "$stderr"
rm "$stderr"
}
combo=$(mktemp)
echo '### Check that "--pipe -k" works'
combineexec -j 2 -k --pipe wc
seq 920000 | "$combo"
echo '### Check that "-k" is kept'
combineexec -k bash -c :::
"$combo" 'sleep 0.$RANDOM; echo 1' 'sleep 0.$RANDOM; echo 2' 'sleep 0.$RANDOM; echo 3'
echo '### Check that "--tagstring {1}" is kept'
combineexec --tagstring {1} -k perl -e :::
"$combo" 'print("1\n")' 'print("2\n")' 'print("3\n")'
}
par__argfile_plus() {
tmp=$(mktemp -d)
(
p() {
echo -- -a $1 $2 $3
stdout parallel -k -a $1 -a $2 -a $3 echo;
}
q() {
echo :::: $1 $2 $3
stdout parallel -k echo :::: $1 $2 $3;
}
cd "$tmp"
seq 3 > file
seq 4 6 > +file
seq 7 9 > ++file
p file +file ++file
p file +./file ++file
p file ./+file ++file
p file +file +./+file
p file +./file +./+file
p file ./+file +./+file
p file +file ./++file
p file +./file ./++file
p file ./+file ./++file
q file +file ++file
q file +./file ++file
q file ./+file ++file
q file +file +./+file
q file +./file +./+file
q file ./+file +./+file
q file +file ./++file
q file +./file ./++file
q file ./+file ./++file
seq 10 12 | p ./file ./++file -
seq 10 12 | p ./file +./+file +-
seq 10 12 | p ./file +- ./+file
)
rm -r "$tmp"
}
par__plus() {
echo '### --plus'
echo '(It is OK to start with extra / or end with extra .)'
parallel -k --plus echo {} = {+/}/{/} = {.}.{+.} = {+/}/{/.}.{+.} = \
{..}.{+..} = {+/}/{/..}.{+..} = {...}.{+...} = \
{+/}/{/...}.{+...} \
::: a a.b a.b.c a.b.c.d a/1 a.b/1.2 a.b.c/1.2.3 a.b.c.d/1.2.3.4 \
a. a.b. a.b.c. a.b.c.d. a/1. a.b/1.2. a.b.c/1.2.3. a.b.c.d/1.2.3.4. \
a.. a.b.. a.b.c.. a.b.c.d.. a./1. a.b./1.2.. \
a.b.c./1.2.3.. a.b.c.d./1.2.3.4.. \
echo '### Test {%...} {%%...} {#...} {##...}'
a=z.z.z.foo
echo ${a#z*z.}
parallel --plus echo {#z.*z.} ::: z.z.z.foo
echo ${a##z*z.}
parallel --plus echo {##z.*z.} ::: z.z.z.foo
a=foo.z.z.z
echo ${a%.z.z}
parallel --plus echo {%.z.z} ::: foo.z.z.z
echo ${a%%.z*z}
parallel --plus echo {%%.z.*z} ::: foo.z.z.z
parallel -k --plus echo {uniq} ::: A B C ::: A B C ::: A B C
parallel -k --plus echo {1uniq}+{2uniq}+{3uniq} ::: A B C ::: A B C ::: A B C
parallel -k --plus echo {choose_k} ::: A B C D ::: A B C D ::: A B C D
}
par__sql_colsep() {
echo '### SQL should add Vn columns for --colsep'
dburl=sqlite3:///%2ftmp%2fparallel-sql-colsep-$$/bar
parallel -k -C' ' --sqlandworker $dburl echo /{1}/{2}/{3}/{4}/ \
::: 'a A' 'b B' 'c C' ::: '1 11' '2 22' '3 33'
parallel -k -C' ' echo /{1}/{2}/{3}/{4}/ \
::: 'a A' 'b B' 'c C' ::: '1 11' '2 22' '3 33'
parallel -k -C' ' -N3 --sqlandworker $dburl echo \
::: 'a A' 'b B' 'c C' ::: '1 11' '2 22' '3 33' '4 44' '5 55' '6 66'
parallel -k -C' ' -N3 echo \
::: 'a A' 'b B' 'c C' ::: '1 11' '2 22' '3 33' '4 44' '5 55' '6 66'
rm /tmp/parallel-sql-colsep-$$
}
par__I_X_m() {
echo '### Test -I with -X and -m'
seq 10 | parallel -k 'seq 1 {.} | parallel -k -I :: echo {.} ::'
seq 10 | parallel -k 'seq 1 {.} | parallel -j1 -X -k -I :: echo a{.} b::'
seq 10 | parallel -k 'seq 1 {.} | parallel -j1 -m -k -I :: echo a{.} b::'
}
par__test_XI_mI() {
echo "### Test -I"
seq 1 10 | parallel -k 'seq 1 {} | parallel -k -I :: echo {} ::'
echo "### Test -X -I"
seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -X -k -I :: echo a{} b::'
echo "### Test -m -I"
seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -m -k -I :: echo a{} b::'
}
par_process_slot_var() {
echo '### bug #62310: xargs compatibility: --process-slot-var=name'
seq 0.1 0.4 1.8 |
parallel -n1 -kP4 --process-slot-var=name -q bash -c 'sleep $1; echo "$name"' _
seq 0.1 0.4 1.8 |
xargs -n1 -P4 --process-slot-var=name bash -c 'sleep $1; echo "$name"' _
seq 0.1 0.4 1.8 |
parallel -kP4 --process-slot-var=name sleep {}\; echo '$name'
}
par__prefix_for_L_n_N_s() {
echo Must give xxx000 args
seq 10000 | parallel -N 1k 'echo {} | wc -w' | sort
seq 10000 | parallel -n 1k 'echo {} | wc -w' | sort
echo Must give xxx000 lines
seq 1000000 | parallel -L 1k --pipe wc -l | sort
echo Must give max 1000 chars per line
seq 10000 | parallel -mj1 -s 1k 'echo {} | wc -w' | sort
}
par_parset() {
echo '### test parset'
(
. `which env_parallel.bash`
echo 'Put output into $myarray'
parset myarray -k seq 10 ::: 14 15 16
echo "${myarray[1]}"
echo 'Put output into vars "$seq, $pwd, $ls"'
parset "seq pwd ls" -k ::: "seq 10" pwd ls
echo "$seq"
echo 'Put output into vars ($seq, $pwd, $ls)':
into_vars=(seq pwd ls)
parset "${into_vars[*]}" -k ::: "seq 5" pwd ls
echo "$seq"
echo 'The commands to run can be an array'
cmd=("echo '<<joe \"double space\" cartoon>>'" "pwd")
parset data -k ::: "${cmd[@]}"
echo "${data[0]}"
echo "${data[1]}"
echo 'You cannot pipe into parset, but must use a tempfile'
seq 10 > /tmp/parset_input_$$
parset res -k echo :::: /tmp/parset_input_$$
echo "${res[0]}"
echo "${res[9]}"
rm /tmp/parset_input_$$
echo 'or process substitution'
parset res -k echo :::: <(seq 0 10)
echo "${res[0]}"
echo "${res[9]}"
echo 'Commands with newline require -0'
parset var -k -0 ::: 'echo "line1
line2"' 'echo "command2"'
echo "${var[0]}"
) | replace_tmpdir
}
par__parset2() {
echo '### parset into array'
(
. `which env_parallel.bash`
env_parallel --session
parset arr1 echo ::: foo bar baz
echo foo bar baz
echo ${arr1[0]} ${arr1[1]} ${arr1[2]}
echo '### parset into vars with comma'
parset comma3,comma2,comma1 echo ::: baz bar foo
echo foo bar baz
echo $comma1 $comma2 $comma3
echo '### parset into vars with space'
parset 'space3 space2 space1' echo ::: baz bar foo
echo foo bar baz
echo $space1 $space2 $space3
echo '### parset with newlines'
parset 'newline3 newline2 newline1' seq ::: 3 2 1
echo 1 1 2 1 2 3
echo "$newline1"
echo "$newline2"
echo "$newline3"
echo '### parset into indexed array vars'
parset 'myarray[6],myarray[5],myarray[4]' echo ::: baz bar foo
echo foo bar baz
echo ${myarray[*]}
echo foo bar bar
echo ${myarray[4]} ${myarray[5]} ${myarray[5]}
echo '### env_parset'
alias myecho='echo myecho "$myvar" "${myarr[1]}"'
myvar="myvar"
myarr=("myarr 0" "myarr 1" "myarr 2")
mynewline="`echo newline1;echo newline2;`"
env_parset arr1 myecho ::: foo bar baz
echo "myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz"
echo "${arr1[0]} ${arr1[1]} ${arr1[2]}"
env_parset comma3,comma2,comma1 myecho ::: baz bar foo
echo "myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz"
echo "$comma1 $comma2 $comma3"
env_parset 'space3 space2 space1' myecho ::: baz bar foo
echo "myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz"
echo "$space1 $space2 $space3"
env_parset 'newline3 newline2 newline1' 'echo "$mynewline";seq' ::: 3 2 1
echo newline1 newline2 1 newline1 newline2 1 2 newline1 newline2 1 2 3
echo "$newline1"
echo "$newline2"
echo "$newline3"
env_parset 'myarray[6],myarray[5],myarray[4]' myecho ::: baz bar foo
echo "myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz"
echo "${myarray[*]}"
echo "myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 bar"
echo "${myarray[4]} ${myarray[5]} ${myarray[5]}"
echo 'bug #52507: parset arr1 -v echo ::: fails'
parset arr1 -v seq ::: 1 2 3
echo "${arr1[2]}"
) | replace_tmpdir
}
par__parset_assoc_arr() {
mytest=$(cat <<'EOF'
mytest() {
shell=`basename $SHELL`
echo 'parset into an assoc array'
. `which env_parallel.$shell`
parset "var1,var2 var3" echo ::: 'val 1' 'val 2' 'val 3'
echo "$var1 $var2 $var3"
parset array echo ::: 'val 1' 'val 2' 'val 3'
echo "${array[0]} ${array[1]} ${array[2]}"
typeset -A assoc
parset assoc echo ::: 'val 1' 'val 2' 'val 3'
echo "${assoc[val 1]} ${assoc[val 2]} ${assoc[val 3]}"
echo Bad var name
parset -badname echo ::: 'val 1' 'val 2' 'val 3'
echo Too few var names
parset v1,v2 echo ::: 'val 1' 'val 2' 'val 3'
echo "$v2"
echo Exit value
parset assoc exit ::: 1 0 0 1; echo $?
parset array exit ::: 1 0 0 1; echo $?
parset v1,v2,v3,v4 exit ::: 1 0 0 1; echo $?
echo Stderr to stderr
parset assoc ls ::: no-such-file
parset array ls ::: no-such-file
parset v1,v2 ls ::: no-such-file1 no-such-file2
}
EOF
)
parallel -k --tag --nonall -Sksh@lo,bash@lo,zsh@lo "$mytest;mytest 2>&1"
}
par_shebang() {
echo '### Test different shebangs'
gp() {
cat <<'EOF'
#!/usr/local/bin/parallel --shebang-wrap -k A={} /usr/bin/gnuplot
name=system("echo $A")
print name
EOF
true
}
oct() {
cat <<'EOF'
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/octave -qf
arg_list = argv ();
filename = arg_list{1};
printf(filename);
printf("\n");
EOF
true
}
pl() {
cat <<'EOF'
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/perl
print @ARGV,"\n";
EOF
true
}
py() {
cat <<'EOF'
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/python3
import sys
print(str(sys.argv[1]))
EOF
true
}
r() {
cat <<'EOF'
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/Rscript --vanilla --slave
options <- commandArgs(trailingOnly = TRUE)
options
EOF
true
}
rb() {
cat <<'EOF'
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/ruby
p ARGV
EOF
true
}
sh() {
cat <<'EOF'
#!/usr/local/bin/parallel --shebang-wrap -k /bin/sh
echo "$@"
EOF
true
}
run() {
tmp=`mktemp`
"$@" > "$tmp"
chmod +x "$tmp"
"$tmp" A B C
rm "$tmp"
}
export -f run gp oct pl py r rb sh
parallel --tag -k run ::: gp oct pl py rb sh
# R fails if TMPDIR contains space
TMPDIR=/tmp
parallel --tag -k run ::: r
}
par_pipe_regexp() {
echo '### --pipe --regexp'
gen() {
cat <<EOF
A2, Start, 5
A2, 00100, 5
A2, 00200, 6
A2, 00300, 6
A2, Start, 7
A2, 00100, 7
A2, Start, 7
A2, 00200, 8
EOF
true
}
p="parallel --pipe --regexp -k"
gen | $p --recstart 'A\d+, Start' -N1 'echo Record;cat'
gen | $p --recstart '[A-Z]\d+, Start' -N1 'echo Record;cat'
gen | $p --recstart '.*, Start' -N1 'echo Record;cat'
echo '### Prepend first record with garbage'
(echo Garbage; gen) |
$p --recstart 'A\d+, Start' -N1 'echo Record;cat'
(echo Garbage; gen) |
$p --recstart '[A-Z]\d+, Start' -N1 'echo Record;cat'
(echo Garbage; gen) |
$p --recstart '.*, Start' -N1 'echo Record;cat'
}
par_pipe_regexp_non_quoted() {
echo '### --pipe --regexp non_quoted \n'
gen() {
cat <<EOF
Start
foo
End
Start
Start this line is a false Start line
End this line is a false End line
End
EOF
true
}
p="ppar --pipe --regexp -k"
p="parallel --pipe --regexp -k"
gen | $p --recend '' --recstart '^Start$' -N1 'echo :::Single record;cat'
gen | $p --recend '' --recstart 'Start\n' -N1 'echo :::Single record;cat'
gen | $p --recend '' --recstart 'Start
' -N1 'echo :::Single record;cat'
gen | $p --recend 'End$' --recstart '' -N1 'echo :::Single record;cat'
gen | $p --recend 'End\n' --recstart '' -N1 'echo :::Single record;cat'
gen | $p --recend 'End
' --recstart '' -N1 'echo :::Single record;cat'
}
par_delay_halt_soon() {
echo "bug #59893: --halt soon doesn't work with --delay"
seq 0 10 |
stdout parallel --delay 1 -uj2 --halt soon,fail=1 'sleep 0.{};echo {};exit {}'
}
par_show_limits() {
echo '### Test --show-limits'
(
(echo b; echo c; echo f) | parallel -k --show-limits echo {}ar
(echo b; echo c; echo f) | parallel -j1 -kX --show-limits -s 100 echo {}ar
echo "### BUG: empty lines with --show-limit"
echo | stdout parallel --show-limits
) | perl -pe 's/(\d+)\d\d\d/${1}xxx/'
}
par_test_delimiter() {
echo "### Test : as delimiter. This can be confusing for uptime ie. --load";
export PARALLEL="--load 300%"
parallel -k --load 300% -d : echo ::: a:b:c
}
par_10000_m_X() {
echo '### Test -m with 10000 args'
seq 10000 | perl -pe 's/$/.gif/' |
parallel -j1 -km echo a{}b{.}c{.} |
parallel -k --pipe --tee ::: wc md5sum
}
par__10000_5_rpl_X() {
echo '### Test -X with 10000 args and 5 replacement strings'
gen() {
seq 10000 | perl -pe 's/$/.gif/'
}
gen | parallel -j1 -kX echo a{}b{.}c{.}{.}{} | wc -l
gen | parallel -j1 -kX echo a{}b{.}c{.}{.} | wc -l
gen | parallel -j1 -kX echo a{}b{.}c{.} | wc -l
gen | parallel -j1 -kX echo a{}b{.}c | wc -l
gen | parallel -j1 -kX echo a{}b | wc -l
}
par_X_I_meta() {
echo '### Test -X -I with shell meta chars'
seq 10000 | parallel -j1 -I :: -X echo a::b::c:: | wc -l
seq 10000 | parallel -j1 -I '<>' -X echo 'a<>b<>c<>' | wc -l
seq 10000 | parallel -j1 -I '<' -X echo 'a<b<c<' | wc -l
seq 10000 | parallel -j1 -I '>' -X echo 'a>b>c>' | wc -l
}
par_delay() {
echo "### Test --delay"
seq 9 | /usr/bin/time -f %e parallel -j3 --delay 0.57 true {} 2>&1 |
perl -ne '$_ > 3.3 and print "More than 3.3 secs: OK\n"'
}
par_sshdelay() {
echo '### test --sshdelay'
stdout /usr/bin/time -f %e parallel -j0 --sshdelay 0.5 -S localhost true ::: 1 2 3 |
perl -ne 'print($_ > 1.30 ? "OK\n" : "Not OK\n")'
}
par_plus_slot_replacement() {
echo '### show {slot} {0%} {0#}'
parallel -k --plus 'sleep 0.{%};echo {slot}=$PARALLEL_JOBSLOT={%}' ::: A B C
doit() {
parallel -j15 -k --plus "$@" ::: {1..100} | sort -u
}
export -f doit
parallel doit ::: 'echo Seq: {0#} {#} {seq-1}*2={seq*2-2}' \
'sleep 0.{}; echo Slot: {0%} {%}={slot-1}+1'
}
par_replacement_slashslash() {
echo '### Test {//}'
parallel -k echo {//} {} ::: a a/b a/b/c
parallel -k echo {//} {} ::: /a /a/b /a/b/c
parallel -k echo {//} {} ::: ./a ./a/b ./a/b/c
parallel -k echo {//} {} ::: a.jpg a/b.jpg a/b/c.jpg
parallel -k echo {//} {} ::: /a.jpg /a/b.jpg /a/b/c.jpg
parallel -k echo {//} {} ::: ./a.jpg ./a/b.jpg ./a/b/c.jpg
echo '### Test {1//}'
parallel -k echo {1//} {} ::: a a/b a/b/c
parallel -k echo {1//} {} ::: /a /a/b /a/b/c
parallel -k echo {1//} {} ::: ./a ./a/b ./a/b/c
parallel -k echo {1//} {} ::: a.jpg a/b.jpg a/b/c.jpg
parallel -k echo {1//} {} ::: /a.jpg /a/b.jpg /a/b/c.jpg
parallel -k echo {1//} {} ::: ./a.jpg ./a/b.jpg ./a/b/c.jpg
}
par_eta() {
echo '### Test of --eta'
seq 1 10 | stdout parallel --eta "sleep 1; echo {}" | wc -l
echo '### Test of --eta with no jobs'
stdout parallel --eta "sleep 1; echo {}" < /dev/null |
perl -pe 's,1:local / \d / \d,1:local / 9 / 9,'
}
par_progress() {
echo '### Test of --progress'
seq 1 10 | stdout parallel --progress "sleep 1; echo {}" | wc -l
echo '### Test of --progress with no jobs'
stdout parallel --progress "sleep 1; echo {}" < /dev/null |
perl -pe 's,1:local / \d / \d,1:local / 9 / 9,'
}
par_tee_with_premature_close() {
echo '--tee --pipe should send all data to all commands'
echo 'even if a command closes stdin before reading everything'
echo 'tee with --output-error=warn-nopipe support'
correct="$(seq 1000000 | parallel -k --tee --pipe ::: wc head tail 'sleep 1')"
echo "$correct"
echo 'tee without --output-error=warn-nopipe support'
tmpdir=$(mktemp -d)
cat > "$tmpdir"/tee <<-EOF
#!/usr/bin/perl
if(grep /output-error=warn-nopipe/, @ARGV) {
exit(1);
}
exec "/usr/bin/tee", @ARGV;
EOF
chmod +x "$tmpdir"/tee
PATH="$tmpdir":$PATH
# This gives incomplete output due to:
# * tee not supporting --output-error=warn-nopipe
# * sleep closes stdin before EOF
# Depending on tee it may provide partial output or no output
wrong="$(seq 1000000 | parallel -k --tee --pipe ::: wc head tail 'sleep 1')"
if diff <(echo "$correct") <(echo "$wrong") >/dev/null; then
echo Wrong: They should not give the same output
else
echo OK
fi
rm "$tmpdir"/tee
rmdir "$tmpdir"
}
par_maxargs() {
echo '### Test -n and --max-args: Max number of args per line (only with -X and -m)'
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 -m echo
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 -m echo
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 -X echo
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 -X echo
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 echo
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 echo
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args=1 -X echo
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 -X echo
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args=2 -X echo
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 -X echo
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 echo
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 echo
}
par_jobslot_repl() {
echo 'bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken'
parallel -kj2 --delay 0.1 --bar 'sleep 0.2;echo {%}' ::: a b ::: c d e 2>/dev/null
parallel -kj2 --delay 0.1 --eta 'sleep 0.2;echo {%}' ::: a b ::: c d e 2>/dev/null
parallel -kj2 --delay 0.1 --shuf 'sleep 0.2;echo {%}' ::: a b ::: c d e 2>/dev/null
parallel -kj2 --delay 0.1 --halt now,fail=10% 'sleep 0.2;echo {%}' ::: a b ::: c d e
echo 'bug #46231: {%} with --pipepart broken. Should give 1+2'
seq 10000 > /tmp/num10000
parallel -k --pipepart -ka /tmp/num10000 --block 10k -j2 --delay 0.1 'sleep 0.2; echo {%}'
rm /tmp/num10000
}
par_distribute_args_at_EOF() {
echo '### Test distribute arguments at EOF to 2 jobslots'
seq 1 92 | parallel -j2 -kX -s 100 echo
echo '### Test distribute arguments at EOF to 5 jobslots'
seq 1 92 | parallel -j5 -kX -s 100 echo
echo '### Test distribute arguments at EOF to infinity jobslots'
seq 1 92 | parallel -j0 -kX -s 100 echo 2>/dev/null
echo '### Test -N is not broken by distribution - single line'
seq 9 | parallel -N 10 echo
echo '### Test -N is not broken by distribution - two lines'
seq 19 | parallel -k -N 10 echo
}
par_test_X_with_multiple_source() {
echo '### Test {} multiple times in different commands'
seq 10 | parallel -v -Xj1 echo {} \; echo {}
echo '### Test of -X {1}-{2} with multiple input sources'
parallel -j1 -kX echo {1}-{2} ::: a ::: b
parallel -j2 -kX echo {1}-{2} ::: a b ::: c d
parallel -j2 -kX echo {1}-{2} ::: a b c ::: d e f
parallel -j0 -kX echo {1}-{2} ::: a b c ::: d e f
echo '### Test of -X {}-{.} with multiple input sources'
parallel -j1 -kX echo {}-{.} ::: a ::: b
parallel -j2 -kX echo {}-{.} ::: a b ::: c d
parallel -j2 -kX echo {}-{.} ::: a b c ::: d e f
parallel -j0 -kX echo {}-{.} ::: a b c ::: d e f
}
par_slow_args_generation() {
echo '### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834'
seq 1 3 | parallel -j1 "sleep 2; echo {}" | parallel -kj2 echo
}
par_kill_term() {
echo '### Are children killed if GNU Parallel receives TERM? There should be no sleep at the end'
parallel -q bash -c 'sleep 120 & pid=$!; wait $pid' ::: 1 &
T=$!
sleep 5
pstree $$
kill -TERM $T
sleep 1
pstree $$
}
par_kill_int_twice() {
echo '### Are children killed if GNU Parallel receives INT twice? There should be no sleep at the end'
parallel -q bash -c 'sleep 120 & pid=$!; wait $pid' ::: 1 &
T=$!
sleep 5
pstree $$
kill -INT $T
sleep 1
pstree $$
}
par_children_receive_sig() {
echo '### Do children receive --termseq signals'
show_signals() {
perl -e 'for(keys %SIG) { $SIG{$_} = eval "sub { print STDERR \"Got $_\\n\"; }";} while(1){sleep 1}';
}
export -f show_signals
echo | stdout parallel --termseq TERM,200,TERM,100,TERM,50,KILL,25 -u \
--timeout 1s show_signals
echo | stdout parallel --termseq INT,200,TERM,100,KILL,25 -u \
--timeout 1s show_signals
sleep 3
}
par_wrong_slot_rpl_resume() {
echo '### bug #47644: Wrong slot number replacement when resuming'
seq 0 20 |
parallel -kj 4 --delay 0.2 --joblog /tmp/parallel-bug-47558 \
'sleep 1; echo {%} {=$_==10 and exit =}'
seq 0 20 |
parallel -kj 4 --resume --delay 0.2 --joblog /tmp/parallel-bug-47558 \
'sleep 1; echo {%} {=$_==110 and exit =}'
}
par_multiline_commands() {
echo 'bug #50781: joblog format with multiline commands'
rm -f /tmp/jl.$$
parallel --jl /tmp/jl.$$ --timeout 2s 'sleep {}; echo {};
echo finish {}' ::: 1 2 4
parallel --jl /tmp/jl.$$ --timeout 5s --retry-failed 'sleep {}; echo {};
echo finish {}' ::: 1 2 4
rm -f /tmp/jl.$$
}
par_sqlworker_hostname() {
echo 'bug #50901: --sqlworker should use hostname in the joblog instead of :'
# Something like:
# :mysqlunittest mysql://tange:tange@localhost/tange
MY=:mysqlunittest
parallel --sqlmaster $MY/hostname echo ::: 1 2 3
parallel -k --sqlworker $MY/hostname
hostname=`hostname`
sql $MY 'select host from hostname;' |
perl -pe "s/$hostname/<hostname>/g"
}
par_delay_human_readable() {
# Test that you can use d h m s in --delay
parallel --delay 0.1s echo ::: a b c
parallel --delay 0.01m echo ::: a b c
}
par_exitval_signal() {
echo '### Test --joblog with exitval and Test --joblog with signal -- timing dependent'
rm -f /tmp/parallel_sleep
rm -f mysleep
cp /bin/sleep mysleep
chmod +x mysleep
parallel --joblog /tmp/parallel_joblog_signal \
'./mysleep {}' ::: 30 2>/dev/null &
parallel --joblog /tmp/parallel_joblog_exitval \
'echo foo >/tmp/parallel_sleep; ./mysleep {} && echo sleep was not killed=BAD' ::: 30 2>/dev/null &
while [ ! -e /tmp/parallel_sleep ] ; do
sleep 1
done
sleep 1
killall -6 mysleep
wait
grep -q 134 /tmp/parallel_joblog_exitval && echo exitval=128+6 OK
grep -q '[^0-9]6[^0-9]' /tmp/parallel_joblog_signal && echo signal OK
rm -f /tmp/parallel_joblog_exitval /tmp/parallel_joblog_signal
}
par_lb_mem_usage() {
long_line() {
perl -e 'print "x"x100_000_000'
}
export -f long_line
memusage() {
round=$1
shift
/usr/bin/time -v "$@" 2>&1 >/dev/null |
perl -ne '/Maximum resident set size .kbytes.: (\d+)/ and print $1,"\n"' |
perl -pe '$_ = int($_/'$round')."\n"'
}
# 1 line - RAM usage 1 x 100 MB
memusage 100000 parallel --lb ::: long_line
# 2 lines - RAM usage 1 x 100 MB
memusage 100000 parallel --lb ::: 'long_line; echo; long_line'
# 1 double length line - RAM usage 2 x 100 MB
memusage 100000 parallel --lb ::: 'long_line; long_line'
}
export -f $(compgen -A function | grep par_)
compgen -A function | G par_ "$@" | LC_ALL=C sort |
parallel --timeout 1000% -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'