Qifan Chen has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/16621 )

Change subject: IMPALA-3816: Codegen perf critical loops in Sorter
......................................................................


Patch Set 8:

(1 comment)

http://gerrit.cloudera.org:8080/#/c/16621/8/be/src/runtime/sorter.cc
File be/src/runtime/sorter.cc:

http://gerrit.cloudera.org:8080/#/c/16621/8/be/src/runtime/sorter.cc@1215
PS8, Line 1215:   llvm::Function* fn = 
codegen->GetFunction(IRFunction::TUPLE_SORTER_SORT_HELPER, true);
> We don't anywhere else. https://gerrit.cloudera.org/#/c/12828/ have a compl
Looks like there is only on call to SortHelper() which is from 
Sorter::TupleSorter::Sort() shown below.

 752 Status Sorter::TupleSorter::Sort(Run* run) {                               
  
 753   DCHECK(run->is_finalized());                         
 754   DCHECK(!run->is_sorted());     
 755   run_ = run;                                                              
         
 756   const SortHelperFn sort_helper_fn = 
parent_->codegend_sort_helper_fn_.load();
 757   if (sort_helper_fn != nullptr) {
 758     RETURN_IF_ERROR(                                                       
            
 759         sort_helper_fn(this, TupleIterator::Begin(run_), 
TupleIterator::End(run_)));
 760   } else {                                 
 761     RETURN_IF_ERROR(SortHelper(TupleIterator::Begin(run_), 
TupleIterator::End(run_)));
 762   }                                                                       
 763   run_->set_sorted();                               
 764   return Status::OK();        
 765 }

The speedup may also come from the inlining of several small functions before 
LLVM optimizing "the big chunk of code" :-).

I have collected the llvm code and uploaded it to the case here IMPALA-3816" 
target="_blank" 
rel="nofollow">https://issues.apache.org/jira/browse/IMPALA-3816. 
Interestingly, there are 2 definitions (one fast cc and one regular) for the 
SortHelp method and 4 calls to the fast cc version.

                          
803 define internal fastcc void 
@_ZN6impala6Sorter11TupleSorter10SortHelperENS0_13TupleIteratorES2_(%"class.impala::Status"*
 noalias sr     et, %"class.impala::Sorter::TupleSorter"*, 
%"class.impala::Sorter::TupleIterator"* byval nocapture align 8, 
%"class.impala::Sorter:     :TupleIterator"* byval nocapture align 8) 
unnamed_addr #3 align 2 personality i8* bitcast (i32 (...)* 
@__gxx_personality_v0 to i8*)
                                 
1724   call fastcc void 
@_ZN6impala6Sorter11TupleSorter10SortHelperENS0_13TupleIteratorES2_(%"class.impala::Status"*
 nonnull sret %19, %     "class.impala::Sorter::TupleSorter"* nonnull %1, 
%"class.impala::Sorter::TupleIterator"* byval nonnull align 8 %2, 
%"class.impala::     Sorter::TupleIterator"* byval nonnull align 8 %17)
                                                       
1753   call fastcc void 
@_ZN6impala6Sorter11TupleSorter10SortHelperENS0_13TupleIteratorES2_(%"class.impala::Status"*
 nonnull sret %20, %     "class.impala::Sorter::TupleSorter"* nonnull %1, 
%"class.impala::Sorter::TupleIterator"* byval nonnull align 8 %17, 
%"class.impala:     :Sorter::TupleIterator"* byval nonnull align 8 %3)
                                                                             
2756 define void 
@_ZN6impala6Sorter11TupleSorter10SortHelperENS0_13TupleIteratorES2_.3(%"class.impala::Status"*
 noalias sret, %"class.im     pala::Sorter::TupleSorter"*, 
%"class.impala::Sorter::TupleIterator"* byval nocapture align 8, 
%"class.impala::Sorter::TupleIterator     "* byval nocapture align 8) 
local_unnamed_addr #3 align 2 personality i8* bitcast (i32 (...)* 
@__gxx_personality_v0 to i8*) {
                                                                                
           
3877   call fastcc void 
@_ZN6impala6Sorter11TupleSorter10SortHelperENS0_13TupleIteratorES2_(%"class.impala::Status"*
 nonnull sret %11, %     "class.impala::Sorter::TupleSorter"* nonnull %1, 
%"class.impala::Sorter::TupleIterator"* byval nonnull align 8 %2, 
%"class.impala::     Sorter::TupleIterator"* byval nonnull align 8 %9)
                                       
3905   call fastcc void 
@_ZN6impala6Sorter11TupleSorter10SortHelperENS0_13TupleIteratorES2_(%"class.impala::Status"*
 nonnull sret %12, %     "class.impala::Sorter::TupleSorter"* nonnull %1, 
%"class.impala::Sorter::TupleIterator"* byval nonnull align 8 %9, 
%"class.impala::     Sorter::TupleIterator"* byval nonnull align 8 %3)


Edit



--
To view, visit http://gerrit.cloudera.org:8080/16621
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ie08137449d4a7b554ca8b8650260f8bd72e0a81b
Gerrit-Change-Number: 16621
Gerrit-PatchSet: 8
Gerrit-Owner: Qifan Chen <qc...@cloudera.com>
Gerrit-Reviewer: Csaba Ringhofer <csringho...@cloudera.com>
Gerrit-Reviewer: Daniel Becker <daniel.bec...@cloudera.com>
Gerrit-Reviewer: Impala Public Jenkins <impala-public-jenk...@cloudera.com>
Gerrit-Reviewer: Qifan Chen <qc...@cloudera.com>
Gerrit-Reviewer: Sahil Takiar <stak...@cloudera.com>
Gerrit-Reviewer: Tim Armstrong <tarmstr...@cloudera.com>
Gerrit-Comment-Date: Tue, 27 Oct 2020 19:30:57 +0000
Gerrit-HasComments: Yes

Reply via email to