Код: Выделить всё
FROM nvidia/cuda:12.6.0-devel-ubuntu24.04
# Set ambient variables
ENV CC=gcc
ENV CXX=g++
# Install dependencies
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y gcc-offload-nvptx
RUN apt-get install -y gfortran
RUN apt-get install -y libopenmpi-dev
RUN apt-get install -y openmpi-bin
RUN apt-get install -y cppcheck
RUN apt-get install -y clang-tidy-18
RUN apt-get install -y clang-format-18
RUN apt-get install -y fftw2
RUN apt-get install -y fftw-dev
RUN apt-get install -y pkg-config
RUN apt-get install -y valgrind
RUN apt-get install -y wget
RUN apt-get install -y cmake
RUN apt-get install -y python3
RUN apt-get install -y python3-pip
RUN apt-get install -y git
RUN apt-get install -y libomp-dev
RUN apt-get install -y libc++-18-dev
RUN apt-get install -y libc++abi-18-dev
ENV LD_LIBRARY_PATH="/usr/lib/llvm-18/lib:$LD_LIBRARY_PATH"
# Clean up
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/*
# Install Miniconda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
&& bash Miniconda3-latest-Linux-x86_64.sh -b
# Sets work directory
WORKDIR /app
# Copy application code
COPY . /app
# Set the PATH to include Miniconda
ENV PATH="/root/miniconda3/bin:$PATH"
# Initialize conda
RUN conda init
# Install Python dependencies
RUN conda install -c conda-forge --yes --file scripts/requirements.txt
< /code>
Итак, я использую изображение, предоставленное Nvidia. У моего персонального компьютера есть RTX 4060, который обладает вычислительными возможностями 8.9, и создание моего игрушечного кода с помощью GCC и Clang работает и работает нормально, как и ожидалось. Вот некоторые фрагменты: < /p>
void ipsum::computation(lorem &lor) {
int *lx = lor.x;
int *ly = lor.y;
int *lz = z;
size_t _sz = sz;
#pragma omp target teams distribute parallel for simd
for (size_t i = 0; i < _sz; i++) {
ly[i] = lx[i] + lz[i];
}
std::swap(lor.x, lor.y);
}
< /code>
Это простой код, который обновляет некоторый вектор, подводя его с помощью другого, как я уже сказал, это игрушечный код. Эта другая машина имеет RTX A4500 и GTX 980 TI. У этой машины есть версия CUDA 12.8, но я обнаружил, что это не проблема. NVIDIA-SMI Код: Выделить всё
omptarget error: Consult https://openmp.llvm.org/design/Runtimes.html for debugging options.
omptarget error: No images found compatible with the installed hardware. Found 1 image(s): (sm_86)
ipsum.cpp:13:5: omptarget fatal error 1: failure of target construct while offloading is mandatory
Aborted (core dumped)
< /code>
Я скомпилирован с этими флагами в Clang: < /p>
-Wall -Wextra -fopenmp -fopenmp-targets=nvptx64 -g -stdlib=libc++Эта ошибка довольно странная для меня, потому что RTX A4500 имеет возможность вычисления 8.6, а GCC разгружается на него. Что не так с Кланг? Я проверил, и Libomptarget-NVPTX-SM_86.BC находится в моем контейнере. Кроме того, omp_get_num_devices () возвращает ноль.
[edit]
Это работало только тогда, когда я создал Clang и LLVM из источника. Я полагаю, кому бы ни строил Dockerfile, придется долго ждать. Кроме того, Clang Version 20 не обнаружила оба графических процессора, которые у меня есть, только Clang 21 (текущее состояние главного филиала во время этого редактирования, 10 марта 2025 года).
Подробнее здесь: https://stackoverflow.com/questions/794 ... cker-image
Мобильная версия