void Class — pytorch Architecture
Architecture documentation for the void class in DistributionTemplates.h from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/cuda/DistributionTemplates.h lines 172–226
template <typename func_t, typename inp_offset_calc_t, typename out_offset_calc_t>
__global__ void distribution_binary_elementwise_kernel(
int numel,
func_t f,
PhiloxCudaState philox_args,
typename function_traits<func_t>::result_type *output_data,
const typename function_traits<func_t>::template arg<1>::type *input_data_1,
const typename function_traits<func_t>::template arg<2>::type *input_data_2,
inp_offset_calc_t inp_calc,
out_offset_calc_t out_calc) {
auto seeds = at::cuda::philox::unpack(philox_args);
using input_t_1 = typename function_traits<func_t>::template arg<1>::type;
using input_t_2 = typename function_traits<func_t>::template arg<2>::type;
input_t_1 inputs_1[thread_work_size()];
input_t_2 inputs_2[thread_work_size()];
int base_index = block_work_size() * blockIdx.x;
int remaining = std::min<int>(numel - base_index, block_work_size());
curandStatePhilox4_32_10_t state;
curand_init(std::get<0>(seeds),
blockIdx.x * blockDim.x + threadIdx.x,
std::get<1>(seeds),
&state);
// load data into registers
int thread_idx = threadIdx.x;
#pragma unroll
for (int i = 0; i < thread_work_size(); i++) {
if (thread_idx >= remaining) {
break;
}
int input_idx = thread_idx + base_index;
auto offsets = inp_calc.get(input_idx);
inputs_1[i] = input_data_1[offsets[0]];
inputs_2[i] = input_data_2[offsets[1]];
thread_idx += num_threads();
}
// compute and store
thread_idx = threadIdx.x;
#pragma unroll
for (int i = 0; i < thread_work_size(); i++) {
if (thread_idx >= remaining) {
break;
}
int input_idx = thread_idx + base_index;
auto offsets = out_calc.get(input_idx);
output_data[offsets[0]] = f(state, inputs_1[i], inputs_2[i]);
thread_idx += num_threads();
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free