I’m just started OpenCL, so now I’m reading manual.
And I’ve got a question: Platform is the host and one or more devices.
So, when we call GetPlatformIDs, we want to get access to our platform.
The question is can you please give an example of system with two or more platforms.
I understand we have host+CPU+GPU like one platform but what can be on another one?
Since clGetPlatformIDs may return multiple platforms, a platform does not necessarily include the host device. In fact if you only had the NVIDIA ICD installed and not the AMD or Intel ICDs, then no platform returned (only one, NVIDIA’s) would contain the host device.
An example of a common multiple platform system would be one with an Intel CPU and an NVIDIA GPU. Currently the Intel platform exposes only the CPU, but not the integrated GPU, and the NVIDIA platform exposes only the GPU. Some other platforms, such as AMD’s, Apple’s, and IBM’s, expose multiple types of devices.
Thanks for quick response!
I use AMD SDK, so it looks I can use both types of devices.
And one more little question - what are the benefits of using two platforms, CPU based one and GPU based one, in comparasion to using single platform that uses both of these devices?
I don’t think it’s a question of ‘benefits’, it’s just the way the API provides an application the information it needs.
AMD does cpus and gpu’s so their platform will show all of their devices - cards or the cpu. Others will only show a cpu or their own gpu cards.
Depending on your needs there may be pros and cons to using multiple platforms. A quick practical argument would be why needlessly increase the programming complexity if you can do everything with one platform instead of two. However, one could make some more technical arguments.
Let’s say you have an AMD CPU and an AMD discreet GPU. You could use a single platform–AMD’s–for both the CPU and GPU, or you could use Intel’s platform for the CPU and AMD’s platform for the GPU.
Why would you do that? Well, maybe using out-of-order execution on the CPU is really important to you and Intel’s platform supports it, but AMD’s does not yet.
Why wouldn’t you do that? Well, maybe you want to share buffers between the CPU and GPU without explicitly copying them from one context for another. A single platform lets you create a context with both devices in it and let the driver handle the many fine details of the buffers, whereas it’s impossible to create a context using two or more different platforms.
Okay, now I see it’s not so important question for a beginner like me, how many platforms to use.
For now I don’t want to make things more complicated so I will use AMD single platform.
Thank you for your help! Hope I’ll get some answers if I have more questions:)