Gah. Meant in project.clj:

:jvm-opts ^:replace ["-server"]  ;; maybe also set max heap with  "-Xmx1g" 
in there


On Thursday, May 14, 2015 at 2:46:59 PM UTC-5, Alex Miller wrote:
>
> Oh also, the default Leiningen settings are optimized for reducing 
> startup, not for speed. Use:
>
>   ^:jvm-opts ^:replace ["-server"]  ;; maybe also set max heap 
> with  "-Xmx1g" in there
>
> Or just don't use lein when perf testing. 
>
> On Thursday, May 14, 2015 at 2:44:38 PM UTC-5, Alex Miller wrote:
>>
>> The major problem here is that you are using boxed math for everything 
>> instead of primitives.
>>
>> 0) Switch to Clojure 1.7.0-beta3 - it's faster and some things below are 
>> dependent on it for best performance. And use Java 1.8.
>> 1) Parse the lines you're reading directly into longs (Clojure focuses on 
>> 64-bit primitives - longs and doubles)
>> 2) Put the longs first into a data structure that preserves the primitive 
>> type. The two best options for that here are records (which can have 
>> primitive fields) and arrays. I would create a Canvas defrecord with ^long 
>> width and height and a Paper defrecord with all ^long fields for example. 
>> 3) Store the papers in a vector (using transient to create it)
>> 4) I suspect visible-color and covered? could probably be tightened up 
>> into a reduce over papers or a single loop-recur over papers - can't say I 
>> totally get what's happening there.
>> 5) In visible-color-frequencies, you could use "update" instead of get + 
>> transient assoc! on the acc map, but this is never going to be terribly 
>> fast. Another option here would be to create an array with the max color 
>> (you could track that while reading if it's not a well-known answer) and 
>> bash the array. That can retain int or long counters and will be *way* 
>> faster.
>> 6) You can use (set! *unchecked-math* :warn-on-boxed) to get faster math 
>> (no overflow checks) and also issue warnings (added in 1.7) if you happened 
>> to use boxed math by accident. 
>>
>>
>>
>> On Thursday, May 14, 2015 at 3:02:42 AM UTC-5, Amith George wrote:
>>>
>>> I wrote the following code to solve this challenge - 
>>> https://www.reddit.com/r/dailyprogrammer/comments/35s2ds/20150513_challenge_214_intermediate_pile_of_paper/
>>> .
>>>
>>> Code - 
>>> https://github.com/amithgeorge/reddit-dailyprogrammer-clojure/blob/56ce1dbb6a08e96150dc85934caecfeb68108a53/src/rdp/214_intermediate.clj
>>>
>>> I executed the -main function using `lein run 1`. 
>>>
>>> Output
>>>
>>>     ;; lein run 1
>>>
>>>     0 12605919
>>>     1 3578145
>>>     2 15356894
>>>     3 19134293
>>>     4 2394558
>>>     5 15030409
>>>     6 6424953
>>>     7 14893444
>>>     8 1592254
>>>     9 1914025
>>>     10 7075106
>>>     "Elapsed time: 501168.972435 msecs"
>>>
>>> The code originally used an immutable hashmap, but I lost patience 
>>> waiting for the computation to end. With mutable hashmap, it still takes 
>>> around 8 mins.
>>>
>>> I wrote a C# version of the above code - 
>>> https://gist.github.com/amithgeorge/766b8220f39d48221e58. It finishes 
>>> under 40secs. The C# exe was built under Release mode and executed directly 
>>> from the commandline. I expected the Clojure version to perform similarly.
>>>
>>> Any tips on what I am doing wrong?
>>>
>>> -----
>>> Explanation of the code - Create a vector of all paper sheets, such that 
>>> the sheet placed last is the first element of the vector and the last 
>>> element is the canvas. To compute the frequency of each visible color - for 
>>> each point in the canvas find the first sheet in the vector that covers the 
>>> point. Store/increment its count in the hashmap. I understand there might 
>>> be better more efficient ways to solve this, but currently I am interested 
>>> in why the Clojure versions is so slow vis-a-vis the C# version.
>>>
>>>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to