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

Add KOKKOS_FUNCTION etc. documentation #578

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

crtrott
Copy link
Member

@crtrott crtrott commented Sep 4, 2024

No description provided.

Comment on lines +48 to +50
This macro is also used for non-templated free functions in conjunction with relocatable device code -
i.e. if one wants to compile functions in some compilation unit A but call them from Kokkos
parallel constructs defined in compilation unit B.
Copy link
Contributor

Choose a reason for hiding this comment

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

How is that supposed to work with SYCL?

Copy link
Member Author

Choose a reason for hiding this comment

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

"in conjunction" implies its not the only thing you need to do

Copy link
Contributor

Choose a reason for hiding this comment

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

Hmm... I still find the last sentence more confusing then helpful and would wait with saying anything for functions functions used in separable compilarion/relocatable device code until after discussing kokkos/kokkos#5993.

Suggested change
This macro is also used for non-templated free functions in conjunction with relocatable device code -
i.e. if one wants to compile functions in some compilation unit A but call them from Kokkos
parallel constructs defined in compilation unit B.

Copy link
Member

@dalg24 dalg24 left a comment

Choose a reason for hiding this comment

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

What about KOKKOS_DEDUCTION_GUIDE ?

docs/source/API/core/macros-special/host_device_macros.rst Outdated Show resolved Hide resolved

This macro provides default capture clause and host device markup for lambdas. It is the equivalent of
``[=] __host__ __device__`` in CUDA and HIP.
It is used than creating C++ lambdas to be passed to Kokkos parallel dispatch mechanisms such as
Copy link
Member

Choose a reason for hiding this comment

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

That sentence is weird.
I think that we should consider having some blanket wording that says that any function or lambda called within a kernel is required to be properly annotated.

Copy link
Member Author

Choose a reason for hiding this comment

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

actually its not because if you generate inside a KOKKOS_FUNCTION you can't use KOKKOS_LAMBDA currently

-----------------------

This macro provides default capture clause and host device markup for lambdas created inside of class member functions. It is the equivalent of
``[=, *this] __host__ __device__`` in CUDA and HIP, capturing the parent class by value instead of by reference.
Copy link
Member

Choose a reason for hiding this comment

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

Please add a data member being accessed in the lambda and show that it is an alternative to

Foo {
...
Data member_;
};

auto const& member = member_;
parallel_for(..., KOKKOS_LAMBDA(...){ ... member ...  });

Comment on lines +48 to +50
This macro is also used for non-templated free functions in conjunction with relocatable device code -
i.e. if one wants to compile functions in some compilation unit A but call them from Kokkos
parallel constructs defined in compilation unit B.
Copy link
Contributor

Choose a reason for hiding this comment

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

Hmm... I still find the last sentence more confusing then helpful and would wait with saying anything for functions functions used in separable compilarion/relocatable device code until after discussing kokkos/kokkos#5993.

Suggested change
This macro is also used for non-templated free functions in conjunction with relocatable device code -
i.e. if one wants to compile functions in some compilation unit A but call them from Kokkos
parallel constructs defined in compilation unit B.

Comment on lines +92 to +94
This macro is also used for non-templated free functions in conjunction with relocatable device code -
i.e. if one wants to compile functions in some compilation unit A but call them from Kokkos
parallel constructs defined in compilation unit B.
Copy link
Contributor

Choose a reason for hiding this comment

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

Similarly here.

Suggested change
This macro is also used for non-templated free functions in conjunction with relocatable device code -
i.e. if one wants to compile functions in some compilation unit A but call them from Kokkos
parallel constructs defined in compilation unit B.

Copy link
Member Author

Choose a reason for hiding this comment

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

We need some warning here, because otherwise people will pepper everything with the KOKKOS_FUNCTION instead of KOKKOS_INLINE_FUNCTION and it will fail depending on how stuff is set up. This didn't used to be much of a problem because everyone was using KOKKOS_INLINE_FUNCTION by default. But for a while now some team members have strenuously complained about that so folks are moving away from it :-)

Copy link
Contributor

Choose a reason for hiding this comment

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

But currently there is nothing special about relocatable device functions; they behave the same as free functions that might need KOKKOS_INLINE_FUNCTON.

Copy link
Member Author

Choose a reason for hiding this comment

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

If you want a function which uses relocatable device code capability you can't mark it KOKKOS_INLINE_FUNCTION. Only if you mark it KOKKOS_FUNCTION will it use that compilation/link technique or?

Copy link
Contributor

@masterleinad masterleinad Sep 4, 2024

Choose a reason for hiding this comment

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

Yes, it's the same as for a regular inline function that can't be used in the same context.

Comment on lines +174 to +175
``KOKKOS_DEDUCTION_GUIDE``
-----------------------
Copy link
Contributor

Choose a reason for hiding this comment

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

/home/runner/work/kokkos-core-wiki/kokkos-core-wiki/docs/source/API/core/macros-special/host_device_macros.rst:175: WARNING: Title underline too short.

``KOKKOS_DEDUCTION_GUIDE``
-----------------------
Suggested change
``KOKKOS_DEDUCTION_GUIDE``
-----------------------
``KOKKOS_DEDUCTION_GUIDE``
--------------------------

``KOKKOS_DEDUCTION_GUIDE``
-----------------------

This macro is used to annotate deduciont guides.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
This macro is used to annotate deduciont guides.
This macro is used to annotate user-defined deduction guides.

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

Successfully merging this pull request may close these issues.

4 participants