apply_ldl_factor_magma Class — pytorch Architecture
Architecture documentation for the apply_ldl_factor_magma class in BatchLinearAlgebra.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/cuda/linalg/BatchLinearAlgebra.cpp lines 813–856
template <typename scalar_t>
void apply_ldl_factor_magma(
const Tensor& A,
const Tensor& pivots,
const Tensor& info,
bool upper) {
#if !AT_MAGMA_ENABLED()
TORCH_CHECK(
false,
"torch.linalg.ldl_factor: MAGMA library not found in "
"compilation. Please rebuild with MAGMA.");
#else
auto batch_size = batchCount(A);
magma_int_t n = magma_int_cast(A.size(-2), "A.size(-2)");
magma_int_t leading_dim = magma_int_cast(A.stride(-1), "A.stride(-1)");
magma_uplo_t uplo = upper ? MagmaUpper : MagmaLower;
auto a_stride = A.dim() > 2 ? A.stride(-3) : 0;
auto pivots_stride = pivots.dim() > 1 ? pivots.stride(-2) : 0;
auto a_data = A.mutable_data_ptr<scalar_t>();
Tensor pivots_cpu =
at::empty_like(pivots, pivots.options().device(kCPU).pinned_memory(true));
auto pivots_data = pivots_cpu.mutable_data_ptr<magma_int_t>();
Tensor info_cpu =
at::empty_like(info, info.options().device(kCPU).pinned_memory(true));
auto info_data = info_cpu.mutable_data_ptr<magma_int_t>();
for (const auto i : c10::irange(batch_size)) {
scalar_t* a_working_ptr = &a_data[i * a_stride];
magma_int_t* pivots_working_ptr = &pivots_data[i * pivots_stride];
magma_int_t* info_working_ptr = &info_data[i];
magmaLdlHermitian<scalar_t>(
uplo,
n,
a_working_ptr,
leading_dim,
pivots_working_ptr,
info_working_ptr);
}
pivots.copy_(pivots_cpu);
info.copy_(info_cpu);
#endif
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free