打印并行计算正在处理的数字 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
给我想要的。
我正在使用 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
给我想要的。