Hi everyone,

I'm experiencing an issue with my (real simple, test purpose) OpenCL kernel : it seems to work fine the first time I execute my host program but then it won't behave like it should and I don't seem to be able to understand wtf is wrong with the code, I hope someone will be able to help !

Here's the host code :

Code :
int SomeClass::someFunction() {
 
	cl_int err = CL_SUCCESS;
	try {
 
		vector<cl::Platform> platforms;
		cl::Platform::get(&platforms);
		if (platforms.size() == 0) {
			cout << "Platform size 0\n";
			return -1;
		}
 
		cl_context_properties properties[] = { CL_CONTEXT_PLATFORM, (cl_context_properties)(platforms[0])(), 0};
		cl::Context context(CL_DEVICE_TYPE_CPU, properties); 
 
		vector<cl::Device> devices = context.getInfo<CL_CONTEXT_DEVICES>();
 
		cout << "Max compute units : " << devices[0].getInfo<CL_DEVICE_MAX_COMPUTE_UNITS>() << endl;
 
		cl::Program::Sources source;
 
		ifstream inputFile("kernel.cl");
		string *prog = new string(istreambuf_iterator<char>(inputFile),(istreambuf_iterator<char>()));
		source.push_back(make_pair(prog->c_str(), prog->length()));
 
		cl::Program program_ = cl::Program(context, source);
		program_.build(devices);
 
		cl::Kernel kernel(program_, "SimpleKernel", &err);
 
		int tab[10] = {0};
		cl::Buffer buffer(context, CL_MEM_READ_WRITE|CL_MEM_USE_HOST_PTR, size_t(10), tab);
 
		kernel.setArg(0,buffer);
 
		cl::Event event;
		cl::CommandQueue queue(context, devices[0], 0, &err);
 
		queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(8), cl::NDRange(2), NULL, &event); 
 
		event.wait();
 
		for (int i=0 ; i<10 ; i++)
			cout << endl << tab[i];
		cout << endl;
	}
	catch (cl::Error err) {
		cerr << "ERROR: " << err.what() << "(" << err.err() << ")" << endl;
	}
 
	return EXIT_SUCCESS;
}

and the kernel code (kernel.cl) :

Code :
__kernel void SimpleKernel(__global int *output) {
	output[get_global_id(0)] = get_global_id(0);
	printf("%d %d\n", get_local_id(0), get_global_id(0));
}

My goal was to fill an int array (called tab) with get_global_id(0) : its size is ten, initialised to 0. After kernel execution it should look like this : tab[0] = 0, tab[1] = 1, tab[2] = 2, etc... and IT WORKS but only the first time I execute the program.
When I try and printf the array, it outputs something like "0 1 2 3 4 5 6 7 0 0" but then, when I try it again it always outputs "0 0 0 0 0 0 0 0 0 0" and I have to restart my computer in order to make it work another time.

I can't seem to figure what's wrong, help me I'm going mad on this T_T

Thx in advance.

Foin