cancel
Showing results for 
Search instead for 
Did you mean: 

Archives Discussions

skstronghold
Journeyman III

Garbage output by array of struct in OpenCL

I'm a total beginner with OpenCL and I'm trying to make the following kernel to work. I am passing an array of structure to the kernel and trying to modify its value. My structure declaration is:

#define LIST_SIZE 10

#pragma pack(push, 1)

typedef struct pairt {

     int a;

     int b;

} pairt; 

#pragma pack(pop)

My host code to create buffer for passing this struct is:

pairt p[LIST_SIZE]; p_mem_obj = clCreateBuffer(context, CL_MEM_READ_WRITE, LIST_SIZE*sizeof(struct pairt), NULL, &ret);

ret = clEnqueueWriteBuffer(command_queue, p_mem_obj, CL_TRUE, 0, LIST_SIZE*sizeof(struct pairt), &p, 0, NULL, NULL);

My code for setting kernel arguments is:

ret = clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&p_mem_obj);

size_t global_item_size = LIST_SIZE;

size_t local_item_size = 2;

ret = clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL, &global_item_size, &local_item_size, 0, NULL, &events[0]);

ret = clWaitForEvents(1, &events[0]);

ret = clReleaseEvent(events[0]);

ret = clEnqueueReadBuffer(command_queue, p_mem_obj, CL_TRUE, 0, LIST_SIZE*sizeof(struct pairt), p, 0, NULL, &events[1]);

ret = clWaitForEvents(1, &events[1]);

My kernel is:

struct __attribute__ ((packed)) pairt {

     int a;

     int b;

}; 

__kernel void simple_diff( __global struct pairt* p) {

     int i = get_global_id(0);

     __global struct pairt *tmp = &p;

     tmp->a = tmp->a * -1;

     tmp->b = tmp->b * -1; 

}

I initialized array with following values:

1 2

3 4

5 6

7 8

9 10

11 12

13 14

15 16

17 18

19 20

but the values returned by kernel are:

-298660672 -32767

0 0

-4198172 0

-298660832 -32767

-4200052 0

-1 -2

-3 -4

-5 -6

-7 -8

-9 -10

I have no idea why this is happening?

0 Likes
2 Replies

What device are you running on? Can you post the ISA for the kernel? You should be able to retrieve it by setting the compile option "-save-temps".

0 Likes

Please find files in attachments

0 Likes