1.:1,10d
first select the contents you want to copy and then
:set paste ,just click the mouse .
sudo apt-get install lib-mpich**-dev
when you run the files you should use mpirun -np 4 ./a or it will occur some questions.
you cannot use MPI_Send to send a message to yourself and use MPI_Recv to receive from yourself. Since it is blocking operation ,it will just hang.
2.关于MPI_Comm_split函数的理解:调用MPI_Comm_split函数后,将MPI_COMM_WORLD这个通信域划分了一个新的通信域,在这个通信域中进程的总数并没有改变。但是在这个通信域中通信的时候,只有那些仍属于一个color的进程之间才会相互通信,而不是跟以前MPI_COMM_WORLD一样(所有的进程都进行通信)。
3.MPI_Barrier同步的问题:http://www.btsmth.com/show_topic.php?en_name=CProgramming&gid=104926
似乎在函数中声明的变量和在传过来的变量赋值后是不一样的。
4.if(rank ==0) MPI_Bcast(&recvbuf,1,MPI_INT,0,headComm)这样操作的话,之后每个进程在自己的recvbuf中找值是找不到的,因为MPI_Bcast的源码实现的时候就采用了判断每个进程的rank来进行传播的,所以必须吧if(rank==0)去掉。还有个问题是MPI_Bcast由root进程广播消息给其他进程时,并不是所有的MPI进程都在真正等待该操作的完成。
不同的MPI进程管理体系有不同的管理策略。比如,hydra默认采用ch3:nemesis channel,nemesis的策略是忙轮询;而ch3:sock是备用channel,不忙轮询。所以我觉得写MPI_Bcast的root的时候应该把这个root固定。不可能说同时等待几个根节点的信息。 并且各个进程运行MPI_Bcast的时候其实就是,如果它是根进程的话,那么它发送数据;其它进程执行它的时候,其实就相当于接收数据。
5.gettimeofday(&a,NULL)a为struct timeval类型的。sys/time.h中,这个函数计算时间很精确,比MPI_Wtime()要精确很多。
另外关于MPI各个进程运行的时间似乎有的是为0的,不知到这是为什么。
6.关于MPI_Comm_split函数中传递的key值,刚开始的时候在努力地为各个进程分配key值,后来发现其实key值是可以自动分配的,但是给定了一个key后,我觉得MPI源程序会自动的按照这个key值来给进程排个 序,然后按照这个序来分配分配进程号。
7.mpicc -o exename srcname
mpicc is a command when you install mpi dev kits.and this command will invoke a c compiler to compile a program that use mpi
8.omcc is a compiler
9.you can use the following command to compile the hybrid compile of mpi and openmp:
mpicc -cc=omcc -o exename srcname
10.使用openmp的时候一般将计算的部分当作并行域。
11.
Vim 中截取部分内容保存到其他文件。
按 Escape进入命令模式,然后输入 :start,endw file,其中的 start 是当前文件中要保存的第一行,end 是要保存的最后一行,w 表示希望写到另一个文件中(或者覆盖现有的文件),file 是指定的部分要保存到的文件。对于最后一行,可以使用 $ 表示文件的末尾。可以在 w 后面使用两个大于号(>>)表示希望把内容附加到文件中而不是覆盖文件。
12.最近经常使用产生随机数的方法,总结一下:
#include <stdlib.h> srand(time(NULL)); int num = (int)rand()%10;
13.书上的雅可比算法同步有问题。
使用雅可比算法的时候,使用大规模数据计算时,始终不行,不知道是为什么???
fflush(stdout);可以让本来应该在前面打印的输出语句在前面输出。
有点郁闷了,编写大规模的测试用例的时候,发现数据运行怎么都不对,最终才想起来,因为测试用的数据本身就没有解,所以不行。
雅可比本身还有一个问题:主对角优先
vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
n 为数字,若 n 为 .,表示从当前行开始到最后一行
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
5.以前使用vim的时候,从一个terminal中将内容复制到另一个terminal中的时候总是出现排版乱了的问题:
解决方法:假设你要从terminal2中拷贝数据到terminal1.操作如下:在terminal1中输入命令:set paste.现在就可以直接将terminal2中的数据拷贝过来了.
also a ref:http://www.cnblogs.com/jianyungsun/archive/2011/03/19/1988855.html
14.写函数的时候千万不要和系统的函数同名,否则会出现莫名奇妙的错误。
15.
如要将a.txt的内容拷贝到b.txt中,可以执行如下步骤:
用vim打开b.txt。将光标定位到要复制插入的位置,然后进入命令模式中输入 :r!cat a.txt
保存退出:wq!搞定~~
16.ubuntu下的软件一般安装到了/usr/share或者/usr/local目录里面了。可以用whereis+软件名来查找系统里文件的位置。
17.gmail邮箱有过滤器和标签功能。