I'll submit the PR

On Wed, Jul 2, 2014 at 12:44 PM, andy hayden <andyhayd...@gmail.com> wrote:

> Using a single BitArray increases performance by 10x! I've pushed that to
> github. It also feels a much neater solution.
>
> I still can't work out how to strip out the dictionary in solve..
>
> On Tuesday, 1 July 2014 17:28:06 UTC-7, andy hayden wrote:
>>
>> It could be what quinnj's port does https://github.com/
>> attractivechaos/plb/blob/master/sudoku/sudoku_v1.jl. I couldn't get this
>> working to compare...
>>
>>
>>
>> On 1 July 2014 17:13, Iain Dunning <iaindunn...@gmail.com> wrote:
>>
>>> Stripping out the dictionary stuff in search and doing it in a single
>>> array pass has knocked me down to
>>> elapsed time: 1.305257143 seconds (183884144 bytes allocated, 3.85% gc
>>> time)
>>>
>>> Changing to bitarrays would be the real fix, and I got halfway, but
>>> converting the code was so painful I might just write my own solver based
>>> on the same bruteforce idea.
>>>
>>> On Tuesday, July 1, 2014 7:58:44 PM UTC-4, andy hayden wrote:
>>>>
>>>> Ha, I had exactly the same issue (I pushed a perf update with a
>>>> commented out impl), I assumed it was something (very) wrong in my
>>>> understanding of control flow!
>>>>
>>>> I don't think see how it would rely on anything, ordering (?)...
>>>> perplexing.
>>>>
>>>> On Tuesday, 1 July 2014 16:45:04 UTC-7, Iain Dunning wrote:
>>>>>
>>>>> Yeah we changed the example, so best to take it from the one in the
>>>>> release version...
>>>>>
>>>>> I removed the dictionary from search() but its now no longer solving
>>>>> all the problems(!) - does the algorithm rely somehow on the way the
>>>>> dictionary is constructed?
>>>>>
>>>>>
>>>>> On Tuesday, July 1, 2014 6:59:02 PM UTC-4, andy hayden wrote:
>>>>>>
>>>>>> I was using Cbc.
>>>>>>
>>>>>> SolveModel is a copy and paste job from JuMP (from the last release
>>>>>> rather than master) so may not work with JuMP from master - I couldn't 
>>>>>> get
>>>>>> the version from master working since it was incompatible with the JuMP
>>>>>> release I had! It'd be great to just be able to just include the file, 
>>>>>> but
>>>>>> I couldn't get that working so I just pasted it in (I should probably 
>>>>>> clean
>>>>>> Bench as I made quite a mess, apologies about that.)... so it may be you
>>>>>> need to update SolveModel from JuMP master/your version of JuMP to get
>>>>>> Bench working.
>>>>>>
>>>>>> It's amazing how some small tweaks like this go so far, there's a few
>>>>>> other bits that are obvious even to me (but I just couldn't get working).
>>>>>>
>>>>>>
>>>>>> On 1 July 2014 15:47, Iain Dunning <iaind...@gmail.com> wrote:
>>>>>>
>>>>>>> JuMP won't be getting any faster, its entirely limited by the speed
>>>>>>> of the MIP solver. Which one did you use?
>>>>>>>
>>>>>>>
>>>>>>> On Tuesday, July 1, 2014 6:47:04 PM UTC-4, Iain Dunning wrote:
>>>>>>>>
>>>>>>>> I was unable to run Bench.jl (ERROR: varzm! not defined), but, on
>>>>>>>> my computer just using runtests.jl, a fixed seed, and total time for 
>>>>>>>> 100
>>>>>>>> random
>>>>>>>>
>>>>>>>> *Initial
>>>>>>>> elapsed time: 1.641434988 seconds (282491732 bytes allocated, 5.99%
>>>>>>>> gc time)
>>>>>>>>
>>>>>>>> *Change globals to const
>>>>>>>> elapsed time: 1.563094028 seconds (261818132 bytes allocated, 6.61%
>>>>>>>> gc time)
>>>>>>>>
>>>>>>>> * Changing from using a Dict{Int64, *} for the Grid types to just a
>>>>>>>> Vector{*}, as well as those other globals
>>>>>>>> elapsed time: 1.373703078 seconds (191864592 bytes allocated, 4.91%
>>>>>>>> gc time)
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tuesday, July 1, 2014 6:27:15 PM UTC-4, andy hayden wrote:
>>>>>>>>>
>>>>>>>>> Bench.jl has a bench_compare method which returns a DataFrame of
>>>>>>>>> times (I then divide the median of Python vs Julia columns), I'll add 
>>>>>>>>> this
>>>>>>>>> output to the Bench script as it's useful to see (would be nice to 
>>>>>>>>> add more
>>>>>>>>> stats, as it's just a DataFrame of all the solved puzzles in 
>>>>>>>>> seconds). By
>>>>>>>>> default it runs a hundred random sudoku's on Julia, Python, and JuMP 
>>>>>>>>> (the
>>>>>>>>> same on each)...
>>>>>>>>>
>>>>>>>>> Thanks Steven: Making those const makes a huge difference, Julia
>>>>>>>>> wins (from 20% slower to 10% faster for me with just that change).
>>>>>>>>> I will have a play and see how your other suggestions play out.
>>>>>>>>>
>>>>>>>>> I was also very impressed with JuMP here... and it may be the
>>>>>>>>> latest is even faster (I'm using the version from the last release 
>>>>>>>>> rather
>>>>>>>>> than master, and it has changed since then).
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tuesday, 1 July 2014 15:11:27 UTC-7, Iain Dunning wrote:
>>>>>>>>>>
>>>>>>>>>> I'm working on improving this, but I'm not sure how you are
>>>>>>>>>> measuring that 20% slower - can you be more specific?
>>>>>>>>>>
>>>>>>>>>> On Tuesday, July 1, 2014 1:37:00 PM UTC-4, andy hayden wrote:
>>>>>>>>>>>
>>>>>>>>>>> I recently ported Norvig's Solve Every Sudoku Puzzle
>>>>>>>>>>> <http://norvig.com/sudoku.html> to Julia: https://github.com/
>>>>>>>>>>> hayd/Sudoku.jl
>>>>>>>>>>>
>>>>>>>>>>> Some simple benchmarks suggest my Julia implementation solves
>>>>>>>>>>> around 20% slower* than the Python version, and 3 times faster than 
>>>>>>>>>>> the
>>>>>>>>>>> implementation on JuMP (vendorized from the latest release), 
>>>>>>>>>>> against the
>>>>>>>>>>> random puzzles. I tried to include the solver from
>>>>>>>>>>> attractivechaos/plb
>>>>>>>>>>> <https://github.com/attractivechaos/plb/tree/master/sudoku> but
>>>>>>>>>>> couldn't get it working for comparison...
>>>>>>>>>>>
>>>>>>>>>>> I'm new to Julia so would love to hear people's thoughts / any
>>>>>>>>>>> performance tips!
>>>>>>>>>>> I've not delved too deeply into the Profile, but @time suggests
>>>>>>>>>>> 10% of time is GC.
>>>>>>>>>>>
>>>>>>>>>>>  **I'm sure I've lost some performance in translation which
>>>>>>>>>>> could be easily sped up...*
>>>>>>>>>>>
>>>>>>>>>>> Best,
>>>>>>>>>>> Andy
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>
>>


-- 
*Iain Dunning*
PhD Candidate <http://orc.scripts.mit.edu/people/student.php?name=idunning>
 / MIT Operations Research Center <http://web.mit.edu/orc/www/>
http://iaindunning.com  /  http://juliaopt.org

Reply via email to