Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

Testing latest pari + WASM + node.js... and it works?! Wow.

28495 views
License: GPL3
ubuntu2004
1
#include <pari/pari.h>
2
3
GEN
4
Cworker(GEN d, long kind) { return kind? det(d): Z_factor(d); }
5
6
int
7
main(void)
8
{
9
long i, taskid, pending;
10
GEN M,N1,N2, in,out, done;
11
struct pari_mt pt;
12
entree ep = {"_worker",0,(void*)Cworker,20,"GL",""};
13
/* initialize PARI, postponing parallelism initialization */
14
pari_init_opts(8000000,500000, INIT_JMPm|INIT_SIGm|INIT_DFTm|INIT_noIMTm);
15
pari_add_function(&ep); /* add Cworker function to gp */
16
pari_mt_init(); /* ... THEN initialize parallelism */
17
/* Create inputs and room for output in main PARI stack */
18
N1 = addis(int2n(256), 1); /* 2^256 + 1 */
19
N2 = subis(int2n(193), 1); /* 2^193 - 1 */
20
M = mathilbert(80);
21
in = mkvec3(mkvec2(N1,gen_0), mkvec2(N2,gen_0), mkvec2(M,gen_1));
22
out = cgetg(4,t_VEC);
23
/* Initialize parallel evaluation of Cworker */
24
mt_queue_start(&pt, strtofunction("_worker"));
25
for (i = 1; i <= 3 || pending; i++)
26
{ /* submit job (in) and get result (out) */
27
mt_queue_submit(&pt, i, i<=3? gel(in,i): NULL);
28
done = mt_queue_get(&pt, &taskid, &pending);
29
if (done) gel(out,taskid) = done;
30
}
31
mt_queue_end(&pt); /* end parallelism */
32
output(out); pari_close(); return 0;
33
}
34
35