NDK编程的一个坑—Arm平台下的类型转换
来源:互联网 发布:编程电极怎么编 编辑:程序博客网 时间:2024/05/21 00:53
最近在做DNN定点化相关的工作,DNN定点化就是把float表示的模型压缩成char表示,虽然会损失精度,但是由于DNN训练的模型值比较接近且范围较小,实际上带来的性能损失非常小。DNN定点化的好处是可以以4倍的效率压缩模型,这个在移动端会具有比较大的优势。
做完定点化之后,在x86服务器上验证没有问题,但是利用NDK移植到arm移动端却一直得不到正确结果,真是一时头大。通过仔细调试,最终发现问题所在—所有值为负的float值定点化成char之后都变为0!在网上搜了很久终于知道这个居然是arm平台本身的问题。Arm平台下,char默认其实是unsigned char,正是由于char是无符号的,导致一个不在范围内的数被强转时会产生未定义的行为,在Stack Overflow上有一个很好的解释。
找到问题所在,解决方法就非常简单,强制让arm平台下的char是有符号的,具体就是在编译的时候加-fsigned-char选项。
1 0
- NDK编程的一个坑—Arm平台下的类型转换
- ARM平台的Microwindows图形编程
- arm平台下spin lock的使用
- ARM平台下数据类型char的误区
- ARM V8框架结构下的开发平台
- ARM平台下无线网卡的配置
- arm Linux平台下FFmpeg的移植
- 类型转换的一个问题
- 一个类型转换的问题;
- 一个类型转换的bug
- 一个类型转换的讨论
- ubuntu下编译适合ndk的x264(arm和x86)
- ubuntu下编译适合ndk的x264(arm和x86)
- 这一个在OMAP3530/DM3730 ARM A8平台上,LINUX系统下,对GPIO的操作
- ndk的平台兼容性
- linux下的类型转换
- 某安卓平台arm cpu核心的so文件转换结果
- android-ndk-r14b 编译renderscript的BUG(Window平台下)
- Poj 2887 Big String(块状数组)
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(4)——双曲抛物面(马鞍面)
- HDU-1698-Just A Hook (线段树区间修改,区间查询)
- Android微信支付开发
- 3D射线拾取算法揭秘
- NDK编程的一个坑—Arm平台下的类型转换
- leetcode oj java 143. Reorder List
- 四个月的蜕变之单例模式创建线程池和使用
- 《Head First设计模式》-工厂模式C++实现
- python 2-5 如何快速找到多个字典中的(key) viewkeys(集合)/reduce(lambda a,b:a&b,map(d.keys(),[d1,d2])
- zoj2314
- mysql5.7 修改默认密码
- POJ-1562(DFS)
- linux 用户和组管理