代码优化
天下第一好大人
天下第一好大人
展开
-
减少分支预测,让代码并行度更高
很久以前就听说过尽量把for里面的if拆开,近来编了一个程序,深有体会。 未优化代码: z_int32 nearZ = 0; for( z_int32 j = 0; j < sw; j++, alpha -= z_pi_f ) { if( alpha -NEARZERO ) nearZ = j; else if( j & 1 ) sum -= horz原创 2009-11-16 16:39:00 · 1258 阅读 · 0 评论 -
我的一些代码
void swap( char* pDst, char* pSrc ){ char* pRunner( pSrc ); while( *pRunner ) ++pRunner; int len = pRunner - pSrc; int s8 = len >> 3; while( s8-- ) { double temp = *(double*)pSrc;原创 2009-11-27 16:44:00 · 958 阅读 · 0 评论 -
矩阵90°旋转
下面谈谈我对这个问题的看法,如#3所说,这种横纵转换必然是打散了计算,后来我想利用memory cache来 提高速度,对于内存数据,硬盘数据是一个慢速设备,而对于当今的cpu来说,内存又是慢速的了。 我先上网查了一下我的cpu参数:E8400,L1 cache 64k,L2 cache 6M。 然后我设计了数据是1023*1024的矩阵,double类型,这样每一行数据就是1024 * size原创 2009-12-09 19:31:00 · 1317 阅读 · 0 评论 -
矩阵转置代码,速度优化
今天心血来潮,想写个CPU版本的矩阵转置代码,过几天写GPU版本的。 按照我的想法,就是以下几种方式: 1> 整块矩阵转置,横读纵写或纵读横写2> 将矩阵分成固定大小的block,block与block可以分成横读纵写或纵读横写,而block内部的数据也可以横读纵写或纵读横写。 经过试验:block横读,block内部纵读,能获得最好的平均性能。 代码如下(R=原创 2010-03-05 21:30:00 · 13151 阅读 · 1 评论 -
字符串转化为数值
工作时遇到这样的一个情况:服务器A向B发送请求并接受结果,耗时300ms,服务器B从接受请求到发送完毕,耗时100ms。由于是内网,不可能有200ms的网络延迟。后经检测,是因为传输时用的是字符串格式,解析时用了sscanf造成的。由于sscanf要考虑到变参问题,并原创 2011-09-30 11:37:04 · 1725 阅读 · 0 评论 -
矩阵乘法的优化
题目地址:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1113昨晚为了优化这个题目弄到2点多,今天一早就写博,我真是太不蛋定了,哈哈。做OJ的朋友都知道快速幂,我就不罗嗦了,我说的主要是矩阵乘法实现层面的优化。最开始我的代码耗时1156ms,代码如下:void mat_mul( int (原创 2013-06-01 08:41:10 · 14073 阅读 · 3 评论 -
取模速度优化
做ACM题时,经常遇到取模操作,而取模操作是算术操作中最慢的(在当前的计算机硬件中基本都是这样)。1 对2的幂取模(2^k),实际等同于和(2^k - 1)进行“位与”操作例如对8取模,因为计算机内部是二进制表示,所以可以对二进制位进行位与操作。n % 8 == ( n & 7 ) // 因为C语言取模操作会返回负数,所以当n是负数时,它们是同模关系。2 经常有一原创 2013-06-03 17:03:57 · 6267 阅读 · 1 评论 -
最大公约数gcd实现
原文地址:https://hbfs.wordpress.com/2013/12/10/the-speed-of-gcd/最大公约数求法最朴素的方法:如果一个是0,返回另一个;否则,分别找到a,b所有的约数,找公共最大的约数欧几里得辗转法:最原始提出的方法应该是辗转相减,然后改进为辗转相除(取模)二进制gcd:这主要是因为gcd有以下3个特点: 如果a,b都是偶数,那么gcd(a,b) = g转载 2015-09-07 19:55:07 · 1564 阅读 · 0 评论