Android中的浮点矢量化
我计算了很多从n维(10-39)点到阵列的距离实例。我希望Android 4.0+的速度尽可能快,特别是Galaxy S3。 我已经让硬件FPU工作了,但听说你可以通过矢量化和霓虹灯来加快速度。 然而,像这样的问题并没有给我一个简单的答案 我可以在S3中使用这种矢量化的最简单方法是什么?一个例子显示了这种计算的加速(n dim point distance to n dim vector) 以下是循环代码:Android中的浮点矢量化,android,android-ndk,arm,vectorization,neon,Android,Android Ndk,Arm,Vectorization,Neon,我计算了很多从n维(10-39)点到阵列的距离实例。我希望Android 4.0+的速度尽可能快,特别是Galaxy S3。 我已经让硬件FPU工作了,但听说你可以通过矢量化和霓虹灯来加快速度。 然而,像这样的问题并没有给我一个简单的答案 我可以在S3中使用这种矢量化的最简单方法是什么?一个例子显示了这种计算的加速(n dim point distance to n dim vector) 以下是循环代码: // go through each point in the vector for (
// go through each point in the vector
for (bi=0; bi<sizeOfVect; bi++) {
r[bi] = 0.0; // initialise distance
//calculate distance in each dimension (d is 10-39 depending)
for (di=0; di<d; di++) {
rj[di] = s1[i*d+di] - b[bi*d+di];
// s1 is the n dim point, b is the vector array
r[bi] += rj[di]*rj[di];
}
}
//遍历向量中的每个点
对于(bi=0;bi要使用GPU为您执行计算,有两条路线:
<> LI>:使用Android原生开发工具包,C++中用特定于硬件(NEON)的调用来创建代码,以加快算法的速度。
- :您将使用Renderscript计算API来处理所有数据,并让框架在CPU和GPU之间自动并行
我从未使用过它们中的任何一种,但是如果我必须为特定的应用程序选择一种路径,我会尝试使用renderscript,因为它是一种针对所有设备类型的解决方案(适用于ICS及以上)的代码。要使用GPU为您执行计算,有两种路径:
<> LI>:使用Android原生开发工具包,C++中用特定于硬件(NEON)的调用来创建代码,以加快算法的速度。
- :您将使用Renderscript计算API来处理所有数据,并让框架在CPU和GPU之间自动并行
我从未使用过其中任何一种,但如果我必须为特定的应用程序选择一种方法,我会尝试使用renderscript,因为它是一种针对所有设备的代码类型的解决方案(适用于ICS及以上)您有两种选择可以从CPU获得矢量化(侧重于ARM);编译器可以帮助您,也可以自己完成
您可以通过编写汇编或使用
您可以从编译器获得帮助,但随后必须编写可矢量化的代码。有关如何实现此目的的示例,请参见此。您有两个选项可以从CPU获得矢量化(重点是ARM);编译器可以帮您或您自己完成
您可以通过编写汇编或使用
您可以从编译器获得帮助,但您必须编写可矢量化的代码。有关如何获得此代码的示例,请参见此