安卓使用ndk native编程使用 openmp

代码
#include "omp.h"
#pragma omp parallel for

环境配置build.gradle

        externalNativeBuild {
            cmake {
                cppFlags "-fopenmp" 
            }
        }
#CMakeList.txt
target_link_libraries( # Specifies the target library.
                       native-lib

                       # Links the target library to the log library
                       # included in the NDK.
        omp

如果提示缺少libomp.so.将ndk(我使用的是ndk21)里面的libomp.so复制到jniLibs/armeabi-v7a.网上所说libgomp.so.是老版本的说法,确认过ndk-r17俩个都存在,但是md5值相同.

armeabi-v7a需要自己配置选择不同的文件名.

 

对于提升效果比较,clock函数在ctime中,用于统计cpu时钟时间,在程序是单线程时,相对准确,但是如果开启多线程,则会出现很大误差。可以使用下面函数记录时间差.

gettimeofday
也可以使用下面函数,我做过测试,两者的时间基本是一致的
double startTime = omp_get_wtime( );    double differWtime=1000*(endTime-startTime);

 

armv7 测试 for循环, 频繁操作内存反而慢, 也许可以改成每个线程操作一个连续的地址,彼此不要重叠。应该是遭遇Cache Line 伪共享问题,据说intel因为架构问题表现会好很多.

同时,测试的时候要排除其他程序占用cpu. 尤其是你选择的线程数量达到最大值.最好测量平均值.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值