OpenCL* for CPU
Ask questions and share information on Intel® SDK for OpenCL™ Applications and OpenCL™ implementations for Intel® CPU
Announcements
This forum covers OpenCL* for CPU only. OpenCL* for GPU questions can be asked in the GPU Compute Software forum. Intel® FPGA SDK for OpenCL™ questions can be ask in the FPGA Intel® High Level Design forum.
1663 Discussions

Does __attribute__((packed)) works correctly ?

Polar01
Beginner
547 Views
Hi,
I'm facing a problem, I have the following structure :
typedef struct __attribute__((packed))
{
float Ks;
clSpectrum Cs;
float exponent;
} ShaderParam_plastic;
But when I convert it to :
typedef struct __attribute__((packed))
{
float Kd;
clSpectrum Cd;
float Ks;
clSpectrum Cs;
float exponent;
} ShaderParam_plastic;
I got a crash ! I have checked for the data I send and they are aligned correctly !
In fact I use this structure :
typedef struct __attribute__((packed))
{
unsigned int shaderId;
union __attribute__((packed))
{
ShaderParam_emitter emitter;
ShaderParam_glass glass;
ShaderParam_matte matte;
ShaderParam_mirror mirror;
ShaderParam_plastic plastic;
ShaderParam_Textured_emitter Textured_emitter;
ShaderParam_Textured_glass Textured_glass;
ShaderParam_Textured_matte Textured_matte;
ShaderParam_Textured_mirror Textured_mirror;
ShaderParam_transmissive transmissive;
} params;
} ShaderParameters;
Even my union is aligned !!! If the syntax is correct ?
0 Kudos
11 Replies
Polar01
Beginner
547 Views

In the OpenCL spec. page 199, they wrote this :

"You may only specify this attribute on the definition of a enum, struct orunion, not on a typedef which does not also define the enumerated type,structure or union."

Does it mean that I cannot pack a "typedef" ? or that I can write :

typedef struct__attribute__((packed)) MyStruct {...};

But not ?

typedef__attribute__((packed))struct MyStruct {...};

NB:I have replace my typedef with a struct, but it still crash !!!

NB2: I cannot use "align" because my OpenCL code is generated at run-time. So, it is difficult to do and error prone :-P (Also, my buffer is generated from a malloc, then filled at run-time with memcpy !!)


Polar01
Beginner
547 Views
Even with this version of my code ... my soft still got a crash !!!
[cpp]struct __attribute__((packed)) ShaderParam_transmissive
{
float Ks __attribute__((packed));
clSpectrum Cs __attribute__((packed));
float eta __attribute__((packed));
};
struct __attribute__((packed)) ShaderParametersStruct
{
uint shaderId __attribute__((packed));
union __attribute__((packed)) 
{
struct ShaderParam_emitter emitter;
struct ShaderParam_glass glass;
struct ShaderParam_matte matte;
struct ShaderParam_matte_rough matte_rough;
struct ShaderParam_mirror mirror;
struct ShaderParam_plastic plastic;
struct ShaderParam_Textured_emitter Textured_emitter;
struct ShaderParam_Textured_glass Textured_glass;
struct ShaderParam_Textured_matte Textured_matte;
struct ShaderParam_Textured_mirror Textured_mirror;
struct ShaderParam_transmissive transmissive;
} __attribute__((packed)) params __attribute__((packed));
};[/cpp]
Guy_B_Intel
Employee
542 Views
Hi,
Thanks for your post.

There is a documented known issue in the current SDK, which prevents the usage of user defined structures as arguments for kernels. This issue might be solved by passing these structures in OpenCL memory objects.

If the bare definition of a packed structure fails, please letme know, soI can file a bug on this issue.

Thanks
Guy
Polar01
Beginner
542 Views
Thanks,
In my kernel I use this :
__kernel void __attribute__((vec_type_hint(float4))) RenderPath(
...
__constantchar* shaderParametersBuffer
...
)
and later I access it like this :
ShaderParameters shaderParams = *((__constantShaderParameters*)(shaderParametersBuffer + offset));
where 'offset' is defined in bytes !!!
So, maybe it is not related to this issue ?
Regards
Polar01
Beginner
542 Views
Hi,
Can you enter a new bug please ? It sounds unrelated ! Or maybe you have a solution !
Thanks
Polar01
Beginner
542 Views
Hi,

Can I have any news or help please ?
I'm still trying to fix it, but if the problem come from the SDK I just have to help you to fix it :-P

Thanks a lot
Guy_B_Intel
Employee
542 Views
Hi,
Thanks again for your post.

It's an interesting issue, apparently it's a bug in our SDK. I'll open a bug report about this issue.

We'll let you know about any progress.

Thanks
Guy Benyei
Polar01
Beginner
542 Views
Thanks a lot Guy,
I can provide you my application if necessary (if Intel agree to sign a Non Disclosure Agreement of course).
You can contact me on my email.
Regards and thanks for your work
Krys
Shiri_M_Intel
Employee
542 Views
Hi
Is it possible to create simple kernel, not full application that cause the same failure?
This can elimiminate the need to involve legal.
Thanks, SHiri
ARNON_P_Intel
Employee
547 Views

Right Shiri,

Krys, in addition, I encourage you to join The Intel Visual Adrenaline Software Development Program. Log into the program site and see our community and suooirt offering to visual computing developers.

As this product is in preview stage, support through forum is what we offer. Looking forward, we will work to expand our support offering to provide you the level that you need.

Thanks,

Arnon

Polar01
Beginner
547 Views
Hi,
I will take a look at your program, thanks for the information.
I have test the new SDK and everything works perfectly !! :-D and even faster.
Congratulation for your release... good job :-)
So, is it possible to be in touch with a "project manager" in order to discuss some "marketing stuffs" ?
Regards
Reply