c++ - Intel i5 处理器优于 ATI HD Radeon GPU?

标签 c++ opencl

在我的应用程序中,我显示了所有可用的 OpenCL 设备,以便用户可以选择他想要执行计算的设备。 我在笔记本电脑上得到的结果让我感到困惑。

enter image description here

以下是产生这些结果的代码的摘录:

//CL_DEVICE_TYPE
            {
                cl_device_type devtype;
                QString temp = "Unknown";
                err = clGetDeviceInfo(devices[i][j], CL_DEVICE_TYPE, sizeof(devtype), &devtype, NULL);
                if(err == CL_SUCCESS)
                {
                    if(devtype == CL_DEVICE_TYPE_CPU)
                        temp = "CPU";
                    else if(devtype == CL_DEVICE_TYPE_GPU)
                        temp = "GPU";
                    else if(devtype == CL_DEVICE_TYPE_ACCELERATOR)
                        temp = "Accelerator";
                    else
                        temp = "Unkown";
                }
                ilist->append(temp);
            }

            //CL_DEVICE_MAX_CLOCK_FREQUENCY
            {
                cl_uint devfreq;
                err = clGetDeviceInfo(devices[i][j], CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(devfreq), &devfreq, NULL);
                if(err == CL_SUCCESS)
                    ilist->append(QString::number((unsigned int)devfreq));
                else
                    ilist->append("Unknown");
            }

            //CL_DEVICE_GLOBAL_MEM_SIZE
            {
                cl_ulong devmem;
                err = clGetDeviceInfo(devices[i][j], CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(devmem), &devmem, NULL);
                devmem /= 1000000;
                if(err == CL_SUCCESS)
                    ilist->append(QString::number((unsigned int)(devmem)));
                else
                    ilist->append("Unkown");
            }

            //CL_DEVICE_MAX_COMPUTE_UNITS * CL_DEVICE_MAX_WORK_GROUP_SIZE
            {
                cl_uint devcores;
                err = clGetDeviceInfo(devices[i][j], CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(devcores), &devcores, NULL);
                if(err == CL_SUCCESS)
                {
                    size_t devcores2;
                    err = clGetDeviceInfo(devices[i][j], CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(devcores2), &devcores2, NULL);
                    if(err == CL_SUCCESS)
                        ilist->append(QString::number(((unsigned int)(devcores)) * ((unsigned int)(devcores2))));
                    else
                        ilist->append("Unkown");
                }
                else
                    ilist->append("Unknown");
            }

我不明白的是为 CPU 显示的内存和并行计算的数量。 知道为什么我会得到这些结果吗?

最佳答案

因为CL_DEVICE_MAX_WORK_GROUP_SIZE并不是并行计算能力的指标。

关于c++ - Intel i5 处理器优于 ATI HD Radeon GPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22481502/

相关文章:

c++ - 如何使用特定的 unicode 代码点 rtrim wchar_t?

c++ - Qt Creator 中缺少编译器

c++ - error C2244 无法将函数定义与现有声明相匹配

c++ - const 引用作为返回值如何在 C++ 中工作

opencl - 比较 Intel Xeon Phi 和 Nvidia Tesla K20 的基准

OpenCL 复制一次 分享很多

opencl - 我的 OpenCL 内核在较快的硬件上较慢.. 但为什么呢?

c++ - 将每 4 位解释为十六进制值

c++ - 将 AMD OpenCL 与 mingw 结合使用

c - OpenCL内核优化