Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.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++ 在OpenCL/C中返回多个向量-性能比较_C++_C_Vector_Opencl - Fatal编程技术网

C++ 在OpenCL/C中返回多个向量-性能比较

C++ 在OpenCL/C中返回多个向量-性能比较,c++,c,vector,opencl,C++,C,Vector,Opencl,我有一个函数f(x,y),它在一个矩阵上运行,元素(x,y),每个值产生两个输出向量a=[a0,a1,a2,a3]和b=[b0,b1,b2,b3]。在下一步中,有一个sum a总体a(x,y)和一个sum B总体B(x,y)。在最后一步中,计算a/B。我知道,在OpenCL和C中,有3种基本方法可以解决这个问题: 将a,b作为一个组合返回float8,对这些向量进行求和,明确表示除法 返回一个包含8个浮点数的数组,对数组元素进行求和和和除法 返回包含两个向量的结构,使用向量求和和和除法 我的问题

我有一个函数
f(x,y)
,它在一个矩阵上运行,元素
(x,y)
,每个值产生两个输出向量
a=[a0,a1,a2,a3]
b=[b0,b1,b2,b3]
。在下一步中,有一个
sum a
总体
a(x,y)
和一个
sum B
总体
B(x,y)
。在最后一步中,计算
a/B
。我知道,在OpenCL和C中,有3种基本方法可以解决这个问题:

  • a,b
    作为一个组合返回
    float8
    ,对这些向量进行求和,明确表示除法

  • 返回一个包含8个浮点数的数组,对数组元素进行求和和和除法

  • 返回包含两个向量的结构,使用向量求和和和除法


  • 我的问题是:除了使用不同数据类型的三种方法外,它们的内存使用和性能有什么不同

    取决于硬件imo。例如,在hd7870(皮特凯恩gpu)上,float2比float8具有更好的内存优化(速度),但在支持AVX2的cpu上可能正好相反。在cpu上返回struct可能更快,而在gpu上返回数组可能更好。您有opencl设备的数据表吗?opencl的常见问题是性能不可移植,即使在同一硬件上,不同实现的性能特征也不同。如果不了解实现和硬件,这个问题是不可能回答的。在这种情况下,“不可能给出答案”是一个令人满意的答案。因为这意味着我要试着去看。