bug-apl
[Top][All Lists]
Advanced

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

Re: [Bug-apl] More Solaris porting issues


From: Juergen Sauermann
Subject: Re: [Bug-apl] More Solaris porting issues
Date: Mon, 07 Apr 2014 18:21:30 +0200
User-agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130330 Thunderbird/17.0.5

Hi,

currently using dynamic arrays (which implicitly uses alloca()) is used by default
with heap allocation via new/delete as fallback if the compiler does not support
dynamic arrays.

I guess that is good enough (as a GNU maintainer I feel like there there should be
a small performance penalty for not using gcc :-) ).

/// Jürgen


On 04/06/2014 05:04 AM, Blake McBride wrote:
With 20+ years C experience, IMO using alloca() as a way of allocating computed sized arrays is good.  There are other speed advantages of using alloca too. Like many C library calls, alloca only works because of the fact that it is specifically designed to work with a specific tool chain.  That's not bad, many other calls are too.  If you use a different tool chain (i.e. GNU, Solaris, Intel, etc.) each will come with a fully functional alloca.  Once you code it, it'll work fine.  The risk of blowing out the stack is always there, and the risk of clobbering the stack by going past the end of the array is always there in any C function.

If you don't use alloca, you'd have to either malloc the space, provide a fixed size, or pass in a buffer.  Alloca is much more efficient than malloc.  Using a fixed array is space and time wasteful.

Just an opinion.

Blake



On Sat, Apr 5, 2014 at 8:26 AM, Juergen Sauermann <address@hidden> wrote:
Hi,

I hope the Solaris issues are fixed now (SVN 187). Please complain if not.

I decided against alloca() because the description on its man page
suggested more problems than advantages.

/// Jürgen


On 04/03/2014 02:55 PM, Elias Mårtenson wrote:

It would, but OpenMP is not supported on it. Also, the Solaris Studio compiler tends to generate better code.

Also, alloca() (as opposed to malloc()  which allocates memory on the heap) behaves exactly the same as dynamically advocated arrays. They both allocate space on the stack. In fact, I believe GCC generates exactly the same code for both cases. They both essentially translates to an add instruction of the stack pointer.

Regards,
Elias

On 3 Apr 2014 20:33, "Juergen Sauermann" <address@hidden> wrote:
Hi Elias,

I will look into this, but some have performance impacts (dynamic arrays).
Wouldn't it make sense to install gcc on Solaris?

/// Jürgen



On 04/02/2014 12:46 PM, Elias Mårtenson wrote:
Also, if you want to try out the Solaris compiler, it's available for free for Linux as well: http://www.oracle.com/technetwork/server-storage/solarisstudio/beta-1947596.html

To enable OpenMP you need to compile with -xopenmp=parallel and set some environment variables as described here: http://docs.oracle.com/cd/E18659_01/html/821-1381/aewcb.html#gkcrd

Regards,
Elias


On 2 April 2014 18:39, Elias Mårtenson <address@hidden> wrote:
Oh, and there are a few more dynamically sized arrays:
  • phrase_gen.cc:115 and 222
Regards,
Elias


On 2 April 2014 18:34, Elias Mårtenson <address@hidden> wrote:
On 2 April 2014 18:32, Elias Mårtenson <address@hidden> wrote:

Declaring an array with a size computed at runtime is not actually allowed (it's supported in modern C, and also supported in C++ as an extension).

What I meant was that it's supported in GCC as an extension, not C++.

Regards,
Elias







reply via email to

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