blob: ff62c9cc57c892fdeacf7d0a83edff33adf78f76 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
// Note: The results do not include the pre-processing in the prepare function that is
// necessary for SetLookup but not Iterate. None of the values searched for are in the
// fabricated IN list (i.e. hit rate is 0).
//Machine Info: Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
//tinyInt n=1: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=1 3.29e+03 3.34e+03 3.38e+03 1X 1X 1X
// Iterate n=1 9.48e+03 9.56e+03 9.64e+03 2.88X 2.87X 2.85X
//
//tinyInt n=2: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=2 2.91e+03 2.99e+03 3.02e+03 1X 1X 1X
// Iterate n=2 6.95e+03 7.08e+03 7.14e+03 2.39X 2.37X 2.37X
//
//tinyInt n=3: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=3 2.54e+03 2.6e+03 2.65e+03 1X 1X 1X
// Iterate n=3 4.89e+03 5.01e+03 5.08e+03 1.93X 1.93X 1.92X
//
//tinyInt n=4: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=4 2.89e+03 3e+03 3.04e+03 1X 1X 1X
// Iterate n=4 3.71e+03 3.79e+03 3.84e+03 1.28X 1.26X 1.26X
//
//tinyInt n=5: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=5 2.64e+03 2.74e+03 2.78e+03 1X 1X 1X
// Iterate n=5 3.5e+03 3.57e+03 3.61e+03 1.32X 1.3X 1.3X
//
//tinyInt n=6: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=6 2.62e+03 2.67e+03 2.69e+03 1X 1X 1X
// Iterate n=6 2.73e+03 2.76e+03 2.79e+03 1.04X 1.04X 1.04X
//
//tinyInt n=7: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=7 2.39e+03 2.44e+03 2.46e+03 1X 1X 1X
// Iterate n=7 2.48e+03 2.51e+03 2.54e+03 1.04X 1.03X 1.03X
//
//tinyInt n=8: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=8 2.81e+03 2.85e+03 2.89e+03 1X 1X 1X
// Iterate n=8 2.08e+03 2.12e+03 2.14e+03 0.741X 0.743X 0.741X
//
//tinyInt n=9: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=9 2.66e+03 2.75e+03 2.8e+03 1X 1X 1X
// Iterate n=9 1.69e+03 1.71e+03 1.73e+03 0.635X 0.624X 0.617X
//
//tinyInt n=10: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=10 2.8e+03 2.89e+03 2.92e+03 1X 1X 1X
// Iterate n=10 1.54e+03 1.57e+03 1.58e+03 0.548X 0.543X 0.542X
//
//tinyInt n=400: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=400 2.51e+03 2.61e+03 2.64e+03 1X 1X 1X
// Iterate n=400 84 84.2 85.7 0.0335X 0.0323X 0.0325X
//
//smallInt n=1: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=1 3.16e+03 3.28e+03 3.33e+03 1X 1X 1X
// Iterate n=1 1.03e+04 1.04e+04 1.05e+04 3.27X 3.18X 3.16X
//
//smallInt n=2: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=2 2.94e+03 3.02e+03 3.06e+03 1X 1X 1X
// Iterate n=2 7.03e+03 7.12e+03 7.18e+03 2.39X 2.36X 2.35X
//
//smallInt n=3: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=3 2.64e+03 2.73e+03 2.78e+03 1X 1X 1X
// Iterate n=3 5.33e+03 5.4e+03 5.45e+03 2.02X 1.98X 1.96X
//
//smallInt n=4: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=4 2.96e+03 3.04e+03 3.08e+03 1X 1X 1X
// Iterate n=4 4.06e+03 4.09e+03 4.14e+03 1.37X 1.34X 1.35X
//
//smallInt n=5: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=5 2.72e+03 2.81e+03 2.86e+03 1X 1X 1X
// Iterate n=5 3.59e+03 3.63e+03 3.66e+03 1.32X 1.29X 1.28X
//
//smallInt n=6: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=6 2.68e+03 2.79e+03 2.85e+03 1X 1X 1X
// Iterate n=6 2.9e+03 2.98e+03 3.02e+03 1.08X 1.07X 1.06X
//
//smallInt n=7: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=7 2.35e+03 2.56e+03 2.6e+03 1X 1X 1X
// Iterate n=7 2.63e+03 2.73e+03 2.76e+03 1.12X 1.07X 1.06X
//
//smallInt n=8: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=8 2.78e+03 2.88e+03 2.91e+03 1X 1X 1X
// Iterate n=8 2.33e+03 2.36e+03 2.38e+03 0.839X 0.818X 0.816X
//
//smallInt n=9: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=9 2.76e+03 2.83e+03 2.87e+03 1X 1X 1X
// Iterate n=9 1.79e+03 1.82e+03 1.85e+03 0.648X 0.642X 0.644X
//
//smallInt n=10: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=10 2.83e+03 2.88e+03 2.91e+03 1X 1X 1X
// Iterate n=10 1.61e+03 1.64e+03 1.66e+03 0.567X 0.57X 0.57X
//
//smallInt n=400: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=400 2.62e+03 2.68e+03 2.71e+03 1X 1X 1X
// Iterate n=400 48.7 49.4 49.9 0.0186X 0.0185X 0.0184X
//
//int n=1: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=1 4.66e+03 4.75e+03 4.85e+03 1X 1X 1X
// Iterate n=1 1.03e+04 1.04e+04 1.05e+04 2.21X 2.19X 2.17X
//
//int n=2: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=2 4.1e+03 4.27e+03 4.34e+03 1X 1X 1X
// Iterate n=2 6.62e+03 6.94e+03 7.02e+03 1.61X 1.62X 1.62X
//
//int n=3: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=3 3.78e+03 3.89e+03 3.94e+03 1X 1X 1X
// Iterate n=3 5.21e+03 5.29e+03 5.34e+03 1.38X 1.36X 1.35X
//
//int n=4: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=4 3.16e+03 3.28e+03 3.35e+03 1X 1X 1X
// Iterate n=4 3.9e+03 4e+03 4.07e+03 1.23X 1.22X 1.22X
//
//int n=5: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=5 3.29e+03 3.39e+03 3.45e+03 1X 1X 1X
// Iterate n=5 3.39e+03 3.5e+03 3.53e+03 1.03X 1.03X 1.02X
//
//int n=6: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=6 3.3e+03 3.39e+03 3.44e+03 1X 1X 1X
// Iterate n=6 2.9e+03 2.97e+03 2.99e+03 0.881X 0.874X 0.869X
//
//int n=7: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=7 3.06e+03 3.18e+03 3.21e+03 1X 1X 1X
// Iterate n=7 2.67e+03 2.72e+03 2.74e+03 0.872X 0.855X 0.853X
//
//int n=8: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=8 2.69e+03 2.72e+03 2.75e+03 1X 1X 1X
// Iterate n=8 2.32e+03 2.34e+03 2.36e+03 0.863X 0.862X 0.86X
//
//int n=9: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=9 2.59e+03 2.65e+03 2.7e+03 1X 1X 1X
// Iterate n=9 1.69e+03 1.71e+03 1.73e+03 0.652X 0.647X 0.642X
//
//int n=10: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=10 2.76e+03 2.82e+03 2.85e+03 1X 1X 1X
// Iterate n=10 1.54e+03 1.56e+03 1.58e+03 0.557X 0.554X 0.555X
//
//int n=400: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=400 1.45e+03 1.55e+03 1.57e+03 1X 1X 1X
// Iterate n=400 48.4 48.6 49.3 0.0334X 0.0314X 0.0314X
//
//bigInt n=1: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=1 4.08e+03 4.16e+03 4.23e+03 1X 1X 1X
// Iterate n=1 9.06e+03 9.14e+03 9.24e+03 2.22X 2.2X 2.19X
//
//bigInt n=2: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=2 4.02e+03 4.15e+03 4.24e+03 1X 1X 1X
// Iterate n=2 6.44e+03 6.51e+03 6.58e+03 1.6X 1.57X 1.55X
//
//bigInt n=3: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=3 3.86e+03 3.97e+03 4.03e+03 1X 1X 1X
// Iterate n=3 4.63e+03 4.7e+03 4.76e+03 1.2X 1.18X 1.18X
//
//bigInt n=4: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=4 3.54e+03 3.62e+03 3.7e+03 1X 1X 1X
// Iterate n=4 4.04e+03 4.11e+03 4.13e+03 1.14X 1.13X 1.12X
//
//bigInt n=5: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=5 2.73e+03 2.76e+03 2.79e+03 1X 1X 1X
// Iterate n=5 3.27e+03 3.3e+03 3.34e+03 1.2X 1.19X 1.2X
//
//bigInt n=6: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=6 2.98e+03 3.01e+03 3.04e+03 1X 1X 1X
// Iterate n=6 2.96e+03 2.98e+03 3.02e+03 0.992X 0.991X 0.992X
//
//bigInt n=7: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=7 2.63e+03 2.67e+03 2.7e+03 1X 1X 1X
// Iterate n=7 2.52e+03 2.54e+03 2.57e+03 0.957X 0.951X 0.951X
//
//bigInt n=8: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=8 2.69e+03 2.77e+03 2.81e+03 1X 1X 1X
// Iterate n=8 2.33e+03 2.35e+03 2.38e+03 0.865X 0.849X 0.846X
//
//bigInt n=9: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=9 2.62e+03 2.67e+03 2.7e+03 1X 1X 1X
// Iterate n=9 1.84e+03 1.86e+03 1.88e+03 0.701X 0.695X 0.696X
//
//bigInt n=10: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=10 2.54e+03 2.58e+03 2.62e+03 1X 1X 1X
// Iterate n=10 1.64e+03 1.68e+03 1.69e+03 0.645X 0.65X 0.646X
//
//bigInt n=400: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=400 1.35e+03 1.4e+03 1.42e+03 1X 1X 1X
// Iterate n=400 47.7 48.6 48.8 0.0352X 0.0348X 0.0344X
//
//float n=1: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=1 3.36e+03 3.39e+03 3.42e+03 1X 1X 1X
// Iterate n=1 7.22e+03 7.27e+03 7.34e+03 2.15X 2.14X 2.14X
//
//float n=2: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=2 4.08e+03 4.14e+03 4.19e+03 1X 1X 1X
// Iterate n=2 4.7e+03 4.74e+03 4.77e+03 1.15X 1.14X 1.14X
//
//float n=3: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=3 2.92e+03 2.95e+03 2.98e+03 1X 1X 1X
// Iterate n=3 3.63e+03 3.66e+03 3.7e+03 1.24X 1.24X 1.24X
//
//float n=4: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=4 2.81e+03 2.84e+03 2.87e+03 1X 1X 1X
// Iterate n=4 2.9e+03 2.94e+03 2.97e+03 1.03X 1.03X 1.03X
//
//float n=5: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=5 2.97e+03 3.03e+03 3.07e+03 1X 1X 1X
// Iterate n=5 2.35e+03 2.37e+03 2.4e+03 0.792X 0.782X 0.782X
//
//float n=6: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=6 2.77e+03 2.85e+03 2.88e+03 1X 1X 1X
// Iterate n=6 2.01e+03 2.03e+03 2.04e+03 0.724X 0.71X 0.707X
//
//float n=7: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=7 2.45e+03 2.52e+03 2.61e+03 1X 1X 1X
// Iterate n=7 1.67e+03 1.75e+03 1.77e+03 0.683X 0.696X 0.679X
//
//float n=8: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=8 2.45e+03 2.53e+03 2.56e+03 1X 1X 1X
// Iterate n=8 1.45e+03 1.54e+03 1.56e+03 0.59X 0.607X 0.607X
//
//float n=9: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=9 2.45e+03 2.53e+03 2.56e+03 1X 1X 1X
// Iterate n=9 1.32e+03 1.38e+03 1.4e+03 0.538X 0.547X 0.546X
//
//float n=10: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=10 2.29e+03 2.32e+03 2.35e+03 1X 1X 1X
// Iterate n=10 1.21e+03 1.24e+03 1.25e+03 0.529X 0.535X 0.533X
//
//float n=400: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=400 1.01e+03 1.04e+03 1.08e+03 1X 1X 1X
// Iterate n=400 32.4 32.6 33 0.0321X 0.0313X 0.0305X
//
//double n=1: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=1 2.49e+03 2.52e+03 2.54e+03 1X 1X 1X
// Iterate n=1 7.15e+03 7.26e+03 7.31e+03 2.87X 2.88X 2.88X
//
//double n=2: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=2 2.05e+03 2.08e+03 2.09e+03 1X 1X 1X
// Iterate n=2 4.82e+03 4.97e+03 5.03e+03 2.36X 2.39X 2.4X
//
//double n=3: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=3 2.1e+03 2.14e+03 2.16e+03 1X 1X 1X
// Iterate n=3 3.62e+03 3.67e+03 3.7e+03 1.72X 1.71X 1.71X
//
//double n=4: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=4 2.27e+03 2.29e+03 2.31e+03 1X 1X 1X
// Iterate n=4 2.91e+03 2.94e+03 2.97e+03 1.29X 1.28X 1.29X
//
//double n=5: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=5 2.17e+03 2.2e+03 2.22e+03 1X 1X 1X
// Iterate n=5 2.34e+03 2.37e+03 2.4e+03 1.08X 1.08X 1.08X
//
//double n=6: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=6 1.85e+03 2.04e+03 2.09e+03 1X 1X 1X
// Iterate n=6 1.94e+03 2.02e+03 2.04e+03 1.05X 0.988X 0.976X
//
//double n=7: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=7 2.04e+03 2.06e+03 2.08e+03 1X 1X 1X
// Iterate n=7 1.74e+03 1.75e+03 1.77e+03 0.852X 0.85X 0.851X
//
//double n=8: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=8 2.2e+03 2.23e+03 2.25e+03 1X 1X 1X
// Iterate n=8 1.53e+03 1.55e+03 1.56e+03 0.694X 0.697X 0.695X
//
//double n=9: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=9 2.16e+03 2.23e+03 2.25e+03 1X 1X 1X
// Iterate n=9 1.34e+03 1.38e+03 1.4e+03 0.621X 0.621X 0.619X
//
//double n=10: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=10 2.12e+03 2.18e+03 2.2e+03 1X 1X 1X
// Iterate n=10 1.21e+03 1.24e+03 1.25e+03 0.573X 0.571X 0.569X
//
//double n=400: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=400 1.97e+03 2.01e+03 2.03e+03 1X 1X 1X
// Iterate n=400 31.8 32.5 33 0.0161X 0.0162X 0.0162X
//
//string n=1: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=1 1.69e+03 1.71e+03 1.73e+03 1X 1X 1X
// Iterate n=1 2.25e+03 2.26e+03 2.28e+03 1.33X 1.32X 1.32X
//
//string n=2: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=2 1.5e+03 1.52e+03 1.53e+03 1X 1X 1X
// Iterate n=2 1.19e+03 1.21e+03 1.22e+03 0.795X 0.796X 0.796X
//
//string n=3: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=3 1.42e+03 1.44e+03 1.46e+03 1X 1X 1X
// Iterate n=3 771 797 805 0.544X 0.552X 0.553X
//
//string n=4: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=4 1.5e+03 1.57e+03 1.58e+03 1X 1X 1X
// Iterate n=4 695 706 712 0.464X 0.45X 0.45X
//
//string n=5: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=5 1.43e+03 1.49e+03 1.5e+03 1X 1X 1X
// Iterate n=5 553 563 568 0.386X 0.378X 0.378X
//
//string n=6: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=6 1.28e+03 1.31e+03 1.34e+03 1X 1X 1X
// Iterate n=6 435 441 445 0.341X 0.337X 0.333X
//
//string n=7: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=7 1.33e+03 1.4e+03 1.42e+03 1X 1X 1X
// Iterate n=7 414 420 424 0.311X 0.299X 0.299X
//
//string n=8: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=8 1.52e+03 1.57e+03 1.59e+03 1X 1X 1X
// Iterate n=8 366 371 374 0.241X 0.236X 0.235X
//
//string n=9: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=9 1.49e+03 1.53e+03 1.55e+03 1X 1X 1X
// Iterate n=9 302 304 307 0.202X 0.199X 0.199X
//
//string n=10: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=10 1.4e+03 1.42e+03 1.44e+03 1X 1X 1X
// Iterate n=10 317 320 323 0.226X 0.225X 0.224X
//
//string n=400: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=400 1.36e+03 1.39e+03 1.42e+03 1X 1X 1X
// Iterate n=400 5.38 5.38 5.39 0.00396X 0.00388X 0.0038X
//
//timestamp n=1: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=1 1.79e+03 1.87e+03 1.89e+03 1X 1X 1X
// Iterate n=1 4.33e+03 4.55e+03 4.71e+03 2.41X 2.44X 2.49X
//
//timestamp n=2: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=2 1.69e+03 1.73e+03 1.76e+03 1X 1X 1X
// Iterate n=2 3.42e+03 3.54e+03 3.61e+03 2.02X 2.04X 2.05X
//
//timestamp n=3: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=3 1.54e+03 1.58e+03 1.6e+03 1X 1X 1X
// Iterate n=3 2.49e+03 2.54e+03 2.57e+03 1.61X 1.6X 1.6X
//
//timestamp n=4: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=4 1.53e+03 1.6e+03 1.63e+03 1X 1X 1X
// Iterate n=4 1.9e+03 1.95e+03 1.96e+03 1.24X 1.21X 1.21X
//
//timestamp n=5: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=5 1.61e+03 1.68e+03 1.7e+03 1X 1X 1X
// Iterate n=5 1.57e+03 1.59e+03 1.6e+03 0.976X 0.943X 0.939X
//
//timestamp n=6: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=6 1.47e+03 1.49e+03 1.51e+03 1X 1X 1X
// Iterate n=6 1.32e+03 1.34e+03 1.35e+03 0.893X 0.895X 0.893X
//
//timestamp n=7: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=7 1.44e+03 1.51e+03 1.54e+03 1X 1X 1X
// Iterate n=7 1.12e+03 1.15e+03 1.16e+03 0.776X 0.758X 0.755X
//
//timestamp n=8: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=8 1.65e+03 1.67e+03 1.69e+03 1X 1X 1X
// Iterate n=8 992 1.01e+03 1.02e+03 0.602X 0.604X 0.606X
//
//timestamp n=9: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=9 1.56e+03 1.57e+03 1.59e+03 1X 1X 1X
// Iterate n=9 894 902 912 0.575X 0.573X 0.575X
//
//timestamp n=10: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=10 1.55e+03 1.59e+03 1.61e+03 1X 1X 1X
// Iterate n=10 789 814 824 0.51X 0.511X 0.51X
//
//timestamp n=400: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=400 1.4e+03 1.48e+03 1.5e+03 1X 1X 1X
// Iterate n=400 20.5 20.9 20.9 0.0146X 0.0141X 0.0139X
//
//decimal(4,0) n=1: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=1 1.82e+03 1.89e+03 1.91e+03 1X 1X 1X
// Iterate n=1 6.26e+03 6.43e+03 6.5e+03 3.44X 3.4X 3.4X
//
//decimal(4,0) n=2: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=2 1.69e+03 1.76e+03 1.77e+03 1X 1X 1X
// Iterate n=2 3.99e+03 4.07e+03 4.1e+03 2.36X 2.32X 2.31X
//
//decimal(4,0) n=3: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=3 1.63e+03 1.66e+03 1.68e+03 1X 1X 1X
// Iterate n=3 3.19e+03 3.22e+03 3.26e+03 1.95X 1.94X 1.94X
//
//decimal(4,0) n=4: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=4 1.76e+03 1.81e+03 1.84e+03 1X 1X 1X
// Iterate n=4 2.46e+03 2.52e+03 2.56e+03 1.4X 1.39X 1.39X
//
//decimal(4,0) n=5: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=5 1.64e+03 1.69e+03 1.7e+03 1X 1X 1X
// Iterate n=5 1.93e+03 1.96e+03 1.98e+03 1.17X 1.16X 1.16X
//
//decimal(4,0) n=6: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=6 1.61e+03 1.65e+03 1.67e+03 1X 1X 1X
// Iterate n=6 1.71e+03 1.74e+03 1.76e+03 1.06X 1.06X 1.06X
//
//decimal(4,0) n=7: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=7 1.53e+03 1.56e+03 1.57e+03 1X 1X 1X
// Iterate n=7 1.53e+03 1.57e+03 1.59e+03 1X 1X 1.01X
//
//decimal(4,0) n=8: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=8 1.69e+03 1.73e+03 1.76e+03 1X 1X 1X
// Iterate n=8 1.4e+03 1.43e+03 1.46e+03 0.829X 0.828X 0.83X
//
//decimal(4,0) n=9: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=9 1.69e+03 1.72e+03 1.74e+03 1X 1X 1X
// Iterate n=9 1.28e+03 1.32e+03 1.34e+03 0.756X 0.766X 0.769X
//
//decimal(4,0) n=10: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=10 1.65e+03 1.69e+03 1.71e+03 1X 1X 1X
// Iterate n=10 1.16e+03 1.22e+03 1.25e+03 0.707X 0.723X 0.729X
//
//decimal(4,0) n=400: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
// (relative) (relative) (relative)
//---------------------------------------------------------------------------------------------------------
// SetLookup n=400 1.52e+03 1.58e+03 1.6e+03 1X 1X 1X
// Iterate n=400 30.6 31.3 31.3 0.0202X 0.0197X 0.0195X
#include <boost/lexical_cast.hpp>
#include <gutil/strings/substitute.h>
#include "exprs/in-predicate.h"
#include "runtime/decimal-value.h"
#include "runtime/string-value.h"
#include "udf/udf-test-harness.h"
#include "util/benchmark.h"
#include "util/cpu-info.h"
#include "common/names.h"
using namespace impala;
using namespace impala_udf;
using namespace strings;
using std::move;
namespace impala {
template<typename T> T MakeAnyVal(int v) {
return T(v);
}
template<> StringVal MakeAnyVal(int v) {
// Leak these strings so we don't have to worry about them going out of scope
string* s = new string();
*s = lexical_cast<string>(v);
return StringVal(reinterpret_cast<uint8_t*>(const_cast<char*>(s->c_str())), s->size());
}
class InPredicateBenchmark {
public:
template<typename T, typename SetType>
struct TestData {
vector<T> anyvals;
vector<AnyVal*> anyval_ptrs;
InPredicate::SetLookupState<SetType> state;
vector<T> search_vals;
int total_found_set;
int total_set;
int total_found_iter;
int total_iter;
};
template<typename T, typename SetType>
static TestData<T, SetType> CreateTestData(int num_values,
const FunctionContext::TypeDesc& type, int num_search_vals = 100) {
srand(time(NULL));
TestData<T, SetType> data;
data.anyvals.resize(num_values);
data.anyval_ptrs.resize(num_values);
for (int i = 0; i < num_values; ++i) {
data.anyvals[i] = MakeAnyVal<T>(rand());
data.anyval_ptrs[i] = &data.anyvals[i];
}
for (int i = 0; i < num_search_vals; ++i) {
data.search_vals.push_back(MakeAnyVal<T>(rand()));
}
FunctionContext* ctx = CreateContext(num_values, type);
vector<AnyVal*> constant_args;
constant_args.push_back(NULL);
for (AnyVal* p : data.anyval_ptrs) constant_args.push_back(p);
UdfTestHarness::SetConstantArgs(ctx, move(constant_args));
InPredicate::SetLookupPrepare<T, SetType>(ctx, FunctionContext::FRAGMENT_LOCAL);
data.state = *reinterpret_cast<InPredicate::SetLookupState<SetType>*>(
ctx->GetFunctionState(FunctionContext::FRAGMENT_LOCAL));
data.total_found_set = data.total_set = data.total_found_iter = data.total_iter = 0;
return data;
}
template<typename T, typename SetType>
static void TestSetLookup(int batch_size, void* d) {
TestData<T, SetType>* data = reinterpret_cast<TestData<T, SetType>*>(d);
for (int i = 0; i < batch_size; ++i) {
for (const T& search_val: data->search_vals) {
BooleanVal found = InPredicate::SetLookup(&data->state, search_val);
if (found.val) ++data->total_found_set;
++data->total_set;
}
}
}
template<typename T, typename SetType>
static void TestIterate(int batch_size, void* d) {
TestData<T, SetType>* data = reinterpret_cast<TestData<T, SetType>*>(d);
for (int i = 0; i < batch_size; ++i) {
for (const T& search_val: data->search_vals) {
BooleanVal found = InPredicate::Iterate(
data->state.type, search_val, data->anyvals.size(), &data->anyvals[0]);
if (found.val) ++data->total_found_iter;
++data->total_iter;
}
}
}
template <typename AnyValType, typename SetType, FunctionContext::Type TypeDesc>
static void RunBenchmark(int n) {
Benchmark suite(Substitute("$0 n=$1", GetTypeName(TypeDesc), n));
FunctionContext::TypeDesc type;
type.type = TypeDesc;
InPredicateBenchmark::TestData<AnyValType, SetType> data =
InPredicateBenchmark::CreateTestData<AnyValType, SetType>(n, type);
suite.AddBenchmark(Substitute("SetLookup n=$0", n),
InPredicateBenchmark::TestSetLookup<AnyValType, SetType>, &data);
suite.AddBenchmark(Substitute("Iterate n=$0", n),
InPredicateBenchmark::TestIterate<AnyValType, SetType>, &data);
cout << suite.Measure() << endl;
}
private:
static FunctionContext* CreateContext(
int num_args, const FunctionContext::TypeDesc& type) {
// Types don't matter (but number of args do)
FunctionContext::TypeDesc ret_type;
vector<FunctionContext::TypeDesc> arg_types(num_args + 1, type);
return UdfTestHarness::CreateTestContext(ret_type, arg_types);
}
static string GetTypeName(FunctionContext::Type type){
switch (type) {
case FunctionContext::TYPE_TINYINT:
return "tinyInt";
case FunctionContext::TYPE_SMALLINT:
return "smallInt";
case FunctionContext::TYPE_INT:
return "int";
case FunctionContext::TYPE_BIGINT:
return "bigInt";
case FunctionContext::TYPE_FLOAT:
return "float";
case FunctionContext::TYPE_DOUBLE:
return "double";
case FunctionContext::TYPE_STRING:
return "string";
case FunctionContext::TYPE_TIMESTAMP:
return "timestamp";
default:
return "Unsupported Type";
}
}
};
template <>
void InPredicateBenchmark::RunBenchmark<DecimalVal, Decimal16Value,
FunctionContext::TYPE_DECIMAL>(int n) {
Benchmark suite(Substitute("decimal(4,0) n=$0", n));
FunctionContext::TypeDesc type;
type.type = FunctionContext::TYPE_DECIMAL;
type.precision = 4;
type.scale = 0;
InPredicateBenchmark::TestData<DecimalVal, Decimal16Value> data =
InPredicateBenchmark::CreateTestData<DecimalVal, Decimal16Value>(n, type);
suite.AddBenchmark(Substitute("SetLookup n=$0", n),
InPredicateBenchmark::TestSetLookup<DecimalVal, Decimal16Value>, &data);
suite.AddBenchmark(Substitute("Iterate n=$0", n),
InPredicateBenchmark::TestIterate<DecimalVal, Decimal16Value>, &data);
cout << suite.Measure() << endl;
}
}
#define RUN_BENCHMARK(AnyValType, SetType, type_desc) \
for (int i = 1; i <= 10; ++i) { \
InPredicateBenchmark::RunBenchmark<AnyValType, SetType, type_desc>(i); \
} \
InPredicateBenchmark::RunBenchmark<AnyValType, SetType, type_desc>(400);
int main(int argc, char **argv) {
CpuInfo::Init();
cout << Benchmark::GetMachineInfo() << endl;
RUN_BENCHMARK(TinyIntVal, int8_t, FunctionContext::TYPE_TINYINT)
RUN_BENCHMARK(SmallIntVal, int16_t, FunctionContext::TYPE_SMALLINT)
RUN_BENCHMARK(IntVal, int32_t, FunctionContext::TYPE_INT)
RUN_BENCHMARK(BigIntVal, int64_t, FunctionContext::TYPE_BIGINT)
RUN_BENCHMARK(FloatVal, float, FunctionContext::TYPE_FLOAT)
RUN_BENCHMARK(DoubleVal, double, FunctionContext::TYPE_DOUBLE)
RUN_BENCHMARK(StringVal, StringValue, FunctionContext::TYPE_STRING)
RUN_BENCHMARK(TimestampVal, TimestampValue, FunctionContext::TYPE_TIMESTAMP)
RUN_BENCHMARK(DecimalVal, Decimal16Value, FunctionContext::TYPE_DECIMAL)
return 0;
}