[
https://issues.apache.org/jira/browse/ARROW-5303?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16992584#comment-16992584
]
Andy Thomason commented on ARROW-5303:
--------------------------------------
"if" statements (or match) in loops do not always have a happy ending.
I would just do the cast, regardless of the validity and copy the null bitmap
from the source to the destination. In theory, you should disregard the value
of a null data item.
Vec<Option<int_type>> is never going to be efficient as it takes at leas 2n
bytes per element because of alignment and has terrible access patterns.
> [Rust] Add SIMD vectorization of numeric casts
> ----------------------------------------------
>
> Key: ARROW-5303
> URL: https://issues.apache.org/jira/browse/ARROW-5303
> Project: Apache Arrow
> Issue Type: Improvement
> Components: Rust
> Affects Versions: 0.13.0
> Reporter: Neville Dipale
> Priority: Minor
>
> To improve the performance of cast kernels, we need SIMD support in numeric
> casts.
> An initial exploration shows that we can't trivially add SIMD casts between
> our Arrow T::Simd types, because `packed_simd` only supports a cast between
> T::Simd types that have the same number of lanes.
> This means that adding casts from f64 to i64 (same lane length) satisfies the
> bound trait `where TO::Simd : packed_simd::FromCast<FROM::Simd>`, but f64 to
> i32 (different lane length) doesn't.
> We would benefit from investigating work-arounds to this limitation. Please
> see
> [github::nevi_me::arrow/\{branch:simd-cast}/../kernels/cast.rs|[https://github.com/nevi-me/arrow/blob/simd-cast/rust/arrow/src/compute/kernels/cast.rs#L601]]
> for an example implementation that's limited by the differences in lane
> length.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)