From dc45802707b6e3f1a3eedc8e8a5583102b2d8a0d Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 5 Apr 2023 11:19:00 -0700 Subject: Fix linking issue in slangpy + no mask param for kernels. (#2778) * Fix linking issue in slangpy + no mask param for kernels. * add cuda header changes * fix * More correct change of active mask insertion. --------- Co-authored-by: Yong He --- prelude/slang-cuda-prelude.h | 196 +++++++++++++++++++++--------------------- prelude/slang-torch-prelude.h | 3 + 2 files changed, 101 insertions(+), 98 deletions(-) (limited to 'prelude') diff --git a/prelude/slang-cuda-prelude.h b/prelude/slang-cuda-prelude.h index 5d24df455..1bbd42168 100644 --- a/prelude/slang-cuda-prelude.h +++ b/prelude/slang-cuda-prelude.h @@ -920,115 +920,115 @@ SLANG_FORCE_INLINE SLANG_CUDA_CALL void surf3Dwrite_convert(float4 v, cu // ----------------------------- F32 ----------------------------------------- // Unary -SLANG_CUDA_CALL float F32_ceil(float f) { return ::ceilf(f); } -SLANG_CUDA_CALL float F32_floor(float f) { return ::floorf(f); } -SLANG_CUDA_CALL float F32_round(float f) { return ::roundf(f); } -SLANG_CUDA_CALL float F32_sin(float f) { return ::sinf(f); } -SLANG_CUDA_CALL float F32_cos(float f) { return ::cosf(f); } -SLANG_CUDA_CALL void F32_sincos(float f, float* s, float* c) { ::sincosf(f, s, c); } -SLANG_CUDA_CALL float F32_tan(float f) { return ::tanf(f); } -SLANG_CUDA_CALL float F32_asin(float f) { return ::asinf(f); } -SLANG_CUDA_CALL float F32_acos(float f) { return ::acosf(f); } -SLANG_CUDA_CALL float F32_atan(float f) { return ::atanf(f); } -SLANG_CUDA_CALL float F32_sinh(float f) { return ::sinhf(f); } -SLANG_CUDA_CALL float F32_cosh(float f) { return ::coshf(f); } -SLANG_CUDA_CALL float F32_tanh(float f) { return ::tanhf(f); } -SLANG_CUDA_CALL float F32_log2(float f) { return ::log2f(f); } -SLANG_CUDA_CALL float F32_log(float f) { return ::logf(f); } -SLANG_CUDA_CALL float F32_log10(float f) { return ::log10f(f); } -SLANG_CUDA_CALL float F32_exp2(float f) { return ::exp2f(f); } -SLANG_CUDA_CALL float F32_exp(float f) { return ::expf(f); } -SLANG_CUDA_CALL float F32_abs(float f) { return ::fabsf(f); } -SLANG_CUDA_CALL float F32_trunc(float f) { return ::truncf(f); } -SLANG_CUDA_CALL float F32_sqrt(float f) { return ::sqrtf(f); } -SLANG_CUDA_CALL float F32_rsqrt(float f) { return ::rsqrtf(f); } -SLANG_CUDA_CALL float F32_sign(float f) { return ( f == 0.0f) ? f : (( f < 0.0f) ? -1.0f : 1.0f); } -SLANG_CUDA_CALL float F32_frac(float f) { return f - F32_floor(f); } - -SLANG_CUDA_CALL bool F32_isnan(float f) { return isnan(f); } -SLANG_CUDA_CALL bool F32_isfinite(float f) { return isfinite(f); } -SLANG_CUDA_CALL bool F32_isinf(float f) { return isinf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_ceil(float f) { return ::ceilf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_floor(float f) { return ::floorf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_round(float f) { return ::roundf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_sin(float f) { return ::sinf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_cos(float f) { return ::cosf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL void F32_sincos(float f, float* s, float* c) { ::sincosf(f, s, c); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_tan(float f) { return ::tanf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_asin(float f) { return ::asinf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_acos(float f) { return ::acosf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_atan(float f) { return ::atanf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_sinh(float f) { return ::sinhf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_cosh(float f) { return ::coshf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_tanh(float f) { return ::tanhf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_log2(float f) { return ::log2f(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_log(float f) { return ::logf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_log10(float f) { return ::log10f(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_exp2(float f) { return ::exp2f(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_exp(float f) { return ::expf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_abs(float f) { return ::fabsf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_trunc(float f) { return ::truncf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_sqrt(float f) { return ::sqrtf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_rsqrt(float f) { return ::rsqrtf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_sign(float f) { return ( f == 0.0f) ? f : (( f < 0.0f) ? -1.0f : 1.0f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_frac(float f) { return f - F32_floor(f); } + +SLANG_FORCE_INLINE SLANG_CUDA_CALL bool F32_isnan(float f) { return isnan(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL bool F32_isfinite(float f) { return isfinite(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL bool F32_isinf(float f) { return isinf(f); } // Binary -SLANG_CUDA_CALL float F32_min(float a, float b) { return ::fminf(a, b); } -SLANG_CUDA_CALL float F32_max(float a, float b) { return ::fmaxf(a, b); } -SLANG_CUDA_CALL float F32_pow(float a, float b) { return ::powf(a, b); } -SLANG_CUDA_CALL float F32_fmod(float a, float b) { return ::fmodf(a, b); } -SLANG_CUDA_CALL float F32_remainder(float a, float b) { return ::remainderf(a, b); } -SLANG_CUDA_CALL float F32_atan2(float a, float b) { return float(::atan2(a, b)); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_min(float a, float b) { return ::fminf(a, b); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_max(float a, float b) { return ::fmaxf(a, b); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_pow(float a, float b) { return ::powf(a, b); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_fmod(float a, float b) { return ::fmodf(a, b); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_remainder(float a, float b) { return ::remainderf(a, b); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_atan2(float a, float b) { return float(::atan2(a, b)); } -SLANG_CUDA_CALL float F32_frexp(float x, float* e) +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_frexp(float x, float* e) { int ei; float m = ::frexpf(x, &ei); *e = ei; return m; } -SLANG_CUDA_CALL float F32_modf(float x, float* ip) +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_modf(float x, float* ip) { return ::modff(x, ip); } -SLANG_CUDA_CALL uint32_t F32_asuint(float f) { Union32 u; u.f = f; return u.u; } -SLANG_CUDA_CALL int32_t F32_asint(float f) { Union32 u; u.f = f; return u.i; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL uint32_t F32_asuint(float f) { Union32 u; u.f = f; return u.u; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL int32_t F32_asint(float f) { Union32 u; u.f = f; return u.i; } // Ternary -SLANG_CUDA_CALL float F32_fma(float a, float b, float c) { return ::fmaf(a, b, c); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float F32_fma(float a, float b, float c) { return ::fmaf(a, b, c); } // ----------------------------- F64 ----------------------------------------- // Unary -SLANG_CUDA_CALL double F64_ceil(double f) { return ::ceil(f); } -SLANG_CUDA_CALL double F64_floor(double f) { return ::floor(f); } -SLANG_CUDA_CALL double F64_round(double f) { return ::round(f); } -SLANG_CUDA_CALL double F64_sin(double f) { return ::sin(f); } -SLANG_CUDA_CALL double F64_cos(double f) { return ::cos(f); } -SLANG_CUDA_CALL void F64_sincos(double f, double* s, double* c) { ::sincos(f, s, c); } -SLANG_CUDA_CALL double F64_tan(double f) { return ::tan(f); } -SLANG_CUDA_CALL double F64_asin(double f) { return ::asin(f); } -SLANG_CUDA_CALL double F64_acos(double f) { return ::acos(f); } -SLANG_CUDA_CALL double F64_atan(double f) { return ::atan(f); } -SLANG_CUDA_CALL double F64_sinh(double f) { return ::sinh(f); } -SLANG_CUDA_CALL double F64_cosh(double f) { return ::cosh(f); } -SLANG_CUDA_CALL double F64_tanh(double f) { return ::tanh(f); } -SLANG_CUDA_CALL double F64_log2(double f) { return ::log2(f); } -SLANG_CUDA_CALL double F64_log(double f) { return ::log(f); } -SLANG_CUDA_CALL double F64_log10(float f) { return ::log10(f); } -SLANG_CUDA_CALL double F64_exp2(double f) { return ::exp2(f); } -SLANG_CUDA_CALL double F64_exp(double f) { return ::exp(f); } -SLANG_CUDA_CALL double F64_abs(double f) { return ::fabs(f); } -SLANG_CUDA_CALL double F64_trunc(double f) { return ::trunc(f); } -SLANG_CUDA_CALL double F64_sqrt(double f) { return ::sqrt(f); } -SLANG_CUDA_CALL double F64_rsqrt(double f) { return ::rsqrt(f); } -SLANG_CUDA_CALL double F64_sign(double f) { return (f == 0.0) ? f : ((f < 0.0) ? -1.0 : 1.0); } -SLANG_CUDA_CALL double F64_frac(double f) { return f - F64_floor(f); } - -SLANG_CUDA_CALL bool F64_isnan(double f) { return isnan(f); } -SLANG_CUDA_CALL bool F64_isfinite(double f) { return isfinite(f); } -SLANG_CUDA_CALL bool F64_isinf(double f) { return isinf(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_ceil(double f) { return ::ceil(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_floor(double f) { return ::floor(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_round(double f) { return ::round(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_sin(double f) { return ::sin(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_cos(double f) { return ::cos(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL void F64_sincos(double f, double* s, double* c) { ::sincos(f, s, c); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_tan(double f) { return ::tan(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_asin(double f) { return ::asin(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_acos(double f) { return ::acos(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_atan(double f) { return ::atan(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_sinh(double f) { return ::sinh(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_cosh(double f) { return ::cosh(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_tanh(double f) { return ::tanh(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_log2(double f) { return ::log2(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_log(double f) { return ::log(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_log10(float f) { return ::log10(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_exp2(double f) { return ::exp2(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_exp(double f) { return ::exp(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_abs(double f) { return ::fabs(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_trunc(double f) { return ::trunc(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_sqrt(double f) { return ::sqrt(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_rsqrt(double f) { return ::rsqrt(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_sign(double f) { return (f == 0.0) ? f : ((f < 0.0) ? -1.0 : 1.0); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_frac(double f) { return f - F64_floor(f); } + +SLANG_FORCE_INLINE SLANG_CUDA_CALL bool F64_isnan(double f) { return isnan(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL bool F64_isfinite(double f) { return isfinite(f); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL bool F64_isinf(double f) { return isinf(f); } // Binary -SLANG_CUDA_CALL double F64_min(double a, double b) { return ::fmin(a, b); } -SLANG_CUDA_CALL double F64_max(double a, double b) { return ::fmax(a, b); } -SLANG_CUDA_CALL double F64_pow(double a, double b) { return ::pow(a, b); } -SLANG_CUDA_CALL double F64_fmod(double a, double b) { return ::fmod(a, b); } -SLANG_CUDA_CALL double F64_remainder(double a, double b) { return ::remainder(a, b); } -SLANG_CUDA_CALL double F64_atan2(double a, double b) { return ::atan2(a, b); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_min(double a, double b) { return ::fmin(a, b); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_max(double a, double b) { return ::fmax(a, b); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_pow(double a, double b) { return ::pow(a, b); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_fmod(double a, double b) { return ::fmod(a, b); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_remainder(double a, double b) { return ::remainder(a, b); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_atan2(double a, double b) { return ::atan2(a, b); } -SLANG_CUDA_CALL double F64_frexp(double x, double* e) +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_frexp(double x, double* e) { int ei; double m = ::frexp(x, &ei); *e = ei; return m; } -SLANG_CUDA_CALL double F64_modf(double x, double* ip) +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_modf(double x, double* ip) { return ::modf(x, ip); } -SLANG_CUDA_CALL void F64_asuint(double d, uint32_t* low, uint32_t* hi) +SLANG_FORCE_INLINE SLANG_CUDA_CALL void F64_asuint(double d, uint32_t* low, uint32_t* hi) { Union64 u; u.d = d; @@ -1036,7 +1036,7 @@ SLANG_CUDA_CALL void F64_asuint(double d, uint32_t* low, uint32_t* hi) *hi = uint32_t(u.u >> 32); } -SLANG_CUDA_CALL void F64_asint(double d, int32_t* low, int32_t* hi) +SLANG_FORCE_INLINE SLANG_CUDA_CALL void F64_asint(double d, int32_t* low, int32_t* hi) { Union64 u; u.d = d; @@ -1045,20 +1045,20 @@ SLANG_CUDA_CALL void F64_asint(double d, int32_t* low, int32_t* hi) } // Ternary -SLANG_CUDA_CALL double F64_fma(double a, double b, double c) { return ::fma(a, b, c); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double F64_fma(double a, double b, double c) { return ::fma(a, b, c); } // ----------------------------- I32 ----------------------------------------- // Unary -SLANG_CUDA_CALL int32_t I32_abs(int32_t f) { return (f < 0) ? -f : f; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL int32_t I32_abs(int32_t f) { return (f < 0) ? -f : f; } // Binary -SLANG_CUDA_CALL int32_t I32_min(int32_t a, int32_t b) { return a < b ? a : b; } -SLANG_CUDA_CALL int32_t I32_max(int32_t a, int32_t b) { return a > b ? a : b; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL int32_t I32_min(int32_t a, int32_t b) { return a < b ? a : b; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL int32_t I32_max(int32_t a, int32_t b) { return a > b ? a : b; } -SLANG_CUDA_CALL float I32_asfloat(int32_t x) { Union32 u; u.i = x; return u.f; } -SLANG_CUDA_CALL uint32_t I32_asuint(int32_t x) { return uint32_t(x); } -SLANG_CUDA_CALL double I32_asdouble(int32_t low, int32_t hi ) +SLANG_FORCE_INLINE SLANG_CUDA_CALL float I32_asfloat(int32_t x) { Union32 u; u.i = x; return u.f; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL uint32_t I32_asuint(int32_t x) { return uint32_t(x); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL double I32_asdouble(int32_t low, int32_t hi ) { Union64 u; u.u = (uint64_t(hi) << 32) | uint32_t(low); @@ -1068,23 +1068,23 @@ SLANG_CUDA_CALL double I32_asdouble(int32_t low, int32_t hi ) // ----------------------------- U32 ----------------------------------------- // Unary -SLANG_CUDA_CALL uint32_t U32_abs(uint32_t f) { return f; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL uint32_t U32_abs(uint32_t f) { return f; } // Binary -SLANG_CUDA_CALL uint32_t U32_min(uint32_t a, uint32_t b) { return a < b ? a : b; } -SLANG_CUDA_CALL uint32_t U32_max(uint32_t a, uint32_t b) { return a > b ? a : b; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL uint32_t U32_min(uint32_t a, uint32_t b) { return a < b ? a : b; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL uint32_t U32_max(uint32_t a, uint32_t b) { return a > b ? a : b; } -SLANG_CUDA_CALL float U32_asfloat(uint32_t x) { Union32 u; u.u = x; return u.f; } -SLANG_CUDA_CALL uint32_t U32_asint(int32_t x) { return uint32_t(x); } +SLANG_FORCE_INLINE SLANG_CUDA_CALL float U32_asfloat(uint32_t x) { Union32 u; u.u = x; return u.f; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL uint32_t U32_asint(int32_t x) { return uint32_t(x); } -SLANG_CUDA_CALL double U32_asdouble(uint32_t low, uint32_t hi) +SLANG_FORCE_INLINE SLANG_CUDA_CALL double U32_asdouble(uint32_t low, uint32_t hi) { Union64 u; u.u = (uint64_t(hi) << 32) | low; return u.d; } -SLANG_CUDA_CALL uint32_t U32_countbits(uint32_t v) +SLANG_FORCE_INLINE SLANG_CUDA_CALL uint32_t U32_countbits(uint32_t v) { // https://docs.nvidia.com/cuda/cuda-math-api/group__CUDA__MATH__INTRINSIC__INT.html#group__CUDA__MATH__INTRINSIC__INT_1g43c9c7d2b9ebf202ff1ef5769989be46 return __popc(v); @@ -1093,19 +1093,19 @@ SLANG_CUDA_CALL uint32_t U32_countbits(uint32_t v) // ----------------------------- I64 ----------------------------------------- -SLANG_CUDA_CALL int64_t I64_abs(int64_t f) { return (f < 0) ? -f : f; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL int64_t I64_abs(int64_t f) { return (f < 0) ? -f : f; } -SLANG_CUDA_CALL int64_t I64_min(int64_t a, int64_t b) { return a < b ? a : b; } -SLANG_CUDA_CALL int64_t I64_max(int64_t a, int64_t b) { return a > b ? a : b; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL int64_t I64_min(int64_t a, int64_t b) { return a < b ? a : b; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL int64_t I64_max(int64_t a, int64_t b) { return a > b ? a : b; } // ----------------------------- U64 ----------------------------------------- -SLANG_CUDA_CALL int64_t U64_abs(uint64_t f) { return f; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL int64_t U64_abs(uint64_t f) { return f; } -SLANG_CUDA_CALL int64_t U64_min(uint64_t a, uint64_t b) { return a < b ? a : b; } -SLANG_CUDA_CALL int64_t U64_max(uint64_t a, uint64_t b) { return a > b ? a : b; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL int64_t U64_min(uint64_t a, uint64_t b) { return a < b ? a : b; } +SLANG_FORCE_INLINE SLANG_CUDA_CALL int64_t U64_max(uint64_t a, uint64_t b) { return a > b ? a : b; } -SLANG_CUDA_CALL uint32_t U64_countbits(uint64_t v) +SLANG_FORCE_INLINE SLANG_CUDA_CALL uint32_t U64_countbits(uint64_t v) { // https://docs.nvidia.com/cuda/cuda-math-api/group__CUDA__MATH__INTRINSIC__INT.html#group__CUDA__MATH__INTRINSIC__INT_1g43c9c7d2b9ebf202ff1ef5769989be46 return __popcll(v); diff --git a/prelude/slang-torch-prelude.h b/prelude/slang-torch-prelude.h index cf04b75ab..03a00719d 100644 --- a/prelude/slang-torch-prelude.h +++ b/prelude/slang-torch-prelude.h @@ -38,6 +38,9 @@ # include #endif // SLANG_LLVM + +#define SLANG_PRELUDE_NAMESPACE + #include "slang-cpp-types-core.h" #include "slang-cpp-scalar-intrinsics.h" -- cgit v1.2.3