没有合适的资源?快使用搜索试试~ 我知道了~
首页GNU多精度算术库GMP手册6.3.0版
"gmp-man-6.3.0.pdf 是 GNU 多精度算术库 (GMP) 的用户手册,版本 6.3.0,为开发者提供了关于如何使用 GMP 进行高精度计算的详细指导。" GMP,全称 GNU Multiple Precision Arithmetic Library,是一个开源的库,专门设计用于执行大规模的数学运算,特别是涉及大整数、分数和浮点数的计算。由于其高效和灵活的特性,GMP 广泛应用于密码学、科学计算以及需要高精度计算的软件开发领域。 本手册是为 GMP 开发者和使用者编写的,内容涵盖了从基础到高级的各个方面。首先,它介绍如何安装 GMP,包括不同的构建选项、应用程序二进制接口 (ABI) 和指令集架构 (ISA) 的选择,以及针对特定系统的注意事项。手册还讨论了可能遇到的构建问题及其解决方案,以确保用户能够顺利集成 GMP 到他们的项目中。 在性能优化部分,手册给出了如何最大化利用 GMP 功能和提升计算效率的建议。这对于那些对性能有严格要求的应用场景至关重要。 接下来,手册深入讲解 GMP 的基础知识,如包含的头文件、库的使用,以及命名约定。这些章节提供了 GMP API 的详细文档,包括各种数据类型(如 mpz_t 代表大整数)、函数调用和操作方法。此外,还有丰富的示例代码,帮助初学者快速上手,同时也为经验丰富的开发者提供了深入理解 GMP 内部工作原理的机会。 "gmp-man-6.3.0.pdf" 是一个不可或缺的资源,无论你是初次接触 GMP 还是寻求提高现有项目性能的专家,都能从中获益。通过阅读这份手册,开发者可以熟练地运用 GMP 实现复杂的数学运算,从而提升软件的质量和能力。
资源详情
资源推荐
10 GNU MP 6.3.0
gcc -mabi=32
cc -32
‘ABI=n32’ The n32 ABI is 32-bit pointers and integers, but with a 64-bit limb
using a long long. Applications must be compiled with
gcc -mabi=n32
cc -n32
‘ABI=64’ The 64-bit ABI is 64-bit pointers and integers. Applications must be
compiled with
gcc -mabi=64
cc -64
Note that MIPS GNU/Linux, as of kernel version 2.2, doesn’t have the necessary
support for n32 or 64 and so only gets a 32-bit limb and the MIPS 2 code.
PowerPC 64 (‘powerpc64’, ‘powerpc620’, ‘powerpc630’, ‘powerpc970’, ‘power4’, ‘power5’)
‘ABI=mode64’
The AIX 64 ABI uses 64-bit limbs and pointers and is the default on
PowerPC 64 ‘*-*-aix*’ systems. Applications must be compiled with
gcc -maix64
xlc -q64
On 64-bit GNU/Linux, BSD, and Mac OS X/Darwin systems, the ap-
plications must be compiled with
gcc -m64
‘ABI=mode32’
The ‘mode32’ ABI uses a 64-bit long long limb but with the chip still in
32-bit mode and using 32-bit calling conventions. This is the default for
systems where the true 64-bit ABI is unavailable. No special compiler
options are typically needed for applications. This ABI is not available
under AIX.
‘ABI=32’ This is the basic 32-bit PowerPC ABI, with a 32-bit limb. No special
compiler options are needed for applications.
GMP’s speed is greatest for the ‘mode64’ ABI, the ‘mode32’ ABI is 2nd best. In
‘ABI=32’ only the 32-bit ISA is used and this doesn’t make full use of a 64-bit chip.
Sparc V9 (‘sparc64’, ‘sparcv9’, ‘ultrasparc*’)
‘ABI=64’ The 64-bit V9 ABI is available on the various BSD sparc64 ports, recent
versions of Sparc64 GNU/Linux, and Solaris 2.7 and up (when the kernel
is in 64-bit mode). GCC 3.2 or higher, or Sun cc is required. On
GNU/Linux, depending on the default gcc mode, applications must be
compiled with
gcc -m64
On Solaris applications must be compiled with
gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9
cc -xarch=v9
On the BSD sparc64 systems no special options are required, since 64-
bits is the only ABI available.
‘ABI=32’ For the basic 32-bit ABI, GMP still uses as much of the V9 ISA as it
can. In the Sun documentation this combination is known as “v8plus”.
Chapter 2: Installing GMP 11
On GNU/Linux, depending on the default gcc mode, applications may
need to be compiled with
gcc -m32
On Solaris, no special compiler options are required for applications,
though using something like the following is recommended. (gcc 2.8
and earlier only support ‘-mv8’ though.)
gcc -mv8plus
cc -xarch=v8plus
GMP speed is greatest in ‘ABI=64’, so it’s the default where available. The speed
is partly because there are extra registers available and partly because 64-bits is
considered the more important case and has therefore had better code written for
it.
Don’t be confused by the names of the ‘-m’ and ‘-x’ compiler options, they’re called
‘arch’ but effectively control both ABI and ISA.
On Solaris 2.6 and earlier, only ‘ABI=32’ is available since the kernel doesn’t save
all registers.
On Solaris 2.7 with the kernel in 32-bit mode, a normal native build will reject
‘ABI=64’ because the resulting executables won’t run. ‘ABI=64’ can still be built if
desired by making it look like a cross-compile, for example
./configure --build=none --host=sparcv9-sun-solaris2.7 ABI=64
2.3 Notes for Package Builds
GMP should present no great difficulties for packaging in a binary distribution.
Libtool is used to build the library and ‘-version-info’ is set appropriately, having started
from ‘3:0:0’ in GMP 3.0 (see Section “Library interface versions” in GNU Libtool).
The GMP 4 series will be upwardly binary compatible in each release and will be upwardly
binary compatible with all of the GMP 3 series. Additional function interfaces may be added
in each release, so on systems where libtool versioning is not fully checked by the loader an
auxiliary mechanism may be needed to express that a dynamic linked application depends on a
new enough GMP.
An auxiliary mechanism may also be needed to express that libgmpxx.la (from --enable-cxx,
see Section 2.1 [Build Options], page 3) requires libgmp.la from the same GMP version, since
this is not done by the libtool versioning, nor otherwise. A mismatch will result in unresolved
symbols from the linker, or perhaps the loader.
When building a package for a CPU family, care should be taken to use ‘--host’ (or ‘--build’)
to choose the least common denominator among the CPUs which might use the package. For
example this might mean plain ‘sparc’ (meaning V7) for SPARCs.
For x86s, --enable-fat sets things up for a fat binary build, making a runtime selection of
optimized low level routines. This is a good choice for packaging to run on a range of x86 chips.
Users who care about speed will want GMP built for their exact CPU type, to make best use
of the available optimizations. Providing a way to suitably rebuild a package may be useful.
This could be as simple as making it possible for a user to omit ‘--build’ (and ‘--host’) so
‘./config.guess’ will detect the CPU. But a way to manually specify a ‘--build’ will be
wanted for systems where ‘./config.guess’ is inexact.
On systems with multiple ABIs, a packaged build will need to decide which among the choices
is to be provided, see Section 2.2 [ABI and ISA], page 8. A given run of ‘./configure’ etc will
12 GNU MP 6.3.0
only build one ABI. If a second ABI is also required then a second run of ‘./configure’ etc
must be made, starting from a clean directory tree (‘make distclean’).
As noted under “ABI and ISA”, currently no attempt is made to follow system conventions
for install locations that vary with ABI, such as /usr/lib/sparcv9 for ‘ABI=64’ as opposed to
/usr/lib for ‘ABI=32’. A package build can override ‘libdir’ and other standard variables as
necessary.
Note that gmp.h is a generated file, and will be architecture and ABI dependent. When attempt-
ing to install two ABIs simultaneously it will be important that an application compile gets the
correct gmp.h for its desired ABI. If compiler include paths don’t vary with ABI options then
it might be necessary to create a /usr/include/gmp.h which tests preprocessor symbols and
chooses the correct actual gmp.h.
2.4 Notes for Particular Systems
AIX 3 and 4
On systems ‘*-*-aix[34]*’ shared libraries are disabled by default, since some
versions of the native ar fail on the convenience libraries used. A shared build can
be attempted with
./configure --enable-shared --disable-static
Note that the ‘--disable-static’ is necessary because in a shared build libtool
makes libgmp.a a symlink to libgmp.so, apparently for the benefit of old versions
of ld which only recognise .a, but unfortunately this is done even if a fully functional
ld is available.
ARM On systems ‘arm*-*-*’, versions of GCC up to and including 2.95.3 have a bug in
unsigned division, giving wrong results for some operands. GMP ‘./configure’ will
demand GCC 2.95.4 or later.
Compaq C++
Compaq C++ on OSF 5.1 has two flavours of iostream, a standard one and an old
pre-standard one (see ‘man iostream_intro’). GMP can only use the standard one,
which unfortunately is not the default but must be selected by defining __USE_STD_
IOSTREAM. Configure with for instance
./configure --enable-cxx CPPFLAGS=-D__USE_STD_IOSTREAM
Floating Point Mode
On some systems, the hardware floating point has a control mode which can set
all operations to be done in a particular precision, for instance single, double or
extended on x86 systems (x87 floating point). The GMP functions involving a
double cannot be expected to operate to their full precision when the hardware is
in single precision mode. Of course this affects all code, including application code,
not just GMP.
FreeBSD 7.x, 8.x, 9.0, 9.1, 9.2
m4 in these releases of FreeBSD has an eval function which ignores its 2nd and 3rd
arguments, which makes it unsuitable for .asm file processing. ‘./configure’ will
detect the problem and either abort or choose another m4 in the PATH. The bug
is fixed in FreeBSD 9.3 and 10.0, so either upgrade or use GNU m4. Note that
the FreeBSD package system installs GNU m4 under the name ‘gm4’, which GMP
cannot guess.
FreeBSD 7.x, 8.x, 9.x
GMP releases starting with 6.0 do not support ‘ABI=32’ on FreeBSD/amd64 prior to
release 10.0 of the system. The cause is a broken limits.h, which GMP no longer
works around.
Chapter 2: Installing GMP 13
MS-DOS and MS Windows
On an MS-DOS system DJGPP can be used to build GMP, and on an MS Windows
system Cygwin, DJGPP and MINGW can be used. All three are excellent ports of
GCC and the various GNU tools.
https://www.cygwin.com/
http://www.delorie.com/djgpp/
http://www.mingw.org/
Microsoft also publishes an Interix “Services for Unix” which can be used to build
GMP on Windows (with a normal ‘./configure’), but it’s not free software.
MS Windows DLLs
On systems ‘*-*-cygwin*’, ‘*-*-mingw*’ and ‘*-*-pw32*’ by default GMP builds
only a static library, but a DLL can be built instead using
./configure --disable-static --enable-shared
Static and DLL libraries can’t both be built, since certain export directives in gmp.h
must be different.
A MINGW DLL build of GMP can be used with Microsoft C. Libtool doesn’t install
a .lib format import library, but it can be created with MS lib as follows, and
copied to the install directory. Similarly for libmp and libgmpxx.
cd .libs
lib /def:libgmp-3.dll.def /out:libgmp-3.lib
MINGW uses the C runtime library ‘msvcrt.dll’ for I/O, so applications wanting
to use the GMP I/O routines must be compiled with ‘cl /MD’ to do the same. If
one of the other C runtime library choices provided by MS C is desired then the
suggestion is to use the GMP string functions and confine I/O to the application.
Motorola 68k CPU Types
‘m68k’ is taken to mean 68000. ‘m68020’ or higher will give a performance boost on
applicable CPUs. ‘m68360’ can be used for CPU32 series chips. ‘m68302’ can be
used for “Dragonball” series chips, though this is merely a synonym for ‘m68000’.
NetBSD 5.x
m4 in these releases of NetBSD has an eval function which ignores its 2nd and 3rd
arguments, which makes it unsuitable for .asm file processing. ‘./configure’ will
detect the problem and either abort or choose another m4 in the PATH. The bug
is fixed in NetBSD 6, so either upgrade or use GNU m4. Note that the NetBSD
package system installs GNU m4 under the name ‘gm4’, which GMP cannot guess.
OpenBSD 2.6
m4 in this release of OpenBSD has a bug in eval that makes it unsuitable for .asm
file processing. ‘./configure’ will detect the problem and either abort or choose
another m4 in the PATH. The bug is fixed in OpenBSD 2.7, so either upgrade or use
GNU m4.
Power CPU Types
In GMP, CPU types ‘power*’ and ‘powerpc*’ will each use instructions not available
on the other, so it’s important to choose the right one for the CPU that will be used.
Currently GMP has no assembly code support for using just the common instruction
subset. To get executables that run on both, the current suggestion is to use the
generic C code (--disable-assembly), possibly with appropriate compiler options
(like ‘-mcpu=common’ for gcc). CPU ‘rs6000’ (which is not a CPU but a family of
workstations) is accepted by config.sub, but is currently equivalent to --disable-
assembly.
14 GNU MP 6.3.0
Sparc CPU Types
‘sparcv8’ or ‘supersparc’ on relevant systems will give a significant performance
increase over the V7 code selected by plain ‘sparc’.
Sparc App Regs
The GMP assembly code for both 32-bit and 64-bit Sparc clobbers the “application
registers” g2, g3 and g4, the same way that the GCC default ‘-mapp-regs’ does
(see Section “SPARC Options” in Using the GNU Compiler Collection (GCC)).
This makes that code unsuitable for use with the special V9 ‘-mcmodel=embmedany’
(which uses g4 as a data segment pointer), and for applications wanting to use those
registers for special purposes. In these cases the only suggestion currently is to build
GMP with --disable-assembly to avoid the assembly code.
SunOS 4 /usr/bin/m4 lacks various features needed to process .asm files, and instead
‘./configure’ will automatically use /usr/5bin/m4, which we believe is always
available (if not then use GNU m4).
x86 CPU Types
‘i586’, ‘pentium’ or ‘pentiummmx’ code is good for its intended P5 Pentium chips,
but quite slow when run on Intel P6 class chips (PPro, P-II, P-III). ‘i386’ is a
better choice when making binaries that must run on both.
x86 MMX and SSE2 Code
If the CPU selected has MMX code but the assembler doesn’t support it, a warning
is given and non-MMX code is used instead. This will be an inferior build, since the
MMX code that’s present is there because it’s faster than the corresponding plain
integer code. The same applies to SSE2.
Old versions of ‘gas’ don’t support MMX instructions, in particular version 1.92.3
that comes with FreeBSD 2.2.8 or the more recent OpenBSD 3.1 doesn’t.
Solaris 2.6 and 2.7 as generate incorrect object code for register to register movq
instructions, and so can’t be used for MMX code. Install a recent gas if MMX code
is wanted on these systems.
2.5 Known Build Problems
You might find more up-to-date information at https://gmplib.org/.
Compiler link options
The version of libtool currently in use rather aggressively strips compiler options
when linking a shared library. This will hopefully be relaxed in the future, but for
now if this is a problem the suggestion is to create a little script to hide them, and
for instance configure with
./configure CC=gcc-with-my-options
DJGPP (‘*-*-msdosdjgpp*’)
The DJGPP port of bash 2.03 is unable to run the ‘configure’ script, it exits
silently, having died writing a preamble to config.log. Use bash 2.04 or higher.
‘make all’ was found to run out of memory during the final libgmp.la link on one
system tested, despite having 64MiB available. Running ‘make libgmp.la’ directly
helped, perhaps recursing into the various subdirectories uses up memory.
GNU binutils strip prior to 2.12
strip from GNU binutils 2.11 and earlier should not be used on the static libraries
libgmp.a and libmp.a since it will discard all but the last of multiple archive mem-
bers with the same name, like the three versions of init.o in libgmp.a. Binutils
2.12 or higher can be used successfully.
剩余151页未读,继续阅读
程序员Chino的日记
- 粉丝: 3583
- 资源: 5万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 前端面试必问:真实项目经验大揭秘
- 永磁同步电机二阶自抗扰神经网络控制技术与实践
- 基于HAL库的LoRa通讯与SHT30温湿度测量项目
- avaWeb-mast推荐系统开发实战指南
- 慧鱼SolidWorks零件模型库:设计与创新的强大工具
- MATLAB实现稀疏傅里叶变换(SFFT)代码及测试
- ChatGPT联网模式亮相,体验智能压缩技术.zip
- 掌握进程保护的HOOK API技术
- 基于.Net的日用品网站开发:设计、实现与分析
- MyBatis-Spring 1.3.2版本下载指南
- 开源全能媒体播放器:小戴媒体播放器2 5.1-3
- 华为eNSP参考文档:DHCP与VRP操作指南
- SpringMyBatis实现疫苗接种预约系统
- VHDL实现倒车雷达系统源码免费提供
- 掌握软件测评师考试要点:历年真题解析
- 轻松下载微信视频号内容的新工具介绍
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功