Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)
16594 Discussions

Structure Padding or Memory Transferring

Altera_Forum
Honored Contributor II
1,308 Views

I have develop a C code to do some calculations on some data made of structures. It works perfectly on CPU with C code. I have then implemented the same code with OpenCL and it is outputting wrong results and by debugging on CPU I can see it's reading wrong values from the structures. I have developed different codes on OpenCl even big codes and didn't have this problem. I am using doubles to avoid precision differences but the problem here is that the data looks getting transferred wrongly. I have no idea why is this happening. What suggestions would you guys give me? I have done already structure packaging correctly I guess. Looks like the memory allocation might be giving some problems but I am not sure why. I am running just 1 work-item and no use of local memory only global. Before I was trying a similar code and it was not giving so many problems. I am thinking it's a problem of memory allocation but I have always done like this in other codes. 

Sorry if I am not posting any code but I can't share it because of my job.
0 Kudos
3 Replies
Altera_Forum
Honored Contributor II
308 Views

Without seeing the code, it would be pretty difficult to guess what the problem is.

0 Kudos
Altera_Forum
Honored Contributor II
308 Views

Let's start with memory allocation. This is how I allocate memory for structures: 

 

d_orders_size = sizeof(SimpleOrder) * orders->size(); 

d_orders = (SimpleOrder*)_aligned_malloc(d_orders_size, 64); 

for (int i = 0; i < orders->size(); i++) 

d_orders[i] = orders->at(i); 

 

This is the definition of the structure: 

 

struct SimpleOrder { 

cl_double a; 

cl_int b; 

enum anEnum c; 

 

cl_int d; 

cl_int e; 

cl_int padding[10]; 

}; 

 

So it's size of 64 bytes. 

 

Is there any problem with these two parts? 

 

The rest of the OpenCL code is the same as the C version so I don't see why there should be any problem since it's a one work item kernel.
0 Kudos
Altera_Forum
Honored Contributor II
308 Views

I have just realized I was passing the wrong buffer to a function inside the kernel... Sorry for wasting a thread here. Thanks it can be closed.

0 Kudos
Reply