Hi³ everybody External Image ,
I have a new question due to an example that disturbs me:
class titi
{
int i;
public:
__device__
titi(int j):i(0)
{
i=j;
}
__device__
int _i()
{
return i;
}
};
__global__ void mykernel(float * A1, float * R)
{
titi * too;
if(A1[0])
{
titi ti(5);
too=&ti;
}
R[0]=too->_i();
}
int main()
{
int h;
float A1[]={1,2,3,4,5,6,7,8,9};
float R[9];
int taille_mem=sizeof(float) * 9;
float * a1_device;
float * r_device;
cudaMalloc ( (void**) &a1_device, taille_mem);
cudaMalloc ( (void**) &r_device, taille_mem);
cudaMemcpy( a1_device,A1,taille_mem,cudaMemcpyHostToDevice);
for(h=0;h<3;h++){
mykernel<<<1,9>>>(a1_device,a2_device,r_device);
// results are taken back
cudaMemcpy(R,r_device,taille_mem,cudaMemcpyDeviceToHost);
//output on the screen
printf("%f\n",R[0]);
// first element of A1 is "marked"
A1[0]=-1;
cudaMemcpy( a1_device,A1,taille_mem,cudaMemcpyHostToDevice);
}
}
results: (if too=&ti(5) is alived between new kernel, 5 is obtained!)
I obtain this:
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
5.000000
code file ishere
So do objects remain between kernels or is it a pure random behaviour? :)