| #!/bin/sh |
| set -eu |
|
|
| pick_vulkan_icd() { |
| for candidate in \ |
| /etc/vulkan/icd.d/nvidia_icd.json \ |
| /etc/vulkan/icd.d/nvidia_icd.x86_64.json \ |
| /usr/share/vulkan/icd.d/nvidia_icd.json \ |
| /usr/share/vulkan/icd.d/nvidia_icd.x86_64.json |
| do |
| if [ -f "$candidate" ]; then |
| printf '%s\n' "$candidate" |
| return 0 |
| fi |
| done |
| return 1 |
| } |
|
|
| run_diagnostic() { |
| label="$1" |
| shift |
| echo "[entrypoint] $label" |
| if "$@"; then |
| return 0 |
| else |
| status=$? |
| fi |
| echo "[entrypoint] $label failed with exit code $status" |
| return 0 |
| } |
|
|
| if [ -z "${OMP_NUM_THREADS:-}" ]; then |
| export OMP_NUM_THREADS=1 |
| fi |
|
|
| if [ -z "${VK_ICD_FILENAMES:-}" ]; then |
| if detected_icd="$(pick_vulkan_icd)"; then |
| export VK_ICD_FILENAMES="$detected_icd" |
| echo "[entrypoint] Using Vulkan ICD: $VK_ICD_FILENAMES" |
| else |
| echo "[entrypoint] Vulkan ICD file not found under /etc or /usr/share" |
| fi |
| else |
| echo "[entrypoint] Respecting preset VK_ICD_FILENAMES: $VK_ICD_FILENAMES" |
| fi |
|
|
| echo "[entrypoint] OMP_NUM_THREADS=$OMP_NUM_THREADS" |
| run_diagnostic "nvidia-smi" nvidia-smi |
| run_diagnostic "vulkaninfo --summary" vulkaninfo --summary |
| exec "$@" |
|
|