From c7462bd5240cae659cd52a480bfa8906c4cc5f52 Mon Sep 17 00:00:00 2001 From: Aditya Atluri Date: Fri, 10 Jun 2016 09:46:31 -0500 Subject: [PATCH] Added more device functions 1. Added copyright for device float test 2. Added device double functions support 3. Added device double functions test 4. Corrected device function signatures in headers Change-Id: I13c8829682c925992f5cad84062bc9f702fe4048 --- hipamd/include/hcc_detail/hip_runtime.h | 8 +- hipamd/src/device_util.cpp | 66 +++ hipamd/tests/src/CMakeLists.txt | 1 + hipamd/tests/src/hipTestDevice.cpp | 18 + hipamd/tests/src/hipTestDeviceDouble.cpp | 529 +++++++++++++++++++++++ 5 files changed, 618 insertions(+), 4 deletions(-) create mode 100644 hipamd/tests/src/hipTestDeviceDouble.cpp diff --git a/hipamd/include/hcc_detail/hip_runtime.h b/hipamd/include/hcc_detail/hip_runtime.h index eb518cc88d..fbe1ffce15 100644 --- a/hipamd/include/hcc_detail/hip_runtime.h +++ b/hipamd/include/hcc_detail/hip_runtime.h @@ -243,7 +243,7 @@ __device__ double jn(int n, double x); __device__ double ldexp(double x, int exp); __device__ double lgamma(double x); __device__ long long llrint(double x); -__device__ long llround(double x); +__device__ long long llround(double x); __device__ double log(double x); __device__ double log10(double x); __device__ double log1p(double x); @@ -257,7 +257,7 @@ __device__ double nearbyint(double x); __device__ double nextafter(double x, double y); __device__ double norm(int dim, const double* t); __device__ double norm3d(double a, double b, double c); -__device__ double norm4d(double a, double b, double d); +__device__ double norm4d(double a, double b, double c, double d); __device__ double normcdf(double y); __device__ double normcdfinv(double y); __device__ double pow(double x, double y); @@ -275,8 +275,8 @@ __device__ double scalbln(double x, long int n); __device__ double scalbn(double x, int n); __host__ __device__ unsigned signbit(double a); __device__ double sin(double a); -__device__ double sincos(double x, double *sptr, double *cptr); -__device__ double sincospi(double x, double *sptr, double *cptr); +__device__ void sincos(double x, double *sptr, double *cptr); +__device__ void sincospi(double x, double *sptr, double *cptr); __device__ double sinh(double x); __host__ __device__ double sinpi(double x); __device__ double sqrt(double x); diff --git a/hipamd/src/device_util.cpp b/hipamd/src/device_util.cpp index 55a394f7b0..cd57e54af3 100644 --- a/hipamd/src/device_util.cpp +++ b/hipamd/src/device_util.cpp @@ -486,6 +486,16 @@ __device__ double log(double x) { return hc::precise_math::log(x); } +__device__ long long int llrint(double x) +{ + long long int y = hc::precise_math::round(x); + return y; +} +__device__ long long int llround(double x) +{ + long long int y = hc::precise_math::round(x); + return y; +} __device__ double log10(double x) { return hc::precise_math::log10(x); @@ -502,6 +512,16 @@ __device__ double logb(double x) { return hc::precise_math::logb(x); } +__device__ long int lrint(double x) +{ + long int y = hc::precise_math::round(x); + return y; +} +__device__ long int lround(double x) +{ + long int y = hc::precise_math::round(x); + return y; +} __device__ double nan(const char *tagp) { return hc::precise_math::nan((int)*tagp); @@ -510,6 +530,17 @@ __device__ double nearbyint(double x) { return hc::precise_math::nearbyint(x); } +__device__ double norm3d(double a, double b, double c) +{ + double x = a*a + b*b + c*c; + return hc::precise_math::sqrt(x); +} +__device__ double norm4d(double a, double b, double c, double d) +{ + double x = a*a + b*b; + double y = c*c + d*d; + return hc::precise_math::sqrt(x+y); +} __device__ double pow(double x, double y) { return hc::precise_math::pow(x, y); @@ -518,6 +549,31 @@ __device__ double remainder(double x, double y) { return hc::precise_math::remainder(x, y); } +__device__ double rhypot(double x, double y) +{ + return 1/hc::precise_math::sqrt(x*x + y*y); +} +__device__ double rint(double x) +{ + return hc::precise_math::round(x); +} +__device__ double rnorm3d(double a, double b, double c) +{ + return hc::precise_math::rsqrt(a*a + b*b + c*c); +} +__device__ double rnorm4d(double a, double b, double c, double d) +{ + return hc::precise_math::rsqrt(a*a + b*b + c*c + d*d); +} +__device__ double rnorm(int dim, const double* t) +{ + double x = 0.0; + for(int i=0;i