METIS:不同 OS 的不同结果
METIS: different results on different OS
这 C program calls METIS 用于划分网格。
编辑: New version C 程序,考虑了 WeatherVane 和 PaulOgilvie 的评论。
在我的 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/architecture/compiler 是什么,总是得到相同的结果?
注意:idx_t
是 int64_t
,在我的 GNU/Linux
上是 long
,但在我的 OSX
上是 long long
。
我的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
我已经安装了 METIS
和 miniconda。
包裹是here
(文件 linux-64/metis-5.1.0-0.tar.bz2
和 osx-64/metis-5.1.0-2.tar.bz2
)。
这些包是用这个recipe构建的。
METIS
利用伪随机数。
伪随机数由GKlib
函数生成。 (GKlib
嵌入在 METIS
tarbarll 中)。
默认情况下,GKlib
使用C标准库中的rand
函数,在不同的平台上可能会生成不同的数字。 (参见:Consistent pseudo-random numbers across platforms)。
但是GKlib
也可以用标志-DUSE_GKRAND
编译。它没有使用 rand
函数,而是使用它自己的函数,该函数总是给出不同平台的相同随机数。
使用 -DUSE_GKRAND
编译函数中的 C
代码在我的 GNU/Linux
和我的 OSX
上得到相同的结果:
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
。
这 C program calls METIS 用于划分网格。
编辑: New version C 程序,考虑了 WeatherVane 和 PaulOgilvie 的评论。
在我的 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/architecture/compiler 是什么,总是得到相同的结果?
注意:idx_t
是 int64_t
,在我的 GNU/Linux
上是 long
,但在我的 OSX
上是 long long
。
我的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
我已经安装了 METIS
和 miniconda。
包裹是here
(文件 linux-64/metis-5.1.0-0.tar.bz2
和 osx-64/metis-5.1.0-2.tar.bz2
)。
这些包是用这个recipe构建的。
METIS
利用伪随机数。
伪随机数由GKlib
函数生成。 (GKlib
嵌入在 METIS
tarbarll 中)。
默认情况下,GKlib
使用C标准库中的rand
函数,在不同的平台上可能会生成不同的数字。 (参见:Consistent pseudo-random numbers across platforms)。
但是GKlib
也可以用标志-DUSE_GKRAND
编译。它没有使用 rand
函数,而是使用它自己的函数,该函数总是给出不同平台的相同随机数。
使用 -DUSE_GKRAND
编译函数中的 C
代码在我的 GNU/Linux
和我的 OSX
上得到相同的结果:
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
。