|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r48617 - trunk/tools/jam/src
From: grafikrobot_at_[hidden]
Date: 2008-09-05 12:26:46
Author: grafik
Date: 2008-09-05 12:26:45 EDT (Fri, 05 Sep 2008)
New Revision: 48617
URL: http://svn.boost.org/trac/boost/changeset/48617
Log:
Minor perf improvement for bjam by replacing hash function with faster version. Only 1% diff for Boost tree.
Text files modified:
trunk/tools/jam/src/build.jam | 13 ++++++++++++-
trunk/tools/jam/src/hash.c | 29 +++++++++++++++++++++++++++--
2 files changed, 39 insertions(+), 3 deletions(-)
Modified: trunk/tools/jam/src/build.jam
==============================================================================
--- trunk/tools/jam/src/build.jam (original)
+++ trunk/tools/jam/src/build.jam 2008-09-05 12:26:45 EDT (Fri, 05 Sep 2008)
@@ -25,6 +25,11 @@
debug = true ;
}
+if --profile in $(ARGV)
+{
+ profile = true ;
+}
+
# Attempt to generate and/or build the grammar?
if --grammar in $(ARGV)
{
@@ -33,7 +38,8 @@
# Do we need to add a default build type argument?
if ! ( --release in $(ARGV) ) &&
- ! ( --debug in $(ARGV) )
+ ! ( --debug in $(ARGV) ) &&
+ ! ( --profile in $(ARGV) )
{
ARGV += --release ;
}
@@ -171,6 +177,7 @@
:
[ opt --release : -Wl,-x -O3 -finline-functions ]
[ opt --debug : -g -O0 -fno-inline -pg ]
+ [ opt --profile : -Wl,-x -O3 -finline-functions -g -pg ]
-I$(--python-include) -I$(--extra-include)
: -L$(--python-lib[1]) -l$(--python-lib[2]) ;
## GCC 2.x, 3.x, 4.x
@@ -428,6 +435,10 @@
{
locate-target = [ .path $(locate-target)$(.)debug ] ;
}
+if $(profile)
+{
+ locate-target = [ .path $(locate-target)$(.)profile ] ;
+}
else
{
locate-target = [ .path $(locate-target) ] ;
Modified: trunk/tools/jam/src/hash.c
==============================================================================
--- trunk/tools/jam/src/hash.c (original)
+++ trunk/tools/jam/src/hash.c 2008-09-05 12:26:45 EDT (Fri, 05 Sep 2008)
@@ -100,15 +100,40 @@
static void hash_mem_finalizer(char * key, struct hash * hp);
#endif
-static unsigned int hash_keyval( const char * key_ )
+static unsigned int jenkins_one_at_a_time_hash(const unsigned char *key)
+{
+ unsigned int hash = 0;
+ size_t i;
+
+ while ( *key )
+ {
+ hash += *key++;
+ hash += (hash << 10);
+ hash ^= (hash >> 6);
+ }
+ hash += (hash << 3);
+ hash ^= (hash >> 11);
+ hash += (hash << 15);
+ return hash;
+}
+
+static unsigned int knuth_hash(const unsigned char *key)
{
- const unsigned char * key = (const unsigned char *)key_;
unsigned int keyval = *key;
while ( *key )
keyval = keyval * 2147059363 + *key++;
return keyval;
}
+static unsigned int hash_keyval( const char * key_ )
+{
+ /**
+ return knuth_hash((const unsigned char *)key_);
+ /*/
+ return jenkins_one_at_a_time_hash((const unsigned char *)key_);
+ /**/
+}
+
#define hash_bucket(hp,keyval) ((hp)->tab.base + ( (keyval) % (hp)->tab.nel ))
/* Find the hash item for the given data. Returns pointer to the
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk