我用一些用 JNI 包装的 C++ 代码为 android 编写了一个图像处理应用程序(https://play.google.com/store/apps/details?id=cv.cvExperiments)。为了在多核处理器上获得一些加速,我用 openmp “parallel for” 指令注释了昂贵的循环。
问题是在 x86 上,我在 4cores proc 上获得了从 x3 到 x5 的一些加速,但是在 Android 上,激活 OpenMP(使用 -fopenmp)在 ARM 32 位上没有任何加速,甚至在 64 位 armv8 上减慢代码骁龙810。
我错过了什么 ?有没有人可以观察到与 x86 cpu 相当的 android+arm 加速?
互联网上有很多关于如何激活 OpenMP 的教程,但没有显示加速的基准。任何指针?
我发现的唯一相关信息是 armv8 上 OpenMP 开销的基准测试,他们还注意到一些相当高的开销:https ://wiki.linaro.org/WorkingGroups/Middleware/Graphics/GPGPU/Docs/OpenMPforARMv8PortAnalysis
谢谢,马修
这无法用 clang++ 编译,有人可以解释为什么吗?(这用 g++ 编译得很好)
struct X
{
template <typename T> X() {}
};
template X::X<int>();
int main() { return 1; }
instantiate.cc:7:13: error: qualified reference to 'X' is a constructor name rather than a type in this context
template X::X<int>();
^
instantiate.cc:7:14: error: expected unqualified-id
template X::X<int>();
^
2 errors generated.
Run Code Online (Sandbox Code Playgroud)