user1547869
user1547869

Reputation: 21

IGP of Ivy bridge can't be found by OpenCL SDK

I have set up a IvyBridge platform for coding OpenCL program. My system is win7 64-bit, VS2010 as developement tools. There is one i7-3770k with a nVidia GTX560 on my PC. When I queried the devices of my system, I cann't find HD4000. I have checked my system driver for HD4000 by using this webpage: http://www.intel.com/p/en_US/support/detect/graphics. The report said "Current Driver Installed 8.15.10.2696". OpenCL SDK is the latest Intel SDK for OpenCL Application 2012 windows 64-bit downloaded from http://software.intel.com/en-us/articles/vcsource-tools-opencl-sdk/. The following is my code and the output.

I also noticed that the device name of CPU is very strange. By the way, I have connected the HD4000 device to a monitor since I found someone met the issue that failed to create a CL context. And now I can find HD4000 can be detected by GPU-Z tool after we connected a monitor to HD4000. So anyone can help me solve this problem?

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <CL/cl.h>

int _tmain(int argc, _TCHAR* argv[])
{
    cl_platform_id *platforms;
    cl_uint num_platforms;
    cl_device_id *devices_cpu, *devices_gpu;
    cl_uint num_devices;

    char dev_name[40], dev_vendor[40], dev_version[40], dev_profile[40];
    char plt_name[40], plt_vendor[40], plt_version[40], plt_profile[40];

    clGetPlatformIDs(1, NULL, &num_platforms);
    platforms = (cl_platform_id*) malloc(sizeof(cl_platform_id) * num_platforms);
    clGetPlatformIDs(num_platforms, platforms, NULL);
    for(int i = num_platforms - 1; i >= 0; i--)
    {
        clGetPlatformInfo(platforms[i], CL_PLATFORM_NAME, sizeof(plt_name),&plt_name,NULL);
        clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR, sizeof(plt_vendor),&plt_vendor,NULL);
        clGetPlatformInfo(platforms[i], CL_PLATFORM_VERSION, sizeof(plt_version),&plt_version,NULL);
        clGetPlatformInfo(platforms[i], CL_PLATFORM_PROFILE, sizeof(plt_profile),&plt_profile,NULL);
        printf("\n\n\nPlatform #%d Info: \n\n", i);
        printf("Platform: %s \n", plt_name);
        printf("Vendor: %s \n", plt_vendor);
        printf("Version: %s \n", plt_version);
        printf("Profile: %s \n", plt_profile);

        clGetDeviceIDs(platforms[i],CL_DEVICE_TYPE_CPU, 1, NULL, &num_devices);
        devices_cpu = (cl_device_id *)malloc(sizeof(cl_device_id) * num_devices);
        clGetDeviceIDs(platforms[i], CL_DEVICE_TYPE_CPU, num_devices, devices_cpu, NULL);
       for(int j = 0 ; j < num_devices; j++)
       {
           clGetDeviceInfo(devices_cpu[j], CL_DEVICE_NAME, sizeof(dev_name), &dev_name, NULL);
           clGetDeviceInfo(devices_cpu[j], CL_DEVICE_VENDOR, sizeof(dev_vendor), &dev_vendor, NULL);
           clGetDeviceInfo(devices_cpu[j], CL_DEVICE_VERSION, sizeof(dev_version), &dev_version, NULL);
           clGetDeviceInfo(devices_cpu[j], CL_DEVICE_PROFILE, sizeof(dev_profile), &dev_profile, NULL);
           printf("\n\n\nCPU Device Info: \n\n");
           printf("Name: %s \n", dev_name);
           printf("Vendor: %s \n", dev_vendor);
           printf("Version: %s \n", dev_version);
           printf("Profile: %s \n", dev_profile);
       }
       clGetDeviceIDs(platforms[i],CL_DEVICE_TYPE_GPU, 1, NULL, &num_devices);
       devices_gpu = (cl_device_id *)malloc(sizeof(cl_device_id) * num_devices);
       clGetDeviceIDs(platforms[i],CL_DEVICE_TYPE_GPU, num_devices, devices_gpu, NULL);
       for(int j = 0; j < num_devices; j++)
       {
           clGetDeviceInfo(devices_gpu[j], CL_DEVICE_NAME, sizeof(dev_name), &dev_name, NULL);
           clGetDeviceInfo(devices_gpu[j], CL_DEVICE_VENDOR, sizeof(dev_vendor), &dev_vendor, NULL);
           clGetDeviceInfo(devices_gpu[j], CL_DEVICE_VERSION, sizeof(dev_version), &dev_version, NULL);
           clGetDeviceInfo(devices_gpu[j], CL_DEVICE_PROFILE, sizeof(dev_profile), &dev_profile, NULL);
           printf("\n\n\nGPU Device Info: \n\n");
           printf("Platform: %s \n", dev_name);
           printf("Vendor: %s \n", dev_vendor);
           printf("Version: %s \n", dev_version);
           printf("Profile: %s \n", dev_profile);
       }
       free((void*)devices_cpu);
       free((void*)devices_gpu);
    }
    return 0;
}

output:

Platform #1 Info: 
Platform: Intel(R) OpenCL 
Vendor: Intel(R) Corporation 
Version: OpenCL 1.1 
Profile: FULL_PROFILE 
CPU Device Info: 
Name: ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌIntel(R) Corporation 
Vendor: Intel(R) Corporation 
Version: OpenCL 1.1 (Build 31360.31441) 
Profile: FULL_PROFILE 
Platform #0 Info: 
Platform: NVIDIA CUDA 
Vendor: NVIDIA Corporation 
Version: OpenCL 1.1 CUDA 4.2.1 
Profile: FULL_PROFILE 
GPU Device Info: 
Platform: GeForce GTX 560 Ti 
Vendor: NVIDIA Corporation 
Version: OpenCL 1.1 CUDA 
Profile: FULL_PROFILE 

Upvotes: 2

Views: 822

Answers (1)

user41884
user41884

Reputation:

OpenCL does not work on HD4000 if there is no display connected to the card. This is from my own testing and answers in Intel forums.

See these threads on Intel forums: 1 2 3.

Upvotes: 2

Related Questions