找回密码
 欢迎注册
查看: 22579|回复: 6

[分享] 不算太成功的编译pari/gp的方法(仅限win10,只是一些坑,而且我还没有踩完……)

[复制链接]
发表于 2018-6-23 22:24:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
本帖最后由 .·.·. 于 2018-6-23 23:31 编辑

其实整篇文章都是废话
核心只有两个
一个是按照linux子系统
一个是sudo apt install pari-gp
……
就这么简单
不过如果编译,可以用多线程的parfor
如果计算量很大,或许这很不错

————————

首先感谢win10的linux子系统(可以在windows上几乎没什么损失地运行ubuntu,具体安装网上有的是方法,我就不赘述了,当然我用windows store安装的时候除了0x800X000X的bug,最后用lxrun /install先装了ubuntu16.04,然后升级去了18.04)
然后,感谢windows的神奇设置,一旦你用记事本改掉了某些不该改的东西,你就只能sudo了
为此,我们需要先改.profile或者.bashrc
  1. # if running bash
  2. if [ -n "$BASH_VERSION" ]; then
  3.     # include .bashrc if it exists
  4.     if [ -f "$HOME/.bashrc" ]; then
  5.         . "$HOME/.bashrc"
  6.     fi
  7. fi

  8. # set PATH so it includes user's private bin directories
  9. PATH="$HOME/bin:$HOME/.local/bin:$PATH"
  10. CC="gcc"
  11. CFLAGS="-O3 -march=native -pipe"
  12. CXX="g++"
  13. CXXFLAGS="-O3 -march=native -pipe"
  14. ABI="x86-64"
  15. GMP_CPU_TYPE="skylake"
  16. cd ~
  17. echo $密码 | sudo -S echo 1 >/dev/null 2>&1
  18. sudo su --preserve-environment
  19. exit
复制代码
当然也有另一种方法,就是下载gedit,以及配置图形界面,但那样实在太慢了,我宁愿notepad编辑完了之后sudo chmod……当然我宁愿root
当然对那些能够熟练使用vim的用户,这是不必要的……
  1. cd ~
  2. echo $密码 | sudo -S echo 1 >/dev/null 2>&1
  3. sudo su --preserve-environment
  4. exit
复制代码
这是核心的几行,第一行是切换目录,因为windows会给bash传递当前目录(比如c:/windows/system32,而在这里你的bash什么都做不了)
第二行,其实是输入sudo密码,当然这里密码需要你自己填……我是猜不出别人的密码的……
第三行,sudo su,绕过root密码(因为最开始root没密码)登录root,这里--preserve-environment是为了保存环境变量,否则你的bash就会变成黑白的
第四行,反正你不会只退出root而继续用你的本地用户,所以直接退出……如果你一定要用你的本地账户而非root……删掉这四行就好……或者写一个if,根据环境变量或者路径下某一个文件是否存在决定你究竟想干什么

然后正文……
gcc有BUG,可能是因为没有swap,gcc会出各种内部错误,这时候我们可以制作一个文件,作为swap分区使用
  1. dd if=/dev/zero of=/mnt/b/swapfile bs=1024 count=1048576
  2. mkswap /mnt/b/swapfile
  3. swapon /mnt/b/swapfile
复制代码
这里用的是/mnt/b,是我的设定,因为我把B盘挂上了内存盘,如果有想在windows下面挂内存盘的,可以试试Imdisk……当然没8G内存就不要想了

理论上这一步应该能成功……然而windows表示,没编出swapon这个函数……
一个终极解决方案是,
打开usr\bin\gcc,用notepad++
嗯嗯,你会发现,上面写的是一个gcc-7.0之类的东西,怒改成/usr/lib/llvm-6.0/bin/clang(其实就是/usr/bin/clang里面的内容)
之后gcc……emmm熟悉的味道

然后就是编译……
讲道理的话,可以直接输入apt install pari-gp获得一切……
不过如果真的折腾……
最开始我是准备直接写编译代码的

#事实证明360跟windows的linux子系统有仇
#在编译时候,请务必关掉360安全卫士(或者禁用它),它可以让你的编译时间*10,我一度以为是机子坏了……没想到使坏的不是机子
#首先,编译gmp,没看懂fake cpu id是干什么用的,然而我知道的是,coffeelake并不是6.1.2列出的任何一种CPU……
#干脆从官网拉下来编译过的版本(编译了三遍,最后倒在make check上面……)
#后来才发现
#libgmp10 is already the newest version (2:6.1.2+dfsg-2).
sudo apt install libgmp-dev或许有用,反正我用了

  1. ***************************************************************
  2. Cannot compile endian.c. Aborting. PLEASE REPORT!
  3. Neutron3529@Neutron:~/src/pari-2.9.5$ gcc
  4. gcc: fatal error: no input files
  5. compilation terminated.
  6. Neutron3529@Neutron:~/src/pari-2.9.5$ cd config/
  7. Neutron3529@Neutron:~/src/pari-2.9.5/config$ gcc endian.c
  8. Need GMP_CPU_TYPE environment variable for fake cpuid
  9. endian.c: In function ‘main’:
  10. endian.c:12:5: internal compiler error: Aborted
  11.      x.d = 2.;
  12.      ^
  13. Please submit a full bug report,
  14. with preprocessed source if appropriate.
  15. See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions.
复制代码


幸好我懂的多,改用clang,编译成功
然后倒在了make check上面,因为用了一个我也不知道该怎么用的GMP_CPU_TYPE
于是官网拉gmp(sudo apt install libgmp-dev)
之后编译pari的时候很轻松,基本一次通过
  1. ./Configure --kernel=$ABI --mt=pthread --with-readline --with-gmp -a
复制代码

最后用-a把gcc换成clang
说“基本”是因为pari搞鬼,说需要asm0.h,然而x86目录下没有asm0.h
一怒之下,删除x86目录(反正我也不用32位的)之后把x86-64目录cp -r了一遍,万事大吉。

最后,gp2c,由于gcc炸了的原因,玩不动……
gcc炸掉的原因还不清楚,看上去是swap出了问题,正在改swap分区……

外加,终于把/dev/shm送到内存盘了,假设b:是内存盘
那么用
ln -s /mnt/b shm
这个方法太可爱了:)
下一步就是把dev/shm变成临时文件储存位置
感觉会完成
我先重启一下,撤销在内存盘里面做的全部实验
大约明天,如果成功,会发布更多的东西




补充内容 (2018-6-24 16:55):
针对gcc的问题,可以执行rm /usr/bin/gcc && ln -s  /usr/lib/llvm-6.0/bin/clang /usr/bin/gcc来避免gcc的各种错误……当然,要执行这个操作,你需要一个clang

补充内容 (2018-6-24 16:56):
现在gp2c跑得很欢畅……然而问题是,不会用gp2c修改函数变量
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-6-24 22:59:05 | 显示全部楼层
我也安装了win10的的Ubuntu的,印象中很顺利,没啥坑。很久很久没用了,刚last了下,最后一次登陆是去年八月份 。
===========
试了下编译PARI/Gp,一次性编译通过,GMP是直接用的官方源。
sudo apt install libgmp-dev libreadline-dev
./Configure --with-gmp --with-readline --mt=pthread
  1. wayne@zuse:/mnt/d/msys64/home/wayne wang/pari-2.9.5$ gp
  2.                                       GP/PARI CALCULATOR Version 2.9.5 (released)
  3.                               amd64 running linux (x86-64/GMP-6.1.0 kernel) 64-bit version
  4.                    compiled: Jun 24 2018, gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)
  5.                                                threading engine: pthread
  6.                                      (readline v6.3 enabled, extended help enabled)

  7.                                          Copyright (C) 2000-2017 The PARI Group

  8. PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER.

  9. Type ? for help, \q to quit.
  10. Type ?15 for how to get moral (and possibly technical) support.

  11. parisize = 8000000, primelimit = 500000, nbthreads = 8
  12. ?
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-6-27 01:02:49 | 显示全部楼层
wayne 发表于 2018-6-24 22:59
我也安装了win10的的Ubuntu的,印象中很顺利,没啥坑。很久很久没用了,刚last了下,最后一次登陆是去年八 ...

其实正常编译应该没太大问题……
主要是CPU太新,没写进GMP的CPU列表,于是想着用GMP_CPU_TYPE假装自己的CPU没那么新……
然后不知为什么(估计是我没开swap分区的缘故)gcc总是报internal compiler error
一怒之下用了ln -s
然后除了需要隔三差五给gcc(其实是clang)来一波chmod 777(不明原因)之外,基本天下太平了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-6-27 06:53:53 来自手机 | 显示全部楼层
你是什么cpu,竟然会有cpu太新问题。现在通常软件应该更新在硬件前
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-6-27 23:00:13 | 显示全部楼层
mathe 发表于 2018-6-27 06:53
你是什么cpu,竟然会有cpu太新问题。现在通常软件应该更新在硬件前


Download:         gmp-6.1.2.tar.lz | Release notes   NEW 2016-12-16
于是17,18年全部的CPU都不在gmp的列表里面
configure里面gmp只编码到skylake
完全没有coffeelake的影子
于是我只好在GMP_CPU_TYPE里面强行填入了skylake……总不能把所有sky都替换成coffee吧……
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-6-30 20:05:32 | 显示全部楼层
厉害!
我只能用现成的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-7-2 00:48:37 | 显示全部楼层
只是呼吸 发表于 2018-6-30 20:05
厉害!
我只能用现成的。

然而我下载的现成的parfor是假的……
哪怕指明使用parfor,6个核只能用一个……
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-12-27 05:09 , Processed in 0.032893 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表