1

我正在计算从维度(10-39)点到数组的距离的很多实例。我希望它尽可能快地运行,适用于 Android 4.0+,特别是 Galaxy S3。我已经让硬件 FPU 工作了,但在某处听说你可以通过矢量化和霓虹灯加快速度。像这个Android 构建系统、NEON 和非 NEON 构建这样的问题并没有给我一个简单的答案。

什么是我可以在 S3 中使用这种矢量化的最简单方法,并举例说明这种计算的加速(n 暗点距离到 n 暗矢量)。

这是循环代码:

// 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];
    }
}
4

2 回答 2

1

您有两种选择从 CPU 获得矢量化(专注于 ARM);编译器可以帮助您,或者您自己做。

您可以通过编写程序集或使用内在函数在 ARM CPU 中使用向量指令 (NEON)

你可以从编译器那里得到帮助,但你必须编写可向量化的代码。有关如何获取此信息的示例,请参见此帖子

于 2013-03-07T06:34:35.113 回答
0

要使用 GPU 为您执行计算,有两种方法:

  • NDK:您将使用 Android 本机开发工具包在 C++ 中创建代码,并调用特定于该硬件 (NEON) 的代码来加速您的算法。
  • Renderscript:您将使用 Renderscript 计算 API 来处理所有数据,并让框架在 CPU 和 GPU 之间为您自动并行化它

我从来没有使用过它们中的任何一个,但是如果我必须为特定应用程序选择一条路线,我会尝试使用 renderscript,因为它是所有设备类型解决方案的一个代码(适用于 ICS 及更高版本)

于 2013-03-06T09:56:18.240 回答