gpt4 book ai didi

c++ - 无法在 OpenCL 和 C++ 中显示

转载 作者:行者123 更新时间:2023-11-30 04:45:52 29 4
gpt4 key购买 nike

我是 OpenCL 的新手,在显示 <CL_DEVICE_MAX_WORK_ITEM_SIZES> 时遇到问题作为一个整数/值。相反,我得到了一个内存地址。

最初,我尝试声明一个字符串和整数输出变量来显示最大工作项大小。但最终我发现工作项大小返回 size_t数据类型代替。所以我创建了一个 vector 来存储 size_t 变量,但它输出一个内存地址。

而且,我的显示屏以相反的顺序显示设备编号(先显示设备 #1,然后显示设备 #0 - 这用于为我的程序的后面部分选择设备)

如有任何帮助,我们将不胜感激。谢谢。

int main()
{
std::vector<cl::Platform> platforms; // available platforms
std::vector<cl::Device> devices; // devices available to a platform
std::string outputString; // string for output
std::vector<::size_t> maxWorkItems[3];
unsigned int i, j; // counters
std::string choice; // user input choice

cl::Platform::get(&platforms);
std::cout << "Do you want to use a CPU or GPU device: ";
std::cin >> choice;
if (choice == "CPU" || choice == "cpu")
{
// for each platform
for (i = 0; i < platforms.size(); i++)
{
// get all CPU devices available to the platform
platforms[i].getDevices(CL_DEVICE_TYPE_ALL, &devices);

for (j = 0; j < devices.size(); j++)
{
cl_device_type type;
devices[j].getInfo(CL_DEVICE_TYPE, &type);
if (type == CL_DEVICE_TYPE_CPU) {
std::cout << "\tDevice #" << j << std::endl;
//outputs the device type
std::cout << "\tType: " << "CPU" << std::endl;
// get and output device name
outputString = devices[j].getInfo<CL_DEVICE_NAME>();
std::cout << "\tName: " << outputString << std::endl;
// get and output device vendor
outputString = devices[j].getInfo<CL_DEVICE_VENDOR>();
std::cout << "\tVendor: " << outputString << std::endl;
//get and output compute units
std::cout << "\tNumber of compute units: " << devices[j].getInfo<CL_DEVICE_MAX_COMPUTE_UNITS>() << std::endl;
//get and output workgroup size
std::cout << "\tMaximum work group size: " << devices[j].getInfo<CL_DEVICE_MAX_WORK_GROUP_SIZE>() << std::endl;
//get and output workitem size
maxWorkItems[0] = devices[j].getInfo<CL_DEVICE_MAX_WORK_ITEM_SIZES>();
std::cout << "\tMaximum work item size: " << maxWorkItems << std::endl;
//get and output local memory size
std::cout << "\tLocal memory size: " << devices[j].getInfo<CL_DEVICE_LOCAL_MEM_SIZE>() << std::endl;
std::cout << std::endl;
}
}
}
}

下面是我的代码的意外输出:最大工作项大小为十六进制格式,设备编号为倒序。 output

最佳答案

CL_DEVICE_MAX_WORK_ITEM_SIZE 属性是数组类型,specifically, size_t[] .您不应期待一个标量值,而是一个 CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS 元素数组。使用 OpenCL C++ 包装器,您在 vector 的正确轨道上,但您现在已经声明了一个包含 3 个 vector 的数组:

std::vector<::size_t> maxWorkItems[3];

您实际上只需要一个包含所有返回值的 vector :

std::vector<::size_t> maxWorkItems;

属性查询变为:

maxWorkItems = devices[j].getInfo<CL_DEVICE_MAX_WORK_ITEM_SIZES>();

然后您应该能够使用 maxWorkItems[0]maxWorkItems[1] 等查询每个维度中的最大工作项

关于c++ - 无法在 OpenCL 和 C++ 中显示 <CL_DEVICE_MAX_WORK_ITEM_SIZE>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57049160/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com