Source code for our paper "Solving Discrete Logarithms in Smooth-Order Groups with CUDA" from SHARCS 2012. The cuda-11.5 branch will compile on CUDA 11.5 and now runs with two A100 GPUs, though is perhaps not tuned optimally.

Ian Goldberg a1d3f9fa44 Output timestamp and host information to the cout log il y a 14 ans
COPYING e2973619c9 Commit cudadl-0.8 to git il y a 14 ans
Makefile 5c6cb43565 Complete the MPI launcher il y a 14 ans
README 9fca8d29fd cudadl-0.9 il y a 14 ans
controller.cc a1d3f9fa44 Output timestamp and host information to the cout log il y a 14 ans
controller.h edfd20a685 Add new cmdline options to controller il y a 14 ans
controller_main.cc 15901b39d1 Complete the computation of the desired resources for the subproblems il y a 14 ans
cudadl.h 9ca02921e8 An extra argument to worker specifies te CUDA device to use il y a 14 ans
dlrho.cc a1d3f9fa44 Output timestamp and host information to the cout log il y a 14 ans
dpnode.cc c081555e83 Fix the MPI driver to not conflict with libevent il y a 14 ans
dpnode.h 5b62cbb2c4 Split off the three main()s in preparation for MPI wrapper il y a 14 ans
dpnode_main.cc 5b62cbb2c4 Split off the three main()s in preparation for MPI wrapper il y a 14 ans
dpstream.cu 03af039f7f Moved almost all output to #ifdef VERBOSE il y a 14 ans
evutils.cc 0e999113e0 Reconstruct answer and launch new problems il y a 14 ans
evutils.h 4a0de9516a Enable libevent thread safety for the worker il y a 14 ans
gen_N.cc 9fca8d29fd cudadl-0.9 il y a 14 ans
gencios_reg_20 771b13c42c Use macros to include the inline assembly instead of inline functions il y a 14 ans
mpi.cc a1d3f9fa44 Output timestamp and host information to the cout log il y a 14 ans
parrhoasm.cu a1d3f9fa44 Output timestamp and host information to the cout log il y a 14 ans
subproblem.h e5decaf5df Communicate the dpfreq to the workers correctly il y a 14 ans
worker.cc a1d3f9fa44 Output timestamp and host information to the cout log il y a 14 ans
worker.h a1d3f9fa44 Output timestamp and host information to the cout log il y a 14 ans
worker_main.cc a1d3f9fa44 Output timestamp and host information to the cout log il y a 14 ans

README

cudadl-0.9
21 Mar 2012
Ryan Henry and Ian Goldberg
{rhenry,iang}@cs.uwaterloo.ca
http://crysp.uwaterloo.ca/software/

This package contains the source code to our CUDA implementation of
van Oorschot and Wiener's parallel version of the Pollard rho discrete
log algorithm. It is intended for use on 1536-bit moduli that are
RSA numbers with smooth totient; that is, the modulus N=pq, where p and q
are 768-bit primes, and the prime factors of p-1 and q-1 are all
distinct and less then B, for a parameter B. [The value 1536 is
hardcoded as "WORDS = 24" (24*32*2 = 1536) in the Makefile; it is easy
to change this value and recompile if desired.] Note that this means
the totient of N = \phi(N) = (p-1)(q-1) has all prime factors less than
B; that is, \phi(n) is "B-smooth".

Usage:

1. Build the software. You'll need:

NTL
GMP
NVIDIA CUDA Toolkit 3.1
2 M2050 (or other compute capability level 2.0) CUDA cards
[If you have more or just 1, you'll need to modify dlrho.cc,
unfortunately.]

Hopefully just typing "make" should work. It will build gen_N and
dlrho.

2. Create the modulus N as, for example, a 1536-bit RSA number whose
totient is 2^50-smooth:

./gen_N 1536 50 > N

3. Generate a DL problem mod N and solve it:

./dlrho < N

This software is described in "Solving Discrete Logarithms in
Smooth-Order Groups with CUDA", CACR technical report 2012-02,
http://www.cacr.math.uwaterloo.ca/techreports/2012/cacr2012-02.pdf

This program is covered under version 3 of the GNU General Public
Licence; see the file COPYING for more information.

Changelog:

0.9 (21 Mar 2012)
Extend the code to handle smoothness levels (B) larger than 2^60. Now
we can handle up to 2^92. We have successfully run a test with
B = 2^80.

0.8 (23 Jan 2012)
Initial public release