Avoid an Arc::clone per row in benchmark #1975
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Which issue does this PR close?
Closes #1973.
Rationale for this change
Slightly improves the performance of writing rows.
What changes are included in this PR?
To avoid cloning the
SchemaRef
we pass in the schema as a separate parameter. I also marked the benchmark functions asinline(never)
so that they stand out more in the profiler, since they are operating on large chunks of data this should not create any overhead.Benchmark results on i7-10510U, run with
$ RUSTFLAGS="-C target-cpu=skylake" cargo bench --features row,jit --bench jit
:master branch:
this branch:
If I understand the code correctly then the jit calls the same
write_field_xyz
functions as the rust version and is not able to inline these functions. So it avoids the type dispatch, but instead has several more function calls than the rust code (which is able to inline some of thewrite_field
functions). It should be possible to speed up the jit a lot if it could directly generate code corresponding to thewrite_field
methods that could get inlined and also avoid the downcasting.