Skip to content

feat: migrate some more kernels to cuda.compute#4019

Merged
ianna merged 21 commits into
scikit-hep:awkward3from
maxymnaumchyk:maxymnaumchyk/RegularArray_localindex_kernel
May 19, 2026
Merged

feat: migrate some more kernels to cuda.compute#4019
ianna merged 21 commits into
scikit-hep:awkward3from
maxymnaumchyk:maxymnaumchyk/RegularArray_localindex_kernel

Conversation

@maxymnaumchyk
Copy link
Copy Markdown
Collaborator

@maxymnaumchyk maxymnaumchyk commented May 10, 2026

🛠️ Issues Resolved in this PR

View all linked issues

Closes #4020, closes #4021, closes #4022, closes #4023, closes #4024
Closes #4025, closes #4026, closes #4027, closes #4028, closes #4029
Closes #4033, closes #4034, closes #4035
Closes #4040, closes #4041, closes #4042
Closes #4045, closes #4046, closes #4047
Closes #4049, closes #4050, closes #4051, closes #4052, closes #4053, closes #4054
Closes #4057, closes #4058, closes #4059, closes #4060, closes #4061, closes #4062, closes #4063, closes #4064, closes #4065
Closes #4066, closes #4067, closes #4068, closes #4069, closes #4070, closes #4071, closes #4072

@codecov
Copy link
Copy Markdown

codecov Bot commented May 10, 2026

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
6275 1 6274 34
View the top 1 failed test(s) by shortest run time
tests/test_2616_use_pyarrow_for_strings.py::test_split_whitespace
Stack Traces | 0.012s run time
def test_split_whitespace():
        assert ak.str.split_whitespace(string_padded, max_splits=1).tolist() == [
            [["", "αβγ      "], ["", " "]],
            [],
            [["", "→δε←      "], ["", "ζz zζ     "], ["", "abc      "]],
        ]
        assert (
            ak.str.split_whitespace(string_padded, max_splits=1).layout.form
            == ak.str.split_whitespace(
                ak.to_backend(string_padded, "typetracer"), max_splits=1
            ).layout.form
        )
    
        assert ak.str.split_whitespace(
            string_padded, max_splits=1, reverse=True
        ).tolist() == [
            [["      αβγ", ""], [" ", ""]],
            [],
            [["     →δε←", ""], ["     ζz zζ", ""], ["      abc", ""]],
        ]
        assert (
            ak.str.split_whitespace(string_padded, max_splits=1, reverse=True).layout.form
            == ak.str.split_whitespace(
                ak.to_backend(string_padded, "typetracer"), max_splits=1, reverse=True
            ).layout.form
        )
    
>       assert ak.str.split_whitespace(string_padded, max_splits=None).tolist() == [
            [["", "αβγ", "", ""], ["", "", ""]],
            [],
            [["", "→δε←", "", ""], ["", "ζz", "zζ", "", ""], ["", "abc", "", ""]],
        ]
E       AssertionError: assert [[['', 'αβγ', '', ''], ['', '', '']], [], [['', '→δε←', '', ''], ['', 'ζz', 'zζ', '', ''], ['', 'abc', ' ']]] == [[['', 'αβγ', '', ''], ['', '', '']], [], [['', '→δε←', '', ''], ['', 'ζz', 'zζ', '', ''], ['', 'abc', '', '']]]
E         
E         At index 2 diff: [['', '→δε←', '', ''], ['', 'ζz', 'zζ', '', ''], ['', 'abc', ' ']] != [['', '→δε←', '', ''], ['', 'ζz', 'zζ', '', ''], ['', 'abc', '', '']]
E         
E         Full diff:
E           [
E               [
E                   [
E                       '',
E                       'αβγ',
E                       '',
E                       '',
E                   ],
E                   [
E                       '',
E                       '',
E                       '',
E                   ],
E               ],
E               [],
E               [
E                   [
E                       '',
E                       '→δε←',
E                       '',
E                       '',
E                   ],
E                   [
E                       '',
E                       'ζz',
E                       'zζ',
E                       '',
E                       '',
E                   ],
E                   [
E                       '',
E                       'abc',
E         -             '',
E         +             ' ',
E         ?              +
E         -             '',
E                   ],
E               ],
E           ]


tests/test_2616_use_pyarrow_for_strings.py:931: AssertionError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@maxymnaumchyk
Copy link
Copy Markdown
Collaborator Author

maxymnaumchyk commented May 10, 2026

Simple comparison of the first 5 kernels. Performance is on par.
Before:
image

After:
image

@github-actions
Copy link
Copy Markdown

The documentation preview is ready to be viewed at http://preview.awkward-array.org.s3-website.us-east-1.amazonaws.com/PR4019

@maxymnaumchyk
Copy link
Copy Markdown
Collaborator Author

Some more kernels. Performance is on par or much better!
Before
image

After
image

@maxymnaumchyk
Copy link
Copy Markdown
Collaborator Author

RegularArray_getitem_next_array_regularize and ListOffsetArray_toRegularArray both have to raise errors based on performance heavy checks (cp.any(), cp.all()...). I'll keep them commented out for now.

Before
image

After
image

@maxymnaumchyk
Copy link
Copy Markdown
Collaborator Author

New batch of kernels. awkward_ListOffsetArray_rpad_axis1, awkward_ListOffsetArray_flatten_offsets, and awkward_ListOffsetArray_drop_none_indexes kernels I'll revisit later

Before:
image

After:
image

@maxymnaumchyk
Copy link
Copy Markdown
Collaborator Author

I'll have to revisit these kernels later: awkward_ListArray_validity, awkward_ListArray_rpad_axis1, awkward_ListArray_getitem_next_range_spreadadvanced, awkward_ListArray_getitem_next_at

Next batch of kernels

Before
Screenshot 2026-05-12 125732

After
image

@maxymnaumchyk
Copy link
Copy Markdown
Collaborator Author

Next batch of kernels

ListArray_getitem_next_range turns out to be slower, I'll skip it for now.
ListArray_getitem_next_array_advanced, ListArray_getitem_next_array and ListArray_getitem_jagged_expand are all getting slowed down because of the error checks. I'll leave them too.

image image

@maxymnaumchyk
Copy link
Copy Markdown
Collaborator Author

New batch of kernels comparison:
image

@maxymnaumchyk maxymnaumchyk changed the title feat: reimplement awkward_RegularArray kernels using cuda.compute feat: migrate some more kernels to cuda.compute May 17, 2026
@maxymnaumchyk
Copy link
Copy Markdown
Collaborator Author

new batch of BitMaskedArray and ByteMaskedArray kernels

image

Copy link
Copy Markdown
Collaborator Author

@maxymnaumchyk maxymnaumchyk left a comment

Choose a reason for hiding this comment

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

I'm modifying the tests-cuda/test_1381_check_errors.py file, since the cuda.compute implementations raise Errors immediately

@maxymnaumchyk maxymnaumchyk marked this pull request as ready for review May 19, 2026 08:53
@maxymnaumchyk maxymnaumchyk requested a review from ianna May 19, 2026 08:54
@ianna ianna changed the base branch from main to awkward3 May 19, 2026 09:17
@ianna
Copy link
Copy Markdown
Member

ianna commented May 19, 2026

@maxymnaumchyk — This is fantastic! I moved it to awkward3 branch. Could you please resolve the conflicts? Thanks

@maxymnaumchyk
Copy link
Copy Markdown
Collaborator Author

I was thinking of resolving the conflicts after the #3981 is merged:)

@ianna
Copy link
Copy Markdown
Member

ianna commented May 19, 2026

I was thinking of resolving the conflicts after the #3981 is merged:)

Done. Please go ahead! Thanks

… maxymnaumchyk/RegularArray_localindex_kernel

# Conflicts:
#	dev/generate-kernel-signatures.py
#	dev/generate-tests.py
#	src/awkward/_backends/cupy.py
#	src/awkward/_connect/cuda/_compute.py
@maxymnaumchyk
Copy link
Copy Markdown
Collaborator Author

Done👍

Copy link
Copy Markdown
Member

@ianna ianna left a comment

Choose a reason for hiding this comment

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

@maxymnaumchyk - great! Thank you. I’ll add that to the performance profiling list.

@ianna ianna merged commit 496e74f into scikit-hep:awkward3 May 19, 2026
34 of 36 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment