Skip to content

Instantly share code, notes, and snippets.

@pnkfelix
Created March 13, 2013 22:12
Show Gist options
  • Save pnkfelix/5156873 to your computer and use it in GitHub Desktop.
Save pnkfelix/5156873 to your computer and use it in GitHub Desktop.
ParJS nbody with fixed (and reset) seed, on a variety of input sizes: 1K, 1.5K, 2K, ..., 8K, 8.5K
OVERVIEW
--------
I grabbed http://davidbau.com/encode/seedrandom.js and threw it into parjs-benchmarks. (Can we just add it? Its license looks like it is likely to be compatible, but IANAL.) Then I loaded the file, and changed `emulateNBody` to set the seed before each run:
Here's the description of the concrete changes I made to use the seed and iterate on various workloads.
% diff --git a/js/src/parjs-benchmarks/nbody.js b/js/src/parjs-benchmarks/nbody.js
index 1a0195e..aba2cef 100644
--- a/js/src/parjs-benchmarks/nbody.js
+++ b/js/src/parjs-benchmarks/nbody.js
@@ -3,6 +3,7 @@
//
load(libdir + "util.js");
+load(libdir + "seedrandom.js");
var NBody = {
Constant: {
@@ -459,6 +460,7 @@ var NBody = {
};
function emulateNBody(mode, numBodies, ticks) {
+ Math.seedrandom('yay.');
NBody.init(mode, numBodies);
for (var i = 0; i < ticks; i++) {
//var start = Date.now();
@@ -474,6 +476,12 @@ function emulateNBody(mode, numBodies, ticks) {
const NUMBODIES = 4000;
const TICKS = 10;
-benchmark("NBODY", 1, DEFAULT_MEASURE,
- function () { emulateNBody("seq", NUMBODIES, TICKS); },
- function () { emulateNBody("par", NUMBODIES, TICKS); });
+for (var k=1; k < 9; k++) {
+ benchmark("NBODY_"+k+"K", 1, DEFAULT_MEASURE,
+ function () { emulateNBody("seq", k*1000, TICKS); },
+ function () { emulateNBody("par", k*1000, TICKS); });
+
+ benchmark("NBODY_"+k+".5K", 1, DEFAULT_MEASURE,
+ function () { emulateNBody("seq", k*1000+500, TICKS); },
+ function () { emulateNBody("par", k*1000+500, TICKS); });
+}
SUMMARY
-------
NBODY_1K IMPROVEMENT : 55%
NBODY_1.5K IMPROVEMENT : 58%
NBODY_2K IMPROVEMENT : 63%
NBODY_2.5K IMPROVEMENT : 69%
NBODY_3K IMPROVEMENT : 70%
NBODY_3.5K IMPROVEMENT : 72%
NBODY_4K IMPROVEMENT : 72%
NBODY_4.5K IMPROVEMENT : 70%
NBODY_5K IMPROVEMENT : 71%
NBODY_5.5K IMPROVEMENT : 60%
NBODY_6K IMPROVEMENT : 24%
NBODY_6.5K IMPROVEMENT : 36%
NBODY_7K IMPROVEMENT : 0%
NBODY_7.5K IMPROVEMENT : 18%
NBODY_8K IMPROVEMENT : 18%
NBODY_8.5K IMPROVEMENT : -18%
FULL TRANSCRIPT
---------------
../../../objdir-opt-js/js -e 'var libdir="./"; var MODE="compare";' nbody.js
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_1K SEQUENTIAL MEASUREMENT 0: 164
NBODY_1K SEQUENTIAL MEASUREMENT 1: 168
NBODY_1K SEQUENTIAL MEASUREMENT 2: 162
NBODY_1K SEQUENTIAL AVERAGE: 164.66666666666666
NBODY_1K PARALLEL MEASUREMENT 0: 123
NBODY_1K PARALLEL MEASUREMENT 1: 49
NBODY_1K PARALLEL MEASUREMENT 2: 50
NBODY_1K PARALLEL AVERAGE : 74
NBODY_1K SEQ/PAR RATIO : 2.225225225225225
NBODY_1K PAR/SEQ RATIO : 0.4493927125506073
NBODY_1K IMPROVEMENT : 55%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_1.5K SEQUENTIAL MEASUREMENT 0: 364
NBODY_1.5K SEQUENTIAL MEASUREMENT 1: 377
NBODY_1.5K SEQUENTIAL MEASUREMENT 2: 363
NBODY_1.5K SEQUENTIAL AVERAGE: 368
NBODY_1.5K PARALLEL MEASUREMENT 0: 184
NBODY_1.5K PARALLEL MEASUREMENT 1: 140
NBODY_1.5K PARALLEL MEASUREMENT 2: 134
NBODY_1.5K PARALLEL AVERAGE : 152.66666666666666
NBODY_1.5K SEQ/PAR RATIO : 2.4104803493449785
NBODY_1.5K PAR/SEQ RATIO : 0.41485507246376807
NBODY_1.5K IMPROVEMENT : 58%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_2K SEQUENTIAL MEASUREMENT 0: 646
NBODY_2K SEQUENTIAL MEASUREMENT 1: 657
NBODY_2K SEQUENTIAL MEASUREMENT 2: 637
NBODY_2K SEQUENTIAL AVERAGE: 646.6666666666666
NBODY_2K PARALLEL MEASUREMENT 0: 273
NBODY_2K PARALLEL MEASUREMENT 1: 220
NBODY_2K PARALLEL MEASUREMENT 2: 216
NBODY_2K PARALLEL AVERAGE : 236.33333333333334
NBODY_2K SEQ/PAR RATIO : 2.7362482369534553
NBODY_2K PAR/SEQ RATIO : 0.36546391752577323
NBODY_2K IMPROVEMENT : 63%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_2.5K SEQUENTIAL MEASUREMENT 0: 1006
NBODY_2.5K SEQUENTIAL MEASUREMENT 1: 1036
NBODY_2.5K SEQUENTIAL MEASUREMENT 2: 1010
NBODY_2.5K SEQUENTIAL AVERAGE: 1017.3333333333334
NBODY_2.5K PARALLEL MEASUREMENT 0: 316
NBODY_2.5K PARALLEL MEASUREMENT 1: 303
NBODY_2.5K PARALLEL MEASUREMENT 2: 311
NBODY_2.5K PARALLEL AVERAGE : 310
NBODY_2.5K SEQ/PAR RATIO : 3.281720430107527
NBODY_2.5K PAR/SEQ RATIO : 0.30471821756225426
NBODY_2.5K IMPROVEMENT : 69%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_3K SEQUENTIAL MEASUREMENT 0: 1443
NBODY_3K SEQUENTIAL MEASUREMENT 1: 1458
NBODY_3K SEQUENTIAL MEASUREMENT 2: 1441
NBODY_3K SEQUENTIAL AVERAGE: 1447.3333333333333
NBODY_3K PARALLEL MEASUREMENT 0: 420
NBODY_3K PARALLEL MEASUREMENT 1: 417
NBODY_3K PARALLEL MEASUREMENT 2: 430
NBODY_3K PARALLEL AVERAGE : 422.3333333333333
NBODY_3K SEQ/PAR RATIO : 3.4269928966061562
NBODY_3K PAR/SEQ RATIO : 0.2918010133578996
NBODY_3K IMPROVEMENT : 70%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_3.5K SEQUENTIAL MEASUREMENT 0: 1958
NBODY_3.5K SEQUENTIAL MEASUREMENT 1: 1986
NBODY_3.5K SEQUENTIAL MEASUREMENT 2: 2046
NBODY_3.5K SEQUENTIAL AVERAGE: 1996.6666666666667
NBODY_3.5K PARALLEL MEASUREMENT 0: 559
NBODY_3.5K PARALLEL MEASUREMENT 1: 541
NBODY_3.5K PARALLEL MEASUREMENT 2: 556
NBODY_3.5K PARALLEL AVERAGE : 552
NBODY_3.5K SEQ/PAR RATIO : 3.6171497584541066
NBODY_3.5K PAR/SEQ RATIO : 0.27646076794657765
NBODY_3.5K IMPROVEMENT : 72%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_4K SEQUENTIAL MEASUREMENT 0: 2538
NBODY_4K SEQUENTIAL MEASUREMENT 1: 2538
NBODY_4K SEQUENTIAL MEASUREMENT 2: 2623
NBODY_4K SEQUENTIAL AVERAGE: 2566.3333333333335
NBODY_4K PARALLEL MEASUREMENT 0: 699
NBODY_4K PARALLEL MEASUREMENT 1: 705
NBODY_4K PARALLEL MEASUREMENT 2: 706
NBODY_4K PARALLEL AVERAGE : 703.3333333333334
NBODY_4K SEQ/PAR RATIO : 3.648815165876777
NBODY_4K PAR/SEQ RATIO : 0.27406156643719964
NBODY_4K IMPROVEMENT : 72%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_4.5K SEQUENTIAL MEASUREMENT 0: 3248
NBODY_4.5K SEQUENTIAL MEASUREMENT 1: 3361
NBODY_4.5K SEQUENTIAL MEASUREMENT 2: 3303
NBODY_4.5K SEQUENTIAL AVERAGE: 3304
NBODY_4.5K PARALLEL MEASUREMENT 0: 1122
NBODY_4.5K PARALLEL MEASUREMENT 1: 889
NBODY_4.5K PARALLEL MEASUREMENT 2: 867
NBODY_4.5K PARALLEL AVERAGE : 959.3333333333334
NBODY_4.5K SEQ/PAR RATIO : 3.4440583738707433
NBODY_4.5K PAR/SEQ RATIO : 0.29035512510088785
NBODY_4.5K IMPROVEMENT : 70%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_5K SEQUENTIAL MEASUREMENT 0: 4209
NBODY_5K SEQUENTIAL MEASUREMENT 1: 4091
NBODY_5K SEQUENTIAL MEASUREMENT 2: 4079
NBODY_5K SEQUENTIAL AVERAGE: 4126.333333333333
NBODY_5K PARALLEL MEASUREMENT 0: 1365
NBODY_5K PARALLEL MEASUREMENT 1: 1045
NBODY_5K PARALLEL MEASUREMENT 2: 1074
NBODY_5K PARALLEL AVERAGE : 1161.3333333333333
NBODY_5K SEQ/PAR RATIO : 3.5530998851894373
NBODY_5K PAR/SEQ RATIO : 0.28144438161402374
NBODY_5K IMPROVEMENT : 71%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_5.5K SEQUENTIAL MEASUREMENT 0: 4598
NBODY_5.5K SEQUENTIAL MEASUREMENT 1: 4509
NBODY_5.5K SEQUENTIAL MEASUREMENT 2: 4472
NBODY_5.5K SEQUENTIAL AVERAGE: 4526.333333333333
NBODY_5.5K PARALLEL MEASUREMENT 0: 1702
NBODY_5.5K PARALLEL MEASUREMENT 1: 1779
NBODY_5.5K PARALLEL MEASUREMENT 2: 1911
NBODY_5.5K PARALLEL AVERAGE : 1797.3333333333333
NBODY_5.5K SEQ/PAR RATIO : 2.518360534124629
NBODY_5.5K PAR/SEQ RATIO : 0.397083732233596
NBODY_5.5K IMPROVEMENT : 60%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_6K SEQUENTIAL MEASUREMENT 0: 5358
NBODY_6K SEQUENTIAL MEASUREMENT 1: 5355
NBODY_6K SEQUENTIAL MEASUREMENT 2: 5376
NBODY_6K SEQUENTIAL AVERAGE: 5363
NBODY_6K PARALLEL MEASUREMENT 0: 3007
NBODY_6K PARALLEL MEASUREMENT 1: 5784
NBODY_6K PARALLEL MEASUREMENT 2: 3356
NBODY_6K PARALLEL AVERAGE : 4049
NBODY_6K SEQ/PAR RATIO : 1.3245245739688811
NBODY_6K PAR/SEQ RATIO : 0.7549878799179564
NBODY_6K IMPROVEMENT : 24%
Warming up sequential runs
.
Measuring sequential runs
Checking correctness
NBODY_6.5K SEQUENTIAL MEASUREMENT 0: 6249
NBODY_6.5K SEQUENTIAL MEASUREMENT 1: 6293
NBODY_6.5K SEQUENTIAL MEASUREMENT 2: 6270
NBODY_6.5K SEQUENTIAL AVERAGE: 6270.666666666667
NBODY_6.5K PARALLEL MEASUREMENT 0: 3999
NBODY_6.5K PARALLEL MEASUREMENT 1: 3790
NBODY_6.5K PARALLEL MEASUREMENT 2: 4109
NBODY_6.5K PARALLEL AVERAGE : 3966
NBODY_6.5K SEQ/PAR RATIO : 1.5811060682467641
NBODY_6.5K PAR/SEQ RATIO : 0.6324686370401871
NBODY_6.5K IMPROVEMENT : 36%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_7K SEQUENTIAL MEASUREMENT 0: 7303
NBODY_7K SEQUENTIAL MEASUREMENT 1: 7342
NBODY_7K SEQUENTIAL MEASUREMENT 2: 7331
NBODY_7K SEQUENTIAL AVERAGE: 7325.333333333333
NBODY_7K PARALLEL MEASUREMENT 0: 3225
NBODY_7K PARALLEL MEASUREMENT 1: 9168
NBODY_7K PARALLEL MEASUREMENT 2: 9416
NBODY_7K PARALLEL AVERAGE : 7269.666666666667
NBODY_7K SEQ/PAR RATIO : 1.0076573891512677
NBODY_7K PAR/SEQ RATIO : 0.9924008008736804
NBODY_7K IMPROVEMENT : 0%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_7.5K SEQUENTIAL MEASUREMENT 0: 8433
NBODY_7.5K SEQUENTIAL MEASUREMENT 1: 8378
NBODY_7.5K SEQUENTIAL MEASUREMENT 2: 8344
NBODY_7.5K SEQUENTIAL AVERAGE: 8385
NBODY_7.5K PARALLEL MEASUREMENT 0: 7235
NBODY_7.5K PARALLEL MEASUREMENT 1: 6723
NBODY_7.5K PARALLEL MEASUREMENT 2: 6667
NBODY_7.5K PARALLEL AVERAGE : 6875
NBODY_7.5K SEQ/PAR RATIO : 1.2196363636363636
NBODY_7.5K PAR/SEQ RATIO : 0.8199165175909362
NBODY_7.5K IMPROVEMENT : 18%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_8K SEQUENTIAL MEASUREMENT 0: 9544
NBODY_8K SEQUENTIAL MEASUREMENT 1: 9509
NBODY_8K SEQUENTIAL MEASUREMENT 2: 9536
NBODY_8K SEQUENTIAL AVERAGE: 9529.666666666666
NBODY_8K PARALLEL MEASUREMENT 0: 7804
NBODY_8K PARALLEL MEASUREMENT 1: 7337
NBODY_8K PARALLEL MEASUREMENT 2: 8111
NBODY_8K PARALLEL AVERAGE : 7750.666666666667
NBODY_8K SEQ/PAR RATIO : 1.2295286426974021
NBODY_8K PAR/SEQ RATIO : 0.8133198083178845
NBODY_8K IMPROVEMENT : 18%
Warming up sequential runs
.
Measuring sequential runs
Measuring parallel runs
Checking correctness
NBODY_8.5K SEQUENTIAL MEASUREMENT 0: 10753
NBODY_8.5K SEQUENTIAL MEASUREMENT 1: 10784
NBODY_8.5K SEQUENTIAL MEASUREMENT 2: 10749
NBODY_8.5K SEQUENTIAL AVERAGE: 10762
NBODY_8.5K PARALLEL MEASUREMENT 0: 12845
NBODY_8.5K PARALLEL MEASUREMENT 1: 12625
NBODY_8.5K PARALLEL MEASUREMENT 2: 12888
NBODY_8.5K PARALLEL AVERAGE : 12786
NBODY_8.5K SEQ/PAR RATIO : 0.8417018614109182
NBODY_8.5K PAR/SEQ RATIO : 1.188069132131574
NBODY_8.5K IMPROVEMENT : -18%
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment