[
https://issues.apache.org/jira/browse/HBASE-4206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13086526#comment-13086526
]
Ron Yang commented on HBASE-4206:
---------------------------------
Seems about 35% faster on my MBP core i7 osx 10.6:
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)
0% Scenario{vm=java, trial=0, benchmark=JenkinsOld, len=5} 29.96 ns; ?=0.45 ns
@ 10 trials
6% Scenario{vm=java, trial=0, benchmark=JenkinsNew, len=5} 15.03 ns; ?=0.13 ns
@ 3 trials
13% Scenario{vm=java, trial=0, benchmark=JenkinsOld, len=10} 32.73 ns; ?=0.06
ns @ 3 trials
19% Scenario{vm=java, trial=0, benchmark=JenkinsNew, len=10} 17.75 ns; ?=0.04
ns @ 3 trials
25% Scenario{vm=java, trial=0, benchmark=JenkinsOld, len=15} 55.01 ns; ?=0.20
ns @ 3 trials
31% Scenario{vm=java, trial=0, benchmark=JenkinsNew, len=15} 26.48 ns; ?=0.26
ns @ 3 trials
38% Scenario{vm=java, trial=0, benchmark=JenkinsOld, len=20} 59.97 ns; ?=0.17
ns @ 3 trials
44% Scenario{vm=java, trial=0, benchmark=JenkinsNew, len=20} 29.21 ns; ?=0.12
ns @ 3 trials
50% Scenario{vm=java, trial=0, benchmark=JenkinsOld, len=500} 1103.94 ns;
?=5.87 ns @ 3 trials
56% Scenario{vm=java, trial=0, benchmark=JenkinsNew, len=500} 710.87 ns; ?=0.73
ns @ 3 trials
63% Scenario{vm=java, trial=0, benchmark=JenkinsOld, len=1000} 2206.56 ns;
?=5.04 ns @ 3 trials
69% Scenario{vm=java, trial=0, benchmark=JenkinsNew, len=1000} 1400.48 ns;
?=5.44 ns @ 3 trials
75% Scenario{vm=java, trial=0, benchmark=JenkinsOld, len=10000} 21632.90 ns;
?=38.49 ns @ 3 trials
81% Scenario{vm=java, trial=0, benchmark=JenkinsNew, len=10000} 13975.43 ns;
?=65.42 ns @ 3 trials
88% Scenario{vm=java, trial=0, benchmark=JenkinsOld, len=100000} 216426.33 ns;
?=1378.41 ns @ 3 trials
94% Scenario{vm=java, trial=0, benchmark=JenkinsNew, len=100000} 139348.44 ns;
?=594.38 ns @ 3 trials
len benchmark ns linear runtime
5 JenkinsOld 30.0 =
5 JenkinsNew 15.0 =
10 JenkinsOld 32.7 =
10 JenkinsNew 17.7 =
15 JenkinsOld 55.0 =
15 JenkinsNew 26.5 =
20 JenkinsOld 60.0 =
20 JenkinsNew 29.2 =
500 JenkinsOld 1103.9 =
500 JenkinsNew 710.9 =
1000 JenkinsOld 2206.6 =
1000 JenkinsNew 1400.5 =
10000 JenkinsOld 21632.9 ==
10000 JenkinsNew 13975.4 =
100000 JenkinsOld 216426.3 ==============================
100000 JenkinsNew 139348.4 ===================
Caliper benchmark source:
public static class Benchmark6 extends SimpleBenchmark {
@Param({"5", "10", "15", "20", "500", "1000", "10000",
"100000"}) int len;
byte[] bs;
@Override protected void setUp() {
Random r = new Random();
bs = new byte[len];
r.nextBytes(bs);
}
public boolean timeJenkinsOld(int reps) {
int h = 0;
for (int x = 0; x < reps; x++) {
h += JenkinsHashOld.hash(bs, h);
}
return true;
}
public boolean timeJenkinsNew(int reps) {
int h = 0;
JenkinsHashNew jh = new JenkinsHashNew();
for (int x = 0; x < reps; x++) {
h += jh.hash(bs, 0, len, h);
}
return true;
}
}
> jenkins hash implementation uses longs unnecessarily
> ----------------------------------------------------
>
> Key: HBASE-4206
> URL: https://issues.apache.org/jira/browse/HBASE-4206
> Project: HBase
> Issue Type: Improvement
> Components: util
> Reporter: Ron Yang
> Priority: Minor
> Attachments: ryang.patch
>
>
> I don't believe you need to use long for a,b,c and as a result no longer need
> to & against INT_MASK.
> At a minimum the private static longs should be made final, and the "main"
> method should not print the absolute value of the hash but instead use
> something like Integer.toHexString
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira