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 ответов

21 просмотр

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

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

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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
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
Карта сайта