CUDA я столкнулся с проблемой памяти при использовании Float4 в нажимной CUDAпроблемы с памятью при использовании Float4 в нажимной
добавив Float4 «buggyVariable» в качестве члена функтора, кажется, вызывают данные с плавающей точкой будет получить левой сдвинутый на 1 поплавок.
в CUDA_animateParticles я четко Y 0 и Z 1
еще при запуске функтор и рисунок его в OpenGL. Я получаю частицы с Xposition = 1, которые показывают, что Y является 1 внутри функтора.
Я также проверил с float2 и float3, они, похоже, работают нормально.
так что это проблема с выравниванием памяти или ошибка.
Может ли кто-нибудь пролить свет на это? Спасибо за помощь.
#include <thrust/sort.h>
#include <thrust/random.h>
#include <thrust/device_vector.h>
#include "cutil_math.h"
struct animateParticles_functor
{
float4 buggyVariable; //why does adding this variable cause following floats to get wrong values???
float pex, pey, pez, pew;
__host__ __device__
animateParticles_functor(float x, float y, float z, float w) :
pex(x), pey(y), pez(z), pew(w)
{
}
template <typename Tuple>
__host__ __device__
void operator()(Tuple t)
{
if(pey > 0)
thrust::get<0>(t) = make_float4(1, 0, 0, 0); //true if y is bugged
else
thrust::get<0>(t) = make_float4(0, 0, 0, 0); //false if its not bugged
return;
}
}
void CUDA_animateParticles(float4* cuda_devicePointer_vboPosition, float3* cuda_devicePointer_particleVelocitys, unsigned int numParticles, float4 particleEmitter)
{
thrust::device_ptr<float4> d_pos(cuda_devicePointer_vboPosition);
thrust::device_ptr<float3> d_vel(cuda_devicePointer_particleVelocitys);
thrust::for_each(
thrust::make_zip_iterator(thrust::make_tuple(d_pos, d_vel)),
thrust::make_zip_iterator(thrust::make_tuple(d_pos + numParticles, d_vel + numParticles)),
animateParticles_functor(0, 0, 1, 0) //notice that i set Z to 1 and not Y to 0
);
}
не является размер float4 очевидной независимо от того, какой компилятор вы используете? – ColacX
Выравнивание усложняет ситуацию. –