小编Mat*_*u G的帖子

如何改善Android上OpenMP性能不佳的问题?

我用一些用 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

谢谢,马修

c++ parallel-processing android multicore openmp

6
推荐指数
1
解决办法
995
查看次数

模板化类构造函数的模板实例化

这无法用 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)

c++ templates clang++

3
推荐指数
1
解决办法
146
查看次数