У Thrust нет члена device_mallo c Ошибка при компиляции gDel3D (3D триангуляция Делоне с GPU) - PullRequest
0 голосов
/ 09 апреля 2020

Я пробовал несколько разных способов построения этой библиотеки, и все привели к тому, что у «тяги» нет члена «device_mallo c».

Ниже приведена ссылка на репозиторий git для gDel3D: [https://github.com/ashwin/gDel3D] [1]

Ниже приведена ошибка, которую я получаю при наборе: make

make
[ 7%] Building NVCC (Device) object CMakeFiles/gflip3d.dir/GDelFlipping/src/gDel3D/GPU/gflip3d_generated_ThrustWrapper.cu.o
/home/gDel3D/GDelFlipping/src/gDel3D/GPU/ThrustWrapper.cu(121): error: namespace "thrust" has no member "device_malloc"

/home/gDel3D/GDelFlipping/src/gDel3D/GPU/ThrustWrapper.cu(121): error: type name is not allowed

/home/gDel3D/GDelFlipping/src/gDel3D/GPU/ThrustWrapper.cu(121): error: expression must have class type

/home/gDel3D/GDelFlipping/src/gDel3D/GPU/GPUDecl.h(280): error: namespace "thrust" has no member "device_malloc"

/home/gDel3D/GDelFlipping/src/gDel3D/GPU/GPUDecl.h(280): error: type name is not allowed

5 errors detected in the compilation of "/tmp/tmpxft_00000a74_00000000-7_ThrustWrapper.compute_30.cpp1.ii".
CMake Error at gflip3d_generated_ThrustWrapper.cu.o.Release.cmake:279 (message):
Error generating file
/home/gDel3D/build/CMakeFiles/gflip3d.dir/GDelFlipping/src/gDel3D/GPU/./gflip3d_generated_ThrustWrapper.cu.o

CMakeFiles/gflip3d.dir/build.make:84: recipe for target 'CMakeFiles/gflip3d.dir/GDelFlipping/src/gDel3D/GPU/gflip3d_generated_ThrustWrapper.cu.o' failed
make[2]: *** [CMakeFiles/gflip3d.dir/GDelFlipping/src/gDel3D/GPU/gflip3d_generated_ThrustWrapper.cu.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/gflip3d.dir/all' failed
make[1]: *** [CMakeFiles/gflip3d.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

Я пытался задать свой вопрос на вкладке вопросов на форуме gDel3D, но подумал, что это может быть уместно, так как, похоже, проблема с настройкой библиотеки Thrust. Спасибо за помощь!

Редактировать: Я попробовал первое предложение ниже и получил больше ошибок. Я тоже пробовал переключать ОС. Сейчас я работаю на Ubuntu 18.04

The following is the new error
user@user-Oryx-Pro:~/Documents/gFlip3D-Release_271/build$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/Documents/gFlip3D-Release_271/build
user@user-Oryx-Pro:~/Documents/gFlip3D-Release_271/build$ make 
[  7%] Building NVCC (Device) object CMakeFiles/gflip3d.dir/GDelFlipping/src/gDel3D/gflip3d_generated_GpuDelaunay.cu.o
/home/user/Documents/gFlip3D-Release_271/GDelFlipping/src/gDel3D/GpuDelaunay.cu(839): error: namespace "thrust" has no member "gather"

1 error detected in the compilation of "/tmp/tmpxft_00002cd3_00000000-8_GpuDelaunay.compute_50.cpp1.ii".
CMake Error at gflip3d_generated_GpuDelaunay.cu.o.Release.cmake:279 (message):
  Error generating file
  /home/Documents/gFlip3D-Release_271/build/CMakeFiles/gflip3d.dir/GDelFlipping/src/gDel3D/./gflip3d_generated_GpuDelaunay.cu.o


CMakeFiles/gflip3d.dir/build.make:924: recipe for target 'CMakeFiles/gflip3d.dir/GDelFlipping/src/gDel3D/gflip3d_generated_GpuDelaunay.cu.o' failed
make[2]: *** [CMakeFiles/gflip3d.dir/GDelFlipping/src/gDel3D/gflip3d_generated_GpuDelaunay.cu.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/gflip3d.dir/all' failed
make[1]: *** [CMakeFiles/gflip3d.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

, если это поможет, я запустил cmake -LA .

cmake -LA .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/Documents/gFlip3D-Release_271/build
-- Cache values
CMAKE_AR:FILEPATH=/usr/bin/ar
CMAKE_BUILD_TYPE:STRING=
CMAKE_COLOR_MAKEFILE:BOOL=ON
CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++
CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-7
CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-7
CMAKE_CXX_FLAGS:STRING=
CMAKE_CXX_FLAGS_DEBUG:STRING=-g
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc
CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-7
CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-7
CMAKE_C_FLAGS:STRING=
CMAKE_C_FLAGS_DEBUG:STRING=-g
CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_EXE_LINKER_FLAGS:STRING=
CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF
CMAKE_INSTALL_PREFIX:PATH=/usr/local
CMAKE_LINKER:FILEPATH=/usr/bin/ld
CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make
CMAKE_MODULE_LINKER_FLAGS:STRING=
CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_NM:FILEPATH=/usr/bin/nm
CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
CMAKE_SHARED_LINKER_FLAGS:STRING=
CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
CMAKE_SKIP_RPATH:BOOL=NO
CMAKE_STATIC_LINKER_FLAGS:STRING=
CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_STRIP:FILEPATH=/usr/bin/strip
CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
CUDA_64_BIT_DEVICE_CODE:BOOL=ON
CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE:BOOL=ON
CUDA_BUILD_CUBIN:BOOL=OFF
CUDA_BUILD_EMULATION:BOOL=OFF
CUDA_CUDART_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libcudart.so
CUDA_CUDA_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcuda.so
CUDA_GENERATED_OUTPUT_DIR:PATH=
CUDA_HOST_COMPILATION_CPP:BOOL=ON
CUDA_HOST_COMPILER:FILEPATH=/usr/bin/cc
CUDA_NVCC_EXECUTABLE:FILEPATH=/usr/local/cuda/bin/nvcc
CUDA_NVCC_FLAGS:STRING=
CUDA_NVCC_FLAGS_DEBUG:STRING=
CUDA_NVCC_FLAGS_MINSIZEREL:STRING=
CUDA_NVCC_FLAGS_RELEASE:STRING=
CUDA_NVCC_FLAGS_RELWITHDEBINFO:STRING=
CUDA_PROPAGATE_HOST_FLAGS:BOOL=ON
CUDA_SDK_ROOT_DIR:PATH=CUDA_SDK_ROOT_DIR-NOTFOUND
CUDA_SEPARABLE_COMPILATION:BOOL=OFF
CUDA_TOOLKIT_INCLUDE:PATH=/usr/local/cuda/include
CUDA_TOOLKIT_ROOT_DIR:PATH=/usr/local/cuda
CUDA_USE_STATIC_CUDA_RUNTIME:BOOL=ON
CUDA_VERBOSE_BUILD:BOOL=OFF
CUDA_VERSION:STRING=10.0
CUDA_cublas_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libcublas.so
CUDA_cublas_device_LIBRARY:FILEPATH=CUDA_cublas_device_LIBRARY-NOTFOUND
CUDA_cudadevrt_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libcudadevrt.a
CUDA_cudart_static_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libcudart_static.a
CUDA_cufft_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libcufft.so
CUDA_cupti_LIBRARY:FILEPATH=/usr/local/cuda/extras/CUPTI/lib64/libcupti.so
CUDA_curand_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libcurand.so
CUDA_cusolver_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libcusolver.so
CUDA_cusparse_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libcusparse.so
CUDA_nppc_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnppc.so
CUDA_nppial_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnppial.so
CUDA_nppicc_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnppicc.so
CUDA_nppicom_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnppicom.so
CUDA_nppidei_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnppidei.so
CUDA_nppif_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnppif.so
CUDA_nppig_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnppig.so
CUDA_nppim_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnppim.so
CUDA_nppist_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnppist.so
CUDA_nppisu_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnppisu.so
CUDA_nppitc_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnppitc.so
CUDA_npps_LIBRARY:FILEPATH=/usr/local/cuda/lib64/libnpps.so
CUDA_rt_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/librt.so

Я попробовал zip, предложенный @ Snow ie и модифицирующий CmakeLists.txt file

set(CUDA_NVCC_FLAGS
    ${CUDA_NVCC_FLAGS};
    -gencode arch=compute_35,code=sm_35
    -gencode arch=compute_30,code=sm_30
    -gencode arch=compute_50,code=sm_50)

, который также не работал.

Следуя совету Snow ie, я пошел дальше и добавил #include <thrust/gather.h> в GPUDelaunay. Сборка прошла успешно, но не запустилась.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Я столкнулся с подобной проблемой с GDel3D. Быстрое решение этой проблемы - включить необходимые файлы тяги, где это необходимо. Для device_mallo c включено , На основании вашего сообщения об ошибке может показаться, что вам нужно включить его в gFlip3D-Release_271 / GDelFlipping / src / gDel3D / GpuDelaunay.cu. Мне также повезло с версией GDel3D, которую вы можете получить с этого сайта:

https://www.comp.nus.edu.sg/~tants/gdel3d.html

более конкретно здесь:

https://www.comp.nus.edu.sg/~tants/gdel3d_files/gDel3D-Release_271.zip

Также вы можете попробовать разные версии CUDA Toolkit. Кроме того, вы можете изменить файл CMakeLists.txt в строках с помощью «-gencode arch = compute _ ##, code = sm _ ##». Это должно позволить вам указать различные вычислительные возможности CUDA и тому подобное. Я сам новичок в CUDA, поэтому могу ошибаться.

Мне удалось запустить версию GDel3D, на которую я ссылался, без каких-либо ошибок. Он скомпилирован и работает на GeForce GT 840m и CUDA 7.5.17 на Linux Mint (точно не уверен в версии). Также я добавил включения для отсутствующих функций тяги и изменил CMakeLists.txt на «arch = compute_50, code = sm_50».

Надеюсь, что все это поможет.

edit1:

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

Вы должны прочитать сообщения об ошибках:

/ home / user / Documents / gFlip3D-Release_271 / GDelFlipping / src / gDel3D / GpuDelaunay.cu (839): ошибка: пространство имен «thrust» не имеет члена «сбор»

эта строка говорит вам, что вам нужно включить заголовок для функции сбора в gFlip3D -Release_271 / GDelFlipping / src / gDel3D / GpuDelaunay.cu

Попробуйте поискать правильный заголовок, где эта функция объявлена ​​/ определена, если подобная ошибка возникнет снова. На этот раз "#include "в gFlip3D-Release_271 / GDelFlipping / src / gDel3D / GpuDelaunay.cu должен решить проблему.

edit2:

Поскольку вы используете RTX 2070, вы можете попробовать использовать это в своем CMakelists.txt (убедитесь, что вы используете CUDA Toolkit 10.0):

set(CUDA_NVCC_FLAGS
    ${CUDA_NVCC_FLAGS};
    -gencode arch=compute_75,code=sm_75)

или

set(CUDA_NVCC_FLAGS
    ${CUDA_NVCC_FLAGS};
    -D_FORCE_INLINES
    -gencode arch=compute_75,code=sm_75)

Это должно заставить CUDA Toolkit использовать самые последние вычислительные возможности. Также вы можете попробовать изменить ## части в "compute _ ##" и "sm _ ##".

Согласно тому, что я нашел в вики, ваш GPU поддерживается только версиями CUDA Toolkit 10.0–10.2, и эти версии инструментария, очевидно, поддерживают следующие вычислительные возможности: 3.0–7.5. Обязательно попробуйте эти версии CUDA Toolkit и эти вычислительные возможности.

0 голосов
/ 30 апреля 2020

Прежде чем я go предпринял шаги, я хотел бы поблагодарить @ Snow ie за их время и помощь в поиске решения. Я начал с бесплатной sh установки Ubuntu. 18.04 со следующими командами в терминале. Некоторые из этих установок не являются необходимыми, но сэкономят мне время позже.

sudo apt update
sudo ubuntu-drivers autoinstall
sudo apt-get install build essential
sudo apt-get install freeglut3 freeglut3-dev libxi-dev libxmu-dev
sudo apt install curl
sudo apt install software-properties-common
sudo apt install cmake
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt install gcc-6 g++-6 gcc-7 g++-7 gcc-8 g++-8 gcc-9 g++-9

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/gcov gcov /usr/bin/gcov-8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7 --slave /usr/bin/gcov gcov /usr/bin/gcov-7

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6 --slave /usr/bin/gcov gcov /usr/bin/gcov-6

Теперь я могу выбрать версию g cc, которую я хочу запустить:

sudo update-alternatives --config gcc

Существует 4 варианта альтернативы g cc ( Предоставление /usr/bin/gcc).

  Selection    Path            Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-9   90        auto mode
  1            /usr/bin/gcc-6   60        manual mode
  2            /usr/bin/gcc-7   70        manual mode
  3            /usr/bin/gcc-8   80        manual mode
  4            /usr/bin/gcc-9   90        manual mode

Press <enter> to keep the current choice[*], or type selection number:

В этом случае я выбираю 1, чтобы выбрать g cc -6

Теперь пришло время установить cuda-toolkit

sudo apt install nvidia-cuda-toolkit

Вы должны увидеть выходные данные с nvcc --version аналогично

nvcc --version

nv cc: драйвер компилятора NVIDIA (C) Cuda Copyright (* 1057) *) Корпорация NVIDIA 2005-2017 гг., Построенная на Fri_Nov__3_21: 07: 56_CDT_2017 Инструменты компиляции Cuda, выпуск 9.1, V9.1.85

Теперь загрузите 3dDelaunay отсюда: «https://www.comp.nus.edu.sg/~tants/gdel3d_files/gDel3D-Release_271.zip»

Внутри /home/user/Documents/gFlip3D-Release_271/GDelFlipping/src/gDel3D/GpuDelaunay.cu вам нужно добавить «#include <thrust/gather.h>»

Вот пример того, как это выглядит как:

#include "GpuDelaunay.h"

#include<iomanip>
#include<iostream>

#include "GPU/CudaWrapper.h"
#include "GPU/HostToKernel.h"
#include "GPU/KerCommon.h"
#include "GPU/KerPredicates.h"
#include "GPU/KerDivision.h"
#include "GPU/ThrustWrapper.h"
#include <thrust/gather.h>

Теперь вам нужно установить целевую вычислительную архитектуру. Моя видеокарта RTX 2070. Согласно nvidia моя вычислительная архитектура и вычислительные возможности составляют 7.5. Я пробовал эти цифры, и они не работали. Я подумал, что, возможно, поскольку версия cuda, с которой я закончил, была не 10.2, а 10.1, мне нужно было ориентироваться чуть меньше на мою архитектуру. Вместо этого я нацелился на вычислительные возможности 7.0 и вычислительную архитектуру.

Вот пример в файле CMakeLists.txt.

set(CUDA_NVCC_FLAGS
    ${CUDA_NVCC_FLAGS};
    -gencode arch=compute_70,code=sm_70)

Теперь давайте go вперед и создаем папку сборки из папки gFlip3D-Release_271

mkdir build
cd build    
cmake ..
make

И последний запуск ./gflip3d

Generating input... Constructing 3D Delaunay triangulation... Checking... V: 100001 E: 772552 F: 1345102 T: 672551 Euler: 0 Euler
check:  Pass Orient check: Pass Adjacency check: Pass

Convex hull facets: 412

Delaunay check: Pass

---- SUMMARY ----

PointNum       100000 FP Mode        Double

TotalTime (ms)     101.19 InitTime       139861894.77 SplitTime       
5.20 FlipTime            68.93 RelocateTime         8.11 SortTime             1.05 OutTime              9.87 SplayingTime         3.65

# Flips           1422073
# Failed verts        109
# Final stars         243
...