... | ... | @@ -13,7 +13,7 @@ This package has been tested with CMUCL, SBCL, Clisp, and Allegro. All tests pas |
|
|
|
|
|
## What's New
|
|
|
### 2011-03-04
|
|
|
* Oct now has a wiki and ticket system. You can browse the sources there (or using gitweb).
|
|
|
* Oct now has a [wiki and ticket system](http://trac.common-lisp.net/oct). You can browse the sources there (or using gitweb).
|
|
|
### 2011-02-09
|
|
|
* For Lisp's that support signed zeros for floating point (like cmucl and sbcl), Oct now correctly handles signed quad-double zeroes.
|
|
|
* The CVS repository has been moved to Git. The CVS repository is still available but will not be updated. Use Git to obtain the latest versions. (See Oct gitweb for more links.)
|
... | ... | @@ -33,7 +33,7 @@ This package has been tested with CMUCL, SBCL, Clisp, and Allegro. All tests pas |
|
|
|
|
|
## Building Oct
|
|
|
1. Obtain a copy of Oct. Currently that means from the git repository http://common-lisp.net/r/projects/oct/oct.git, but also see the Oct gitweb for more links. The CVS repository is still available, but it is no longer used.
|
|
|
1. Get a copy of MK:DEFSYS from clocc, if you don't already have a copy. Or you can also use ASDF. Note that this might be out-of-date compared to the mk:defsys version.
|
|
|
1. Get a copy of MK:DEFSYS from [clocc](http://clocc.sourceforge.net/), if you don't already have a copy. Or you can also use ASDF. Note that this might be out-of-date compared to the mk:defsys version.
|
|
|
1. (mk:oos "oct" :compile) will compile up everything. Or use (asdf:oos 'asdf:load-op :oct)
|
|
|
1. (mk:oos "oct-test" :compile) will compile up some simple tests. (qdi::all-tests) will run a series of tests. The accuracy of the results should be on the order of about 200 bits or more. There are a few cases where accuracy is much less than this, but that is due to the algorithm. If you have a copy of RT, you should run (rt:do-tests) to run the tests. All tests should pass.
|
|
|
## Using Oct
|
... | ... | @@ -86,41 +86,47 @@ Here are some simple benchmarks on the performance of this quad-double implement |
|
|
|
|
|
Here are some timing results using CMUCL on a 1.5 GHz UltraSparc IIIi
|
|
|
|
|
|
Operation %quad-double QD-REAL Notes
|
|
|
Addition 120 240
|
|
|
Multiplication 390 660
|
|
|
Division 1100 1450
|
|
|
Square root 13400 13600 UltraSparc has a FP sqrt instruction
|
|
|
|Operation|%quad-double|QD-REAL|Notes|
|
|
|
|---------|------------|-------|-----|
|
|
|
|Addition |120 |240|
|
|
|
|Multiplication |390 |660|
|
|
|
|Division |1100 |1450|
|
|
|
|Square root |13400 |13600|UltraSparc has a FP sqrt instruction|
|
|
|
|
|
|
Here are some timing results using CMUCL with SSE2 support on a 3.06 GHz Core i3
|
|
|
|
|
|
Operation %quad-double QD-REAL Notes
|
|
|
Addition 288 390
|
|
|
Multiplication 536 673
|
|
|
Division 2528 2785
|
|
|
Square root 3572 3739
|
|
|
|Operation|%quad-double|QD-REAL|Notes|
|
|
|
|---------|------------|-------|-----|
|
|
|
|Addition |288 |390|
|
|
|
|Multiplication |536 |673|
|
|
|
|Division |2528 |2785|
|
|
|
|Square root |3572 |3739|
|
|
|
|
|
|
Hida's QD package has a few timing tests. The lisp equivalent was written and here are the timing results. Note that the Lisp equivalent tried to be exactly the same as the QD reference, but no guarantees on that.
|
|
|
|
|
|
Test QD Oct Relative speed Oct/QD
|
|
|
add 0.236 1.16 4.91
|
|
|
mul 0.749 1.54 2.06
|
|
|
div 3.00 3.11 1.03
|
|
|
sqrt 10.57 12.2 1.15
|
|
|
sin 57.33 64.5 1.12
|
|
|
log 194 119 0.613
|
|
|
|Test|QD|Oct|Relative speed Oct/QD|
|
|
|
|----|--|---|---------------------|
|
|
|
|add |0.236 |1.16 |4.91|
|
|
|
|mul |0.749 |1.54 |2.06|
|
|
|
|div |3.00 |3.11 |1.03|
|
|
|
|sqrt |10.57 |12.2 |1.15|
|
|
|
|sin |57.33 |64.5 |1.12|
|
|
|
|log |194 |119 |0.613|
|
|
|
|
|
|
The second and third columns are microsec per operation. The last column is the relative time of Oct vs QD. All of these were run on a 1.5 GHz Ultrasparc III. Sun Studio 11 was used to compile the C code. CMUCL 2007-10 was used for the Lisp code.
|
|
|
|
|
|
It's surprising that Oct does as well as it does. To be fair, the times for Oct include the cost of CLOS dispatch since QD uses templates and classes in the tests. Except for add and mul, QD and Oct are within a few percent. The sin test is a bit slower in Oct. I don't know why, but the test did include the accurate argument reduction. The log test is quite a bit faster for Oct. This is probably due to using a different algorithm. QD uses a Newton iteration to compute the log. Oct uses Halley's iteration.
|
|
|
|
|
|
## Mailing Lists
|
|
|
Oct-devel
|
|
|
* [Oct-devel](http://www.common-lisp.net/mailman/listinfo/oct-devel)
|
|
|
for developers
|
|
|
Oct-cvs
|
|
|
* [Oct-cvs](http://www.common-lisp.net/mailman/listinfo/oct-cvs)
|
|
|
CVS log feed.
|
|
|
Oct-announce
|
|
|
* [Oct-announce](http://www.common-lisp.net/mailman/listinfo/oct-announce)
|
|
|
for announcements.
|
|
|
|
|
|
## Download
|
|
|
Currently, there are no official releases. However, you may find occasional snapshots of the sources here.
|
|
|
Currently, there are no official releases. However, you may find occasional snapshots of the sources [here](http://common-lisp.net/project/oct/snapshots).
|
|
|
|
|
|
## Known Issues
|
|
|
* There is a known issue with Oct on x86 machines. Some Lisp's set up the FPU to use a rounding mode of 64-bits. That is, it sets the rounding assuming all arithmetic is using double extended floating-point registers (80-bits). However, since Oct is using double precision floats, this will cause bad things to happen. Rounding will be done incorrectly so incorrect result may be returned. The rounding mode must be set to 53 bits (double precision floats).
|
... | ... | |