summaryrefslogtreecommitdiff
path: root/src/utilities
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2018-11-09 08:06:13 +0100
committerGitHub <noreply@github.com>2018-11-09 08:06:13 +0100
commit90112618daa0d6b24ae3e53203a636d2e908dfba (patch)
tree4d9b0782a42da5cf6e54571459996907e2a93f2b /src/utilities
parent441373c8fd1442cc4c024e59e7778b4811eb210c (diff)
parent6f67525ea693d0761c479b060c04ce93d408beb5 (diff)
Merge pull request #331 from CNugteren/CLBlast-270-col2im
Implements col2im routine
Diffstat (limited to 'src/utilities')
-rw-r--r--src/utilities/utilities.cpp26
-rw-r--r--src/utilities/utilities.hpp6
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_