Opencl 设备裂变英特尔CPU
我正试图用设备裂变扩展写一个opencl程序 我使用的是Intel i3 M350,但无法创建子设备:Opencl 设备裂变英特尔CPU,opencl,Opencl,我正试图用设备裂变扩展写一个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>
#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;
}
}
此错误代码表示:
CL_设备_分区_故障_分机-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.
有什么想法吗?你有没有试过 比如: 示例:要将四个计算单元设备拆分为两个子设备, 每个包含两个计算单元,通过:
{ CL_DEVICE_PARTITION_BY_COUNTS_EXT,
2, 2, CL_PARTITION_BY_COUNTS_LIST_END_EXT,
CL_PROPERTIES_LIST_END_EXT }
您是否尝试过任何来自 比如: 示例:要将四个计算单元设备拆分为两个子设备, 每个包含两个计算单元,通过:
{ CL_DEVICE_PARTITION_BY_COUNTS_EXT,
2, 2, CL_PARTITION_BY_COUNTS_LIST_END_EXT,
CL_PROPERTIES_LIST_END_EXT }
首先,询问有关英特尔OpenCL SDK实施的问题的最佳场所是他们(我们)的论坛: 也就是说,当前版本在CLCreateSubDeviceText的实现方面有一些怪癖。您似乎遇到的一个问题是,它希望C API中的最后一个参数num_devices_ret是一个非空指针,指向生成的子设备的数量。C++包装显然不熟悉这个问题,因此得到了失败的返回值。 <>我不太熟悉C++包装器,所以我不知道它是否能强制它在CelCurtSubDeVICEXEXT的底层调用中传递非空指针。假设您不能,潜在的解决方案是自己修改包装器,或者使用C API
SDK的未来版本将对这些事情不那么挑剔;在您拥有的其中一个应用程序中,它更像是一个预览功能。首先,询问有关英特尔OpenCL SDK实现的问题的最佳场所是他们(我们)的论坛: 也就是说,当前版本在CLCreateSubDeviceText的实现方面有一些怪癖。您似乎遇到的一个问题是,它希望C API中的最后一个参数num_devices_ret是一个非空指针,指向生成的子设备的数量。C++包装显然不熟悉这个问题,因此得到了失败的返回值。 <>我不太熟悉C++包装器,所以我不知道它是否能强制它在CelCurtSubDeVICEXEXT的底层调用中传递非空指针。假设您不能,潜在的解决方案是自己修改包装器,或者使用C API
SDK的未来版本将对这些事情不那么挑剔;在您拥有的一款中,它更多的是一种预览功能。谢谢,该链接很有用。然而,我也尝试了上面的分区。可能是硬件相关的吗?谢谢,链接很有用。然而,我也尝试了上面的分区。它可能与硬件有关吗?你是对的,因为它是特定于英特尔的,它属于那里。我也把它贴在那边了。对于以下线程:我使用C对其进行测试,但不断得到
[appname]:符号查找错误:[appname]:未定义的符号:CLCreateSubDeviceText
。您是对的,因为它是特定于英特尔的,所以它属于那里。我也把它贴在那边了。对于以下线程:我使用C来测试它,但不断得到[appname]:符号查找错误:[appname]:未定义的符号:CLCreateSubDeviceText
。