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)