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

Access violation : sounds a bug in the last SDK ?

Polar01
Beginner
199 Views
Hi,
I have the following code that works well :
#pragma unroll
for(uint i = 0; i < MLT_SAMPLING_TASK_PER_SAMPLER; i++, taskId++)
{
clTask task = tasks[taskId];
clMLTSample sample = task.mltSample;
if (sample.requestNewMLTSample && sample.score > bestScore)
{
bestScore = sample.score;
bestScoreTaskId = taskId;
}
}
#pragma unroll for(uint i = 0; i < MLT_SAMPLING_TASK_PER_SAMPLER; i++, taskId++) { clTask task = tasks[taskId]; clMLTSample sample = task.mltSample; if (sample.requestNewMLTSample && sample.score > bestScore) { bestScore = sample.score; bestScoreTaskId = taskId; } }
But when I replace 2 lines with (to minimize the memory access) I got an access violation !
clMLTSample sample = tasks[taskId].mltSample;
0 Kudos
10 Replies
sharpneli
Beginner
199 Views
Is this OpenCL or Host code? From the looks of it it looks like a host code so it has nothing to do with Intel OpenCL SDK.
Polar01
Beginner
199 Views
No, it is OpenCL kernel code !!!!
Polar01
Beginner
199 Views
No reaction from the Intel Team ?
Doron_S_Intel
Employee
199 Views
Hello,

I'm not sure it's legal to use #pragma unroll in OpenCL C code. Does the problem persist when you remove those instructions?

Doron Singer
Polar01
Beginner
199 Views
It is something that I have found on the Intel pages... so at least for the Intel SDK it should work.
Anyway, I have test without... and I still have the crash :-(
Doron_S_Intel
Employee
199 Views
Good. Next question: What is a "clTask"? Is it a typedef to an OpenCL native type, or is it some user-defined struct?
Polar01
Beginner
199 Views
clTask is a typedef to a struct.
Doron_S_Intel
Employee
199 Views
I'm not sure the assignment operator is defined for structs in C. You can use the printf extension to make sure the struct doesn't contain garbage data after the assignment.
sharpneli
Beginner
199 Views
Assignment operation for structs is very much defined in C (http://en.wikipedia.org/wiki/Struct_%28C_programming_language%29#Assignment).

These 2 pieces of code are identical in their functionality for a good compiler. Lazy compiler might allocate space from stack for clTask task but those days are long gone.
clTask task = tasks[taskId];
clMLTSample sample = task.mltSample;

clMLTSample sample = tasks[taskId].mltSample;

If the only difference between working and non working version are those pieces of code then this indeed is a bug in Intel's implementation.
Doron_S_Intel
Employee
199 Views
In that case, we'll look into this.
Thanks for reporting (in case it's not obvious from my posts, I'm not on the compiler side of things :))

Doron
Reply