并行计算

一、命令

(1)环境:改.bashrc:

指定intel 编译器的环境变量:
source /data/software/intel/compilers_and_libraries/linux/bin/compilervars.sh intel64
指定intel mpi 的环境变量:
source /data/software/intel/impi/5.1.3.210/bin64/mpivars.sh
指定intel mkl 库的环境变量:
source /data/software/intel/mkl/bin/mklvars.sh intel64

(2)编译:

mpiicc –o helloworld helloworld.c (先目标再源

(3)常用:

执行:qsub *.qsub

查看状态:qstat

取消:canceljob

(4)vim

在查找模式中加入\c表示大小写不敏感查找,\C表示大小写敏感查找。例如:

/foo\c ;n向后找,N向前

 

二、编程

(1)进程同步:信号量

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <semaphore.h>

int main(int argc, char ** argv) {
FILE* fp;
long i, seqno = 1;
fp = fopen("seqno", "r+");
sem_t *sem = sem_open("/semlock", O_CREAT, 0644, 1); //打开信号量
for (i = 0; i < 20; i++) {
sem_wait(sem);//进入临界区
rewind(fp); /*rewind before read*/
fscanf(fp, "%ld\n", &seqno);
printf("pid = %d, seq# = %ld\n", getpid(), seqno);
seqno++;
rewind(fp); /*rewind before write*/
fprintf(fp, "%ld\n", seqno);
sem_post(sem);//出临界区
}
fclose(fp);
}

打开:有名信号量、内存信号量https://blog.csdn.net/maopig/article/details/52227768

详细教程:http://www.360doc.com/content/12/0419/10/54470_204839982.shtml

sem_open

  文档http://man7.org/linux/man-pages/man3/sem_open.3.html#top_of_page

  教程 https://blog.csdn.net/tennysonsky/article/details/46500417

    由特定进程创建信号量,其他进程等待后打开

程序如果在还没有完成锁操作时退出,需要先重新初始化锁!(open的有名锁是跟内核走的)

 

(2)广播 已保证收到

 

(3)输出

  多进程控制台输出有问题,需要上锁或指定进程号才有意义,否则控制台是乱的(各进程的单项输出也不连续,无可解释性) 

  printf("%d",float)会出现迷之现象,位数解释不正确,并不能保留整数

转载于:https://www.cnblogs.com/iwanna/p/10826654.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值