blob: 81b3297c366ff78f0b168b374c7de080d509e7e8 [file] [log] [blame]
#include "THCUNN.h"
#include "common.h"
struct absupdateOutput_functor
{
__device__ void operator()(float* output, const float* input) const
{
*output = abs(*input);
}
};
void THNN_CudaAbs_updateOutput(THCState *state, THCudaTensor *input, THCudaTensor *output)
{
THCUNN_assertSameGPU(state, 2, input, output);
THCudaTensor_resizeAs(state, output, input);
THC_pointwiseApply2(state, output, input, absupdateOutput_functor());
}
struct absupdateGradInput_functor
{
__device__ void operator()(float* gradInput, const float* input, const float* gradOutput) const
{
*gradInput = *input < 0 ? - *gradOutput : *gradOutput;
}
};
void THNN_CudaAbs_updateGradInput(THCState *state, THCudaTensor *input, THCudaTensor *gradOutput, THCudaTensor *gradInput)
{
THCUNN_assertSameGPU(state, 3, input, gradOutput, gradInput);
THCudaTensor_resizeAs(state, gradInput, input);
THC_pointwiseApply3(state, gradInput, input, gradOutput, absupdateGradInput_functor());
}