[ 
https://issues.apache.org/jira/browse/SPARK-60048?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated SPARK-60048:
-----------------------------------
    Labels: pull-request-available  (was: )

> Remember a whole-stage codegen split decision by a key that ignores literal 
> values
> ----------------------------------------------------------------------------------
>
>                 Key: SPARK-60048
>                 URL: https://issues.apache.org/jira/browse/SPARK-60048
>             Project: Spark
>          Issue Type: Improvement
>          Components: SQL
>    Affects Versions: 5.0.0
>            Reporter: Max Gekk
>            Priority: Major
>              Labels: pull-request-available
>
> Whole-stage codegen can split the expressions of a stage that has a method 
> past the JIT limit (SPARK-33301, https://github.com/apache/spark/pull/59225). 
> It decides by generating the stage's code in one piece, compiling it as a 
> trial, and generating it again with some expressions split. The decision is 
> remembered by WholeStageCodegenExec.decisionKey, a digest of the generated 
> code with the class loader, the compiler, the method limit and 
> methodSplitThreshold, so that executing a query again skips the trial 
> compiles.
> A literal that changes on every run changes that digest on every run. 
> ComputeCurrentTime turns current_timestamp() into a literal and 
> Literal.doGenCode writes it into the source, so a stage holding one decides 
> afresh each run and pays two code generations and two compiles where master 
> pays one of each. Queries without such literals compile nothing new after the 
> first execution.
> Proposed: remember the decision by a key that ignores literal values, either 
> the code digested with numeric literals masked, or the plan with literals 
> normalized plus every conf that affects code generation.
> Care is needed: a literal's value moves a method's bytecode size by a byte or 
> two, which can matter for a method near the limit, and a key built from the 
> plan has to carry all the codegen confs. Tests: two executions of a query 
> with current_timestamp() decide once; a decision is not reused under a 
> different conf that changes the code.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

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

Reply via email to