bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-apl] Potential problem with T∆


From: Juergen Sauermann
Subject: Re: [Bug-apl] Potential problem with T∆
Date: Wed, 18 Mar 2015 14:26:16 +0100
User-agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.4.0

Hi Xtian,

I have done some rework on the memory allocation when printing large APL values.
Your example semms to work now: SVN 567.

/// Jürgen

On 03/18/2015 01:20 AM, Christian Robert wrote:
Don't look further, I've found why it core dump.

If I run it like this:

      Time '⊣ z←⍳10000000'
Time[4] SYLGet
Time[5] SYLSet
Time[9] →⍬
Time[10] 1
Time[12] 0
Time[13] 1
Time[14] 1
Time[15] 1
Time[19] 1
Time[20] 17 20 16 13 680
Time[21] 0
Time[22] 17 20 16 13 883
Time[23] 1
Time[27] →29
Time[30] 1541773680
Time[31] 1541773883
Time[32] 0.203 seconds at num core = 1 of 1
0.203 seconds at num core = 1 of 1

it run fine. The problem was that it wanted to display the resulting 10,000,000 integers
to the display and that probably exhausted my memory while formatting the resulting buffer ...

May be you can try {} catch {} thoses out-of-memory "new" allocation ? May be not.

Xtian.



On 2015-03-17 12:51, Juergen Sauermann wrote:
Hi Xtian,

for me it would be much easier if the problem could be reproduced without multi-core.
According to *gdb* the crash happens in the practically empty P*rintBuffer::PrintBuffer() *constructor.

BTW: Shouldn't it be Xian rather than Xtian?

/// Jürgen


On 03/17/2015 04:57 PM, Christian Robert wrote:
That code "only" crash when "traced" with T∆Time.

It work perfectly well (never crash) without the trace.

To me it seams it crash at the "⍎what" statement or when it return from it's execution.
I will recompile "without" multi-core to see it it's related or not ...

Xtian.

On 2015-03-17 06:42, Juergen Sauermann wrote:
Hi Xtian,

it looks like you are using the multi-core feature of GNU APL.
As *README-8-parallel* says: *Parallel execution is currently experimental*.

I have seen core dumps like those earlier when multi-core was enabled, but have not found the reason.
I suspect a bug in the thread synchronization, but I am not sure, The code at the point where the crash below occurs
looks rather clean, thats why I believe that some other thread is involved, corrupting the memory of the other
threads. If you find a bug in the *Parallel.hh* / *Parallel.**cc* area then please let me know.

You can also use the *workspaces/ScalarBenchmark.apl* workspace which uses a more precise timing
measurement based on the CPU cycle counter. It also crashes at times, but not so often.

/// Jürgen


On 03/17/2015 02:33 AM, Christian Robert wrote:
)load Util
SAVED 2015-03-17 -3:23:11 (GMT-4)
      ∇Time[⎕]∇
    ∇
[0]   z←ncpu Time what;⎕io;start;stop;old_cpu;max_cpu;SYLGet;SYLSet
[1]  ⍝
[2]  ⍝ Define 2 utility functions
[3]  ⍝
[4]   z←⎕FX 'Z←SYLGet what;⎕io;index' '⎕io←1' 'index←((⊂ what)≡¨⎕SYL[;1])/⍳↑⍴⎕SYL' 'Z←⎕SYL[index;2]'
[5]   z←⎕FX 'Z←val SYLSet what;⎕io;index' '⎕io←1' 'index←((⊂ what)≡¨⎕SYL[;1])/⍳↑⍴⎕SYL' 'Z←⎕SYL[index;2]←val'
[6]  ⍝
[7]  ⍝ Monadic or Diadic call ?
[8]  ⍝
[9]   →(2=⎕NC 'ncpu')/already_set
[10]    ncpu←1 ⍝ Set the default
[11] already_set:
[12]  ⎕io←0
[13]  old_cpu ← SYLGet 'cores used'
[14]  max_cpu ← SYLGet 'cores available'
[15]  ncpu ← ncpu ⌊ max_cpu  ⍝ No more than available ...
[16] ⍝
[17] ⍝ Execute ...
[18] ⍝
[19]  z←ncpu SYLSet 'cores used'
[20]  start ← ¯5↑⎕ts
[21]  ⍎what
[22]  stop  ← ¯5↑⎕ts
[23]  z←old_cpu SYLSet 'cores used'
[24] ⍝
[25] ⍝ Compute execution time
[26] ⍝
[27]  →(stop[0]=start[0])/ok    ⍝ same day
[28]    stop[0]←stop[0]+1       ⍝ day changed
[29] ok:
[30]  start ← 32 24 60 60 1000 ⊥ start
[31]  stop  ← 32 24 60 60 1000 ⊥ stop
[32]  z←(⍕(stop-start)÷1000),' seconds at num core = ',(⍕ncpu),' of ', ⍕max_cpu
    ∇
      Fntb 'Time'
 z←ncpu Time what;⎕io;start;stop;old_cpu;max_cpu;SYLGet;SYLSet
 ⍝
 ⍝ Define 2 utility functions
 ⍝
 z←⎕FX 'Z←SYLGet what;⎕io;index' '⎕io←1' 'index←((⊂ what)≡¨⎕SYL[;1])/⍳↑⍴⎕SYL' 'Z←⎕SYL[index;2]'
 z←⎕FX 'Z←val SYLSet what;⎕io;index' '⎕io←1' 'index←((⊂ what)≡¨⎕SYL[;1])/⍳↑⍴⎕SYL' 'Z←⎕SYL[index;2]←val'
 ⍝
 ⍝ Monadic or Diadic call ?
 ⍝
 →(2=⎕NC 'ncpu')/already_set
   ncpu←1 ⍝ Set the default
 already_set:
 ⎕io←0
 old_cpu ← SYLGet 'cores used'
 max_cpu ← SYLGet 'cores available'
 ncpu ← ncpu ⌊ max_cpu  ⍝ No more than available ...
 ⍝
 ⍝ Execute ...
 ⍝
 z←ncpu SYLSet 'cores used'
 start ← ¯5↑⎕ts
 ⍎what
 stop  ← ¯5↑⎕ts
 z←old_cpu SYLSet 'cores used'
 ⍝
 ⍝ Compute execution time
 ⍝
 →(stop[0]=start[0])/ok    ⍝ same day
   stop[0]←stop[0]+1       ⍝ day changed
 ok:
 start ← 32 24 60 60 1000 ⊥ start
 stop  ← 32 24 60 60 1000 ⊥ stop
 z←(⍕(stop-start)÷1000),' seconds at num core = ',(⍕ncpu),' of ', ⍕max_cpu



      T∆Time ← ⍳1000
      Time 'a←⍳1000000'
Time[4] SYLGet
Time[5] SYLSet
Time[9] →⍬
Time[10] 1
Time[12] 0
Time[13] 1
Time[14] 6
Time[15] 1
Time[19] 1
Time[20] 16 21 28 46 188
Segmentation fault (core dumped)









reply via email to

[Prev in Thread] Current Thread [Next in Thread]