IP Library Granted Patent US 8,756,264
Granted Patent B2
US 8,756,264 · App. 11/716,379 · Granted Jun 17, 2014

Parallel pseudorandom number generation

Inventors: Myles A. Sussman (San Mateo, CA); William Y. Crutchfield (Pleasanton, CA); Matthew N. Papakipos (Palo Alto, CA)
Assignee: Google Inc.
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 8,756,264
App. No.
11/716,379
Granted
Jun 17, 2014
Kind
B2
Abstract

A method of generating pseudo-random numbers on a parallel processing system comprises generating a plurality of sub-streams of pseudo-random numbers, wherein the sub-streams are generated in parallel by one or more co-processors, and providing the plurality of sub-streams to respective processing elements, wherein the respective processing elements employ the plurality of sub-streams to execute an application.

Claims (65)

1. A method of generating pseudo-random numbers, comprising:

in a runtime system configured to run on a parallel-processing computer system that includes a first processor and a plurality of co-processors and memory storing one or more programs for execution by the first processor and the plurality of co-processors,

at runtime:

receiving one or more operation requests from an application, the one or more operation requests comprising requests for a plurality of pseudo-random number sub-streams;

selecting respective ones of the plurality of co-processors for executing the pseudo-random number generators;

generating a plurality of sub-streams of pseudo-random numbers, wherein the sub-streams are generated in parallel by the selected co-processors; and

providing the plurality of sub-streams to respective co-processors, wherein each co-processor is configured to employ one of the plurality of sub-streams to execute the application;

wherein generating the plurality of sub-streams comprises:

in the first processor, storing a state associated with a first element in a respective sub-stream of the plurality of sub-streams;

in the first processor, advancing the state;

providing the advanced state to a respective co-processor of the plurality of co-processors, wherein the respective co-processor calculates a second element in the respective sub-stream in accordance with the advanced state; and

at one of the plurality of co-processors:

computing, for a sub-stream, an index location; and

reading, from an indexed table, a value stored at the computed index location, wherein the indexed table for a respective sub-stream is stored in a texture memory of one of the co-processors that is a graphics processing unit.

2. The method of claim 1 , wherein the first processor is a CPU.

3. The method of claim 2 , wherein the respective co-processor is a GPU.

4. The method of claim 1 , wherein the first processor is a first core of a multi-core CPU.

5. The method of claim 4 , wherein at least one of the plurality of co-processors is a second core of the multi-core CPU.

6. The method of claim 1 , wherein the application is a Monte Carlo simulation.

7. The method of claim 1 , wherein the application is one of stock option pricing, electronic circuit place-and-route, controller optimization, disk scheduling, production planning, analysis of DNA sequence shuffling, data clustering, information retrieval, or cryptography.

8. The method of claim 1 , wherein a respective sub-stream in the plurality of sub-streams is generated by a blocking algorithm wherein the plurality of sub-streams can be cascaded one by one into a random number sequence such that each sub-stream occupies a consecutive portion of the random number sequence.

9. The method of claim 1 , wherein a respective sub-stream in the plurality of sub-streams is generated by a leapfrogging algorithm wherein members of the plurality of sub-streams are evenly distributed within a random number sequence such that any two consecutive members of each sub-stream are separated from each other by a predefined distance within the random number sequence.

10. The method of claim 1 , wherein the selected co-processors are a plurality of graphics processing units.

11. A parallel processing system for generating pseudo-random numbers, comprising:

a first processor;

a plurality of co-processors; and

memory storing at least one program for execution by the first processor and the plurality of co-processors, the at least one program comprising instructions for:

at runtime:

receiving one or more operation requests from an application, the one or more operation requests comprising requests for a plurality of pseudo-random number sub-streams;

selecting respective ones of the plurality of co-processors for executing the pseudo-random number generators;

generating a plurality of sub-streams of pseudo-random numbers, wherein the sub-streams are generated in parallel by the selected co-processors; and

providing the plurality of sub-streams to respective co-processors, wherein each co-processor is configured to employ one of the plurality of sub-streams to execute the application;

wherein generating the plurality of sub-streams comprises:

in the first processor, storing a state associated with a first element in a respective sub-stream of the plurality of sub-streams;

in the first processor, advancing the state;

providing the advanced state to a respective co-processor of the plurality of co-processors, wherein the respective co-processor calculates a second element in the respective sub-stream in accordance with the advanced state; and

at one of the plurality of co-processors:

computing, for a sub-stream, an index location; and

reading, from an indexed table, a value stored at the computed index location, wherein the indexed table for a respective sub-stream is stored in a texture memory of one of the co-processors that is a graphics processing unit.

12. A non-transitory computer readable storage medium storing one or more programs configured to be executed by a parallel processing computer system with a first processor and plurality of co-processors, the one or more programs comprising instructions for:

at runtime:

receiving one or more operation requests from an application, the one or more operation requests comprising requests for a plurality of pseudo-random number sub-streams;

selecting respective ones of the plurality of co-processors for executing the pseudo-random number generators;

generating a plurality of sub-streams of pseudo-random numbers, wherein the sub-streams are generated in parallel by the selected co-processors; and

providing the plurality of sub-streams to respective co-processors, wherein each co-processor is configured to employ one of the plurality of sub-streams to execute the application

wherein generating the plurality of sub-streams comprises:

in the first processor, storing a state associated with a first element in a respective sub-stream of the plurality of sub-streams;

in the first processor, advancing the state;

providing the advanced state to a respective co-processor of the plurality of co-processors, wherein the respective co-processor calculates a second element in the respective sub-stream in accordance with the advanced state; and

at one of the plurality of co-processors:

computing, for a sub-stream, an index location; and

reading, from an indexed table, a value stored at the computed index location, wherein the indexed table for a respective sub-stream is stored in a texture memory of one of the co-processors that is a graphics processing unit.

13. A parallel processing system for generating pseudo-random numbers, comprising:

in a runtime system configured to run on a parallel-processing computer system that includes a first processor and a plurality of co-processors and memory storing one or more programs for execution by the first processor and the plurality of co-processors:

means for, at runtime, receiving one or more operation requests from an application, the one or more operation requests comprising requests for a plurality of pseudo-random number sub-streams;

means for, at runtime, selecting respective ones of the plurality of co-processors for executing the pseudo-random number generators;

means for, at runtime, generating a plurality of sub-streams of pseudo-random numbers, wherein the sub-streams are generated in parallel by the selected co-processors; and

means for, at runtime, providing the plurality of sub-streams to respective co-processors, wherein each co-processor is configured to employ one of the plurality of sub-streams to execute the application;

wherein generating the plurality of sub-streams comprises:

in the first processor, storing a state associated with a first element in a respective sub-stream of the plurality of sub-streams;

in the first processor, advancing the state;

providing the advanced state to a respective co-processor of the plurality of co-processors, wherein the respective co-processor calculates a second element in the respective sub-stream in accordance with the advanced state; and

at one of the plurality of co-processors:

computing, for a sub-stream, an index location; and

reading, from an indexed table, a value stored at the computed index location, wherein the indexed table for a respective sub-stream is stored in a texture memory of one of the co-processors that is a graphics processing unit.

Assignments (3)
CHANGE OF NAME Recorded Oct 2, 2017
From: GOOGLE INC.
To: GOOGLE LLC
Reel/Frame 044277/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 16, 2009
From: PEAKSTREAM, INC.
To: GOOGLE INC.
Reel/Frame 022963/0317 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 25, 2007
From: SUSSMAN, MYLES A.; CRUTCHFIELD, WILLIAM Y.; PAPAKIPOS, MATTHEW N.
To: PEAKSTREAM INC.
Reel/Frame 019346/0393 →
Continuity (3)
Provisional Application 60815532 · Jun 20, 2006
Provisional Application 60903188 · Feb 23, 2007
Related Publication 20070294508A1 · Dec 20, 2007