2013年12月10日

摘要: redhat 6上nis有点改动。在这里记一下新装系统以后,首先要yum install ypserv安装ypserv的包然后是设置# 设置nis服务器名字ypdomainname centosvi /etc/sysconfig/networkNETWORKING=yesHOSTNAME=headnode# 最后加上一句NISDOMAIN=centos修改yp的Makefilevi /var/yp/Makefile# MERGE_PASSWD=true|false# line 42: changeMERGE_PASSWD=false# MERGE_GROUP=true|false# line 阅读全文
posted @ 2013-12-10 09:51 a++ 阅读(659) 评论(0) 推荐(0) 编辑

2013年11月13日

摘要: 很多时候查不到本机cpu的cache信息。而了解这些信息,对于调优很有帮助查看1级缓存cache大小cat /sys/devices/system/cpu/cpu0/cache/index1/size查看能访问这个1级缓存的cpu编号cat /sys/devices/system/cpu/cpu0/cache/index1/shared_cpu_list查看1级缓存cache line的大小cat /sys/devices/system/cpu/cpu0/cache/index1/coherency_line_size查看1级缓存cache set的数目cat /sys/devices/sys 阅读全文
posted @ 2013-11-13 09:28 a++ 阅读(1796) 评论(0) 推荐(0) 编辑

2013年11月8日

摘要: ubuntu上要编译安装oprofile。现在版本(0.9.9)的oprofile的编译需要binutil-dev libpopt-devapt-get install binutil-dev libpopt-dev然后./configure make make install安装完以后1.执行opcontrol --init启动加载oprofile模块2.opcontrol --no-vmlinux3.(可选)opcontrol --event=L2_CACHE_MISS:500 查看cache miss率,增加监听事件4.opcontrol --start 启动op5.运行待检测程序(必须 阅读全文
posted @ 2013-11-08 10:32 a++ 阅读(384) 评论(0) 推荐(0) 编辑

2013年10月27日

摘要: 看标题大家可能觉得三个词汇风马牛不相及,第一个是解蛋白质分子动力学的软件,第二个是上三代宅男最爱雷神之锤,第三个则是一个存在于IntelSSE及AVX中的一个指令,他的作用是快速求平方根的倒数。起因是这样子的。某天闲着没事,跑去benchmarksgame.alioth.debian.org上看到了万年被压在fortran身体下蹂躏的c++居然翻身了。最不可思议的是,在fortran长项上的多体运算nbody居然被c++拉了一大截性能下来(2倍,5千万步,fortran用时19秒,C++用时9.59秒)。本着fortran居然能被c++搞倒根本是不可能的事情的信念,我开始出发了。好在他们提供了 阅读全文
posted @ 2013-10-27 21:16 a++ 阅读(791) 评论(0) 推荐(0) 编辑

2013年9月27日

摘要: cps全称叫continuation passing style,简要来讲就是告诉函数下一步做什么的递归方式,由于普通递归有栈溢出的问题,而cps都是尾递归(tail recursion),尾递归则是没有栈溢出问题的,所以haskell推荐都用cps的方式去编写代码。当然,相对于普通递归方式,cps也有着非常不便于理解的问题。def fact(n): if (n==0): return 1 else: return n* fact(n-1)print fact(400)这是一段递归求阶乘的python代码。用cps改写就是def fact_cps(n,r... 阅读全文
posted @ 2013-09-27 15:56 a++ 阅读(818) 评论(0) 推荐(0) 编辑

2013年9月23日

摘要: monad本意是单子。在haskell中,第一个接触的基本都是IO action,通过把IO动作包装起来我们能很方便的与现实世界进行数据交换。但其实monad的用途不止如此,monad还能讲一系列操作进行序列化,而这一点在通常编程中是非常需要的。而在haskell中,类似的事情则是通过递归来完成了平时需要序列化的工作。但其实haskell中也有能进行顺序操作的方法,那就是monad。一个类似于monad的定义基本是这个样子的。class Computation c where success :: a -> c a failure :: String -> c a augme... 阅读全文
posted @ 2013-09-23 22:13 a++ 阅读(1111) 评论(0) 推荐(0) 编辑

2013年9月15日

摘要: haskell中有两种定义局部变量的方法let和where,方法分别如下roots a b c = ((-b + det) / (a2), (-b - det) / (a2)) where det = sqrt(b*b-4*a*c) a2 = 2*aroots a b c = let det = sqrt (b*b - 4*a*c) a2 = 2*a in ((-b + det) / a2, (-b - det) / a2)这两种方法都可以使全局变量定义失效det = "He... 阅读全文
posted @ 2013-09-15 22:53 a++ 阅读(2579) 评论(0) 推荐(0) 编辑
 
摘要: haskell中的io模块主要是用于读写文件屏幕的,通过import IO来导入其中有如下常用定义data IOMode = ReadMode | WriteMode | AppendMode | ReadWriteModeopenFile :: FilePath -> IOMode -> IO HandlehClose :: Handle -> IO ()hIsEOF :: Handle -> IO BoolhGetChar :: Handle -> IO CharhGetLine :: Handle -> IO StringhGetContents :: 阅读全文
posted @ 2013-09-15 15:33 a++ 阅读(676) 评论(0) 推荐(0) 编辑
 
摘要: 在haskell中,有一个do的语句专门用来做一些不那么“干净”的事情,比如读写都需要用do来开头一开始以为do的作用是做monad,后来发现是错误的,其实do做的事情是包裹一个顺序操作比如在如下代码中main=do if 2>1 then do putStrLn "Step 1" putStrLn "Step 2" else putStrLn "Step 3"第三行中的do如果缺少的话,编译器会报这个错误 The function `putStrLn' is applied to three arguments, bu 阅读全文
posted @ 2013-09-15 12:54 a++ 阅读(748) 评论(0) 推荐(0) 编辑

2013年8月11日

摘要: 最近在学习haskell这门神奇的语言,但是由于print不方便,程序出错的时候都不知道是怎么回事。网上搜了一把发现有这么一个好东西import Debug.Tracefunct :: Integer -> [Integer] -> Bool funct a list = trace (show list) $ funct (a + 1) (a : list)这样子一来会把递归过程中的每一步都打印出来,方便多了,但是要注意的是,由于lazy evaluation的关系,debug输出会和程序的正常输出混在一起 阅读全文
posted @ 2013-08-11 10:21 a++ 阅读(460) 评论(0) 推荐(0) 编辑