source259

所属分类:搜索引擎
开发工具:Asm
文件大小:4729KB
下载次数:37
上传日期:2009-04-03 18:42:02
上 传 者liqi001
说明:  因特网梅森素数大搜索,多处理器版v25.9
(Great Internet Mersenne Prime Search GIMPS Finding World Record Primes Since 1996)

文件列表:
comm95c.h (188, 2008-12-02)
common.h (909, 2008-09-02)
commona.c (5303, 2008-06-01)
commona.h (1485, 2008-06-01)
commonb.c (237647, 2009-03-14)
commonb.h (6998, 2009-03-04)
commonc.c (189658, 2009-03-15)
commonc.h (18430, 2009-03-12)
ecm.c (183806, 2009-03-12)
Fgw.c (26104, 2008-05-28)
gwtest.c (23001, 2008-06-01)
md5.c (10941, 2008-06-01)
primenet.c (38095, 2008-12-06)
primenet.h (11403, 2008-09-11)
gwnum\amd64 (0, 2009-03-15)
gwnum\amd64\cpuidhlp.obj (758, 2009-03-15)
gwnum\amd64\debug (0, 2005-09-20)
gwnum\amd64\gianthlp.obj (1357, 2009-03-15)
gwnum\amd64\mult.obj (84597, 2009-03-15)
gwnum\amd64\multutil.obj (3915, 2009-03-15)
gwnum\amd64\release (0, 2005-09-20)
gwnum\amd64\timeit.obj (92860, 2009-03-15)
gwnum\amd64\timeitp.obj (93460, 2009-03-15)
gwnum\amd64\xmult1.obj (226262, 2009-03-15)
gwnum\amd64\xmult1ax.obj (39831, 2009-03-15)
gwnum\amd64\xmult2.obj (89396, 2009-03-15)
gwnum\amd64\xmult2a.obj (25176, 2009-03-15)
gwnum\amd64\xmult2ap.obj (25318, 2009-03-15)
gwnum\amd64\xmult2ax.obj (8766, 2009-03-15)
gwnum\amd64\xmult2p.obj (78299, 2009-03-15)
gwnum\amd64\xmult3.obj (342887, 2009-03-15)
gwnum\amd64\xmult3a.obj (261335, 2009-03-15)
gwnum\amd64\xmult3ap.obj (264808, 2009-03-15)
gwnum\amd64\xmult3p.obj (88675, 2009-03-15)
gwnum\amd64\xmult4.obj (539425, 2009-03-15)
gwnum\amd64\xmult4p.obj (344301, 2009-03-15)
gwnum\amd64\xmult5.obj (398643, 2009-03-15)
gwnum\amd64\xmult5p.obj (358183, 2009-03-15)
gwnum\amd64\xmult6.obj (207703, 2009-03-15)
gwnum\amd64\xmult6p.obj (107722, 2009-03-15)
... ...

------------------------------------------------------------------------ | QUAD-DOUBLE/DOUBLE-DOUBLE COMPUTATION PACKAGE | | | | Yozo Hida U.C. Berkeley yozo@cs.berkeley.edu | | Xiaoye S. Li Lawrence Berekely Natl Lab xiaoye@nersc.gov | | David H. Bailey Lawrence Berkeley Natl Lab dhbailey@lbl.gov | Revised 2004-12-16 Copyright (c) 2004 Revised 2002-10-22 Copyright (c) 2002 Revised 2001-05-31 Copyright (c) 2001 I. Copyright and Legal Matters II. Description III. Directories and Files IV. Instructions and System-Dependent Issues V. C++ Usage VI. Fortran Usage VII. Note on systems with Intel X86-based processors. I. Copyright and Legal Matters This work was supported by the Director, Office of Science, Division of Mathematical, Information, and Computational Sciences of the U.S. Department of Energy under contract number DE-AC03-76SF000***. Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: (1) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. (2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. (3) Neither the name of Lawrence Berkeley National Laboratory, U.S. Dept. of Energy nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. II. Description This package provides numeric types of twice the precision of IEEE double (106 mantissa bits, or approximately 32 decimal digits) and four times the precision of IEEE double (212 mantissa bits, or approximately *** decimal digits). Due to advanced features such as operator-function overloading, these facilities can be utilized with only minor modifications to conventional C++ and Fortran-90 programs. In addition to the basic arithmetic operations (add, subtract, multiply, divide, square root), common transcendental functions such as the exponential, logarithm, trigonometric and hyperbolic functions are also included. A detailed description of the algorithms used is available in the docs subdirectory (see docs/qd.ps). An abridged version of this paper, which was presented at the ARITH-15 conference, is also available in this same directory (see docs/arith15.ps). QD-DD Library The QD-DD library uses object oriented features and operator-function overloading, which is available in C++ and Fortran-90, to simplify end-user programming. Here is a sample C++ calling program: #include #include "qd.h" using namespace std; int main() { qd_real a, b, c; cout << "Enter a:"; cin >> a; cout << "Enter b:"; cin >> b; c = a + b; cout << "a + b = " << c << endl; cout << "sin(c) = " << sin(c) << endl; return 0; } Note that one could replace `qd_real' with `double', and the same program will run using IEEE double instead of quad-double numbers. One could equally well specify `dd_real' instead of `qd_real' for double-double precision computation. Furthermore, many mixed mode operations are also supported. For example, following the declarations double d; dd_real dd; qd_real qd; all of the expressions d + dd, dd * qd, qd / d, etc., are legal, and call routines optimized for speed in each case. Mixed-mode operations are not allowed with integer types -- these must first be converted to double floats. Here is a sample Fortran-90 program, equivalent to the above C++ program: program main use qdmodule implicit none type (qd_real) a, b, c write (6, *) 'Enter a:' call qdread (5, a) write (6, *) 'Enter b:' call qdread (5, b) c = a + b write (6, *) 'a + b =' call qdwrite (6, c) stop end program III. Directories and Files There are six directories and several files in the main directory of this distribution, described below src This contains the source code of the quad-double and double-double library. This source code does not include inline functions, which are found in the header files in the include directory. include This directory contains the header files. fortran This directory contains Fortran-90 files. tests This directory contains some simple (not comprehensive) tests. docs This directory contains two papers describing the algorithms. IV. Instructions and System-Dependent Issues To build this library, follow the following steps. In the future, the autoconf utility will used to avoid some of these platform dependent configuration issues. 1. Edit the file "make.inc" to set compiler and platform specific options. For convenience, options for several common platforms (IBM SP R6000, Sun USparc, Intel Linux, PPC Linux) are provided in the files "make.ibm", "make.sun", "make.x86", and "make.ppc". Several options that affect the library build are specified in CC_OPTS and C_QD_OPTS variables in the files. The following CPP definitions are used in the library: -DHAS_FMA If this option is specified in the CC_OPTS variable, then code suitable for systems with a fused multiply-accumulate instruction is generated. This instruction exists in IBM Power3 and PowerPC processors. -Dx86 This option should be specified (in the CC_OPTS variable) for Intel x86 processors (and their clones). This will disable extended precision floating point registers, as they wreak havoc with quad-double library routines. -DADD_UNDERSCORE If this is specified in the C_QD_OPTS variable, then a C wrapper function name will have an extra underscore (_) attached. This is required if the library is to be used by Fortran compilers that has this naming convention, such as Sun's f90 compiler. -DUPPER_CASE If this option is specified in the C_QD_OPTS variable, then a C wrapper function name will be capitalized. This is required if the library is to be used by Fortran compilers with this naming convention, such as Cray's cf90 compiler. Note that for the Cray systems, the flag -DCRAY_STRINGS is also required. -DCRAY_STRINGS This option (specified in C_QD_OPTS variable) is required when the library is to be used by cf90 Fortran compiler on the Cray systems. This allows for string passing, which has different convention on the Cray systems. 2. Edit the file make.config to set library options in the QD_OPTS variable: -DACCURATE If this flag is specified, then double-double and quad-double additions and subtractions will obey the IEEE floating-point model fl(a + b) = (1 + d) (a + b) where d is of the order eps. Otherwise, addition and subtraction obeys a weaker, Cray-style error bound fl(a + b) = (1 + d1) a + (1 + d2) b where d1, d2 are of order eps. The penalty is a substantial speed reduction. Other operations are not affected. -DSLOPPY If this flag is specified, some routines become slightly less accurate but noticeably faster. These mainly applies to multiplication and division. -DNO_INLINE This option disable any inline functions. By default, many simple operations are inlined for benefit of speed; this option disables this. Gives substantially faster compile time at the expense of execution speed. Mostly used for debugging purposes. 3. Type "make". This will build the library "libqd.a". 4. If Fortran 90 wrappers are needed, type "make wrapper", or else enter the fortran subdirectory and type "make". This will compile the Fortran module files in the directory "fortran". If problems are encountered, see the Fortran Usage section below. 5. If you want the test programs to be compiled, type "make test". Note that depending on the compiler, pslq_test and or quadt_test may not compile. This is mainly due to lack of support for "Template" by the compilers. However, the basic test qd_test should compile fine. Run this test and make sure all test passes. V. C++ Usage In all C++ files that use double-double precision, include the header file "dd.h". In all C++ files that use quad-double precision, include the header file "qd.h". Note that some operators are defined as inline functions in these header files, and the options -DHAS_FMA -Dx86 -DSLOPPY -DNO_INLINE -DACCURATE affects these functions. Thus to compile any C++ file that uses double-double or quad-double numbers, the appropriate flags must be passed to the compiler to compile that file. Writing C++ programs that utilize these routines is straightforward. In many cases, it is only necessary to change the type statements for variables that one wishes to define as quad-double or double-double. Most operators, including the input-output operators << and >>, are "overloaded", meaning that they are defined for the double-double and quad-double datatypes, as well as combinations with type double. Quad-double and double-double constants may be specified by means of assignment statements, as in qd_real pi; ... pi = "3.141592653589793238462***338327950288419716939937510582097494459230"; Note that without the quotes, the constant on the right would be truncated, and the assignment would not be fully precise. A sample test program that demonstrates many of these facilities is available in the test suite. VI. Fortran-90 Usage A. Installation instructions Unfortunately, there are differing conventions among computer vendors as to how to handle a C function called from a Fortran program. For example, Sun's f90 compiler attaches an underscore to all function names, while Cray's cf90 compiler makes the name all uppercase. IBM's compiler leaves these name alone. To accomodate these different conventions, two compiler flags are provided for compilation of the library: -DADD_UNDERSCORE and -DUPPERCASE. These will change the names at compile time to satisfy these needs. One needs to define the Fortran compiler in use by inserting a line such as one of the following in the make.inc file (in the qd directory), in the section "Compiler options": F90 = xlf90 -O3 -qstrict [for IBM or Apple systems with the IBM xlf90 compiler] F90 = pgf90 -Mfree [for Intel systems with the Portland Group pgf90 compiler] Fortran files needed for Fortran programs are included in the fortran subdirectory, together with the application program fortran_test.f and others. Two module files, ddmod.f and qdmod.f, provide generic functions and operator overloading from Fortran-90 programs. These can be compiled by typing "make" in the fortran subdirectory. One can use either the F90 compiler or the C++ compiler to perform the linking. Either way, the two object files, ddmod.o and qdmod.o must be linked with any Fortran program, together with the libqd.a file in the qd directory, as well as F90 and C++ libraries. If one uses the F90 compiler to link, then the C++ libraries must be linked; if one uses the C++ compiler to link, then the F90 libraries must be linked. If one uses the F90 compiler to link, do the following to determine which C++ libraries to use: first type the short C++ program #include "stdio.h" main() { printf("Hello world\n"); } then compile it with the command "gcc -v test.cc" (or replace "gcc" with the actual name of the C++ compiler being used). By examining the output, one can see what flags to use. For instance, on an Apple system with the IBM C++ compiler xlC and the IBM F90 compiler xlf90, one obtains the list -L/opt/ibmcmp/xlsmp/1.4/lib -L/opt/ibmcmp/vacpp/6.0/lib \ -L/usr/lib/gcc/darwin/3.3 -L/usr/lib/gcc/darwin \ -L/usr/libexec/gcc/darwin/ppc/3.3/../../.. \ -lxlopt -lxl -libmc++ -lstdc++ -lgcc -lSystem -lstdc++ Thus the lines LD = xlf90 -L/opt/ibmcmp/xlsmp/1.4/lib -L/opt/ibmcmp/vacpp/6.0/lib \ -L/usr/lib/gcc/darwin/3.3 -L/usr/lib/gcc/darwin \ -L/usr/libexec/gcc/darwin/ppc/3.3/../../.. \ -lxlopt -lxl -libmc++ -lstdc++ -lgcc -lSystem -lstdc++ must be included in the Makefile file (in the fortran subdirectory), immediately after the line "QD_LIB = ../lib$(QD).a". If one uses the C++ compiler to link, do the following to determine which flags to use: first type the short F90 program program test write (6, *) 'hello world' stop end the compile it with the command "f90 -v test.f" (or replace "f90" by the actual name of the F90 compiler being used). By examining the output, one can see what flags to use. For instance, on an Apple system with xlC and xlf90 as before, one obtains the list -L/opt/ibmcmp/xlsmp/1.4/lib -L/opt/ibmcmp/xlf/8.1/lib \ -L/usr/lib/gcc/darwin/3.3 -L/usr/lib/gcc/darwin \ -L/usr/libexec/gcc/darwin/ppc/3.3/../../.. \ -lxlf90 -lxlopt -lxlomp_ser -lxl -lxlfmath -lm -lc -lgcc -lSystem Thus the lines CPLUSPLUS_LIB = -L/opt/ibmcmp/xlsmp/1.4/lib -L/opt/ibmcmp/xlf/8.1/lib \ -L/usr/lib/gcc/darwin/3.3 -L/usr/lib/gcc/darwin \ -L/usr/libexec/gcc/darwin/ppc/3.3/../../.. \ -lxlf90 -lxlopt -lxlomp_ser -lxl -lxlfmath -lm -lc -lgcc -lSystem must be included in the Makefile file in the fortran subdirectory, immediately after the line "QD_LIB = ../lib$(QD).a". The sample Fortran programs, including fortran_test.f, may be compiled by typing "make" while in the fortran subdirectory. These sample application files include tquaderq.f, tquaderq2d.f, tquadgsq.f tquadtsq.f and tquadtsq2d.f, which perform 1-D or 2-D numerical integration, using either the "error function" algorithm, the "tanh-sinh" algorithm or Gaussian quadrature. B. Fortran programming The lines "use qdmodule" must be included at the beginning of each routine that uses the quad-double type, and "use ddmodule" must be included at the beginning of each routine that uses the double-double type. Double-double and quad-double variables are then specified by means of Fortran-90 type statements, as in type (qd_real) a, b, c A sample program is: program main use qdmodule implicit none type (qd_real) a, b a = 1.d0 b = cos(a)**2 + sin(a)**2 - 1.d0 call qdwrite(6, b) stop end This verifies that cos^2(1) + sin^2(1) = 1 to *** digit accuracy. If you are using a system with an Intel X86-based processor, three additional lines are required -- see Section VII. Most operators and generic function references, including many mixed-mode type combinations with double-precision (ie real*8), have been overloaded (extended) to work with double-double and quad-double data. It is important, however, that users keep in mind the fact that expressions are evaluated strictly according to conventional Fortran operator precedence rules. Thus some subexpressions may be evaluated only to 15-digit accuracy. For example, with the code real*8 d1 type (dd_real) t1, t2 ... t1 = cos (t2) + d1/3.d0 the expression d1/3.d0 is computed to real*8 accuracy only (about 15 digits), since both d1 and 3.d0 have type real*8. This result is then converted to mp_real by zero extension before being added to cos(t2). So, for example, if d1 held the value 1.d0, then the quotient d1/3.d0 would only be accurate to 15 digits. If a fully accurate double-double quotient is required, this should be written: real*8 d1 type (dd_real) t1, t2 ... t1 = cos (t2) + ddreal (d1) / 3.d0 which forces all operations to be performed with double-double arithmetic. Along this line, a constant such as 1.1 appearing in an expression is evaluated only to real*4 accuracy, and a constant such as 1.1d0 is evaluated only to real*8 accuracy (this is according to standard Fortran conventions). If full quad-double accuracy is required, for instance, one should write type (qd_real) t1 ... t1 = '1.1' The quotes enclosing 1.1 specify to the compiler that the constant is to be converted to binary using quad-double arithmetic, before assignment to t1. Quoted constants may only appear in assignment statements such as this. C. Functions defined with double-double and quad-double arguments F90 functions defined with dd_real arguments: Arithmetic: + - * / ** Comparison tests: == < > <= >= /= Others: abs, acos, aint, anint, asin, atan, atan2, cos, cosh, dble, erf, erfc, exp, int, log, log10, max, min, mod, ddcsshf (cosh and sinh), ddcssnf (cos and sin), ddranf (random number generator in (0,1)), ddnrtf (n-th root), sign, sin, sinh, sqr, sqrt, tan, tanh Similar functions are provided for qd_real arguments (with function names qdcsshf, qdcssnf, qdranf and qdnrtf instead of the names in the list above). D. Input and output of double-double and quad-double data Input and output of double-double and quad-double data is done using the special subroutines ddread, ddwrite, qdread and qdwrite. The first argument of these subroutines is the Fortran I/O unit number, while additional arguments (as many as needed, up to 9 arguments) are scalar variables or array elements of the appropriate type. Example: integer n type (qd_real) qda, qdb, qdc(n) ... call qdwrite (6, qda, qdb) do j = 1, n call qdwrite (6, qdc(j)) enddo Each input values must be on a separate line, and may include D or E exponents. Double-double and quad-double constants may also be specified in assignment statements by enclosing them in quotes, as in ... type (qd_real) pi ... pi = "3.141592653589793238462***338327950288419716939937510582097494459230" ... Sample Fortran-90 programs illustrating some of these features are provided in the f90 subdirectory. VII. Note on Intel x86 Processors The algorithms in this library assume IEEE double precision floating point arithmetic. Since Intel x86 processors have extended (80-bit) floating point registers, the round-to-double flag must be enabled in the control word of the FPU for this library to function properly under x86 processors. The flag -D ... ...

近期下载者

相关文件


收藏者