Vacation routine: ASC2020 tips (up to 02/09)
记录了这么多天弄 ASC2020 学到的一些知识,原本记录在 txt 里:-),因此有点丑。
1/28
1. apt unmet dependency (depend: xxx but not going to install) 错误的可能原因。
2. virtualbox 的安装增强功能可以:1)提高分辨率;2)剪切板共享;3)共享文件夹
以及如何命令行手动安装:1)点击菜单栏里的安装增强功能会将含有 addition...iso 镜像的 cdrom 加载。
2)mount /dev/cdrom 到一个挂载点,推荐/mnt/cdrom(即 mount /dev/cdrom /mnt/cdrom),其中cdrom可能需要自己创建。
3)在挂载点 ./V**.run 即可。(需要有 gcc, make, perl 才能安装成功)
3. ubuntu-server 版没有 X 窗口因此无法复制粘贴,可以通过 ssh 连接。(1. 网络选择桥接模式 2. ifconfig 查看 ip 地址 3. 运行 sshd(server 版安装时可勾选 openssh,然后就会默认在 22 端口开启 ssh 服务) 4.ssh 连接
1/29
1. chown [-r] user:grp file
chmod [-r] xyz file 或 chmod [-r] ugo+-=rwx file
2. 软/硬链接
ln f1 f2 创建硬链接。f1, f2 完全对等,删除 f1,f2 文件依然存在。为操作系统课中的无环图结构。当删除掉所有硬链接后,文件才会被真正删除。
ln -s f1 f2 创建软链接。f1 和 f2 有主从关系。f2 相当于一个很小的存储了 f1 的位置的特殊文件。删除掉 f1 后,f2 失效。
3.
useradd [opt] username
-g 用户所属的组
-G 指定多个组
-d 指定用户主目录
-s 指定登录的 shell
userdel [-r] username -r 会同时删除用户主目录
usermod [opt] username
4.
passwd 修改当前用户密码(需要验证)
(root)passwd username 修改指定用户密码(无需验证)
/etc/passwd 文件一行记录对应着一个用户
example line:
sam:x:200:50:Sam san:/home/sam:/bin/sh
用户名:口令 (加密后的密码,或 x 而真实的密码位于/etc/shadow):用户标识号:组标识号:注释性描述:主目录:登录 Shell
/etc/shadow 和/etc/group 文件格式
02/05
1. 安装 gcc
1) linux 下安装程序可分为:
(1) 源码安装:需要有编译环境如 gcc 环境,相对于离线安装,不用操心依赖,就是编译时间有点长。
(2) 包安装 (已经编译为二进制文件):通过包管理器
在线:
yum install package
离线:
rpm -ivh rpm 文件
离线安装需要手动处理依赖。
rpm -Uvh *.rpm --force --nodeps: 忽略依赖覆盖安装
Ubuntu 下为 apt[-get]和 dpkg
3) 在 centos 的镜像的 Packages 下可找到各种程序的 rpm 文件
4) GNU/gcc 中 c, c++, fortran 对应编译器需要分开安装
2. 编译安装 mpich2
1) 若没有 g++, gfortran ./configure 需要添加--disable-c++, --disable-fortran
2) 还需要 perl 才能安装成功
02/06
1. Run an mpi cluster within a LAN
1) 在每个节点创建 mpiuser(添加到 sudoers:使用 visudo 命令或 vi /etc/passwd)(ubuntu为/etc/sudoers, 更简单的方式为 sudo usermod -aG sudo 用户名)
修改/etc/hosts 文件
2) ssh-keygen -t dsa(rsa is ok, too)
ssh-copy-id cilent
ssh cilent (默认使用当前用户 mpiuser 登入)
3) nfs (该 centos 上已经安装 nfs-utils-xxx, 既包含 server 又包含 client)
(1) 在 server 上 vi /etc/exports:
/home/mpiuser/cloud *(rw,sync,no_root_squash,no_subtree_check)
exportfs -arv(全部,重新,显示信息 挂载)
检查
a. showmount [-ae] [hostname|IP]
b. rpcinfo [-p] [IP|hostname]
c. netstat -autp
(2) 在client上
mkdir cloud
sudo mount -t nfs centos1:/home/mpiuser/cloud ~/cloud
sudo vi /etc/fstab:
#MPI CLUSTER SETUP
centos1:/home/mpiuser/cloud /home/mpiuser/cloud nfs
one line:
(root)mkdir cloud;mount -t nfs centos1:/home/mpiuser/cloud /home/mpiuser/cloud;echo 'centos1:/home/mpiuser/cloud /home/mpiuser/cloud nfs'>>/etc/fstab
check
df -h
4) mpiexec -n N --hostfile hostfile executablefile
N: 进程数
hostfile格式:
MPICH2: ip/host:n n为该节点core数
OpenMPI: ip/host slots=n
2. run HPL
1) root 安装导致没有 MPdir, MPinc, MPlib。决定重新安装。
2) mpich2 和 openmpi 都是
mkdir build; cd build
../configure --prefix=/path/to/install
make; make install
>>>from mpich2 README:169
IMPORTANT NOTE: The install directory has to be visible at exactly
the same path on all machines you want to run your applications
on. This is typically achieved by installing MPICH on a shared
NFS file-system. If you do not have a shared NFS directory, you
will need to manually copy the install directory to all machines
at exactly the same location.
<<<
全局安装会将可执行文件放在/bin, /usr/bin /usr/local/bin等里面, 库放在/lib, /usr/lib等
而局部安装程序的所有依赖会存在于一个文件夹下,可以复制移动到其它位置执行?(需要添加环境变量)
3) BLAS 库安装
ATLAS:
GotoBLAS2(Goto2):
4) HPL&HPCG
HPL:
cp Make.<arch> in top-level directory
make arch=xxx
cd /bin/<arch>
run xhpl
HPCG:
cp Make.<arch> to top/setup directory
mkdir build
cd build
../configure <arch> #error1
make
cd /bin/
run xhpcg
#error1:/bin/sh^M: bad interpreter: No such file or directory
#solve:
vi ./configure
:set ff/fileformat=unix
02/07
1. tips
处理器型号,主频,cache 等信息:cat /proc/cpuinfo
内存信息:cat /proc/meminfo
磁盘信息:fdisk -l
查看 linux 版本:lsb_release -a
top: 任务管理器
free -m 查看内存使用状况
02/08
1. OpenMP 也是一个库,需要安装,目的是使得一个进程有多个线程。
2. rpm 用法:
(已安装)
rpm -qa all
rpm -q pkg 返回带版本的包名
rpm -qi pkg info
rpm -qf file file: 查看文件属于哪个包
rpm -ql pkg list: 查看包安装的文件的路径
rpm -qR pkg 依赖
rpm -qc pkg conf: 查看包的配置文件
(未安装加个 p 选项,且需要有包的 rpm 文件)
rpm -qpl xxx.rpm
3. gcc -l 选项与 LD_LIBRARY_PATH
编译时,如果不链接库 (静态/动态) 会出现 undefined reference:
[mpiuser@izwz9fx70wphqjnuv22919z dynamic_lib]$ gcc -I./include -std=c99 -o Test Test.c
/tmp/cc4vyXu4.o: In function `main':
Test.c:(.text+0x302): undefined reference to `mult_s'
collect2: error: ld returned 1 exit status
且如果库不在标准位置如/usr/lib/处的话 (可通过 gcc -lc --verbose 查看,lc 代表 libc.a, 可换成其他库),需要添加-L 选项,
否则会报/usr/bin/ld: cannot find:
[mpiuser@izwz9fx70wphqjnuv22919z dynamic_lib]$ gcc -I./include -lfpu -std=c99 -o Test Test.c
/usr/bin/ld: cannot find -lfpu
collect2: error: ld returned 1 exit status
运行时,如果链接库不在/etc/ld.so.conf 里的话,需要定义环境变量 LD_LIBTARY_PATH 才能运行
否则会报 cannot open shared object file:
[mpiuser@izwz9fx70wphqjnuv22919z dynamic_lib]$ bin/Test_shared
bin/Test_shared: error while loading shared libraries: libfpu.so: cannot open shared object file: No such file or directory