bin_algorithm Class — pytorch Architecture
Architecture documentation for the bin_algorithm class in HistogramKernel.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/cpu/HistogramKernel.cpp lines 210–255
template<BIN_SELECTION_ALGORITHM bin_algorithm>
void histogramdd_out_cpu_template(const Tensor& self, const std::optional<Tensor>& weight, bool density,
Tensor& hist, const TensorList& bin_edges) {
hist.fill_(0);
const int64_t N = self.size(-1);
const int64_t M = std::accumulate(self.sizes().begin(), self.sizes().end() - 1,
(int64_t)1, std::multiplies<int64_t>());
const Tensor reshaped_input = self.reshape({M, N});
const auto reshaped_weight = weight.has_value()
? std::optional<Tensor>(weight.value().reshape({M}))
: std::optional<Tensor>();
std::vector<Tensor> bin_edges_contig(bin_edges.size());
for (const auto dim : c10::irange(bin_edges_contig.size())) {
bin_edges_contig[dim] = bin_edges[dim].contiguous();
}
AT_DISPATCH_FLOATING_TYPES_AND2(kBFloat16, kHalf, self.scalar_type(), "histogram_cpu", [&]() {
histogramdd_cpu_contiguous<scalar_t, bin_algorithm>(
hist, bin_edges_contig, reshaped_input, reshaped_weight);
});
/* Divides each bin's value by the total count/weight in all bins,
* and by the bin's volume.
*/
if (density) {
const auto hist_sum = hist.sum().item();
hist.div_(hist_sum);
/* For each dimension, divides each bin's value
* by the bin's length in that dimension.
*/
for (const auto dim : c10::irange(N)) {
const auto bin_lengths = bin_edges[dim].diff();
// Used to reshape bin_lengths to align with the corresponding dimension of hist.
std::vector<int64_t> shape(N, 1);
shape[dim] = bin_lengths.numel();
hist.div_(bin_lengths.reshape(shape));
}
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free