打印并行计算正在处理的数字 Pari/GP

Printing what number Pari/GP is working on for a parallel computation

我正在使用 Pari/GP 来测试数字序列 f(n) 的(伪)素数,其中 f(n) 是某个函数。我已将代码并行化为

test(a) = parfor(n = 1, +oo, if(ispseudoprime(f(n)), print("PRIME "n));)

这很好用,但我也想知道正在测试哪个号码。我当然可以在 if 之后添加 print(n)。问题是 ispseudoprime(a(n)) 对于 n 可能需要相当长的时间,而对于 n+1 则非常快。由于计算是并行的,输出很快就会变得一团糟:我会看到已经测试过的数字列表,但我不知道在给定时刻正在测试的数字是多少(我的想法是,如果程序是花很多时间在一个数字上它越来越有可能是质数,所以我想知道它)。

有没有简单的方法可以做到这一点?谢谢!

我这样解决了(可能以一种非常肮脏的方式)

test(a) = parfor(n = 1, +oo, write("started",n); if(ispseudoprime(f(n)), print("PRIME "n)); write("done",n))

然后grep -v -f done started给我想要的。