METIS:不同操作系统的结果不同

时间:2015-07-08 17:05:56

标签: c metis

C program调用METIS来对网格进行分区。

考虑到WeatherVane和PaulOgilvie的评论,

编辑 New version C计划。

在我的GNU/Linux我得到了结果:

objval: 14
epart: 0 0 0 0 0 1 2 2 1 0 0 1 2 2 1 2 2 1 
npart: 0 0 0 2 0 0 1 1 2 2 2 1 2 2 1 1 
8

在我的OSX上,我得到了:

objval: 17
epart: 0 1 1 0 1 0 2 2 0 1 1 1 2 2 1 2 2 0 
npart: 0 1 1 1 0 1 0 1 2 2 2 0 2 2 0 0 
8

导致结果不同的原因是什么?

如何修复它,我的意思是,无论OS /架构/编译器是什么,总能获得相同的结果?

注意:idx_tint64_tlongGNU/Linuxlong longOSX

我的GNU / Linux

$ cat /etc/issue
Ubuntu 12.04.4 LTS \n \l

$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ uname -s -r -v -p -i -o
Linux 3.5.0-45-generic #68~precise1-Ubuntu SMP Wed Dec 4 16:18:46 UTC 2013 x86_64 x86_64 GNU/Linux

我的OSX

$ sw_vers 

ProductName:    Mac OS X
ProductVersion: 10.9.5
BuildVersion:   13F34

$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

$ uname -m -p -r -s -v
Darwin 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64 i386

METIS安装

METIS版本为5.1.0

我已使用miniconda安装了METIS

包裹是here (文件linux-64/metis-5.1.0-0.tar.bz2osx-64/metis-5.1.0-2.tar.bz2)。

这些软件包是使用此recipe构建的。

1 个答案:

答案 0 :(得分:1)

METIS使用伪随机数。

伪随机数由GKlib函数生成。 (GKlib嵌入在METIS tarbarlls中。

默认情况下,GKlib使用C标准库中的rand函数,该函数可能在不同平台上生成不同的数字。 (见:Consistent pseudo-random numbers across platforms)。

GKlib也可以使用标记-DUSE_GKRAND进行编译。它不使用rand函数,而是使用它自己的函数,它总是给出不同平板形式的相同随机数。

使用-DUSE_GKRAND代码中的C代码在我的GNU/LinuxOSX上提供相同的结果:

objval: 18
epart: 0 0 0 2 1 1 2 2 1 0 0 1 0 1 1 2 2 1 
npart: 0 0 0 0 2 0 1 1 2 1 2 1 2 2 1 1 
8

我已使用此conda recipe构建METIS