最近遇到一个超级难查的错误,一方面所因为程序所MPI并行程序,很难debug,基本没有啥可用的调试工具。其实之前用ubuntu编译完mpi程序后,执行即出现了错误,虽然没有解决,但我怀疑所环境问题。可能某些链接库的版本不对。
所以我用centos编译的open mpi是可以的,但是在将我的32位机与64位机并行时,在处理简单的程序时是没有问题的。
如下:
#include "mpi.h"
#include <stdio.h>
#include <math.h>
int main(int argc,char ** argv)
{
int myid, numprocs;
int namelen;
int type_size;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Get_processor_name(processor_name,&namelen);
fprintf(stderr,"Hello World! Process %d of %d on %s\n",myid, numprocs, processor_name);
zz from:http://zsxxsz.javaeye.com/blog/470359
关键字: c语言,数据类型,32位,64位
1、概述
C语言有一些非常基本的数据类型,正是这些基本类型让我们可以延伸了无限的用户自定义类型,本文主要介绍了 int, size_t, time_t, long, long long int 等基本数据类型在Linux32 及 Linux64 的使用情况。表面看上去,这些类型确实太基础太简单,似乎没啥可讲的,实事似乎也是如此,用过C的对这些都已经非常熟悉了,这还用讲?在PC 64位机器 出来之前,我们确实不用太关注这些,因为在32位机上编程,似乎很少出现过什么问题,但64位机出来了,象Linux 也支持64位机器,问题就来了,为什么?因为它们的长度发生了变化,而我们的程序也就有可能需要改变一下。
在我的ubuntu上安装了openmpi,编译一个简单程序如下:
#include "mpi.h"
#include <stdio.h>
#include <math.h>
int main(int argc,char ** argv)
{
int myid, numprocs;
int namelen;
int type_size;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Get_processor_name(processor_name,&namelen);
fprintf(stderr,"Hello World! Process %d of %d on %s\n",myid, numprocs, processor_name);
原文:http://blog.chinaunix.net/u/16651/showart.php?id=434959
众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态 库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中 的函数,以及该动态库的其它资源了。在Linux中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定。
gdb调试命令 http://lubobill1990.blog.163.com/blog/static/369303862010913105122718/
Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的一些功能:
zz from:http://blog.chinaunix.net/u/31088/showart_506966.html
1. core文件的简单介绍
//—————————————————————
在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。
在默认情况下,ld链接器会将libc、crt1.o等这些CRT和启动文件与程序的模块链接起来,但是有些时候,我们 可能不需要这些文件,或者希望使用自己的libc和crt1.o等启动文件,以替代系统默认的文件,这种情况在嵌入式系统或操作系统内核编译的时候很常 见。GCC提高了两个参数“-nostartfile”和“-nostdlib”,分别用来取消默认的启动文件和C语言运行库。
from:
程序员的自我修养:链接、装载与库1.2 C/C++运行库 11.2.1 C语言运行库
任何一个C程序,它的背后都有一套庞大的代码来进行支撑,以使得该程序能够正常运行。这套代码至少包括入口函数,及其所 依赖的函数所构成的函数集合。当然,它还理应包括各种标准库函数的实现。
注:gnuplot也好强大,可以作为介于matlab和gmt的一个画图工具了
source : http://darksair.org/wiki/Gnuplot.html#sec5
附带 http://www.gnuplot.info/screenshots/index.html#demos
Gnuplot
Introducing Gnuplot 使用 Gnuplot Gnuplot Interactive Environment Gnuplot Scripting Gnuplot for Real
Introduction to gnuplot — Plot Style
GNUPLOT使用手册
FILE * command;
command = popen("gnuplot","w");
///
fprintf(command,"set terminal png \n");
fprintf(command,"set output ‘test.png’\n");
fprintf(command,"set multiplot\n");
fprintf(command,"plot ‘%s’w lines\n",filename);
fprintf(command,"plot ‘%s’w lines\n",filtered_filename);
fflush(command);
/////
zz from:http://blog.chinaunix.net/u2/65114/showart_1099446.html
一、 基础篇:
在linux命令提示符下运行gnuplot命 令启动,输入quit或q或exit退 出。
1、plot命令
gnuplot> plot sin(x) with line linetype 3 linewidth 2 或
gnuplot> plot sin(x) w l lt 3 lw 2 %用线画,线的类型(包括颜色与虚线的类型)是3,线的宽度是2, 对函数sin(x)作图
在Ubuntu 8.10上安装MPICH2并行计算环境
-Zengming Zhang, ZCNI, ZJU
-2010-1-31
(nicegiving@gmail.com)
目录:
———————
1. 什么是MPICH2
2. 安装前的系统准备
3. 安装步骤
4. 设置环境变量
5. 添加mpd配置文件
6. 开始单机测试
7. 安装后配置(多机测试)
(1) 修改/etc/hosts
(2) 创建mpd.hosts
(3) 配置SSH
(4) 配置samba共享
(5) 配置测试机器的环境变量
(6) 开始测试
8. 并行程序运行测试
9. 成功运行的关键点
10. Troubleshooting
———————
const long maxn=1000001;
bool prime[maxn];
//筛选法求素数
//0代表素数,1代表非素数
void primeinit(){
long long i=2,t;
for(i=4;i<maxn;i=i+2)
prime[i]=false;
for(i=3;i<maxn;i=i+2)
{
if(prime[i])
{
t=i*i;
while(t<maxn)
{
prime[t]=false;
t=t+i;//<<2;//偶数倍不用检测i*i为奇数,故i*i+2i必为奇数
}