Share,learn,discuss and spread software in professional astronomy

Thread-safety of fortran routines

fortran写的子程序在大部分情况下是线程**非**安全的,涉及如下一些问题:
1.文件操作。fortran打开的文件编号在同一进程(process)内共享一张表。如果每个线程都用同一个unit打开文件,则会冲突。最可恶的是,如果大家同时往标准输出上写东西(write(*,*)),会导致程序崩溃!

2.避免save和common语句。它们默认是共享变量。

3.local定义的数组默认具有save属性,也就是共享的。

4.声明的同时初始化的变量(比如integer i=8) 也具有save属性!

编译时使用-openmp选项可以克服后三点。即便子程序文件里没有并行语句,加上-openmp可以编译结果尽可能thread-safe。

参考:
https://software.intel.com/en-us/forums/topic/270572

Level: 
Category: 

提交MNRAS的pdf文件中type3字体问题

提交MNRAS的pdf文件可能会因为含有type3字体而无法在线生成proof。如遇此种情况,可先如下确认
pdffonts paper.pdf
看输出是否含有type3字体。如果是,则先考虑官方的建议,在文件头部加入:
\usepackage[T1]{fontenc}
\usepackage{aecompl}
重新编译。问题依旧的话,应该是插图中含有type3字体。比如用python画图,默认的似乎就是输出成type3. 修改
~/.matplotlib/matplotlibrc
加入(或者修改)如下两行
ps.fonttype : 42 # Output Type 3 (Type3) or Type 42 (TrueType)
pdf.fonttype : 42 # Output Type 3 (Type3) or Type 42 (TrueType)

重新画图。

另一种解决方式是,将问题图片(如果是eps格式)用eps2eps转换一遍。但转换之后的图片中的字体被像素化了,放大时不清晰,不推荐。

Level: 

使用memset()初始化大数组

程序中需要多次将大数组初始化为全同常数时,比如全部归零,务必使用memset()或者bzero()。甚至calloc()都可以。尽量避免手动(循环)对元素逐个赋值。前面三个函数的速度可以比手动赋值快很多倍。

计时如下:
归零一个270^3元素的数组,gcc编译:

memset() or bzeor(): 35秒
calloc(): 76秒
手动初始化:十分钟内都没初始化完,我懒得继续计时了。。

快了至少20倍啊!

如需帮助,命令行man之,不如man memset。

Level: 
Category: 

为ipython notebook定制精简浏览器

假设你的firefox装了n多插件,且书签栏工具占了好几行,你可能会想在使用ipython notebook时去掉这诸多额外设置,使用精简的firefox。两步走:

首先,新建一个firefox的profile。关闭firefox,然后命令行
firefox -P
会打开profile manager,新建一个profile,比如命名为pynote。进去之后,关掉地址栏书签栏状态栏等等,然后退出。

随后,修改ipython配置文件。
vi ~/.config/ipython/profile_default/ipython_notebook_config.py
添加或修改c.NotebookApp.browser为

Category: 
OS: 
Level: 

查看操作系统版本信息

尝试如下几个命令:

cat /etc/*-release

lsb_release -a

cat /proc/version

cat /etc/issue

cat /etc/*version

示例输出:
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=7
RELEASE_NOTES_URL=http://www.linuxmint.com/rel_gloria.php
DISTRIB_CODENAME=Gloria
DISTRIB_DESCRIPTION="Linux Mint 7 Gloria - Main Edition"

此外,uname -a 查看系统架构信息。

Category: 
Level: 

设置ssh免密码登录

只需在本地计算机执行如下两个命令,此后便可直接ssh登录服务器而不需要输入密码

ssh-keygen

ssh-copyid user@remote-host

ssh-keygen生成本机密钥,ssh-copyid将该密钥拷到远程服务器。其中user@remote-host是你的"服务器用户名@服务器ip地址"。

Category: 
OS: 
Level: 

使用SSHFS挂载远程文件夹

在本地需要读写远程文件时,未必需要不停的上传下载。通过SSHFS可以轻松将远程文件系统像移动硬盘一样挂载到本地。比如需要访问 user@remote_host上的/home/user/data,可以如下

sshfs -o follow_symlinks user@remote_host:/home/user/data /mnt/mydata

其中/mnt/mydata是本地预先建好的要挂载到的目录。上述命令便将远端的/home/user/data挂载到了本地/mnt/mydata。

卸载时:

fusermount -u /mnt/mydata

Category: 
OS: 
Level: 

使用SSH牵线搭桥,映射端口,变间接登录为直接登录

如果你需要频繁使用ssh登录服务器,可能会遇到如下问题:

服务器限制了登录IP,只要某些地址比如只有办公室的机器可以直接登录服务器。回家以后,要登服务器只能先SSH到办公室的机器,再从办公室SSH登录服务器。如果还需要传输文件,也只能类似经过办公室的机器中转完成。麻烦之处列举如下:

Category: 
OS: 
Level: 

使用SSH作代理,轻松穿墙破壁

只要你有一个国外服务器的ssh帐号,就可以用它轻松翻墙。

首先,在后台开启一个ssh连接

[bashcode]ssh -NCqf -D 8080 user@remotehost[/bashcode]

其中user@remotehost是你的用户名和远程服务器地址。如果你有一个国外服务器的ssh帐户,便可以通过它创建一个安全的隧道上网,突破国内防火墙。

 输入密码之后,本机就成为了一个代理服务器,端口为8080。可以在firefox的代理选项中添加如下代理上网:

127.0.0.1:8080 socks5

Category: 
OS: 
Level: 

如何在linux下配置完整的latex中文支持

1。首先,安装TexLive。如果系统版本太旧不能用软件包管理器安装或升级,请之TexLive网站下载最新的texlive光盘镜像安装。(比如从科大镜像ftp://mirrors.ustc.edu.cn/CTAN/systems/texlive/Images/下载)。手动安装的TexLive(默认装在/usr/local下)可以和你的系统安装的tex系统共存,不会冲突。

Category: 
Level: 

Pages

Subscribe to Astronomical Software Club RSS