首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Intel HD GPU与Intel CPU性能比较

Intel HD GPU与Intel CPU性能比较
EN

Stack Overflow用户
提问于 2015-12-02 15:07:30
回答 1查看 702关注 0票数 3

我是OpenCL的新手,目前对它的性能有一些疑问。

我有Intel(R) Core(TM) i5-4460cpu@ 3.20GHz + ubuntu + Beignet (英特尔开源openCL库见:http://arrayfire.com/opencl-on-intel-hd-iris-graphics-on-linux/ http://www.freedesktop.org/wiki/Software/Beignet/)

我有简单的长凳

代码语言:javascript
复制
#define __CL_ENABLE_EXCEPTIONS
#include "CL/cl.hpp"
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>

using namespace cl;
using namespace std;

void CPUadd(vector<float> & A, vector<float> & B, vector<float> & C)
{
    for (int i = 0; i < A.size(); i++)
    {
        C[i] = A[i] + B[i];
    }
}

int main(int argc, char* argv[]) {
    Context(CL_DEVICE_TYPE_GPU);
    static const unsigned elements = 1000000;
    vector<float> data(elements, 6);
    Buffer a(begin(data), end(data), true, false);
    Buffer b(begin(data), end(data), true, false);
    Buffer c(CL_MEM_READ_WRITE, elements * sizeof(float));

    Program addProg(R"d(
        kernel
        void add(   global const float * restrict const a,
                    global const float * restrict const b,
                    global       float * restrict const c) {
            unsigned idx = get_global_id(0);
            c[idx] = a[idx] + b[idx] + a[idx] * b[idx] + 5;
        }
    )d", true);

    auto add = make_kernel<Buffer, Buffer, Buffer>(addProg, "add");

#if 1
    for (int i = 0; i < 4000; i++)
    {
        add(EnqueueArgs(elements), a, b, c);
    }
    vector<float> result(elements);
    cl::copy(c, begin(result), end(result));
#else
    vector<float> result(elements);
    for (int i = 0; i < 4000; i++)
    {
        CPUadd(data, data, result);
    }
#endif

    //std::copy(begin(result), end(result), ostream_iterator<float>(cout, ", "));
}

根据我的测量,Intel HD比单CPU快20倍(见上面的工作台)。这对我来说太小了,因为如果使用4x核,我只能在GPU上得到5倍的速度。我是否写了正确的板凳和加速似乎是现实的?不幸的是,在我的情况下,clinfo找不到CPU作为OpenCL设备,所以我不能做直接比较。

更新

测量

g++ -o main main.cpp -lOpenCL -std=c++11 $ time ./主实0m37.316s用户0m37.280.sys 0m0.016s $ g++ -o main main.cpp -lOpenCL -std=c++11 $ time /主real 0m2.349s用户0m0.524s sys 0m0.624s

总计: 2.349 - 0.524 = 1.825 GPU 37.316 - 0.524 = 36.724

36.724 / 1.825比单CPU =>快20.12倍,比全CPU快5倍。

EN

回答 1

Stack Overflow用户

发布于 2015-12-02 19:07:51

您要比较的两个实现在功能上不是等价的。

您的CPU实现需要减少30%的内存带宽(这可能解释性能)。它只访问数组AB,而GPU内核则使用3个数组( abc )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34046063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档