Random Posts
Tags
Categories
Recent Comments
- 小肥 on GDB 从裸奔到穿戴整齐
- flandre on 异步事件模型的 Self-pipe trick
- inv on 异步事件模型的 Self-pipe trick
- skywind on 异步事件模型的 Self-pipe trick
- skywind on 异步事件模型的 Self-pipe trick
Links
Meta
Monthly Archives: August 2015
Android Arm 编译优化选项评测
用不同测试用例具体测试 softfp, armv7-a, cortax 等优化选项,看选项不同性能差别多大。首先设计下面几个测试用例,包含字符串处理、复杂逻辑、整数运算、浮点运算几个方面: compress:进行 LZO/LZW 大规模压缩,测试搜索,字符串匹配,复杂分支等性能 resample:进行一系列整数 DSP 运算,包括 resample 和 fir low pass int add:一亿次整数加法 int mul:一亿次整数乘法 int div:一亿次整数除法 float add:一亿次浮点加法 float mul:一亿次浮点乘法 float div:一亿次浮点除法 const div:一亿次整数除以常数255 matrix:若干次矩阵乘法运算,同时考察浮点数乘法加法 normalize:若干次矢量归一化运算,同时考察浮点数乘法,除法,加法,sqrt 其次对安卓的几个 gcc 的编译选项进行分别测试: -mfloat-abi=softfp,如果有硬件浮点处理器将会使用硬件,如果没有会转移到软件模拟 -march=armv7-a,生成适合 armv7a 架构的代码 -mtune=cortex-9,代码生成按照 … Continue reading
Android 命令行调试 C/C++ 程序
传统方式调试 NDK 开发的程序比较麻烦,先要编译成 JNI,又要导出 java接口,还要再写一个 java 工程,改一个地方又要连续改几处,这样效率是很低的。最频繁使用的关键工作路径(编译/调试环节)如果能极致简化,那么可以带来开发效率的成倍提升。其实安卓官方是提供了命令行调试方法的,将你需要调试的 C代码用 NDK直接编译成可执行,然后到设备上执行: 使用 NDK 导出独立工具链,方便以后使用,在 cygwin 下面,将 $NDK 环境变量代表的路径设置好,然后: cd $NDK chmod -R 755 * build/tools/make-standalone-toolchain.sh –ndk-dir=$NDK –platform=android-9 –arch=arm –install-dir=/…../path-to-android-9 这样就导出了一套针对 API9 的独立工具链(包含 gcc, ld, ndk必要文件),以后方便使用,比如导出到 d:\android-9下面,那么以后可以跳过 cygwin,直接编译我们的 Hello World: d:\android-9\bin\arm-linux-androideabi-gcc.exe hello.c –o … Continue reading
如何写一个软件渲染器?
实现个简单的固定渲染管线软渲染器不算复杂,差不多700行代码就可以搞定了。之所以很多人用 D3D用的很熟,写软渲染却坑坑洼洼,主要是现在大部分讲图形的书,讲到透视投影时就是分析一下透视变换矩阵如何生成,顶点如何计算就跳到其他讲模型或者光照的部分了。 因为今天基本上是直接用 D3D 或者 OGL,真正光栅化的部分不了解也不影响使用,所以大部分教材都直接跳过了一大段,摄像机坐标系如何转换?三角形如何生成?CVV边缘如何检测?四维坐标如何裁剪?边缘及步长如何计算?扫描线该如何绘制?透视纹理映射具体代码该怎么写?framebuffer zbuffer 到底该怎么用?z-test 到底是该 test z 还是 w 还是 1/z 还是 1/w ?这些都没讲。 早年培训学生时候,我花两天时间写的一个 DEMO,今天拿出来重新调整注释一下,性能和功能当然比不过高大上的软件渲染器。但一般来讲,工程类项目代码不容易阅读,太多边界情况和太多细节优化容易让初学者迷失,这个 mini3d 的项目不做任何优化,主要目的就是为了突出主干: 源代码:skywind3000/mini3d · GitHub 可执行:https://github.com/skywind3000/mini3d/releases 操作方式:左右键旋转,前后键前进后退,空格键切换模式,ESC 退出。
为什么技术总是被轻视?国内做技术能不能有较大发展?
陆贾对陈平说过:“天下安,注意相;天下危,注意将!”,天下太平的时候,文官得到重视;天下大乱的时候武官得到重视。大到一个行业的兴起,小到一家公司的创业期,或者一款产品的开发期,打江山的时候自然武将重要,守江山就是另外一回事了。 曾经建议大家远离 “没有技术基因” 的公司: 从大公司离职去小公司当 CTO 是一种怎样的体验? 从小处讲,这是权力斗争,即便武将出生的宋太祖都要杯酒释兵权,各大公司上市后 CTO 出局本来就是屡见不鲜的事情。即便一个产品组,东西出来前技术比较重要,所有人求着你,东西出来后,技术比较尴尬,所有人来怪你(怎么又出问题了?怎么那么慢?怎么要那么多人?)。 从大处说,这是行业规律,任何一个行业都是按照:技术主导->产品主导->销售主导 的模式进行发展。早期的技术壁垒逐步打破后,会变成产品为重,大家产品都设计的差不多的时候又会变成销售为重。但是这是一个循环,全天下都在拼渠道和折扣的时候,偶尔一两个革命性的技术或者产品创新,就又能将行业拉到循环的起点。 参考: 这个社会中,有真才实学技术的人,是否总体不如“非常会来事”的万金油混得好? – 陈鑫的回答 可口可乐和百事可乐已经走到销售了,服装行业走到产品和销售之间。手机在功能机时代基本就是拼销售和外观,基础功能大家都基本OK,界面也差不多,但 iPhone 出来后,重新将行业拉回到重视产品的阶段。 游戏行业也是一样,早年业内出名的都是程序牛人,近十年内,游戏业听不到任何人以技术闻名了,相反涌现出一大堆策划制作人,说明游戏行业已经脱离了技术为重的阶段进入了产品为重的阶段了。天下游戏一大抄以后又变成渠道和发行的天下,而就在渠道血拼首充号和分成比例的时候今年似乎又被重度游戏拉回产品为重这个阶段。保不齐哪天 VR /AR 技术再上一个台阶后,又重新将整个行业拉回起点了。 然而所谓的循环也只是短暂的,对于大部分成熟行业,不管怎么循环,三个阶段的稳定态,差不多都是以销售为主以少量产品创新为辅的稳定态,偶尔一两个创新可以在短期内将行业回归到 “技术为重” 的阶段,然而其后将继续回归所谓的稳定态。 建议的话,除去回到学校或者科研机构做研究外,大概有三个解法: 远离没有技术基因的公司,或没技术基因的创业团队。 寻找新的行业,对技术比较倚重的领域,或者从事专门提供技术服务的工作。 自己成长并学习更多领域的内容,出将入相。