Skip to content

Commit

Permalink
Merge branch 'master' of github.com:lemire/Code-used-on-Daniel-Lemire…
Browse files Browse the repository at this point in the history
…-s-blog
  • Loading branch information
lemire committed Dec 17, 2014
2 parents c37b8f3 + 0c2f14e commit c61bc08
Show file tree
Hide file tree
Showing 6 changed files with 104 additions and 5 deletions.
19 changes: 16 additions & 3 deletions 2014/12/17/Benchmark.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,35 @@ public class Benchmark {

public static void main(String[] args) {
int N = 10000000;
ReverseFastSummer refs = new ReverseFastSummer(N);
FastSummer fs = new FastSummer(N);
BasicSummer gs = new BasicSummer(new NaiveArray(N));
SmartSummer ss = new SmartSummer(new NaiveArray(N));
ReverseSmartSummer ress = new ReverseSmartSummer(new NaiveArray(N));
SillySummer sis = new SillySummer(new NaiveArray(N));
FixedSummer ffs = new FixedSummer(N);
ReverseFixedSummer reffs = new ReverseFixedSummer(N);
int bogus = 0;
for(int k = 0; k < 100; ++k) {
long t0 = System.nanoTime();
bogus += refs.compute();
long t1 = System.nanoTime();
bogus += fs.compute();
long t2 = System.nanoTime();
bogus += gs.compute();
long t3 = System.nanoTime();
bogus += ss.compute();
long t4 = System.nanoTime();
bogus += ffs.compute();
bogus += ress.compute();
long t5 = System.nanoTime();
System.out.println((t2-t1)/N+" "+(t3-t2)/N+" "+(t4-t3)/N+" "+(t5-t4)/N);
bogus += sis.compute();
long t6 = System.nanoTime();
bogus += ffs.compute();
long t7 = System.nanoTime();
bogus += reffs.compute();
long t8 = System.nanoTime();
System.out.println("refast fast basic smart resmart silly fixed ");
System.out.println((t1-t0)*1.0/N+" "+(t2-t1)*1.0/N+" "+(t3-t2)*1.0/N+" "+(t4-t3)*1.0/N+" "+(t5-t4)*1.0/N+" "+(t6-t5)*1.0/N+" "+(t7-t6)*1.0/N+" "+(t8-t7)*1.0/N);
}
}
}
}
3 changes: 1 addition & 2 deletions 2014/12/17/NaiveArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ public NaiveArray(int cap) {
array = new int[cap];
}


public int get(int i) {
return array[i];
}
Expand All @@ -17,4 +16,4 @@ public void set(int i, int x) {
public int size() {
return array.length;
}
}
}
16 changes: 16 additions & 0 deletions 2014/12/17/ReverseFastSummer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
public class ReverseFastSummer {

int[] array;
public ReverseFastSummer(int cap) {
array = new int[cap];
}

public int compute() {
for(int k = array.length - 1 ; k >=0; --k)
array[k] = k;
int sum = 0;
for(int k = array.length - 1 ; k >=0; --k)
sum += array[k];
return sum;
}
}
18 changes: 18 additions & 0 deletions 2014/12/17/ReverseFixedSummer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
public final class ReverseFixedSummer {
protected final NaiveArray array;

public ReverseFixedSummer(int cap) {
array = new NaiveArray(cap);
}


public int compute() {
for(int k = array.size() - 1; k >=0 ; --k)
array.set(k,k);
int sum = 0;
for(int k = array.size() - 1; k >=0 ; --k)
sum += array.get(k);
return sum;
}

}
27 changes: 27 additions & 0 deletions 2014/12/17/ReverseSmartSummer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
public class ReverseSmartSummer {
protected Array array;

public ReverseSmartSummer(Array backend) {
array = backend;
}


public int compute() {
if(array instanceof NaiveArray) {
int[] back = ((NaiveArray) array).array;
for(int k = back.length - 1; k >= 0; --k)
back[k] = k;
int sum = 0;
for(int k = back.length - 1; k >= 0; --k)
sum += back[k];
return sum;
}
for(int k = array.size() - 1; k >= 0; --k)
array.set(k,k);
int sum = 0;
for(int k = 0; k < array.size(); --k)
sum += array.get(k);
return sum;
}

}
26 changes: 26 additions & 0 deletions 2014/12/17/SillySummer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
public class SillySummer {
protected Array array;

public SillySummer(Array backend) {
array = backend;
}


public int compute() {
if(array instanceof NaiveArray) {
for(int k = 0; k < array.size(); ++k)
array.set(k,k);
int sum = 0;
for(int k = 0; k < array.size(); ++k)
sum += array.get(k);
return sum;
}
for(int k = 0; k < array.size(); ++k)
array.set(k,k);
int sum = 0;
for(int k = 0; k < array.size(); ++k)
sum += array.get(k);
return sum;
}

}

0 comments on commit c61bc08

Please sign in to comment.