diff --git a/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/approxhpvm_runtime_utils.h b/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/approxhpvm_runtime_utils.h index 471b78fb71751a186438f654a38fb86ab709fab2..d9a705d780b17a31afe234808ccf0df4431dbe08 100644 --- a/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/approxhpvm_runtime_utils.h +++ b/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/approxhpvm_runtime_utils.h @@ -6,6 +6,7 @@ #include "configuration.h" +#include "hpvm-rt-controller.h" // Utilities header for ApproxHPVM runtime API (wrapper runtime API) @@ -19,9 +20,17 @@ void* handleTensorAddApproximationTuples( int param = approxTuples[0].second; switch (approx) { case GPUNodeConfiguration::APPROX::FP32 : - return tensorAdd(input, bias); + { + void* t_out; + t_out = tensorAdd(input, bias); + return t_out; + } case GPUNodeConfiguration::APPROX::FP16 : - return tensorHalfAdd(input, bias); + { + void* t_out; + t_out = tensorHalfAdd(input, bias); + return t_out; + } default : CUSTOM_ASSERT(false && "Unknown approximation type"); ERROR("Unknown approximation type"); @@ -47,9 +56,17 @@ void* handleTensorMulApproximationTuples( int param = approxTuples[0].second; switch (approx) { case GPUNodeConfiguration::APPROX::FP32 : - return tensorGemmGPU(lhs, rhs); + { + void* t_out; + t_out = tensorGemmGPU(lhs, rhs); + return t_out; + } case GPUNodeConfiguration::APPROX::FP16 : - return tensorHalfGemmGPU(lhs, rhs); + { + void* t_out; + t_out = tensorHalfGemmGPU(lhs, rhs); + return t_out; + } default : CUSTOM_ASSERT(false && "Unknown approximation type"); ERROR("Unknown approximation type"); @@ -77,15 +94,23 @@ void* handleTensorConvApproximationTuples( int param = approxTuples[0].second; switch (approx) { case GPUNodeConfiguration::APPROX::FP32 : - return tensorConvolution(input, filter, - conv_pad_h, conv_pad_w, - conv_stride_h, conv_stride_w, - 1, 1); + { + void* t_out; + t_out = tensorConvolution(input, filter, + conv_pad_h, conv_pad_w, + conv_stride_h, conv_stride_w, + 1, 1); + return t_out; + } case GPUNodeConfiguration::APPROX::FP16 : - return tensorHalfConvolution(input, filter, - conv_pad_h, conv_pad_w, - conv_stride_h, conv_stride_w, - 1, 1); + { + void* t_out; + t_out = tensorHalfConvolution(input, filter, + conv_pad_h, conv_pad_w, + conv_stride_h, conv_stride_w, + 1, 1); + return t_out; + } case GPUNodeConfiguration::APPROX::PERFORATION : { int row = 0, col = 0; @@ -106,10 +131,12 @@ void* handleTensorConvApproximationTuples( row = 1; col = 1; break; } - return tensorConvPerf(input, filter, - conv_pad_h, conv_pad_w, - conv_stride_h, conv_stride_w, - 1, 1, row, col); + void* t_out; + t_out = tensorConvPerf(input, filter, + conv_pad_h, conv_pad_w, + conv_stride_h, conv_stride_w, + 1, 1, row, col); + return t_out; } default : CUSTOM_ASSERT(false && "Unknown approximation type"); @@ -139,15 +166,23 @@ void* handleTensorGroupConvApproximationTuples( int param = approxTuples[0].second; switch (approx) { case GPUNodeConfiguration::APPROX::FP32 : - return tensorConvolution(input, filter, - vertical_pad, horizontal_pad, - vertical_stride, horizontal_stride, - conv_mode, conv_groups); + { + void* t_out; + t_out = tensorConvolution(input, filter, + vertical_pad, horizontal_pad, + vertical_stride, horizontal_stride, + conv_mode, conv_groups); + return t_out; + } case GPUNodeConfiguration::APPROX::FP16 : - return tensorHalfConvolution(input, filter, - vertical_pad, horizontal_pad, - vertical_stride, horizontal_stride, - conv_mode, conv_groups); + { + void* t_out; + t_out = tensorHalfConvolution(input, filter, + vertical_pad, horizontal_pad, + vertical_stride, horizontal_stride, + conv_mode, conv_groups); + return t_out; + } default : CUSTOM_ASSERT(false && "Unknown approximation type"); ERROR("Unknown approximation type"); @@ -174,11 +209,19 @@ void* handleTensorBatchNormApproximationTuples( int param = approxTuples[0].second; switch (approx) { case GPUNodeConfiguration::APPROX::FP32 : - return tensorBatchNorm(input_ptr, gamma_ptr, beta_ptr, + { + void* t_out; + t_out = tensorBatchNorm(input_ptr, gamma_ptr, beta_ptr, mean_ptr, variance_ptr, epsilon); + return t_out; + } case GPUNodeConfiguration::APPROX::FP16 : - return tensorHalfBatchNorm(input_ptr, gamma_ptr, beta_ptr, + { + void* t_out; + t_out = tensorHalfBatchNorm(input_ptr, gamma_ptr, beta_ptr, mean_ptr, variance_ptr, epsilon); + return t_out; + } default : CUSTOM_ASSERT(false && "Unknown approximation type"); ERROR("Unknown approximation type"); @@ -204,9 +247,17 @@ void* handleTensorReluApproximationTuples( int param = approxTuples[0].second; switch (approx) { case GPUNodeConfiguration::APPROX::FP32 : - return tensorRelu(input); + { + void* t_out; + t_out = tensorRelu(input); + return t_out; + } case GPUNodeConfiguration::APPROX::FP16 : - return tensorHalfRelu(input); + { + void* t_out; + t_out = tensorHalfRelu(input); + return t_out; + } default : CUSTOM_ASSERT(false && "Unknown approximation type"); ERROR("Unknown approximation type"); @@ -232,9 +283,17 @@ void* handleTensorClippedReluApproximationTuples( int param = approxTuples[0].second; switch (approx) { case GPUNodeConfiguration::APPROX::FP32 : - return tensorRelu2(input, min, max); + { + void* t_out; + t_out = tensorRelu2(input, min, max); + return t_out; + } case GPUNodeConfiguration::APPROX::FP16 : - return tensorHalfRelu2(input, min, max); + { + void* t_out; + t_out = tensorHalfRelu2(input, min, max); + return t_out; + } default : CUSTOM_ASSERT(false && "Unknown approximation type"); ERROR("Unknown approximation type"); @@ -260,9 +319,17 @@ void* handleTensorTanhApproximationTuples( int param = approxTuples[0].second; switch (approx) { case GPUNodeConfiguration::APPROX::FP32 : - return tensorTanh(input); + { + void* t_out; + t_out = tensorTanh(input); + return t_out; + } case GPUNodeConfiguration::APPROX::FP16 : - return tensorHalfTanh(input); + { + void* t_out; + t_out = tensorHalfTanh(input); + return t_out; + } default : CUSTOM_ASSERT(false && "Unknown approximation type"); ERROR("Unknown approximation type"); @@ -291,17 +358,25 @@ void* handleTensorPoolingApproximationTuples( int param = approxTuples[0].second; switch (approx) { case GPUNodeConfiguration::APPROX::FP32 : - return tensorPooling(input_ptr, + { + void* t_out; + t_out = tensorPooling(input_ptr, poolFunction, window_height, window_width, vertical_pad, horizontal_pad, vertical_stride, horizontal_stride); + return t_out; + } case GPUNodeConfiguration::APPROX::FP16 : - return tensorHalfPooling(input_ptr, + { + void* t_out; + t_out = tensorHalfPooling(input_ptr, poolFunction, window_height, window_width, vertical_pad, horizontal_pad, vertical_stride, horizontal_stride); + return t_out; + } default : CUSTOM_ASSERT(false && "Unknown approximation type"); ERROR("Unknown approximation type"); @@ -323,7 +398,9 @@ void* handleTensorSoftmaxApproximationTuples( void* input_ptr) { //TODO: if approximation choices are added for softmax operation, // implement this like the other handle* functions - return tensorSoftmax(input_ptr); + void* t_out; + t_out = tensorSoftmax(input_ptr); + return t_out; } diff --git a/llvm/projects/hpvm-tensor-rt/tensor_runtime/src/tensor_runtime.cu b/llvm/projects/hpvm-tensor-rt/tensor_runtime/src/tensor_runtime.cu index 19417da5814a79f1089f68db4532c218726779f4..6b8a365214c47529cf4613442b838a5a7096b3c3 100644 --- a/llvm/projects/hpvm-tensor-rt/tensor_runtime/src/tensor_runtime.cu +++ b/llvm/projects/hpvm-tensor-rt/tensor_runtime/src/tensor_runtime.cu @@ -1676,14 +1676,16 @@ void* wrapper_ConvLayer(const char* hpvm_node_id, int param = approxTuples[0].second; if (approx == PROMISENodeConfiguration::APPROX::SWING_LEVEL) { DEBUG("Approximation choice for ConvLayer: swing level %d\n", param); - return ConvLayer_PROMISE(input, QRanges[0], QRanges[1], - filter, QRanges[2], QRanges[3], - bias, QRanges[4], QRanges[5], - conv_pad_h, conv_pad_w, - conv_stride_h, conv_stride_w, - pool_id, pool_size, - activation_id, - QRanges[6], QRanges[7], param); + void* t_out; + t_out = ConvLayer_PROMISE(input, QRanges[0], QRanges[1], + filter, QRanges[2], QRanges[3], + bias, QRanges[4], QRanges[5], + conv_pad_h, conv_pad_w, + conv_stride_h, conv_stride_w, + pool_id, pool_size, + activation_id, + QRanges[6], QRanges[7], param); + return t_out; } else { CUSTOM_ASSERT(false && "Unknown approximation type"); ERROR("Unknown approximation type"); @@ -1883,11 +1885,13 @@ void* wrapper_FCLayer(const char* hpvm_node_id, int param = approxTuples[0].second; if (approx == PROMISENodeConfiguration::APPROX::SWING_LEVEL) { DEBUG("Approximation choice for FCLayer: swing level %d\n", param); - return FCLayer_PROMISE(input, QRanges[0], QRanges[1], - weights, QRanges[2], QRanges[3], - bias, QRanges[4], QRanges[5], - activation_id, - QRanges[6], QRanges[7], param); + void* t_out; + t_out = FCLayer_PROMISE(input, QRanges[0], QRanges[1], + weights, QRanges[2], QRanges[3], + bias, QRanges[4], QRanges[5], + activation_id, + QRanges[6], QRanges[7], param); + return t_out; } else { CUSTOM_ASSERT(false && "Unknown approximation type"); ERROR("Unknown approximation type");