Программы на C++. Форум разработчиков
Anonymous
Использование единого бэкэнда в ArrayFire
Сообщение
Anonymous » 07 янв 2025, 07:43
Я пытаюсь выбрать свой бэкэнд arrayfire на основе доступных бэкэндов и их возможностей (если бэкэнд поддерживает двойные значения, используйте его, иначе нет). Поэтому я создал файл CMakeLists.txt:
Код: Выделить всё
cmake_minimum_required(VERSION 3.10)
project(arrayfire_test)
if(USE_EXTERNAL_PATHS)
set(CMAKE_C_COMPILER ${C_COMPILER})# CACHE PATH "" FORCE)
set(CMAKE_CXX_COMPILER ${CXX_COMPILER})#CACHE PATH "" FORCE)
else()
set(CMAKE_C_COMPILER mpicc)
set(CMAKE_CXX_COMPILER mpic++)
endif()
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -fopenmp-simd")
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
set(CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost")
endif()
set(C_FLAGS "${CMAKE_C_FLAGS} ${CXX_FLAGS} -fPIC -flto -march=native -fopenmp -O2 -funroll-loops -funroll-all-loops -fstrict-aliasing -std=gnu++14")
set(CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAGS} -fPIC -flto -march=native -fopenmp -O2 -funroll-loops -funroll-all-loops -fstrict-aliasing -std=gnu++14")
string(REPLACE " " ";" REPLACED_CXX_FLAGS ${CXX_FLAGS})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/lib)
set(ArrayFire_DIR "/opt/arrayfire/share/ArrayFire/cmake")
FIND_PACKAGE(ArrayFire)
find_package(Armadillo REQUIRED PATHS "/opt/armadillo")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -std=c++11 -O0 -g3 -flto -march=native")
set(FORGE_LIBRARIES "/opt/arrayfire/lib/libforge.so")
INCLUDE_DIRECTORIES(${ArrayFire_INCLUDE_DIRS}
${ARMADILLO_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} "source/main.cpp")
target_compile_options(${PROJECT_NAME} PRIVATE ${REPLACED_CXX_FLAGS})
TARGET_LINK_LIBRARIES(${PROJECT_NAME}
${ArrayFire_Unified_LIBRARIES}
${ARMADILLO_LIBRARIES})# ${FORGE_LIBRARIES})
и основной файл:
Код: Выделить всё
int main(void){
int backends = af::getAvailableBackends ();
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/60378848/usage-of-unified-backend-in-arrayfire[/url]
1736224982
Anonymous
Я пытаюсь выбрать свой бэкэнд arrayfire на основе доступных бэкэндов и их возможностей (если бэкэнд поддерживает двойные значения, используйте его, иначе нет). Поэтому я создал файл CMakeLists.txt: [code]cmake_minimum_required(VERSION 3.10) project(arrayfire_test) if(USE_EXTERNAL_PATHS) set(CMAKE_C_COMPILER ${C_COMPILER})# CACHE PATH "" FORCE) set(CMAKE_CXX_COMPILER ${CXX_COMPILER})#CACHE PATH "" FORCE) else() set(CMAKE_C_COMPILER mpicc) set(CMAKE_CXX_COMPILER mpic++) endif() if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -fopenmp-simd") elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") set(CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost") endif() set(C_FLAGS "${CMAKE_C_FLAGS} ${CXX_FLAGS} -fPIC -flto -march=native -fopenmp -O2 -funroll-loops -funroll-all-loops -fstrict-aliasing -std=gnu++14") set(CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAGS} -fPIC -flto -march=native -fopenmp -O2 -funroll-loops -funroll-all-loops -fstrict-aliasing -std=gnu++14") string(REPLACE " " ";" REPLACED_CXX_FLAGS ${CXX_FLAGS}) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/lib) set(ArrayFire_DIR "/opt/arrayfire/share/ArrayFire/cmake") FIND_PACKAGE(ArrayFire) find_package(Armadillo REQUIRED PATHS "/opt/armadillo") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -std=c++11 -O0 -g3 -flto -march=native") set(FORGE_LIBRARIES "/opt/arrayfire/lib/libforge.so") INCLUDE_DIRECTORIES(${ArrayFire_INCLUDE_DIRS} ${ARMADILLO_INCLUDE_DIRS}) add_executable(${PROJECT_NAME} "source/main.cpp") target_compile_options(${PROJECT_NAME} PRIVATE ${REPLACED_CXX_FLAGS}) TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${ArrayFire_Unified_LIBRARIES} ${ARMADILLO_LIBRARIES})# ${FORGE_LIBRARIES}) [/code] и основной файл: [code]int main(void){ int backends = af::getAvailableBackends (); std::cout Подробнее здесь: [url]https://stackoverflow.com/questions/60378848/usage-of-unified-backend-in-arrayfire[/url]