Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 英特尔i5处理器优于ATI HD Radeon GPU?_C++_Opencl - Fatal编程技术网

C++ 英特尔i5处理器优于ATI HD Radeon GPU?

C++ 英特尔i5处理器优于ATI HD Radeon GPU?,c++,opencl,C++,Opencl,在我的应用程序中,我显示了所有可用的OpenCL设备,以便用户可以选择要在其上执行计算的设备。 我在笔记本电脑上得到的结果让我困惑不解 以下是产生这些结果的代码摘录: //CL_DEVICE_TYPE { cl_device_type devtype; QString temp = "Unknown"; err = clGetDeviceInfo(devices[i][j],

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

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

//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\u设备\u最大工作\u组大小不是并行计算能力的指标

测量设备性能是一项复杂的任务


您使用的指标不适合确定设备的速度。此外,像矩阵乘法这样的简单任务也不能说明这一点。您需要使用基准测试来确定计算能力。

是否也计算英特尔高清图形?因为CPU怎么能有这么大的工作组大小?我知道clGetKernelWorkGroupInfo()是一个更好的指示器,但从结果中可以明显看出,与GPU相比,CPU具有更好的内存和并行计算能力?不,集成图形显示为一个单独的设备。最大工作组大小只是运行时如何完成工作的指示,而不是性能的指示。clGetKernelWorkGroupInfo也不是性能的指标。时钟频率乘以计算单位是一个更好的指标,但在不同供应商之间进行比较通常并不“公平”。那么为什么它不显示Intel HD Graphics 4000?根据我的应用程序是1.1兼容的,而它应该是OpenCL 1.2兼容的?是因为我使用的是APP SDK吗?我的GPU有6个计算单元,CPU有4个计算单元?但是GPU应该有更多的并行计算能力。那么,计算单元怎么可能只是可计算性的指标呢?在OpenCL中,工作组的大小并不一定意味着有多少线程并行运行。这仅仅意味着可以同步多少线程并访问同一个本地内存池。因此,对于CPU来说,大规模的本地大小支持是作为一种方便的特性提供的,而不是作为指示性能的东西。Intel CPU实际上有8个左右,因为它是内核上每个内核的真正本地大小,它能够按照SSE指令水平矢量化。同意。对于某些问题,I/O占主导地位,而对于其他问题,数学占主导地位。基准测试是唯一知道的方法。我不是在我的软件中做基准测试。这只是为了让一个“无电”用户了解设备的速度。您建议我向用户显示什么?供应商、设备名称、类型、内存、计算单位和频率。您的文档可以提到,不同类型和供应商之间的计算单位不具有直接可比性。好的,我会这样做。但为什么英特尔HD Graphics 4000没有出现?请在AMD catalyst center中检查应用程序的图形设置。