GitHub user jacobwil opened a pull request:
https://github.com/apache/incubator-pirk/pull/88
[wip] Jnagmp for modular multiply, gcd, and exactDivide.
Today I submitted [a pull request to Square's
JNA-GMP](https://github.com/square/jna-gmp/pull/17) which adds modular
multiplication, gcd, and exactDivide to JNA-GMP. This library lets us take
advantage of the GNU Multiple Precision Arithmetic Library's high performance
integer math functions.
Pending acceptance of my PR into JNA-GMP (hopefully) and a release, I have
modified the pom files to pull an updated JNA-GMP jar out of my personal github
repo. I don't intend for the pom files to be accepted into master in this state
but wanted to make the wip available for everyone to try if they want.
Benchmark results:
Benchmark Mode Cnt Score
Error Units
ExactDivideBenchmark.testWithGMP thrpt 200 110961.159 ±
1071.711 ops/s
ExactDivideBenchmark.testWithoutGMP thrpt 200 53641.770 ±
267.455 ops/s
GCDBenchmark.testWithGMP thrpt 200 24121.188 ±
144.105 ops/s
GCDBenchmark.testWithoutGMP thrpt 200 1243.952 ±
7.829 ops/s
ModBenchmark.testWithGMP thrpt 200 93148.587 ±
762.959 ops/s
ModBenchmark.testWithoutGMP thrpt 200 2300046.853 ±
267769.213 ops/s
ModularInverseBenchmark.testWithGMP thrpt 200 9891.903 ±
38.648 ops/s
ModularInverseBenchmark.testWithoutGMP thrpt 200 390.049 ±
1.966 ops/s
ModularMultiplyBenchmark.testWithGMP thrpt 200 36154.112 ±
219.346 ops/s
ModularMultiplyBenchmark.testWithoutGMP thrpt 200 15777.195 ±
100.081 ops/s
MultiplyBenchmark.testWithGMP thrpt 200 102739.040 ±
522.167 ops/s
MultiplyBenchmark.testWithoutGMP thrpt 200 229137.717 ±
658.034 ops/s
PaillierBenchmark.testWithGMP thrpt 200 26.943 ±
0.122 ops/s
PaillierBenchmark.testWithGMPConstantTime thrpt 200 19.695 ±
0.078 ops/s
PaillierBenchmark.testWithoutGMP thrpt 200 4.573 ±
0.012 ops/s
Since modularMultiply is a major operation in the wideskies algorithm the
1.3x speedup we see is a huge win.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/jacobwil/incubator-pirk
JNAGMPForModularMultiply
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/incubator-pirk/pull/88.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #88
----
commit ab4363990705a9346caf927831cda10ee4763a84
Author: Jacob <[email protected]>
Date: 2016-08-05T15:51:44Z
Renamed ModPowAbstraction to IntegerMathAbstraction, added new
functionality for using JNA-GMP to execute modular multiplication.
commit a1360d49afc83e1b686b51774558be77359f4859
Author: Jacob <[email protected]>
Date: 2016-08-05T15:53:25Z
Add benchmarks for the new functionality of IntegerMathAbstraction
commit ea0a7b978eae9d9d365d21a7449d492f8964bd90
Author: Jacob <[email protected]>
Date: 2016-08-05T15:56:31Z
Update uses of ModPowAbstraction to new name and convert uses of BigInteger
modular multiply and modular inverse to use IntegerMathAbstraction
commit bc588763dd7351beed686360eb8fdce31ddbec08
Author: Jacob <[email protected]>
Date: 2016-08-05T16:30:11Z
Added documentation for new classes
commit 8cb3a2b827442331d85f5a3b146c5e371044b87a
Author: Jacob <[email protected]>
Date: 2016-08-05T16:41:52Z
Add properties paillier.useGMPForModularMultiply and
paillier.useGMPForModularInverse. Update formatting
commit b7daed04ab4f952449141869c63a0433965a4b4f
Author: Jacob <[email protected]>
Date: 2016-08-05T16:42:41Z
Update the test suite to use IntegerMathAbstraction
commit 2fdcee4859915a4139daea14cc7d7a7b404d39d3
Author: Jacob Wilder <[email protected]>
Date: 2016-08-06T16:04:45Z
Updated pom files to pull the custom jnagmp 1.1.1-SNAPSHOT jar from
jacobwil's github
commit 73eacc21258a3228d9c0fdfa2c028dcf6cdba43b
Author: Jacob Wilder <[email protected]>
Date: 2016-08-06T16:23:31Z
Merge with master. Mostly documentation changes (which are now out of date)
but also absorb changes to DataSchemaLoader and QuerySchemaLoader.
commit fdd7f7533c9049417c9e4c9021f8d17668d860df
Author: Jacob Wilder <[email protected]>
Date: 2016-08-14T18:21:06Z
Fixed junit error in dependencies for pom-with-benchmarks.xml
commit 2c4dd8cf40c25096925f0202a3557bc150660d09
Author: Jacob Wilder <[email protected]>
Date: 2016-08-15T20:32:04Z
Merge changes from upstream master
commit da8544184b66aa390c96c0d4c281b7da4659fcd1
Author: Jacob Wilder <[email protected]>
Date: 2016-08-16T14:38:38Z
Add gcd and exactDivide to IntegerMathAbstraction. Add configuration
properties to pirk.properties. Make use of new methods in Paillier.java. Update
PaillierBenchmark to set all GMP options instead of just GMP modPow options.
commit e983e3dd5635b60e0845978640807bf13a00b4df
Author: Jacob Wilder <[email protected]>
Date: 2016-08-18T16:16:52Z
Merge with upstream master
commit c1e5870193a2a5e1c61b3c430a5c5f384fc58beb
Author: Jacob Wilder <[email protected]>
Date: 2016-08-18T17:24:11Z
Moved the two unmerged benchmarks to the new benchmarks location.
commit f99ca4475fa537bb375c3aaf2a31d4490aa99dbb
Author: Jacob Wilder <[email protected]>
Date: 2016-08-18T18:08:39Z
Added ExactDivide and GCD benchmarks
commit 71fc2826bb54fa1de02198720537c9276d7323ce
Author: Jacob Wilder <[email protected]>
Date: 2016-08-18T18:37:13Z
Tried to update the benchmarks pom to Java 8 but nothing works now. Not
sure exactly when the break happened.
commit 7b9d2f5dc7682bfdc542c8e3f1404ca4d4b88bfa
Author: Jacob Wilder <[email protected]>
Date: 2016-08-18T19:59:48Z
Moved JMH benchmarks back into the main source tree since they do not work
within the test source tree
commit 2bf4855da667318529a055920b13d349e2d7a53f
Author: Jacob Wilder <[email protected]>
Date: 2016-08-18T20:03:54Z
Merge changes from upstream master.
commit 6e687c0265609655a883aaf23a8129723014ef8f
Author: Jacob Wilder <[email protected]>
Date: 2016-08-18T21:09:26Z
Added Mod and Multiply to IntegerMathAbstraction, wrote benchmarks.
Converted usages of IntegerMathAbstraction in Paillier to import statics.
commit 4b425bb1bcbed707f2741fbddf6d0431ba3ff7fb
Author: Jacob Wilder <[email protected]>
Date: 2016-08-20T02:51:31Z
More benchmarks to detail modular multiply performance using different
strategies (all worse than the original strategy but now with a way to prove it
on an individual system). Improved documentation.
commit 6543e5d839f8f8b6503b6cf4fee07f2257360a06
Author: Jacob Wilder <[email protected]>
Date: 2016-08-20T02:59:25Z
Merge with upstream master
commit 2a9a826e976db121e141a412f3db10f730a5710f
Author: Jacob Wilder <[email protected]>
Date: 2016-08-24T02:26:54Z
Merging with upstream master
commit dd182e78a80b7a3e5079dc7ba0ece86b2af00aae
Author: Jacob Wilder <[email protected]>
Date: 2016-08-25T15:38:42Z
Merge branch 'master' of github.com:apache/incubator-pirk into
JNAGMPForModularMultiply
commit 51de33efc9a105ded42532e1320e92941334f527
Author: Jacob Wilder <[email protected]>
Date: 2016-08-28T04:40:55Z
Merge branch 'master' of github.com:apache/incubator-pirk into
JNAGMPForModularMultiply
commit e5c140b6da3dc43ad524365fa5575c09cdb2b1b1
Author: Jacob Wilder <[email protected]>
Date: 2016-09-10T01:33:22Z
Fix pom-with-benchmarks, update JMH version
commit 53ae4254fdd61d960c07af7039a7ea385b16ac0b
Author: Jacob Wilder <[email protected]>
Date: 2016-09-10T01:55:05Z
Merge branch 'master' of github.com:apache/incubator-pirk into
JNAGMPForModularMultiply
----
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---