英特尔高清GPU与英特尔CPU性能对比
Intel HD GPU vs Intel CPU Perfomance comparsion
我是OpenCL的新手,目前对它的性能有一些疑问。
我有英特尔(R)酷睿(TM)i5-4460 CPU@3.20GHz+ubuntu+Beignet(英特尔开源openCL库,请参阅:http://arrayfire.com/opencl-on-intel-hd-iris-graphics-on-linux/http://www.freedesktop.org/wiki/Software/Beignet/)
我有一个简单的工作台
#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, ", "));
}
根据我的测量,英特尔高清比单CPU快20倍(见上面的测试台)。它对我来说似乎太小了,因为在使用4核的情况下,我在GPU上只能获得5倍的加速。我写的是正确的板凳和加速似乎是现实的吗?不幸的是,在我的情况下,clinfo没有发现CPU作为OpenCL设备,所以我不能直接比较。
更新
测量
$g++-o main main.cpp-lOpenCL-std=c++11$time/主要的实际0m37.316s用户0m37.280s系统0m0.016s$g++-o main main.cpp-lOpenCL-std=c++11$time/主要的实际0m2.349秒用户0m0.524ssys 0m0.624s
总计:GPU为2.349-0.524=1.82537.316-0.524=36.724用于CPU
36.724/1.825=比单CPU快20.12倍=>比全CPU快5倍。
您正在比较的两个实现在功能上不等价。
您的CPU实现需要减少30%的内存带宽(这可以解释性能)。它只访问阵列A
和B
,而GPU内核使用3个阵列a
、b
和c
。
相关文章:
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 将gsl c++程序与"英特尔MKL"链接
- 使用英特尔 PIN 修改寄存器
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 将"-01"替换为"-02" 英特尔编译器选项会导致 FPE 在较小的 for 循环行程计数中抛出
- 在 Azure DevOps 构建管道中使用英特尔C++编译器为 Linux 环境构建C++代码
- 编译器错误(英特尔并行工作室 2019 与 Visual Studio 社区 2019)
- 如何要求 macports 用英特尔编译器包装 openmpi?
- 实施英特尔实感和 SDL2 时出现问题
- OpenGL 片段着色器未在英特尔 HD 4000 显卡上编译
- 英特尔将指令存储在重叠的内存区域
- 如何指示 CMAKE 在 Visual Studio 中使用英特尔 MKL
- 使用英特尔内部函数 (AVX) 中的混合说明
- 使用 task_group 的英特尔线程构建模块性能不佳(新用户)
- 与英特尔相比,GNU C++编译器在对向量进行排序时性能较差
- 2个数组/图像相乘的多线程性能-英特尔IPP
- 英特尔高清GPU与英特尔CPU性能对比
- 关于如何使用英特尔的集成性能基元评估 openCV 的建议?