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.
1718 Discussions

Access violation : sounds a bug in the last SDK ?

Polar01
Beginner
664 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
664 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.
0 Kudos
Polar01
Beginner
664 Views
No, it is OpenCL kernel code !!!!
0 Kudos
Polar01
Beginner
664 Views
No reaction from the Intel Team ?
0 Kudos
Doron_S_Intel
Employee
664 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
0 Kudos
Polar01
Beginner
664 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 :-(
0 Kudos
Doron_S_Intel
Employee
664 Views
Good. Next question: What is a "clTask"? Is it a typedef to an OpenCL native type, or is it some user-defined struct?
0 Kudos
Polar01
Beginner
664 Views
clTask is a typedef to a struct.
0 Kudos
Doron_S_Intel
Employee
664 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.
0 Kudos
sharpneli
Beginner
664 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.
0 Kudos
Doron_S_Intel
Employee
664 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
0 Kudos
Reply