|
From: tkrauss on 16 Apr 2008 19:06 There have been a few messages on the GNAT-OSX mailing list about an apparent memory leak in the Ada.Numerics.Long_Real_Arrays implementation. The setup is an OS X box (10.4) with the GNAT 4.3 compiler from the macada.org site. The Ada.Numerics.Long_Real_Arrays is using the Apple-supplied BLAS and LINPACK libraries under the hood. The code snippet below (plagiarized from Jerry's post on the mailing list) leaks memory (as reported by top). Note that the same code but with Long_Complex types does not appear to have this problem. Has anyone seen this problem on other platforms? Do other languages on OS X behave this way? I'm not sure how to track down the guilty party here. Is it Apple's BLAS or LINPACK libraries or something in the GNAT Long_Real_Arrays multiply method? with Ada.Numerics.Long_Real_Arrays; use Ada.Numerics.Long_Real_Arrays; procedure tst_simple is v : Real_Vector(1 .. 100_000) := (others => 1.23); res : Real_Vector(1 .. 100_000); begin for i in 1..1000 loop res := 123.456 * v; end loop; end tst_simple;
From: Jerry on 18 Apr 2008 17:43 On Apr 16, 4:06 pm, tkrauss <thomas.kra...(a)gmail.com> wrote: > There have been a few messages on the GNAT-OSX mailing list about an > apparent memory leak in the Ada.Numerics.Long_Real_Arrays > implementation. The setup is an OS X box (10.4) with the GNAT 4.3 > compiler from the macada.org site. The Ada.Numerics.Long_Real_Arrays > is using the Apple-supplied BLAS and LINPACK libraries under the > hood. The code snippet below (plagiarized from Jerry's post on the > mailing list) leaks memory (as reported by top). Note that the same > code but with Long_Complex types does not appear to have this problem. > > Has anyone seen this problem on other platforms? Do other languages > on OS X behave this way? I'm not sure how to track down the guilty > party here. Is it Apple's BLAS or LINPACK libraries or something in > the GNAT Long_Real_Arrays multiply method? > > with Ada.Numerics.Long_Real_Arrays; > use Ada.Numerics.Long_Real_Arrays; > > procedure tst_simple is > v : Real_Vector(1 .. 100_000) := (others => 1.23); > res : Real_Vector(1 .. 100_000); > begin > for i in 1..1000 loop > res := 123.456 * v; > end loop; > end tst_simple; I'm really interested to see what comments people have about this problem. The sample program given by the original poster hits 1 GB of RAM use in only a few seconds. (I kill it then.) As he says, the complex-number version of the same program does not leak. Also, the following program which implements a local version of scalar-vector multiplication does not leak. It looks like either the * operator is hosed in GNAT or there is something wrong with Apple's BLAS. Clearly programs that do this operation are not practical at this time. Here's the program with a local override of "*" for scalar-vector multiplication that behaves well. with Ada.Numerics.Long_Real_Arrays; use Ada.Numerics.Long_Real_Arrays; procedure tst_mult_2 is v : Real_Vector(1 .. 100_000) := (others => 1.23); res : Real_Vector(1 .. 100_000); function "*" (a : Long_Float; x : Real_Vector) return Real_Vector is Result : Real_Vector (x'range); begin for index in x'range loop Result(index) := a * x(index); end loop; return Result; end "*"; begin for i in 1..100 loop res := 123.456 * v; end loop; end tst_mult_2; Jerry
From: Jerry on 18 Apr 2008 17:43 On Apr 16, 4:06 pm, tkrauss <thomas.kra...(a)gmail.com> wrote: > There have been a few messages on the GNAT-OSX mailing list about an > apparent memory leak in the Ada.Numerics.Long_Real_Arrays > implementation. The setup is an OS X box (10.4) with the GNAT 4.3 > compiler from the macada.org site. The Ada.Numerics.Long_Real_Arrays > is using the Apple-supplied BLAS and LINPACK libraries under the > hood. The code snippet below (plagiarized from Jerry's post on the > mailing list) leaks memory (as reported by top). Note that the same > code but with Long_Complex types does not appear to have this problem. > > Has anyone seen this problem on other platforms? Do other languages > on OS X behave this way? I'm not sure how to track down the guilty > party here. Is it Apple's BLAS or LINPACK libraries or something in > the GNAT Long_Real_Arrays multiply method? > > with Ada.Numerics.Long_Real_Arrays; > use Ada.Numerics.Long_Real_Arrays; > > procedure tst_simple is > v : Real_Vector(1 .. 100_000) := (others => 1.23); > res : Real_Vector(1 .. 100_000); > begin > for i in 1..1000 loop > res := 123.456 * v; > end loop; > end tst_simple; I'm really interested to see what comments people have about this problem. The sample program given by the original poster hits 1 GB of RAM use in only a few seconds. (I kill it then.) As he says, the complex-number version of the same program does not leak. Also, the following program which implements a local version of scalar-vector multiplication does not leak. It looks like either the * operator is hosed in GNAT or there is something wrong with Apple's BLAS. Clearly programs that do this operation are not practical at this time. Here's the program with a local override of "*" for scalar-vector multiplication that behaves well. with Ada.Numerics.Long_Real_Arrays; use Ada.Numerics.Long_Real_Arrays; procedure tst_mult_2 is v : Real_Vector(1 .. 100_000) := (others => 1.23); res : Real_Vector(1 .. 100_000); function "*" (a : Long_Float; x : Real_Vector) return Real_Vector is Result : Real_Vector (x'range); begin for index in x'range loop Result(index) := a * x(index); end loop; return Result; end "*"; begin for i in 1..100 loop res := 123.456 * v; end loop; end tst_mult_2; Jerry
From: Per Sandberg on 19 Apr 2008 02:57 Thought it i recognized this problem so i checked it out and found: It is corrected in the Latest GNATPro version (the problem is in the compiler). /Per tkrauss wrote: > There have been a few messages on the GNAT-OSX mailing list about an > apparent memory leak in the Ada.Numerics.Long_Real_Arrays > implementation. The setup is an OS X box (10.4) with the GNAT 4.3 > compiler from the macada.org site. The Ada.Numerics.Long_Real_Arrays > is using the Apple-supplied BLAS and LINPACK libraries under the > hood. The code snippet below (plagiarized from Jerry's post on the > mailing list) leaks memory (as reported by top). Note that the same > code but with Long_Complex types does not appear to have this problem. > > Has anyone seen this problem on other platforms? Do other languages > on OS X behave this way? I'm not sure how to track down the guilty > party here. Is it Apple's BLAS or LINPACK libraries or something in > the GNAT Long_Real_Arrays multiply method? > > > with Ada.Numerics.Long_Real_Arrays; > use Ada.Numerics.Long_Real_Arrays; > > procedure tst_simple is > v : Real_Vector(1 .. 100_000) := (others => 1.23); > res : Real_Vector(1 .. 100_000); > begin > for i in 1..1000 loop > res := 123.456 * v; > end loop; > end tst_simple; >
From: Jerry on 19 Apr 2008 18:08 On Apr 18, 11:57 pm, Per Sandberg <per.sandb...(a)bredband.net> wrote: > Thought it i recognized this problem so i checked it out and found: > It is corrected in the Latest GNATPro version (the problem is in the > compiler). > > /Per Thanks for that info, Per.
|
Next
|
Last
Pages: 1 2 Prev: ""Who's Using Ada" - April 2008 edition" from Team-Ada Next: Symmetric matrices only! |