PPGoodMan
PPGoodMan

Reputation: 351

clGetPlatformID error when running OpenCL program.

I've been trying to make OpenCL work in my laptop. I followed this link for that. I have an NVIDIA GT525M video card and Windows 8.1. The steps I followed were:

Installing the up-to-date NVIDIA drivers.

Installing Visual Studio 2013 Community Edition.

Adding the paths for the linker and the compiler.

and then I tried to run the following code as given in that page:

#include <stdio.h>
#include <CL/cl.h>

int main(void)
{
    cl_int err;
    cl_uint* numPlatforms=NULL;

    err = clGetPlatformIDs(0, NULL,numPlatforms);
    if (CL_SUCCESS == err)
        printf("\nDetected OpenCL platforms: %d", numPlatforms);
    else
        printf("\nError calling clGetPlatformIDs. Error code: %d", err);
    getchar();
    return 0;
}

The code builds successfully but the result I get is:

Error calling clGetPlatformIDs. Error code: -30

I get zero as the number of platforms. I've been looking all over the internet for a solution but couldn't find one. Please help.

Upvotes: 0

Views: 4371

Answers (1)

user703016
user703016

Reputation: 37945

This:

cl_uint* numPlatforms=NULL;
err = clGetPlatformIDs(0, NULL,numPlatforms);

Is equivalent to this:

err = clGetPlatformIDs(0, NULL, NULL);

Which doesn't make sense. As per the documentation:

Returns CL_SUCCESS if the function is executed successfully. Otherwise it returns CL_INVALID_VALUE if num_entries is equal to zero and platforms is not NULL, or if both num_platforms and platforms are NULL.

CL_INVALID_VALUE is the -30 you are getting, for the reasons stated above.

What you really want is the following:

cl_uint numPlatforms = 0;
err = clGetPlatformIDs(0, NULL, &numPlatforms);

Upvotes: 2

Related Questions