diff options
author | Cedric Nugteren <web@cedricnugteren.nl> | 2018-11-09 08:06:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-09 08:06:13 +0100 |
commit | 90112618daa0d6b24ae3e53203a636d2e908dfba (patch) | |
tree | 4d9b0782a42da5cf6e54571459996907e2a93f2b /src/utilities | |
parent | 441373c8fd1442cc4c024e59e7778b4811eb210c (diff) | |
parent | 6f67525ea693d0761c479b060c04ce93d408beb5 (diff) |
Merge pull request #331 from CNugteren/CLBlast-270-col2im
Implements col2im routine
Diffstat (limited to 'src/utilities')
-rw-r--r-- | src/utilities/utilities.cpp | 26 | ||||
-rw-r--r-- | src/utilities/utilities.hpp | 6 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/utilities/utilities.cpp b/src/utilities/utilities.cpp index a8fdaa19..a6cd82e7 100644 --- a/src/utilities/utilities.cpp +++ b/src/utilities/utilities.cpp @@ -489,4 +489,30 @@ std::string GetDeviceName(const Device& device) { } // ================================================================================================= + +// Solve Bezout's identity +// a * p + b * q = r = GCD(a, b) +void EuclidGCD(int a, int b, int &p, int &q, int &r) { + p = 0; + q = 1; + int p_1 = 1; + int q_1 = 0; + for (;;) { + const int c = a % b; + if (c == 0) { + break; + } + const int p_2 = p_1; + const int q_2 = q_1; + p_1 = p; + q_1 = q; + p = p_2 - p_1 * (a / b); + q = q_2 - q_1 * (a / b); + a = b; + b = c; + } + r = b; +} + +// ================================================================================================= } // namespace clblast diff --git a/src/utilities/utilities.hpp b/src/utilities/utilities.hpp index 16a241af..fcc1c57f 100644 --- a/src/utilities/utilities.hpp +++ b/src/utilities/utilities.hpp @@ -372,6 +372,12 @@ std::string GetDeviceArchitecture(const Device& device); std::string GetDeviceName(const Device& device); // ================================================================================================= + +// Solve Bezout's identity +// a * p + b * q = r = GCD(a, b) +void EuclidGCD(int a, int b, int &p, int &q, int &r); + +// ================================================================================================= } // namespace clblast // CLBLAST_UTILITIES_H_ |