Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C++;-printf行为怪异_C++ - Fatal编程技术网

C++ C/C++;-printf行为怪异

C++ C/C++;-printf行为怪异,c++,C++,我的程序需要从一个矢量a边界对象计算一个边界框,这个边界框的最小/最大3d矢量需要在CUDA内核中使用 这样做,我得到了一个C++例程中的边界框( StasePosiLeSp.CPP < /COD>): 当我试图在computeNeighborsCuda(grid_params)中打印相同的精确数据时,我遇到了一个非常困难的时刻函数位于systemparticlessph.cu: void computeNeighborsCuda(UniformGridParameters grid_param

我的程序需要从一个矢量a边界对象计算一个边界框,这个边界框的最小/最大3d矢量需要在CUDA内核中使用

这样做,我得到了一个C++例程中的边界框(<代码> StasePosiLeSp.CPP < /COD>):

当我试图在
computeNeighborsCuda(grid_params)中打印相同的精确数据时,我遇到了一个非常困难的时刻函数位于
systemparticlessph.cu

void computeNeighborsCuda(UniformGridParameters grid_params)
{

    printf("cellsize %g min %g %g %g max %g %g %g\n",grid_params.cellSize, grid_params.min.x, grid_params.min.y, grid_params.min.z, grid_params.max.x, grid_params.max.y, grid_params.max.z );

    int numBlock =  m_dPos.size()/256 + 1;
    calcHashD<<<numBlock, 256>>>(thrust::raw_pointer_cast(&m_dGridParticleHash[0]), thrust::raw_pointer_cast(&m_dGridParticleIndex[0]), thrust::raw_pointer_cast(&m_dPos[0]), grid_params, m_dPos.size());
}
您是否知道如何在C函数(和内核)中获得相同的结果

提前谢谢,这真的让我很难过

马蒂亚斯

编辑: 传递一个引用而不是结构的副本,一切都很好


我不知道为什么它不能用一个结构的副本来工作。

< P>我建议用简单的变量构造你自己的结构,并把你想从C++程序中显示的精确数据复制到CUDA函数中。< /P> UB是什么意思?请尝试用%F.替换%g。我已经做了,结果是一样的,还有一些小数:
cellsize-0250000 min-025000-0250000 025000 max 0250000 025000-350888301291506888700118171648000000
参数的类型是什么?我猜可能是程序中其他地方的堆栈损坏。如果是这样的话,通过引用传递结构只是隐藏了实际的问题,它很可能会在代码中的其他地方弹出,作为混乱的行为。对于类似这样的问题(“为什么这段代码不起作用”),希望您提供
cpp cellSize 0.02
cpp min -0.25 -0.25 -0.25
cpp max 0.25 0.25 0.25
void computeNeighborsCuda(UniformGridParameters grid_params)
{

    printf("cellsize %g min %g %g %g max %g %g %g\n",grid_params.cellSize, grid_params.min.x, grid_params.min.y, grid_params.min.z, grid_params.max.x, grid_params.max.y, grid_params.max.z );

    int numBlock =  m_dPos.size()/256 + 1;
    calcHashD<<<numBlock, 256>>>(thrust::raw_pointer_cast(&m_dGridParticleHash[0]), thrust::raw_pointer_cast(&m_dGridParticleIndex[0]), thrust::raw_pointer_cast(&m_dPos[0]), grid_params, m_dPos.size());
}
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