38 #include <hip/hip_fp16.h>
40 #if __has_include(<half/half.hpp>)
41 #include <half/half.hpp>
45 using halfhpp = half_float::half;
46 typedef halfhpp Rpp16f;
51 #include <immintrin.h>
52 #include <smmintrin.h>
53 #include <x86intrin.h>
58 #define RPP_MIN_8U (0)
60 #define RPP_MAX_8U (255)
62 #define RPPT_MAX_DIMS (5)
65 #define RPPT_MAX_DIMS_SAMPLE (4)
67 #define RPPT_MAX_AUDIO_CHANNELS (16)
70 #include <hip/hip_runtime.h>
71 #define RPP_HOST_DEVICE __host__ __device__
75 #define RPP_HIP_RETURN_IF_ERROR(expr) \
77 hipError_t _rpp_hip_err = (expr); \
78 if (_rpp_hip_err != hipSuccess) { \
79 fprintf(stderr, "HIP runtime error: %s returned %d at %s:%d", #expr, _rpp_hip_err, \
80 __FILE__, __LINE__); \
81 return RPP_ERROR_HIP_RUNTIME; \
87 #define HIP_CHECK_LAUNCH_RETURN() \
89 hipError_t status = hipGetLastError(); \
90 if (status != hipSuccess) { \
91 fprintf(stderr, "HIP kernel launch error: returned %d at %s:%d", status, __FILE__, \
93 return RPP_ERROR_HIP_LAUNCH; \
97 #define RPP_HOST_DEVICE
100 const float ONE_OVER_6 = 1.0f / 6;
101 const float ONE_OVER_3 = 1.0f / 3;
102 const float TWO_OVER_3 = 2.0f / 3;
103 const float ONE_OVER_255 = 1.0f / 255;
104 const uint MMS_MAX_SCRATCH_MEMORY = 115293120;
106 const uint SPECTROGRAM_MAX_SCRATCH_MEMORY =
109 #define DROPOUT_FIXED_SEED 42
110 #define RANDOM_ERASE_NOISE_BUFFER_SIDE \
231 typedef enum { RPP_HOST_BACKEND, RPP_HIP_BACKEND }
RppBackend;
237 rppStatusSuccess = 0,
238 rppStatusBadParm = -1,
239 rppStatusUnknownError = -2,
240 rppStatusNotInitialized = -3,
241 rppStatusInvalidValue = -4,
242 rppStatusAllocFailed = -5,
243 rppStatusInternalError = -6,
244 rppStatusNotImplemented = -7,
245 rppStatusUnsupportedOp = -8,
253 RPP_TENSOR_OP_SUBTRACT,
254 RPP_TENSOR_OP_MULTIPLY,
261 typedef enum { RPP_TENSOR_OP_AND, RPP_TENSOR_OP_OR, RPP_TENSOR_OP_XOR }
RpptBitwiseOp;
271 RPP_BROADCAST_ENABLE,
272 RPP_BROADCAST_DISABLE
382 NEAREST_NEIGHBOR = 0,
465 int roiWidth, roiHeight;
474 int roiWidth, roiHeight, roiDepth;
520 : dataType(dataType), n(n), c(c), h(h), w(w), layout(layout) {
521 if (layout == NCHW) {
522 strides.nStride = c * h * w;
523 strides.cStride = h * w;
526 }
else if (layout == NHWC) {
527 strides.nStride = h * w * c;
528 strides.hStride = w * c;
536 : offsetInBytes(offsetInBytes),
616 float boxMullerExtra;
648 switch (interpolationType) {
649 case RpptInterpolationType::BICUBIC: {
653 case RpptInterpolationType::LANCZOS: {
654 if (in_size > out_size) {
655 this->radius = 3.0f * scaleRatio;
656 this->scale = (1 / scaleRatio);
661 case RpptInterpolationType::GAUSSIAN: {
662 if (in_size > out_size) {
663 this->radius = scaleRatio;
664 this->scale = (1 / scaleRatio);
668 case RpptInterpolationType::TRIANGULAR: {
669 if (in_size > out_size) {
670 this->radius = scaleRatio;
671 this->scale = (1 / scaleRatio);
681 this->size = std::ceil(2 * this->radius);
696 Rpp32f locRaw = x * scale + center;
697 Rpp32s locFloor = std::floor(locRaw);
698 Rpp32f weight = locRaw - locFloor;
699 locFloor = std::max(std::min(locFloor, lookupSize - 2), 0);
700 Rpp32f current = lookup[locFloor];
701 Rpp32f next = lookup[locFloor + 1];
702 return current + weight * (next - current);
705 inline __m128 operator()(__m128 x) {
706 __m128 pLocRaw = _mm_add_ps(_mm_mul_ps(x, pScale), pCenter);
707 __m128i pxLocFloor = _mm_cvttps_epi32(pLocRaw);
708 __m128 pLocFloor = _mm_cvtepi32_ps(pxLocFloor);
709 __m128 pWeight = _mm_sub_ps(pLocRaw, pLocFloor);
711 _mm_storeu_si128(
reinterpret_cast<__m128i*
>(idx), pxLocFloor);
713 _mm_setr_ps(lookup[idx[0]], lookup[idx[1]], lookup[idx[2]], lookup[idx[3]]);
714 __m128 pNext = _mm_setr_ps(lookup[idx[0] + 1], lookup[idx[1] + 1], lookup[idx[2] + 1],
716 return _mm_add_ps(pCurrent, _mm_mul_ps(pWeight, _mm_sub_ps(pNext, pCurrent)));
719 Rpp32f scale = 1, center = 1;
720 Rpp32s lobes = 0, coeffs = 0;
722 Rpp32f* lookupPinned =
nullptr;
723 std::vector<Rpp32f> lookup;
724 __m128 pCenter, pScale;
732 inline RPP_HOST_DEVICE
virtual Rpp32f hz_to_mel(
Rpp32f hz) = 0;
733 inline RPP_HOST_DEVICE
virtual Rpp32f mel_to_hz(
Rpp32f mel) = 0;
742 return 1127.0f * std::log(1.0f + (hz / 700.0f));
745 return 700.0f * (std::exp(mel / 1127.0f) - 1.0f);
757 const Rpp32f fsp = 66.666667f;
758 const Rpp32f minLogHz = 1000.0;
759 const Rpp32f minLogMel = (minLogHz - freqLow) / fsp;
760 const Rpp32f stepLog = 0.068751777;
762 const Rpp32f invMinLogHz = 0.001f;
763 const Rpp32f invStepLog = 1.0f / stepLog;
764 const Rpp32f invFsp = 1.0f / fsp;
769 mel = minLogMel + std::log(hz * invMinLogHz) * invStepLog;
771 mel = (hz - freqLow) * invFsp;
778 if (mel >= minLogMel)
779 hz = minLogHz * std::exp(stepLog * (mel - minLogMel));
781 hz = freqLow + mel * fsp;
795 Rpp32f* scratchBufferHost;
unsigned int Rpp32u
32 bit unsigned int
Definition: rppdefs.h:125
int Rpp32s
32 bit signed int
Definition: rppdefs.h:127
signed char Rpp8s
8 bit signed char
Definition: rppdefs.h:119
RpptMelScaleFormula
RPPT Mel Scale Formula.
Definition: rppdefs.h:412
unsigned short Rpp16u
16 bit unsigned short
Definition: rppdefs.h:121
unsigned char Rpp8u
8 bit unsigned char
Definition: rppdefs.h:117
void * RppPtr_t
void pointer
Definition: rppdefs.h:137
RpptLayout
RPPT Tensor layout type enum.
Definition: rppdefs.h:322
RpptRoiType
RPPT Tensor 2D ROI type enum.
Definition: rppdefs.h:360
RpptDataType
RPPT Tensor datatype enum.
Definition: rppdefs.h:317
RpptImageBorderType
RPPT Image Border Type.
Definition: rppdefs.h:403
struct RpptResamplingWindow RpptResamplingWindow
RPPT Tensor RpptResamplingWindow type struct.
double Rpp64f
64 bit double
Definition: rppdefs.h:135
RpptImageBorderEdge
RPPT Image Border Edge type enum.
Definition: rppdefs.h:398
RpptAudioBorderType
RPPT Audio Border Type.
Definition: rppdefs.h:393
size_t RppSize_t
size_t
Definition: rppdefs.h:139
RpptBitwiseOp
RPPT Broadcast Mode type enum.
Definition: rppdefs.h:261
RpptColorStandard
Color space standard for NV12 to RGB (YUV/YCbCr to RGB matrix).
Definition: rppdefs.h:336
struct GenericFilter GenericFilter
RPPT Tensor GenericFilter type struct.
RppStatus
RPP RppStatus type enums.
Definition: rppdefs.h:144
RpptColorRange
Color range (luma/chroma legal levels) for NV12 to RGB.
Definition: rppdefs.h:352
RpptRoi3DType
RPPT Tensor 3D ROI type enum.
Definition: rppdefs.h:368
unsigned long long Rpp64u
64 bit unsigned long long
Definition: rppdefs.h:129
#define RPPT_MAX_DIMS
RPP maximum dimensions in tensor .
Definition: rppdefs.h:62
RpptInterpolationType
RPPT Tensor interpolation type enum.
Definition: rppdefs.h:381
RpptSubpixelLayout
RPPT Tensor subpixel layout type enum.
Definition: rppdefs.h:376
RpptOp
RPP Tensor Operations type enum.
Definition: rppdefs.h:251
short Rpp16s
16 bit signed short
Definition: rppdefs.h:123
float Rpp32f
32 bit float
Definition: rppdefs.h:133
RppBackend
RPP RppBackend type enums.
Definition: rppdefs.h:231
long long Rpp64s
64 bit long long
Definition: rppdefs.h:131
rppStatus_t
RPP rppStatus_t type enums.
Definition: rppdefs.h:236
@ RpptColorStandard_FCC
Definition: rppdefs.h:338
@ RpptColorStandard_SMPTE240M
Definition: rppdefs.h:341
@ RpptColorStandard_BT601
Definition: rppdefs.h:340
@ RpptColorStandard_BT470BG
Definition: rppdefs.h:339
@ RpptColorStandard_BT709
Definition: rppdefs.h:337
@ RpptColorStandard_BT2020_NCL
Definition: rppdefs.h:342
@ RpptColorStandard_BT2020_CL
Definition: rppdefs.h:343
@ RPP_ERROR_NOT_IMPLEMENTED
Function variant requested is not implemented / unsupported.
Definition: rppdefs.h:161
@ RPP_ERROR_INVALID_DST_DATATYPE
Invalid dst tensor datatype. (Needs to adhere to function specification.) group_rppdefs.
Definition: rppdefs.h:179
@ RPP_ERROR_INVALID_OUTPUT_TILE_LENGTH
Invalid output tile length (Needs to adhere to function specification.) group_rppdefs.
Definition: rppdefs.h:200
@ RPP_ERROR_INVALID_DIM_LENGTHS
Length in some dimensions are invalid. (Needs to adhere to function specification....
Definition: rppdefs.h:215
@ RPP_ERROR_OUT_OF_BOUND_SRC_ROI
Out of bound source ROI.
Definition: rppdefs.h:192
@ RPP_ERROR_OUT_OF_BOUND_SHARED_MEMORY_SIZE
Shared memory size needed is beyond the bounds (Needs to adhere to function specification....
Definition: rppdefs.h:203
@ RPP_ERROR_INCOMPATIBLE_BACKEND
The user specified backend is not compatible with the initialized handle group_rppdefs.
Definition: rppdefs.h:221
@ RPP_ERROR_HIP_LAUNCH
HIP/GPU runtime or kernel launch error.
Definition: rppdefs.h:223
@ RPP_ERROR_ZERO_DIVISION
Arguments provided will result in zero division error.
Definition: rppdefs.h:155
@ RPP_ERROR_INVALID_ARGUMENTS
One or more arguments invalid. (Needs to adhere to function specification.) group_rppdefs.
Definition: rppdefs.h:151
@ RPP_ERROR_LAYOUT_MISMATCH
src and dst layout mismatch
Definition: rppdefs.h:194
@ RPP_ERROR_INVALID_CHANNELS
Number of channels is invalid. (Needs to adhere to function specification.) group_rppdefs.
Definition: rppdefs.h:197
@ RPP_ERROR_INVALID_SRC_CHANNELS
Invalid src tensor number of channels. (Needs to adhere to function specification....
Definition: rppdefs.h:164
@ RPP_ERROR_INVALID_SRC_OR_DST_DATATYPE
Invalid src/dst tensor datatype. (Needs to adhere to function specification.)
Definition: rppdefs.h:182
@ RPP_ERROR_INVALID_PARAMETER_DATATYPE
Invalid datatype.
Definition: rppdefs.h:187
@ RPP_ERROR_NOT_ENOUGH_MEMORY
Not enough memory to write outputs, as per dim-lengths and strides set in descriptor.
Definition: rppdefs.h:190
@ RPP_ERROR
Unspecified error.
Definition: rppdefs.h:148
@ RPP_ERROR_INVALID_SRC_DIMS
Number of src dims is invalid. (Needs to adhere to function specification.) group_rppdefs.
Definition: rppdefs.h:209
@ RPP_ERROR_OUT_OF_BOUND_SCRATCH_MEMORY_SIZE
Scratch memory size needed is beyond the bounds (Needs to adhere to function specification....
Definition: rppdefs.h:206
@ RPP_ERROR_INVALID_DST_LAYOUT
Invalid dst tensor layout. (Needs to adhere to function specification.) group_rppdefs.
Definition: rppdefs.h:173
@ RPP_ERROR_INVALID_AXIS
The specified axis is invalid or out of range. (Needs to adhere to function specification....
Definition: rppdefs.h:218
@ RPP_ERROR_INVALID_DST_CHANNELS
Invalid dst tensor number of channels. (Needs to adhere to function specification....
Definition: rppdefs.h:167
@ RPP_ERROR_HIP_RUNTIME
Internal HIP/GPU runtime error.
Definition: rppdefs.h:225
@ RPP_ERROR_INVALID_SRC_DATATYPE
Invalid src tensor datatype. (Needs to adhere to function specification.) group_rppdefs.
Definition: rppdefs.h:176
@ RPP_ERROR_INVALID_SRC_LAYOUT
Invalid src tensor layout. (Needs to adhere to function specification.) group_rppdefs.
Definition: rppdefs.h:170
@ RPP_ERROR_HIGH_SRC_DIMENSION
Src tensor / src ROI dimension too high. (Needs to adhere to function specification....
Definition: rppdefs.h:158
@ RPP_SUCCESS
No error.
Definition: rppdefs.h:146
@ RPP_ERROR_INSUFFICIENT_DST_BUFFER_LENGTH
Insufficient dst buffer length provided. (Needs to adhere to function specification....
Definition: rppdefs.h:185
@ RPP_ERROR_INVALID_DST_DIMS
Number of dst dims is invalid. (Needs to adhere to function specification.) group_rppdefs.
Definition: rppdefs.h:212
@ RPP_ERROR_LOW_OFFSET
Low tensor offsetInBytes provided for src/dst tensor.
Definition: rppdefs.h:153
@ RpptColorRange_FULL
Definition: rppdefs.h:354
@ RpptColorRange_STUDIO
Definition: rppdefs.h:353
RpptBroadcastMode
Broadcast support mode for RPP Tensor operations.
Definition: rppdefs.h:270
Base class for Mel scale conversions.
Definition: rppdefs.h:730
RPPT Tensor GenericFilter type struct.
Definition: rppdefs.h:642
Derived class for HTK Mel scale conversions.
Definition: rppdefs.h:740
RPP initialize handle.
Definition: rppdefs.h:839
RPP 24 float vector.
Definition: rppdefs.h:308
RPP 6 float vector.
Definition: rppdefs.h:287
RPP 9 float vector.
Definition: rppdefs.h:294
RPP 24 signed int vector.
Definition: rppdefs.h:301
RPP layout params.
Definition: rppdefs.h:279
RPPT Tensor 2D bilinear neighborhood 32-bit signed int 8-length-vectors type struct.
Definition: rppdefs.h:622
RPPT Tensor 2D bilinear neighborhood 32-bit float 8-length-vectors type struct.
Definition: rppdefs.h:632
RPPT Tensor Channel Offsets struct.
Definition: rppdefs.h:446
RPPT Tensor descriptor type struct.
Definition: rppdefs.h:509
RPPT Tensor 32-bit float RGB type struct.
Definition: rppdefs.h:571
RPPT Tensor 2D 32-bit float vector type struct.
Definition: rppdefs.h:588
RPPT Tensor Generic descriptor type struct.
Definition: rppdefs.h:550
RPPT Tensor 2D image patch dimensions type struct.
Definition: rppdefs.h:596
RPPT Image 2D cartesian point type struct.
Definition: rppdefs.h:421
RPPT Image 3D point type struct.
Definition: rppdefs.h:429
RPPT Tensor 8-bit uchar RGB type struct.
Definition: rppdefs.h:562
RPPT Tensor RpptResamplingWindow type struct.
Definition: rppdefs.h:688
RPPT Tensor 3D ROI LTFRBB struct.
Definition: rppdefs.h:455
RPPT Tensor 2D ROI LTRB struct.
Definition: rppdefs.h:438
RPPT Tensor 2D ROI XYWH struct.
Definition: rppdefs.h:463
RPPT Tensor 3D ROI XYZWHD struct.
Definition: rppdefs.h:472
RPPT Tensor strides type struct.
Definition: rppdefs.h:499
RPPT Tensor 2D 32-bit uint vector type struct.
Definition: rppdefs.h:580
RPPT Tensor random number generator state (xorwow box muller state) type struct.
Definition: rppdefs.h:612
RPPT Tensor random number generator state (xorwow state) type struct.
Definition: rppdefs.h:604
Derived class for Slaney Mel scale conversions.
Definition: rppdefs.h:755
RPP HIP 32-bit float memory.
Definition: rppdefs.h:805
RPP HOST memory type struct.
Definition: rppdefs.h:794
RPP HIP memory management type struct.
Definition: rppdefs.h:812
RPP HIP-HOST memory management.
Definition: rppdefs.h:820
RPPT Tensor 3D ROI union.
Definition: rppdefs.h:490
RPPT Tensor 2D ROI union.
Definition: rppdefs.h:481