Устройство деления Intel CPU - PullRequest
1 голос
/ 28 февраля 2012

Я пытаюсь написать программу opencl, используя расширение деления устройства.

Я использую Intel i3 M350, но не могу создать под-устройства:

#define USE_CL_DEVICE_FISSION 1

#include <iostream>
#include "CL/cl.hpp"

using namespace std;

int main(int argc, char* argv[]) {
    cl::Context context;
    std::vector<cl::Platform> platforms;
    cl::Platform::get(&platforms);

    cl_context_properties properties[] =
    {
            CL_CONTEXT_PLATFORM,
            (cl_context_properties)(platforms[1])(),
            0
    };

    context = cl::Context(CL_DEVICE_TYPE_CPU, properties);

    std::vector<cl::Device> devices = context.getInfo<CL_CONTEXT_DEVICES>();

    cout << "Platform:\t" << platforms[1].getInfo<CL_PLATFORM_NAME>() << endl;
    cout << "Version:\t" << platforms[1].getInfo<CL_PLATFORM_VERSION>() << endl;

    cout << "Device:\t\t" << devices[0].getInfo<CL_DEVICE_NAME>() << endl;
    cout << "Profile:\t" << devices[0].getInfo<CL_DEVICE_PROFILE>() << endl;
    cout << "Driver:\t\t" << devices[0].getInfo<CL_DRIVER_VERSION>() << endl;
    cout << "ComputeUnits:\t" << devices[0].getInfo<CL_DEVICE_MAX_COMPUTE_UNITS >() << endl;

    if (devices[0].getInfo<CL_DEVICE_EXTENSIONS>().find("cl_ext_device_fission") == std::string::npos) {
        cout << "No device fission support!" << endl;
        exit(-1);
    }
    else {
        cout << "Device Fission: Available" << endl;
    }

    const cl_device_partition_property_ext subDeviceProperties[] =
    {
        CL_DEVICE_PARTITION_EQUALLY_EXT,
        1,
        CL_PROPERTIES_LIST_END_EXT,
        0
    };

    std::vector<cl::Device> subDevices;
    int err = devices[0].createSubDevices(subDeviceProperties, &subDevices);
    if (err != CL_SUCCESS) {
        cout << "\nError: " << err << endl;
    }
}

Вывод:

Platform:   Intel(R) OpenCL
Version:    OpenCL 1.1 LINUX
Device:     Intel(R) Core(TM) i3 CPU       M 350  @ 2.27GHz
Profile:    FULL_PROFILE
Driver:     1.1
ComputeUnits:   4
Device Fission: Available

Error: -1057 

Этот код ошибки означает:

CL_DEVICE_PARTITION_FAILED_EXT -1057

Returned by clCreateSubDevicesEXT when the total number of compute units
requested exceeds CL_DEVICE_MAX_COMPUTE_UNITS, or the number of compute
units for any one sub-device is less than 1.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Прежде всего, лучшее место, чтобы задавать вопросы о реализации Intel OpenCL SDK - это их (наш) форум: http://software.intel.com/en-us/forums/intel-opencl-sdk/

При этом в текущей версии есть некоторые особенности реализации clCreateSubdevicesEXT.,Кажется, вы столкнулись с тем, что последний параметр в API C, num_devices_ret, должен быть ненулевым указателем, указывающим на количество результирующих подустройств.Оболочка C ++, по-видимому, не знакома с этой проблемой, и поэтому вы получаете это ошибочное возвращаемое значение.

Я не очень знаком с оберткой C ++, поэтому я не знаю, можете ли вы заставить ее передать неПустой указатель в базовом вызове clCreateSubdevicesEXT.Предполагая, что вы не можете, потенциальные решения - изменить оболочку самостоятельно или использовать C API.

Будущие версии SDK будут менее придирчивы к таким вещам;В той, что у вас есть, это больше функция предварительного просмотра.

1 голос
/ 28 февраля 2012

Вы пробовали любой из примеров Khronos из http://www.khronos.org/registry/cl/extensions/ext/cl_ext_device_fission.txt

Как:

Пример: разделить устройство с четырьмя вычислительными модулями на два подустройства, каждое из которых содержит два вычислительных блока,пропуск:

            { CL_DEVICE_PARTITION_BY_COUNTS_EXT, 
              2, 2, CL_PARTITION_BY_COUNTS_LIST_END_EXT,
              CL_PROPERTIES_LIST_END_EXT }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...