-
Notifications
You must be signed in to change notification settings - Fork 215
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
feature: rng primitive refactoring #2968
base: main
Are you sure you want to change the base?
feature: rng primitive refactoring #2968
Conversation
/intelci: run |
@@ -0,0 +1,184 @@ | |||
/* file: mrg32k3a.h */ | |||
/******************************************************************************* | |||
* Copyright 2024 Intel Corporation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This line is not needed in new files.
* Copyright 2024 Intel Corporation |
#include "src/externals/service_rng.h" | ||
#include "src/data_management/service_numeric_table.h" | ||
|
||
static const int leapfrogMethodErrcode = -1002; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please use VSL_RNG_ERROR_LEAPFROG_UNSUPPORTED
and VSL_RNG_ERROR_SKIPAHEAD_UNSUPPORTED
instead of magic constants.
Also, please move those duplicating definitions to "src/algorithms/engines/engine_batch_impl.h'.
//-- | ||
*/ | ||
|
||
#ifndef __mrg32k3a_IMPL_I__ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#ifndef __mrg32k3a_IMPL_I__ | |
#ifndef __MRG32K3A_IMPL_I__ |
//-- | ||
*/ | ||
|
||
#ifndef __philox4x32x10_BATCH_CONTAINER_H__ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#ifndef __philox4x32x10_BATCH_CONTAINER_H__ | |
#ifndef __PHILOX4X32X10_BATCH_CONTAINER_H__ |
//-- | ||
*/ | ||
|
||
#ifndef __philox4x32x10_IMPL_I__ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please use capitals in all include guards.
}; | ||
|
||
template <engine_list EngineType = engine_list::mt2203> | ||
class onedal_engine { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please rename to dpc_engine
and add the description that this RNG engine can generate data on both host and device keeping the random sequences on host and device synchronized.
template <typename Type, typename Size = std::int64_t> | ||
class rng { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the purpose of this class? Why all the public methods cannot be just free non-member functions?
Previously it was holding daal engine as a state, but now there is no state and no purpose in grouping the methods together.
|
||
namespace oneapi::dal::backend::primitives { | ||
|
||
enum class engine_list { mt2203, mcg59, mt19937, mrg32k3a, philox4x32x10 }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
_list
here reminds of the linked list data type. Maybe rename to engine_method
or simply method
?
@@ -0,0 +1,63 @@ | |||
.. ****************************************************************************** | |||
.. * Copyright 2020 Intel Corporation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Need to fix comments in many places.
mrg32k3a | ||
======== | ||
|
||
The engine is based on the 59-bit multiplicative congruential generator. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The engine is based on the 59-bit multiplicative congruential generator. | |
The engine based on a 32-bit combined multiple recursive generator | |
with two components of order 3, optimized for batch processing. |
Description
Add a comprehensive description of proposed changes
List associated issue number(s) if exist(s): #6 (for example)
Documentation PR (if needed): #1340 (for example)
Benchmarks PR (if needed): IntelPython/scikit-learn_bench#155 (for example)
PR should start as a draft, then move to ready for review state after CI is passed and all applicable checkboxes are closed.
This approach ensures that reviewers don't spend extra time asking for regular requirements.
You can remove a checkbox as not applicable only if it doesn't relate to this PR in any way.
For example, PR with docs update doesn't require checkboxes for performance while PR with any change in actual code should have checkboxes and justify how this code change is expected to affect performance (or justification should be self-evident).
Checklist to comply with before moving PR from draft:
PR completeness and readability
Testing
Performance