pure subroutine get_partial_add_bias_val(this, upstream_grad, output)
implicit none
! Arguments
class(array_type), intent(in) :: this
real(real32), dimension(:,:), intent(in) :: upstream_grad
real(real32), dimension(:,:), intent(out) :: output
integer :: i, j, k, s, idx, itmp1
integer :: num_elements_pre, num_elements_post, num_dims
num_dims = size(this%left_operand%shape)
num_elements_pre = 1
num_elements_post = 1
do i = 1, num_dims
if(i .lt. this%indices(1))then
num_elements_pre = num_elements_pre * this%left_operand%shape(i)
elseif(i .gt. this%indices(1))then
num_elements_post = num_elements_post * this%left_operand%shape(i)
end if
end do
itmp1 = num_elements_pre * this%left_operand%shape(this%indices(1))
output = 0._real32
do s = 1, size(upstream_grad, 2)
do k = 1, num_elements_post
do j = 1, this%right_operand%shape(1)
idx = (j - 1) * num_elements_pre + (k - 1) * itmp1
do i = 1, num_elements_pre
output(j,1) = output(j,1) + upstream_grad(idx + i, s)
end do
end do
end do
end do
end subroutine get_partial_add_bias_val