C 扩展模块中的浮点错误

问题描述 投票:0回答:1

我为我的 Python 代码构建了一个小型 C++ 扩展模块,它计算并返回几个

double
(浮点)数组。该代码应该无法生成 NaN,但有时仍然会生成 NaN。它也与运行隔离:通常当我启动应用程序时,它每次都工作,但有时当我启动应用程序时,它总是失败。

我在其他应用程序中使用该模块,并且从未失败。这个新应用程序使用了 pytorch,我过去没有使用过。

这让我相信可能正在发生以下事情之一:

  1. 会不会是
    torch==2.2.0+cu121
    内内存泄漏?
  2. 在加载模块时或每次调用函数时,在运行代码之前是否需要执行一些特殊的 FPU 初始化?然而,大多数计算看起来都很好,即使我得到任意 NaN。
  3. 或者我是否需要确保
    .bss
    设置为零或以一种方式或另一种方式管理其他数据段?我没有看到任何迹象表明变量(或常量)未正确初始化。我不使用全局变量,接受一些我需要的静态变量,例如Python字符串等。我认为我不依赖于
    .bss
    来初始化为零。
  4. 或者也许除了
    Py_mod_create
    Py_mod_exec
    中自动生成的东西之外我还需要做一些其他初始化。
  5. 我需要升级我的 C 扩展模块中的某些内容?我在 2023 年 1 月 11 日自动生成了 py3.11 的样板,因为某些更改不兼容。我现在使用 Python 3.11.1,所以这似乎也不太可能。
  6. 我目前在windows下使用
    distutils
    构建
    amd64-cpython-311
    ,distutils使用Visual Studio 2017 C++编译器。

对我来说,上述情况都不太可能。由于它每次都能在不使用 pytorch 的其他应用程序中工作,这实际上是我的主要怀疑。

还有人见过这样的事情吗?或者对于它可能是什么有任何其他建议吗?非常感谢!

python numpy pytorch python-c-api
1个回答
0
投票

啊哈! numpy 使用 非 c 风格连续数组 (想想稀疏数据),所以你不能只是在 for 循环中从头到尾遍历它。

© www.soinside.com 2019 - 2024. All rights reserved.