You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,后续会自动分发到对应后端的内存分配实现
  • 如果需要查看更底层的后端具体实现,可以到对应子目录查找:
    • CPU端空张量内存分配实现位于aten/src/ATen/native/cpu/EmptyTensor.cpp
    • CUDA端空张量内存分配实现位于aten/src/ATen/cuda/CUDATensorFactories.cpp

注:PyTorch中部分算子的前端接口是通过编译阶段代码生成的,但empty作为核心张量工厂函数,其native层的入口实现直接写在TensorFactories.cpp中,不需要到构建生成的代码目录查找。

内容的提问来源于stack exchange,提问作者outis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:39:32