Моя программа должна вычислить ограничивающий прямоугольник от вектора граничными объектами, а min/max 3d-векторы этого ограничивающего прямоугольника должны использоваться в ядре CUDA.C/C++ - printf действующий weird
Для этого я получить мою ограничительную рамку в с рутиной ++ (systemparticlesph.cpp
):
void SystemParticleSPH::computeNeighborhood()
{
//cellSize
UniformGridParameters grid_params;
grid_params.cellSize = sph_parameters.ParticleRadius;
//bbox
std::pair<glm::vec3, glm::vec3> bbox = CollisionObjectsContainer::getInstance()->getBBox();
grid_params.min = std::get<0>(bbox);
grid_params.max = std::get<1>(bbox);
//works fine here !
std::cout << "cpp cellSize " << grid_params.cellSize << std::endl;
std::cout << "cpp min " << grid_params.min.x << " " << grid_params.min.y << " " << grid_params.min.z << std::endl;
std::cout << "cpp max " << grid_params.max.x << " " << grid_params.max.y << " " << grid_params.max.z << std::endl;
//cuda call
computeNeighborsCuda(grid_params);
}
Результатов отпечатанных соиЬ именно то, что я ожидал в соответствии с граничными объектами, которые я создал:
cpp cellSize 0.02
cpp min -0.25 -0.25 -0.25
cpp max 0.25 0.25 0.25
Я действительно трудное время, когда я пытаюсь напечатать те же точные данные в функции computeNeighborsCuda(grid_params);
, расположенной в systemparticlessph.cu
:
Результаты (когда я комментарий 3 cout
) должны быть одинаковыми, но вот что я получаю:
cellsize -0,25 min -0,25 -0,25 0,25 max 0,25 0,25 -7168,19
Похоже, есть некоторое смещение делая все это неправильно: cellSize
имеет значение min.x
, а max.z
имеет произвольное значение.
Обратите внимание, что проблема такая же, когда я вызываю printf
из ядра CUDA.
отметить также, что она становится все хуже, когда я отображать как с соиЬ и Printf в то же время:
cpp cellSize 0.02
cpp min -0.25 -0.25 -0.25
cpp max 0.25 0.25 0.25
cellsize -1,79826e+36 min 0 1,21731e-37 0 max 1,21731e-37 0 1,21731e-37
У вас есть представление о том, чтобы получить тот же результат в функции C (и ядро) ?
Заранее спасибо, это действительно смущает меня.
Mathias
Edit:
Передача ссылки вместо копии структуры, все работает прекрасно.
Тем не менее, я понятия не имею, почему это не работает с копией структуры.
'C/C++' это UB .. –
Что означает UB? –
Попробуйте заменить% g на% f. – OrMiz