Hello Zelphir, i should had written first about the mathematical problem first but i did not want to go into other than computer things. But i expose here the main idea briefly: i try to solve a mathematical conjecture ( https://en.wikipedia.org/wiki/Conjecture ) using logic expressions but not in the common sense of Boole's algebra, at some point i shift to Probability logic and i need to simplify, minimalize logic expressions in disjunctive form, this is my idea. I will give a few link for the curious and i hope to publish something in the next year. At the beginning it is a computer problem well know in logic: the minterms of the hash table i use are described here: https://en.wikipedia.org/wiki/Canonical_normal_form#Minterms and the algorithms are here: https://en.wikipedia.org/wiki/Quine%E2%80%93McCluskey_algorithm https://en.wikipedia.org/wiki/Petrick%27s_method The minterms come from a set product : https://en.wikipedia.org/wiki/Cartesian_product (space complexity is polynomial) but the whole logic problem is an NP-hard problem so i do not expect it to be fast for more than 10 variables, it works well on one processor, and i'm now checking it on multiple core. I could have used Mathematica or Python sympy but i choosed many years ago to build a system in Scheme because there is no free software, Maxima does not support well logic (there was a no more supported module for Zhegalkin polynomials https://en.wikipedia.org/wiki/Zhegalkin_polynomial ) i did not want to use a commercial product such as Mathematica and i did not know Python Sympy ten years ago... but now i will use it to cross-check my Scheme results. I hope to do that this week, if it is ok i will not modify the Scheme code any more. The hash table was the more obvious structure to use due to the nature of algoritms here, i can not use arrays. I did not expected the compiler to solve the concurrent access to the hash table, i know i was going into problems, and i solve the problem with arrays in the // region and put back data after in the hash table in a non // region.It is okay now.
For the one interested (i apologize because this is out of subject in the Guile mailing list) here is a few interesting links about Probability and Logic: Theodore Hailperin wrote the best articles in my opinion: https://projecteuclid.org/journals/notre-dame-journal-of-formal-logic/volume-25/issue-3/Probability-logic/10.1305/ndjfl/1093870625.full https://plato.stanford.edu/entries/logic-probability/ https://www.amazon.fr/Booles-logic-probability-contemporary-foundations/dp/0444110372 Best regards, Damien On Mon, Oct 24, 2022 at 1:18 AM Zelphir Kaltstahl < zelphirkaltst...@posteo.de> wrote: > Hello Damien! > On 10/23/22 03:06, Damien Mattei wrote: > > after intense coding i finally got the good results, > my assumption about the global variable hash table was true ,it is > incompatible with 'future : the competition for the writing into the hash > table breaks the code. > > If i do writing in hash table out of // region all is ok: > > a simple function to extract the hash table access: > > (define (tag-minterms i umt) > (when umt > {mt1 <+ (first {minterms-vector[i]})} > {mt2 <+ (second {minterms-vector[i]})} > {minterms-ht[mt1] <- #t} > {minterms-ht[mt2] <- #t})) > [...] > > I am not sure what exactly the problem is, which you are trying to > calculate, but it looks fairly mathematical to me. Maybe you do not need to > share state globally at all? Maybe you can find a way to avoid global > shared state? I am guessing, that you want to avoid duplicated computation > of part terms? > > Of course,if you have global state and do not have a synchronization > construct (!) for accessing the hash table, I would expect things to go > wrong at some point, with non-reproducible results. I do not think that > futures are to blame here, or parallel map in that case. > > With a synchronization construct, some kind of mutex, your bottle neck > might just become that mutex. Up to you to measure that ; ) > > Would be nice, if you found a clever way to separate the problems into > disjunct parts and then solve them without global state. > > Regards, > Zelphir > > -- > repositories: https://notabug.org/ZelphirKaltstahl > >