September Morn Update
This commit is contained in:
parent
4e2d22a71d
commit
aac6731f2c
6856 changed files with 141342 additions and 21127 deletions
43
Task/Parallel-calculations/Phix/parallel-calculations.phix
Normal file
43
Task/Parallel-calculations/Phix/parallel-calculations.phix
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
-- demo/rosetta/ParallelCalculations.exw
|
||||
include mpfr.e
|
||||
sequence res
|
||||
constant res_cs = init_cs() -- critical section
|
||||
|
||||
procedure athread()
|
||||
mpz z = mpz_init()
|
||||
while true do
|
||||
integer found = 0
|
||||
enter_cs(res_cs)
|
||||
for i=1 to length(res) do
|
||||
if integer(res[i]) then
|
||||
found = i
|
||||
res[i] = {}
|
||||
exit
|
||||
end if
|
||||
end for
|
||||
leave_cs(res_cs)
|
||||
if not found then exit end if
|
||||
mpz_ui_pow_ui(z,2,found)
|
||||
mpz_add_ui(z,z,1)
|
||||
sequence r = mpz_prime_factors(z, 1_000_000)
|
||||
enter_cs(res_cs)
|
||||
res[found] = r
|
||||
leave_cs(res_cs)
|
||||
end while
|
||||
exit_thread(0)
|
||||
end procedure
|
||||
|
||||
for nthreads=1 to 5 do
|
||||
atom t0 = time()
|
||||
res = tagset(100)
|
||||
sequence threads = {}
|
||||
for i=1 to nthreads do
|
||||
threads = append(threads,create_thread(routine_id("athread"),{}))
|
||||
end for
|
||||
wait_thread(threads)
|
||||
integer k = largest(res,true)
|
||||
string e = elapsed(time()-t0)
|
||||
printf(1,"largest is 2^%d+1 with smallest factor of %d (%d threads, %s)\n",
|
||||
{k,res[k][1][1],nthreads,e})
|
||||
end for
|
||||
delete_cs(res_cs)
|
||||
Loading…
Add table
Add a link
Reference in a new issue