Ben Kietzman created ARROW-13121:
------------------------------------

             Summary: [C++][Compute] Extract preallocation logic to a method of 
kernels
                 Key: ARROW-13121
                 URL: https://issues.apache.org/jira/browse/ARROW-13121
             Project: Apache Arrow
          Issue Type: Improvement
          Components: C++
            Reporter: Ben Kietzman


Currently KernelExecutor handles preallocation of null bitmaps and other 
buffers based on simple flags on each Kernel. This is not very flexible and we 
end up leaving a lot of performance on the table in cases where we can 
preallocate but the behavior can't be captured in the available flags. For 
example, in the case of {{binary_string_join_element_wise}}, it would be 
possible to preallocate all buffers (even the character buffer) and write 
output into slices.

Having this as a public function would enable us to unit test it directly 
(currently Executors are only tested indirectly through calling of 
compute::Functions) and reuse it, for example to correctly preallocate a small 
temporary for pipelined execution

One way this could be added is as a new method on each Kernel:

{code}
// Output preallocated Datums sufficient for execution of the kernel on each 
ExecBatch.
// The output Datums may not be identically chunked to the input batches, for 
example
// kernels which support contiguous output preallocation will preallocate a 
single Datum
// (and can then output into slices of that Datum).
Result<std::vector<Datum>> Kernel::prepare_output(
  const Kernel*,
  KernelContext*,
  const std::vector<ExecBatch>& inputs)
{code}




--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to