单CPU单核能不能并行执行并行程序代码?

单CPU单核能不能并行执行并行程序代码?,第1张

当然没有问题。

在CPU和你的应用程序之间,隔着的是 *** 作系统(Windows或Linux/Unix等),也就是说程序的并行与否都是基于 *** 作系统的。 现代的 *** 作系统, 比如Windows都是多任务多线程的, 因此你的程序也可以具有这个能力。 *** 作系统对进程作时间片选或分割(time slice),每个进程其实只能有很短的时间占据着CPU时间, 然后其进程和CPU寄存器信息被保存并被切换给别的进程(content switching)。 就如同虚拟空间一样, 每个程序都“认为”自己独占CPU和内存, 这也是“隔离”的概念。 如果你的物理CPU多, 当然有助于这一切换,如果你只有一个CPU,这个过程也在进行着,当然比较慢。

#include <mpi.h>

#include <stdio.h>

#include <math.h>

#define SIZE 10

void main(int argc, char *argv)

{

int myid, numprocs

int data[SIZE], i, x, low, high, myresult, result

char fn[255]

char *fp

MPI_Init(&argc,&argv)

MPI_Comm_size(MPI_COMM_WORLD,&numprocs)

MPI_Comm_rank(MPI_COMM_WORLD,&myid)

if (myid == 0) { /* Open input file and initialize data */

strcpy(fn,getenv("HOME"))

strcat(fn,"/data")

if ((fp = fopen(fn,"r")) == NULL) {

printf("Can’t open the input file: %s\n\n", fn)

exit(1)

}

for(i = 0i <SIZEi++) fscanf(fp,"%d", &data[i])

}

/* broadcast data */

MPI_Bcast(data, SIZE, MPI_INT, 0, MPI_COMM_WORLD)

/* Add my portion Of data */

x = SIZE/numprocs

low = myid * x

high = low + x

if(myid == numprocs - 1) high = SIZE

myresult = 0

for(i = lowi <highi++)

myresult += data[i]

/* Compute global sum */

MPI_Reduce(&myresult, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD)

if (myid == 0) printf("The sum is %d.\n", result)

MPI_Finalize()

}

我们下面以C 语言为例。

具体语法规则可参看《高性能计算并行编程技术-MPI 并行程序设计》一书。

mpicc -o outfilename cpi.c

其中outfilename 为编译后的输出文件,cpi.c 为源代码.

可将cpi.c 下载后上传的自己目录下编译.

例如:mpicc -o cpi cpi.c

如没有安装OpenPBS 则:

mpirun -np 4 cpi

否则:(一般安装了)

之后需写一作业提交脚本.例如:submit 内容如下:

#PBS -l nodes=nodes number

#PBS -N jobname#PBS -j oecd /home/xmin/Project

/usr/local/bin/mpiexec cpi

其中 #PBS -l nodes=nodes number 为指定几个节点计算.如: nodes=4

#PBS -N jobname 为用户命名的提交作业名称.如: #PBS -N xmin

#PBS -j oe 为结果和错误输出同文件.如无此项则分别在两个文件中.

cd /home/xmin/Project 编译后的输出文件所在路径(从根目录开始).

/usr/local/bin/mpiexec cpi 为mpiexec 所在路径.

下面是完整例子:

#PBS -l nodes=4

#PBS -N xmin#PBS -j oecd /home/xmin/Project

/usr/local/bin/mpiexec cpi

提交脚本如下:

qsub submit得到如下:3565.isc.math.nankai.edu.cn

此为你的作业编号.

这样你就可得到类似xmin.o2666 的文件,打开即可看到结果.

你还可以查询作业提交情况.命令如下:qstat


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7692264.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存