PyTorch中at::empty(size, options, optional_memory_format)源码位置
PyTorch中
at::empty三参数重载源码位置说明 你当前定位到的重载实现
你在查阅源码时找到的支持命名张量(带DimnameList参数)的at::empty重载代码如下:
Tensor empty( IntArrayRef size, c10::optional<DimnameList> names, c10::optional<ScalarType> dtype, c10::optional<Layout> layout, c10::optional<Device> device, c10::optional<bool> pin_memory, optional<MemoryFormat> optional_memory_format) { // See [Note: hacky wrapper removal for TensorOptions] TensorOptions options = TensorOptions().dtype(dtype).layout(layout).device(device).pinned_memory(pin_memory); if (!names.has_value()) { return at::empty(size, options, optional_memory_format); } TORCH_CHECK(options.layout() == Layout::Strided, "NYI: named tensors only support strided layout"); TORCH_CHECK(options.device().is_cpu() || options.device().is_cuda(), "NYI: named tensors only support CPU and CUDA tensors"); auto result = at::empty(size, options, optional_memory_format); internal_set_names_inplace(result, names); return result; }
目标函数的具体源码位置
你查找的被调用的at::empty(size, options, optional_memory_format)三参数重载位置如下:
- 该函数和你看到的带命名张量参数的重载位于同一个源码文件:
aten/src/ATen/native/TensorFactories.cpp,在命名张量参数重载的下方约100行范围内即可找到对应实现,不需要跨文件查找。 - 该三参数函数是
at::empty在native层的核心入口,逻辑为做参数合法性校验、初始化对应设备上下文、根据传入的内存格式和设备类型,分发调用对应后端的空张量创建接口:- 元设备(Meta)张量的创建逻辑走
at::detail::empty_meta - CPU/CUDA等实际硬件设备的张量创建走
at::detail::empty_generic,后续会自动分发到对应后端的内存分配实现
- 元设备(Meta)张量的创建逻辑走
- 如果需要查看更底层的后端具体实现,可以到对应子目录查找:
- CPU端空张量内存分配实现位于
aten/src/ATen/native/cpu/EmptyTensor.cpp - CUDA端空张量内存分配实现位于
aten/src/ATen/cuda/CUDATensorFactories.cpp
- CPU端空张量内存分配实现位于
注:PyTorch中部分算子的前端接口是通过编译阶段代码生成的,但
empty作为核心张量工厂函数,其native层的入口实现直接写在TensorFactories.cpp中,不需要到构建生成的代码目录查找。
内容的提问来源于stack exchange,提问作者outis
相关产品推荐
相关产品推荐

