2

我正在为分析问题编写数学模块。所有文件都编译为 .fasl。这些文件的大小逐渐增加,并添加了新文件。我今天在加载一个模块 load("foo.mac") ~0.4s 加载 100+ 个文件和另一个 200+ 的模块时遇到了一个问题,它在没有预先计算的情况下声明函数和变量。

错误:Thread local storage exhausted fatal error encountered is SBCL pid %PRIMITIVE HALT called; the party is over. Welcome to LDB..此时CPU和RAM指标稳定

没有帮助maxima -X '--dynamic-space-size 2048',4096 - 默认情况下也是 1024。为什么它不起作用?

SBCL + Windows = 正常工作。SBCL 1.4.5.debian + Linux (server) 抛出此错误。但是,如果我稍微减小文件的大小,就会加载模块。

我重新编译了文件,检查了所有的.UNLISP。更改了上传文件的顺序,但在加载列表中最新的文件时出错。测试运行没有错误。有一些方法可以通过 SBCL、Maxima 增加“本地存储”的数量?往哪个方向移动?有任何想法吗

更新:通过删除重复的代码 matchdeclare(..) 显着减少了负载。现在没有观察到错误。

4

1 回答 1

2

来自https://sourceforge.net/p/maxima/mailman/message/36659152/

maxima 使用了很多特殊变量,这些变量有时会使 sbcl 在运行测试套件时耗尽线程本地存储。他们建议添加一个允许更改线程本地存储大小的环境变量,但添加了一个命令行选项 => 如果 sbcl 支持,我们现在生成一个具有更大的默认线程本地存储的图像,其大小可以被覆盖通过 --tls-limit 选项的用户。

SBCL源代码中的NEWS 文件也表明默认值为4096

changes in sbcl-1.5.2 relative to sbcl-1.5.1:
  * enhancement: RISC-V support with the generational garbage collector.
  * enhancement: command-line option "--tls-limit" can be used to alter the
    maximum number of thread-local symbols from its default of 4096.
  * enhancement: better muffling of redefinition and lambda-list warnings
  * platform support:
    ** OS X: use Grand Central Dispatch semaphores, rather than Mach semaphores
    ** Windows: remove non-functional definition of make-listener-thread
  * new feature: decimal reader syntax for rationals, using the R exponent
    marker and/or *READ-DEFAULT-FLOAT-FORMAT* of RATIONAL.
  * optimization: various Unicode tables have been packed more efficiently
于 2020-12-27T10:20:16.740 回答