207 похожих чатов

Я пишу программу, которая использует CUDA на машине, которая

это поддерживает и не использует на остальных.
CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)

project(libslm LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_VERBOSE_MAKEFILE OFF)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "-Wall -Wextra -march=native")

if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type" FORCE)
endif()

# CUDA/Thrust configuration
include(CheckLanguage)
check_language(CUDA)
add_compile_definitions(THRUST_HOST_SYSTEM=THRUST_HOST_SYSTEM_OMP)
if(CMAKE_CUDA_COMPILER)
message(STATUS "CUDA support is ON")
enable_language(CUDA)
add_compile_definitions(THRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_CUDA)
file(GLOB SRCS "*.cu" "display.cpp")
#set(CMAKE_SHARED_LIBRARY_CUDA_FLAGS "")
#set(CMAKE_SHARED_MODULE_CUDA_FLAGS "")
else()
message(STATUS "CUDA not found")
add_compile_definitions(THRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_OMP)
file(GLOB SRCS "*.cpp")

# FFTW
target_link_libraries(libslm PUBLIC fftw3f)
endif()

file(GLOB HDRS "*.h")

add_library(libslm SHARED ${SRCS} ${HDRS})
set_target_properties(libslm PROPERTIES OUTPUT_NAME "slm")
target_include_directories(libslm PRIVATE "..")
target_include_directories(libslm PUBLIC "../../vendor/thrust")

Структура файлов:
amplitude.cpp
amplitude.cu
amplitude.h
CMakeLists.txt
CMakeLists.txt.user
display.cpp
display.h
field_container.h
functors.h
gs_algorithm.cpp
gs_algorithm.cu
gs_algorithm.h
hologram.cpp
hologram.cu
hologram.h
slm.cpp
slm.cu
slm.h
Каждый .cu файл содержит только инклюд соответсвтующего .cpp файла (костыль, чтобы они комплиилилсь через nvcc, если есть способы умнее, то мне интересно)

Так вот, при сборке в nvcc почему-то попадает флаг -fPIC, который для него не определен, из-за чего компилятор падет с ошибкой.

Я посмотрел, этот флаг почему-то добавляется в CUDA_FLAGS в flags.make.
Вопрос 1: какая скотина добавляет этот флаг?
Вопрос 2: что я делаю не так?

4 ответов

23 просмотра

не совсем про то что спрашиваешь. про c++ by nvcc можно как-то так попробовать https://stackoverflow.com/questions/58861467/how-to-compile-c-as-cuda-using-cmake

-fPIC похож на "стандартный" флаг для шаредной либы

Eugene- Автор вопроса
Maxim Elchugin
-fPIC похож на "стандартный" флаг для шаредной либ...

А его может добавлять факт добавления либы? Всм, у меня там подключаются Qt, fftw и прочее. Оно может влиять?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта