Github user mengxr commented on a diff in the pull request:

    https://github.com/apache/spark/pull/10786#discussion_r50157642
  
    --- Diff: 
sql/core/src/test/scala/org/apache/spark/sql/execution/BenchmarkWholeStageCodegen.scala
 ---
    @@ -46,15 +47,64 @@ class BenchmarkWholeStageCodegen extends SparkFunSuite {
     
         /*
           Intel(R) Core(TM) i7-4558U CPU @ 2.80GHz
    -      Single Int Column Scan:      Avg Time(ms)    Avg Rate(M/s)  Relative 
Rate
    -      
-------------------------------------------------------------------------
    -      Without whole stage codegen       6725.52            31.18         
1.00 X
    -      With whole stage codegen          2233.05            93.91         
3.01 X
    +      Single Int Column Scan:            Avg Time(ms)    Avg Rate(M/s)  
Relative Rate
    +      
-------------------------------------------------------------------------------
    +      Without whole stage codegen             6585.36            31.85     
    1.00 X
    +      With whole stage codegen                 343.80           609.99     
   19.15 X
    +    */
    +    benchmark.run()
    +  }
    +
    +  def testImperitaveAggregation(values: Int): Unit = {
    +
    +    val benchmark = new Benchmark("aggregation", values)
    +
    +    benchmark.addCase("ImpAgg w/o whole stage codegen") { iter =>
    +      sqlContext.setConf("spark.sql.codegen.wholeStage", "false")
    +      sqlContext.range(values).groupBy().agg("id" -> "stddev").collect()
    +    }
    +
    +    benchmark.addCase("DeclAgg w/o whole stage codegen") { iter =>
    +      sqlContext.setConf("spark.sql.codegen.wholeStage", "false")
    +      sqlContext.range(values).groupBy().agg("id" -> "stddev1").collect()
    +    }
    +
    +    benchmark.addCase("ImpAgg w whole stage codegen") { iter =>
    +      sqlContext.setConf("spark.sql.codegen.wholeStage", "true")
    +      sqlContext.range(values).groupBy().agg("id" -> "stddev").collect()
    +    }
    +
    +    benchmark.addCase("DeclAgg w whole stage codegen") { iter =>
    +      sqlContext.setConf("spark.sql.codegen.wholeStage", "true")
    +      sqlContext.range(values).groupBy().agg("id" -> "stddev1").collect()
    +    }
    +
    +    /*
    +      Before optimizing CentralMomentAgg and generated mutable projection:
    +
    +      Intel(R) Core(TM) i7-4558U CPU @ 2.80GHz
    +      aggregation:                       Avg Time(ms)    Avg Rate(M/s)  
Relative Rate
    +      
-------------------------------------------------------------------------------
    +      ImpAgg w/o whole stage codegen          9047.35            11.59     
    1.00 X
    +      DeclAgg w/o whole stage codegen         6507.27            16.11     
    1.39 X
    +      ImpAgg w whole stage codegen            6947.30            15.09     
    1.30 X
    +      DeclAgg w whole stage codegen           1376.74            76.16     
    6.57 X
    +
    +      After optimization:
    +
    +      Intel(R) Core(TM) i7-4558U CPU @ 2.80GHz
    +      aggregation:                       Avg Time(ms)    Avg Rate(M/s)  
Relative Rate
    +      
-------------------------------------------------------------------------------
    +      ImpAgg w/o whole stage codegen          6159.03            17.03     
    1.00 X
    +      DeclAgg w/o whole stage codegen         5248.69            19.98     
    1.17 X
    +      ImpAgg w whole stage codegen            4202.30            24.95     
    1.47 X
    +      DeclAgg w whole stage codegen           1367.34            76.69     
    4.50 X
    --- End diff --
    
    Glad to see 5x speed-up! +1 on switching to declarative on `stddev`. But 
for `skewness` and `kurtosis`, we still need to benchmark the performance to 
decide because their expressions are more complex.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to