Reputation: 3922
I'm new to OpenCL, and have followed this tutorial to get started. Before creating the cl::Context
, the tutorial creates a static array of three cl_context_properties
which it doesn't explain what it is for, but which it sends as the properties argument in the cl::Context
constructor.
However when looking at the reference page for cl::Context
, there is no explanation of what the properties parameter is, but it does say that it "is reserved and must be zero". So why does the tutorial send a non-zero value as that argument? What purpose does it serve? And if you have been able to pass that argument before, how does it come that it is suddenly "reserved", doesn't that make OpenCL non-backward compatible?
The code compiles and runs fine both with and without the parameter there. The only difference is that I get a warning that cprops
is unused when putting NULL
there instead of cprops
.
Also, when I pass CL_DEVICE_TYPE_CPU | CL_DEVICE_TYPE_GPU
as the type argument to the cl::Context
constructor, my application will crash (SIGSEGV) when I later try to create a cl::Buffer
with the context. Why? Am I not able to specify more than one device type to use simultaneously?
Update: By giving NULL
as the properties argument to the cl::Context
constructor, the variable platformList
is suddenly not used to anything OpenCL related anymore. The tutorial seems to use platformList
to specify the platform for which the cl::Context
should be created, but now the context is just created like this:
cl::Context context(
CL_DEVICE_TYPE_GPU,
NULL,
NULL,
NULL,
&err);
so I don't get to specify the platform. Shouldn't I get to do that? How does it come I can't do that when the tutorial seemed to be doing that?
Upvotes: 0
Views: 907
Reputation: 2318
On your first question, see the official OpenCL documentation for a description of this parameter: http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/. This is the C API, but it is the same as the C++ API.
As to your second question - you may want to check the error result from creating the context to see why it doesn't like the type parameters you specify.
Upvotes: 0