IP Library › Granted Patent US 9,244,683
Granted Patent B2
US 9,244,683 · App. 13/778,048 · Granted Jan 26, 2016

System, method, and computer program product for implementing large integer operations on a graphics processing unit

Inventors: Justin Paul Luitjens (San Jose, CA); Nathan Craig Luehr (Stanford, CA)
Assignee: NVIDIA Corporation
G06F9/3001G06F8/445G06F7/575
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,244,683
App. No.
13/778,048
Granted
Jan 26, 2016
Kind
B2
Abstract

A system, method, and computer program product for generating executable code for performing large integer operations on a parallel processing unit is disclosed. The method includes the steps of compiling a source code linked to a large integer library to generate an executable file and executing the executable file to perform a large integer operation using a parallel processing unit. The large integer library includes functions for processing large integers that are optimized for the parallel processing unit.

Claims (47)

1. A method, comprising:

compiling, via a processor, a source code linked to a large integer library to generate an executable file; and

executing, via the processor, the executable file to perform a large integer operation using a parallel processing unit,

wherein the large integer library includes functions for processing large integers that are optimized for the parallel processing unit, and wherein the functions include at least one function for an addition operation that generates a large integer result by summing a first large integer operand and a second large integer operand, the addition operation performed, at least in part, by the parallel processing unit by:

dividing each of the first large integer operand and the second large integer operand into a plurality of portions, wherein a size of each portion in the plurality of portions is less than or equal to an integer pipeline width in the cores of the parallel processing unit;

for each corresponding pair of portions divided from the first large integer operand and the second large integer operand, summing the portion from the first large integer operand to the portion from the second large integer operand to generate a result associated with the corresponding pair of portions;

determining whether the result for each corresponding pair of portions generates a early bit; and

propagating the carry bits generated by summing each corresponding pair of portions in the result.

2. The method of claim 1 , wherein each of the large integers comprise at least 128 bits.

3. The method of claim 1 , wherein each of the large integers comprise greater than 1024 bits.

4. The method of claim 1 , wherein the large integer library is included as a header file linked to the source code.

5. The method of claim 1 , wherein the large integer library is a binary file that is dynamically linked to the source code.

6. The method of claim 1 , wherein the functions for processing large integers are optimized for the parallel processing unit based on a number of cores within the parallel processing unit.

7. The method of claim 6 , wherein the large integer operation is performed by:

loading the first large integer operand and the second large integer operand into a local memory associated with the parallel processing unit; and

executing a plurality of threads on at least two cores in parallel to generate the result for the large integer operation.

8. The method of claim 1 , wherein the large integer library comprises an addition operation, a subtraction operation, a multiplication operation, a swap operation, a logical OR operation, and a logical AND operation.

9. A non-transitory computer-readable storage medium storing instructions that, when executed by a processor, cause the processor to perform steps comprising:

compiling, via a processor, a source code linked to a large integer library to generate an executable file; and

executing, via the processor, the executable file to perform a large integer operation using a parallel processing unit,

wherein the large integer library includes functions for processing large integers that are optimized for the parallel processing unit, and wherein the functions include at least one function for an addition operation that generates a large integer result by summing a first large integer operand and a second large integer operand, the addition operation performed, at least in part, by the parallel processing unit by:

dividing each of the first large integer operand and the second large integer operand into a plurality of portions, wherein a size of each portion in the plurality of portions is less than or equal to an integer pipeline width in the cores of the parallel processing unit;

for each corresponding pair of portions divided from the first large integer operand and the second large integer operand, summing the portion from the first large integer operand to the portion from the second large integer operand to generate a result associated with the corresponding pair of portions;

determining whether the result for each corresponding pair of portions generates a carry bit; and

propagating the carry bits generated by summing each corresponding pair of portions in the result.

10. The computer-readable storage medium of claim 9 , wherein the large integer library is included as a header file linked to the source code.

11. The computer-readable storage medium of claim 9 , wherein the functions for processing large integers are optimized for the parallel processing unit based on a number of cores within the parallel processing unit.

12. The computer-readable storage medium of claim 11 , wherein the large integer operation is performed by:

loading the first large integer operand and the second large integer operand into a local memory associated with the parallel processing unit; and

executing a plurality of threads on at least two cores in parallel to generate the result for the large integer operation.

13. A system, comprising;

a memory storing a large integer library and a source code linked to the large integer library;

a processor configured to:

compile the source code linked to a large integer to generate an executable file, and

execute the executable file to perform a large integer operation utilizing a parallel processing unit; and

the parallel processing unit configured to perform large integer operations,

wherein the large integer library includes functions for processing large integers that are optimized for the parallel processing unit, and wherein the functions include at least one function for an addition operation that generates a large integer result by summing a first large integer operand and a second large integer operand, the addition operation performed, at least in part, by the parallel processing unit by:

dividing each of the first large integer operand and the second large integer operand into a plurality of portions, wherein a size of each portion in the plurality of portions is less than or equal to an integer pipeline width in the cores of the parallel processing unit;

for each corresponding pair of portions divided from the first large integer operand and the second large integer operand, summing the portion from the first large integer operand to the portion from the second large integer operand to generate a result associated with the corresponding pair of portions;

determining whether the result for each corresponding pair of portions generates a carry bit; and

propagating the carry bits generated by summing each corresponding pair of portions in the result.

14. The system of claim 13 , wherein the parallel processing unit includes a streaming multiprocessor having a shared mernory accessible by a plurality of cores.

15. The system of claim 14 , wherein the first large integer operand and the second large integer operand are stored in the shared memory.

16. The system of claim 13 , wherein the functions for processing large integers are optimized for the parallel processing unit based on a number of cores within the parallel processing unit.

17. The system of claim 13 , wherein the large integer operation is performed by:

loading the first large integer operand and the second large integer operand into a local memory associated with the parallel processing unit; and

executing a plurality of threads on at least two cores in parallel to generate the result for the large integer operation.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 19, 2014
From: LUITJENS, JUSTIN PAUL; LUEHR, NATHAN CRAIG
To: NVIDIA CORPORATION
Reel/Frame 034687/0869 →
Continuity (1)
Related Publication 20140244703A1 · Aug 28, 2014