最新 | 最热门 | 最高评价

+0  基础优化-最不坏的哈希表

Tag: 编程技术 | 算法
skywind 发于 2017年12月08日 19:14 | 点击: 979 | 展开摘要
哈希表性能优化的方法有很多,比如:

使用双 hash 检索冲突

使用开放+封闭混合寻址法组织哈希表

使用跳表快速定位冲突

使用 LRU 缓存最近访问过的键值,不管表内数据多大,短时内访问的总是那么几个

使用更好的分配器来管理 keyvaluepair 这个节点对象

上面只要随便选两条你都能得到一个比 unordered_map 快不少的哈希表,类似的方法还有很多,比如使用除以质数来归一化哈希值(x86下性能最好,整数除法非常快,但非x86就不行了,arm还没有整数

查看全文: http://www.udpwork.com/item/16530.html

+0  AVL/RBTREE 实际比较

Tag: 编程技术 | 算法
skywind 发于 2017年12月08日 18:37 | 点击: 788 | 展开摘要
网上对 AVL被批的很惨,认为性能不如 rbtree,这里给 AVL 树平反昭雪。最近优化了一下我之前的 AVL 树,总体跑的和 linux 的 rbtree 一样快了:

他们都比 std::map 快很多(即便使用动态内存分配,为每个新插入节点临时分配个新内存)。

项目代码在:skywind3000/avlmini

其他 AVL/RBTREE 评测也有类似的结论,见:STL AVL Map

谣言1:RBTREE的平均统计性能比 AVL 好

统计下来一千万个节点插入

查看全文: http://www.udpwork.com/item/16529.html

+0  如何写一个视频编码器演示篇

Tag: 编程技术 | 视频
skywind 发于 2015年12月24日 19:43 | 点击: 975 | 展开摘要
先前写过《视频编码原理简介》,有朋友问光代码和文字不太真切,能否补充几张图片,今天我们演示一下:

这是第一帧画面:P1(我们的参考帧)

这是第二帧画面:P2(需要编码的帧)

从视频中截取的两张间隔1-2秒的画面,和实际情况类似,下面我们参考P1进行几次运动搜索:

搜索演示1:搜索P2中车辆的车牌在P1中最接近的位置(上图P1,下图P2)

这是一个演示程序,鼠标选中P2上任意16×16的Block,即可搜索出P1上的 BestMatch 宏块。虽然车辆在运动

查看全文: http://www.udpwork.com/item/15081.html

+0  内存拷贝优化(3)-深入优化

Tag: 编程技术 | 汇编 | 优化
skywind 发于 2015年12月20日 18:15 | 点击: 1185 | 展开摘要
今天继续在原来内存拷贝代码上优化:

1. 修改了小内存方案:由原来64字节扩大为128字节,由 int 改为 xmm,小内存性能提升 80%
2. 修改了中内存方案:从4个xmm寄存器并行拷贝改为8个并行拷贝+prefetch,提升20%左右
3. 去除目标地址头部对齐的分支判断,用一次xmm拷贝完成目标对齐,性能替升10%。
4. 增加测试用例:为贴近实际,增加了随机访问,10MB空间内(绝对大于L2尺寸)随机位置和长度的测试

为避免随机数生成影

查看全文: http://www.udpwork.com/item/15065.html

+0  内存拷贝优化(2)-全尺寸拷贝优化

Tag: 编程技术 | 优化 | 汇编
skywind 发于 2015年12月18日 14:15 | 点击: 1130 | 展开摘要
四年前写过一篇小内存拷贝优化:http://www.skywind.me/blog/archives/143

纠结了一下还是把全尺寸拷贝优化代码发布出来吧,没啥好保密的,

如今总结一下全尺寸内存拷贝优化的要点:

1. 策略区别:64字节以内用小内存方案,64K以内用中尺寸方案,大于64K用大内存拷贝方案。

2. 查表跳转:拷贝不同小尺寸内存,直接跳转到相应地址解除循环。

3. 目标对齐:64字节以上拷贝的先用普通方法拷贝几个字节让目标地址对齐,好做后面的事情。

4

查看全文: http://www.udpwork.com/item/14863.html

+0  视频编码原理简介

Tag: 编程技术 | 视频
skywind 发于 2015年11月24日 18:45 | 点击: 1440 | 展开摘要
要彻底理解视频编码原理,看书都是虚的,需要实际动手,实现一个简单的视频编码器:

知识准备:基本图像处理知识,信号的时域和频域问题,熟练掌握傅立叶正反变换,一维、二维傅立叶变换,以及其变种,dct变换,快速dct变换。

来自知乎问题:http://www.zhihu.com/question/22567173/answer/73610451 

第一步:实现有损图像压缩和解压

参考 JPEG原理,将RGB->YUV,然后Y/U/V看成三张不同的图片,将其中

查看全文: http://www.udpwork.com/item/14794.html

+0  Android Arm 编译优化选项评测

Tag: 编程技术 | Android
skywind 发于 2015年08月25日 18:54 | 点击: 1004 | 展开摘要
用不同测试用例具体测试 softfp, armv7-a, cortax 等优化选项,看选项不同性能差别多大。首先设计下面几个测试用例,包含字符串处理、复杂逻辑、整数运算、浮点运算几个方面:

compress:进行 LZO/LZW 大规模压缩,测试搜索,字符串匹配,复杂分支等性能

resample:进行一系列整数 DSP 运算,包括 resample 和 fir low pass

int add:一亿次整数加法

int mul:一亿次整数乘法

int div:

查看全文: http://www.udpwork.com/item/14543.html

+0  Android 命令行调试 C/C++ 程序

Tag: 编程技术 | Android
skywind 发于 2015年08月25日 14:24 | 点击: 1078 | 展开摘要
传统方式调试 NDK 开发的程序比较麻烦,先要编译成 JNI,又要导出 java接口,还要再写一个 java 工程,改一个地方又要连续改几处,这样效率是很低的。最频繁使用的关键工作路径(编译/调试环节)如果能极致简化,那么可以带来开发效率的成倍提升。其实安卓官方是提供了命令行调试方法的,将你需要调试的 C代码用 NDK直接编译成可执行,然后到设备上执行:

使用 NDK 导出独立工具链,方便以后使用,在 cygwin 下面,将 $NDK 环境变量代表的路径设置好,然后:

c

查看全文: http://www.udpwork.com/item/14542.html

+0  如何写一个软件渲染器?

Tag: 图形编程 | 编程技术 | 图形
skywind 发于 2015年08月10日 02:52 | 点击: 1149 | 展开摘要
实现个简单的固定渲染管线软渲染器不算复杂,差不多700行代码就可以搞定了。之所以很多人用 D3D用的很熟,写软渲染却坑坑洼洼,主要是现在大部分讲图形的书,讲到透视投影时就是分析一下透视变换矩阵如何生成,顶点如何计算就跳到其他讲模型或者光照的部分了。

因为今天基本上是直接用 D3D 或者 OGL,真正光栅化的部分不了解也不影响使用,所以大部分教材都直接跳过了一大段,摄像机坐标系如何转换?三角形如何生成?CVV边缘如何检测?四维坐标如何裁剪?边缘及步长如何计算?扫描线该如何绘制

查看全文: http://www.udpwork.com/item/14472.html

+0  如何设计一个内存分配器?

Tag: 编程技术 | 优化 | 系统开发
skywind 发于 2015年07月27日 20:26 | 点击: 1057 | 展开摘要
通常工程里不推荐自己写内存分配器,因为你费力写一个出来99%可能性没有内置的好,且内存出bug难调试
不过看书之余,你也可以动手自己试试,当个玩具写写玩玩:

1. 实现教科书上的内存分配器:

做一个链表指向空闲内存,分配就是取出一块来,改写链表,返回,释放就是放回到链表里面,并做好归并。注意做好标记和保护,避免二次释放,还可以花点力气在如何查找最适合大小的内存快的搜索上,减少内存碎片,有空你了还可以把链表换成伙伴算法,写着玩嘛。

2. 实现固定内存分配器:



查看全文: http://www.udpwork.com/item/14438.html

+0  网络程序计时器通常用啥实现?

Tag: 编程技术 | 网络编程 | 网络
skywind 发于 2015年07月26日 23:28 | 点击: 982 | 展开摘要
通常来讲,就是利用 select 的空余时间,来进行时钟检查,不管是 select / poll / epoll/ kevent,以下统称 select,它有一个等待时间作为参数,即没有事件时,最多 wait 多少时间,我们把这个作为网络库的基准频率,比如 10MS,或者 20MS, 25MS, 50MS,都是常用的几个值。

就是说网络库调用 select 等待事件时如果没有事件,那么最长等待 10MS 就返回了,这时再处理完所有网络事件后,就可以来处理时钟数据了。事件处理

查看全文: http://www.udpwork.com/item/14440.html

+0  Go网络编程练习

Tag: 编程技术 | GO
latermoon 发于 2013年01月10日 18:55 | 点击: 1600 | 展开摘要
Go用于网络编程看起来很不错,看了下基本语法,尝试写了个直接根据Redis协议获取同步数据的脚本熟悉下

/**
* http://blog.nosqlfan.com/html/4135.html
* @author latermoon
* @since 2013.1.10
*/
package main

import(
"net"
"os"
"bufio"
"st

查看全文: http://www.udpwork.com/item/11259.html
|<<<123>>>| 一共3页, 29条记录