[英]Pointer address changes during extern function call
我正在编写一个程序,其中C ++文件调用extern“C”函数以启动多个CUDA内核函数。 在调试代码时,我发现当我输入extern函数时,我的一个指针的目标地址会发生变化。
这是有问题的代码(在我的.cpp文件中):
cout << "knnIndices before launch: " << knnIndices_d << endl;
launch_kernel(numParticles, dptr /*positions_d*/, velocities_d, embedded_d,
forces_d,
#ifndef USE_ATOMIC_FLOAT
externalForces_d,
#endif
masses_d, knnIndices_d, dt);
cout << "knnIndices after launch complete: " << knnIndices_d << endl;
并在.cu文件中:
extern "C" void launch_kernel(int numParticles, float4* positions, float4* velocities,
float4* embedded, float4* forces,
#ifndef USE_ATOMIC_FLOAT
int4* externalForces,
#endif
float* masses, int* knnIndices, float dt)
{
std::cout << "knnIndices at launch start: " << knnIndices << std::endl;
这个输出是:
knnIndices before launch: 0x200420000
knnIndices at launch start: 0x200321400
knnIndices after launch complete: 0x200420000
我试图解释这种行为的想法已经用完了,我将不胜感激。 谢谢!
在我看来,就像你在其中一个来源中定义USE_ATOMIC_FLOAT
一样。 所以参数的真实索引是错误的,尝试打印前后的参数(或只是检查代码)来确认。
这是C函数的一面,通常如果它们在不同的目标文件中,则该符号仅包含函数的名称,而不包含参数...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.