В настоящее время я работаю над проектом, в котором я хочу выполнить некоторый код на Cuda, который должен вызываться из основного файла c ++.Когда я компилирую с Clang, компилируются только файлы .cpp, и компилятор сообщает мне «ожидаемое истечение» в нотации вызова <<< >>> ядра.Любая идея, как я могу это исправить?
У меня есть файлы .cuh с определением, которое я включаю, и исходный файл .cu.Я использую CMake для настройки проекта и сборки его с помощью Ninja.
Я использую ccached clang ++ и поставляю "--cuda-path = / usr / local / cuda-10.1 --cuda-gpu-arch = sm_61 -L / usr / local / cuda-10.1 / lib64 -lcudart_static -ldl -lrt -pthread -std = c ++ 17 "для проверки аргументов.
Когда я добавляю флаг -x cuda, ошибка не появляется, но вместо этого она говорит мне, что библиотека, с которой я ссылаюсь, не может перезаписать какую-либо функцию host , ноЯ думаю, это потому, что он хочет скомпилировать все как cuda, что не предназначено.
Я передаю все файлы в моей исходной папке в add_executable в CMake через GLOB $ {APP_PATH} / src / *, которыйследует добавить все файлы.
main.cpp
#include "ParticleEngine.cuh"
...
int main(){
simulation_timestep(&this->particles[0], this->gravity, 1, delta_frame,
this->particles.size());
}
ParticleEngine.cuh
#pragma once
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
void simulation_timestep(Particle *particles, ci::vec3 gravity, double mass,
double time_delta, unsigned long long n_particles);
ParticleEngine.cu
#include "ParticleEngine.cuh"
__global__ void particle_kernel(Particle *particles, ci::vec3 *gravity,
double *mass, double *time_delta) {
...
}
void simulation_timestep(Particle *particles, ci::vec3 gravity, double mass,
double time_delta, unsigned long long n_particles) {
... //memcpy stuff
particle_kernel<<<dimgrid, dimblock>>>(cuda_particles, cuda_gravity,
cuda_mass, cuda_time_delta);
...
}
edit: полное сообщение об ошибке:
[build] In file included from ../src/main.cpp:1:
[build] ../src/ParticleEngine.cu:43:20: error: expected expression
[build] particle_kernel<<<dimgrid, dimblock>>>(cuda_particles, cuda_gravity,
[build] ^
edit: сообщение об ошибке при выполнении clang с -x cuda
:
[build] /home/mebenstein/Cinder/include/glm/gtx/io.inl:97:32: error: __host__ __device__ function 'get_facet' cannot overload __host__ function 'get_facet'
[build] GLM_FUNC_QUALIFIER FTy const& get_facet(std::basic_ios<CTy, CTr>& ios)
[build] ^
[build] /home/mebenstein/Cinder/include/glm/gtx/io.hpp:145:14: note: previous declaration is here
[build] FTy const& get_facet(std::basic_ios<CTy,CTr>&);
[build] ^
Я включил библиотеку c ++ cinder в main.cpp, и эта ошибка появляется.