Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement ArrowNumericType for Float16Type #2810

Merged

Conversation

tustvold
Copy link
Contributor

Which issue does this PR close?

Closes #.

Rationale for this change

This is mainly so that I can get #2809 in, but adding support for Float16 is important from a coverage perspective.

What changes are included in this PR?

Implements SIMD operations on f16 using the implementation for f32, I suspect although haven't benchmarked, this is faster than a naive implementation that uses a mask of Simd=f16 and SimdMask = bool

Are there any user-facing changes?

No

@github-actions github-actions bot added the arrow Changes to the arrow crate label Sep 29, 2022
@@ -333,8 +333,7 @@ where
// process data in chunks of 64 elements since we also get 64 bits of validity information at a time

// safety: result is newly created above, always written as a T below
let mut result_chunks =
unsafe { result.typed_data_mut().chunks_exact_mut(64) };
let mut result_chunks = result.typed_data_mut().chunks_exact_mut(64);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are drive-by fixes that date from #1866

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 -- as below we probably can remove the old //safety comments too

impl ArrowNumericType for Float16Type {}

#[cfg(feature = "simd")]
impl ArrowNumericType for Float16Type {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps an expert in SIMD / GPU could give this a look as well (no need to hold merging up) -- I though f16 was primarily useful when doing SIMD/GPU so perhaps there some special support here we could use

In any event, this seems like a good step forward to me 👍

Perhaps @HaoYang670 or @Jimexist (who originally contributed f16 support in #890) might have some ideas

a.values().iter().zip(b.values()).map(|(a, b)| a + b),
);

let c = add(&a, &b).unwrap();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❤️

@@ -1938,7 +1938,7 @@ where
let simd_right = T::init(right);

// safety: result is newly created above, always written as a T below
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we probably don't need the //safety comments anymore as we are using a safe API now

@@ -333,8 +333,7 @@ where
// process data in chunks of 64 elements since we also get 64 bits of validity information at a time

// safety: result is newly created above, always written as a T below
let mut result_chunks =
unsafe { result.typed_data_mut().chunks_exact_mut(64) };
let mut result_chunks = result.typed_data_mut().chunks_exact_mut(64);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 -- as below we probably can remove the old //safety comments too

@tustvold tustvold merged commit 9c1748f into apache:master Oct 3, 2022
@ursabot
Copy link

ursabot commented Oct 3, 2022

Benchmark runs are scheduled for baseline = 931c6fc and contender = 9c1748f. 9c1748f is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Skipped ⚠️ Benchmarking of arrow-rs-commits is not supported on ec2-t3-xlarge-us-east-2] ec2-t3-xlarge-us-east-2
[Skipped ⚠️ Benchmarking of arrow-rs-commits is not supported on test-mac-arm] test-mac-arm
[Skipped ⚠️ Benchmarking of arrow-rs-commits is not supported on ursa-i9-9960x] ursa-i9-9960x
[Skipped ⚠️ Benchmarking of arrow-rs-commits is not supported on ursa-thinkcentre-m75q] ursa-thinkcentre-m75q
Buildkite builds:
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
arrow Changes to the arrow crate
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants