Commit 9fc8931f authored by Stanislav Pidhorskyi's avatar Stanislav Pidhorskyi Committed by Facebook GitHub Bot
Browse files

Updated cuda_math_helper

Summary:
Added missing `^=` operator to cuda_math_helper.
Also added functions `isfinite`, `isinf`, and `isnan`. Also added vector version of `sqrt`.

Reviewed By: tsimk

Differential Revision:
D70019653

Privacy Context Container: L1258975

fbshipit-source-id: ee7671a73110417bd8a99be87ff6d243c2d07938
parent e95d43c6
...@@ -78,6 +78,9 @@ HD_FUNC double saturate(double a) { ...@@ -78,6 +78,9 @@ HD_FUNC double saturate(double a) {
// `cuda/crt/math_functions.hpp` thus no need for explicit usage of e.g. fabsf // `cuda/crt/math_functions.hpp` thus no need for explicit usage of e.g. fabsf
#if defined(MH_NVCC) #if defined(MH_NVCC)
using ::abs; using ::abs;
using ::isfinite;
using ::isinf;
using ::isnan;
using ::max; using ::max;
using ::min; using ::min;
using ::rsqrt; using ::rsqrt;
...@@ -85,6 +88,9 @@ using ::sqrt; ...@@ -85,6 +88,9 @@ using ::sqrt;
#else #else
// Otherwise use the ones from cmath // Otherwise use the ones from cmath
using std::abs; using std::abs;
using std::isfinite;
using std::isinf;
using std::isnan;
using std::max; using std::max;
using std::min; using std::min;
using std::sqrt; using std::sqrt;
...@@ -469,12 +475,20 @@ HD_FUNC double rnorm4d(double a, double b, double c, double d) { ...@@ -469,12 +475,20 @@ HD_FUNC double rnorm4d(double a, double b, double c, double d) {
CHD_FUNC T2 operator^(T2 const& v, T scalar) { \ CHD_FUNC T2 operator^(T2 const& v, T scalar) { \
return {v.x ^ scalar, v.y ^ scalar}; \ return {v.x ^ scalar, v.y ^ scalar}; \
} \ } \
CHD_FUNC T2 operator^=(T2& v, T scalar) { \
v = {v.x ^ scalar, v.y ^ scalar}; \
return v; \
} \
CHD_FUNC T2 operator^(T scalar, T2 const& v) { \ CHD_FUNC T2 operator^(T scalar, T2 const& v) { \
return {scalar ^ v.x, scalar ^ v.y}; \ return {scalar ^ v.x, scalar ^ v.y}; \
} \ } \
CHD_FUNC T2 operator^(T2 const& v1, T2 const& v2) { \ CHD_FUNC T2 operator^(T2 const& v1, T2 const& v2) { \
return {v1.x ^ v2.x, v1.y ^ v2.y}; \ return {v1.x ^ v2.x, v1.y ^ v2.y}; \
} \ } \
CHD_FUNC T2 operator^=(T2& v1, T2 const& v2) { \
v1 = {v1.x ^ v2.x, v1.y ^ v2.y}; \
return v1; \
} \
CHD_FUNC T2 operator<<(T2 const& v, T scalar) { \ CHD_FUNC T2 operator<<(T2 const& v, T scalar) { \
return {v.x << scalar, v.y << scalar}; \ return {v.x << scalar, v.y << scalar}; \
} \ } \
...@@ -517,12 +531,20 @@ HD_FUNC double rnorm4d(double a, double b, double c, double d) { ...@@ -517,12 +531,20 @@ HD_FUNC double rnorm4d(double a, double b, double c, double d) {
CHD_FUNC T3 operator^(T3 const& v, T scalar) { \ CHD_FUNC T3 operator^(T3 const& v, T scalar) { \
return {v.x ^ scalar, v.y ^ scalar, v.z ^ scalar}; \ return {v.x ^ scalar, v.y ^ scalar, v.z ^ scalar}; \
} \ } \
CHD_FUNC T3 operator^=(T3& v, T scalar) { \
v = {v.x ^ scalar, v.y ^ scalar, v.z ^ scalar}; \
return v; \
} \
CHD_FUNC T3 operator^(T scalar, T3 const& v) { \ CHD_FUNC T3 operator^(T scalar, T3 const& v) { \
return {scalar ^ v.x, scalar ^ v.y, scalar ^ v.z}; \ return {scalar ^ v.x, scalar ^ v.y, scalar ^ v.z}; \
} \ } \
CHD_FUNC T3 operator^(T3 const& v1, T3 const& v2) { \ CHD_FUNC T3 operator^(T3 const& v1, T3 const& v2) { \
return {v1.x ^ v2.x, v1.y ^ v2.y, v1.z ^ v2.z}; \ return {v1.x ^ v2.x, v1.y ^ v2.y, v1.z ^ v2.z}; \
} \ } \
CHD_FUNC T3 operator^=(T3& v1, T3 const& v2) { \
v1 = {v1.x ^ v2.x, v1.y ^ v2.y, v1.z ^ v2.z}; \
return v1; \
} \
CHD_FUNC T3 operator<<(T3 const& v, T scalar) { \ CHD_FUNC T3 operator<<(T3 const& v, T scalar) { \
return {v.x << scalar, v.y << scalar, v.z << scalar}; \ return {v.x << scalar, v.y << scalar, v.z << scalar}; \
} \ } \
...@@ -565,12 +587,20 @@ HD_FUNC double rnorm4d(double a, double b, double c, double d) { ...@@ -565,12 +587,20 @@ HD_FUNC double rnorm4d(double a, double b, double c, double d) {
CHD_FUNC T4 operator^(T4 const& v, T scalar) { \ CHD_FUNC T4 operator^(T4 const& v, T scalar) { \
return {v.x ^ scalar, v.y ^ scalar, v.z ^ scalar, v.w ^ scalar}; \ return {v.x ^ scalar, v.y ^ scalar, v.z ^ scalar, v.w ^ scalar}; \
} \ } \
CHD_FUNC T4 operator^=(T4& v, T scalar) { \
v = {v.x ^ scalar, v.y ^ scalar, v.z ^ scalar, v.w ^ scalar}; \
return v; \
} \
CHD_FUNC T4 operator^(T scalar, T4 const& v) { \ CHD_FUNC T4 operator^(T scalar, T4 const& v) { \
return {scalar ^ v.x, scalar ^ v.y, scalar ^ v.z, scalar ^ v.w}; \ return {scalar ^ v.x, scalar ^ v.y, scalar ^ v.z, scalar ^ v.w}; \
} \ } \
CHD_FUNC T4 operator^(T4 const& v1, T4 const& v2) { \ CHD_FUNC T4 operator^(T4 const& v1, T4 const& v2) { \
return {v1.x ^ v2.x, v1.y ^ v2.y, v1.z ^ v2.z, v1.w ^ v2.w}; \ return {v1.x ^ v2.x, v1.y ^ v2.y, v1.z ^ v2.z, v1.w ^ v2.w}; \
} \ } \
CHD_FUNC T4 operator^=(T4& v1, T4 const& v2) { \
v1 = {v1.x ^ v2.x, v1.y ^ v2.y, v1.z ^ v2.z, v1.w ^ v2.w}; \
return v1; \
} \
CHD_FUNC T4 operator<<(T4 const& v, T scalar) { \ CHD_FUNC T4 operator<<(T4 const& v, T scalar) { \
return {v.x << scalar, v.y << scalar, v.z << scalar, v.w << scalar}; \ return {v.x << scalar, v.y << scalar, v.z << scalar, v.w << scalar}; \
} \ } \
...@@ -858,6 +888,15 @@ HD_FUNC double rnorm4d(double a, double b, double c, double d) { ...@@ -858,6 +888,15 @@ HD_FUNC double rnorm4d(double a, double b, double c, double d) {
CHD_FUNC T3 cross(T3 a, T3 b) { \ CHD_FUNC T3 cross(T3 a, T3 b) { \
return {a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x}; \ return {a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x}; \
} \ } \
HD_FUNC T2 sqrt(T2 a) { \
return {sqrt(a.x), sqrt(a.y)}; \
} \
HD_FUNC T3 sqrt(T3 a) { \
return {sqrt(a.x), sqrt(a.y), sqrt(a.z)}; \
} \
HD_FUNC T4 sqrt(T4 a) { \
return {sqrt(a.x), sqrt(a.y), sqrt(a.z), sqrt(a.w)}; \
} \
HD_FUNC T norm(T2 a) { \ HD_FUNC T norm(T2 a) { \
return sqrt(dot(a, a)); \ return sqrt(dot(a, a)); \
} \ } \
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment