在用C语言编写的程序中,同时从不同的线程使用ARPACK特征值求解器安全吗?如果ARPACK本身不是线程安全的,是否有与其API兼容的线程安全实现?快速的谷歌搜索没有找到有用的信息,但鉴于ARPACK在大型科学计算中被广泛使用,我会发现需要一个线程安全的稀疏特征值求解器是非常令人惊讶的。
我对Fortran不是很熟悉,所以我使用f2c
将ARPACK源代码翻译成了C,似乎有相当多的静态变量。基本上,翻译后的例程中所有的本地变量都是静态的,这意味着库本身不是线程安全的。
在用C语言编写的程序中,同时从不同的线程使用ARPACK特征值求解器安全吗?如果ARPACK本身不是线程安全的,是否有与其API兼容的线程安全实现?快速的谷歌搜索没有找到有用的信息,但鉴于ARPACK在大型科学计算中被广泛使用,我会发现需要一个线程安全的稀疏特征值求解器是非常令人惊讶的。
我对Fortran不是很熟悉,所以我使用f2c
将ARPACK源代码翻译成了C,似乎有相当多的静态变量。基本上,翻译后的例程中所有的本地变量都是静态的,这意味着库本身不是线程安全的。
f2c
将ARPACK转换为C。每当您使用f2c
并且关心线程安全时,必须使用-a
开关。这使得局部变量具有自动存储,即基于堆栈的本地变量,而不是静态变量,这是默认设置。ARPACK使用BLAC对吗?那么这些库也需要是线程安全的。 我认为您检查f2c可能不是确定Fortran代码是否线程安全的绝对方法,我猜它也取决于Fortran编译器和库。