From: Shark8 <onewingedshark@gmail.com>
Subject: Re: Efficient Sequential Access to Arrays
Date: Sun, 15 Jul 2012 12:52:42 -0700 (PDT)
Date: 2012-07-15T12:52:42-07:00 [thread overview]
Message-ID: <646635a0-ca6e-4f90-bfd7-90e9fd41f989@googlegroups.com> (raw)
In-Reply-To: <01983f1c-f842-4b1f-a180-bcef531dad4c@googlegroups.com>
On Sunday, July 15, 2012 12:40:08 PM UTC-6, Keean Schupke wrote:
> The Monte-Carlo simulator I am working on is now performing better in Ada than in C++ using profile-guided compilation (57k simulations per second for Ada 'vs' 56k simulations per second for C++).
>
> However in order to achieve this performance I needed to rework the arrays as the use of Indexes was too slow. An example of this is lets say we are accessing element 5 from array A "A(5)" this requires a multiplication to access (base_address + index * record_size). To access the neighbour A(6) also requires a multiplication. Accessing the array sequentially requires a multiplication per step.
>
> Contrast this with C++ where we can return a pointer to the array element, and we just need to add the record_size to step to the next element.
>
> So assuming we need this level of performance, what would be the best (and most idiomatic Ada) way to package this type of usage pattern as an abstract datatype?
>
>
> Cheers,
> Keean.
Hm; the problem is that such optimizations are highly dependent on assumptions that might not be true in the future. Consider, for example, compiling targeting the JVM: the arrays are not guaranteed to be continuous with contiguous components and therefore such a method would invite incorrect result/behavior to the program.
That said, if I needed to resort to such micro-optimizations I'd throw them all into a generic-package [if possible] and comment the heck out of the subprogram bodies. {Or if you're using a common pattern you might be able to explain the pattern in the package-body and then do the implementations -- You might be able to get away with a generic-iterator inside the package body.}
next prev parent reply other threads:[~2012-07-15 19:52 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-15 18:40 Efficient Sequential Access to Arrays Keean Schupke
2012-07-15 19:48 ` Dmitry A. Kazakov
2012-07-15 20:03 ` Keean Schupke
2012-07-15 20:56 ` Keean Schupke
2012-07-16 11:34 ` Jacob Sparre Andersen
2012-07-15 21:05 ` tmoran
2012-07-15 21:08 ` Keean Schupke
2012-07-16 1:19 ` tmoran
2012-07-15 21:44 ` Georg Bauhaus
2012-07-16 7:47 ` Dmitry A. Kazakov
2012-07-16 10:16 ` Keean Schupke
2012-07-16 14:57 ` Dmitry A. Kazakov
2012-07-16 16:39 ` Keean Schupke
2012-07-16 17:02 ` Georg Bauhaus
2012-07-16 18:48 ` Dmitry A. Kazakov
2012-07-16 19:12 ` Keean Schupke
2012-07-17 6:31 ` Dmitry A. Kazakov
2012-07-17 6:50 ` Georg Bauhaus
2012-07-17 8:42 ` Dmitry A. Kazakov
2012-07-17 7:24 ` Keean Schupke
2012-07-16 19:43 ` John B. Matthews
2012-07-16 20:44 ` Keean Schupke
2012-07-16 22:23 ` tmoran
2012-07-17 6:40 ` Keean Schupke
2012-07-17 9:01 ` Dmitry A. Kazakov
2012-07-18 8:10 ` Keean Schupke
2012-07-18 18:11 ` tmoran
2012-07-19 10:41 ` Keean Schupke
2012-07-19 11:18 ` Georg Bauhaus
2012-07-19 19:58 ` Keean Schupke
2012-07-21 8:24 ` Keean Schupke
2012-07-21 11:52 ` Georg Bauhaus
2012-07-21 16:14 ` Keean Schupke
2012-07-21 17:09 ` Keean Schupke
[not found] ` <i78m081tccmp078spmsei1l5vnj3k0kbkj@invalid.netcom.com>
2012-07-22 15:50 ` Keean Schupke
2012-07-22 5:13 ` Shark8
2012-07-15 21:35 ` J-P. Rosen
2012-07-15 19:52 ` Shark8 [this message]
2012-07-15 20:16 ` Keean Schupke
2012-07-15 21:33 ` Georg Bauhaus
2012-07-17 18:16 ` Florian Weimer
2012-07-22 10:01 ` robin.vowels
2012-07-30 6:31 ` Jacob Sparre Andersen
2012-07-30 7:16 ` Keean Schupke
2012-07-30 9:20 ` Georg Bauhaus
2012-07-30 14:04 ` Keean Schupke
2012-07-22 10:09 ` robin.vowels
2012-07-22 16:02 ` Keean Schupke
2012-07-22 16:21 ` Florian Weimer
2012-07-22 16:46 ` Keean Schupke
2012-07-22 18:41 ` Florian Weimer
2012-07-24 8:21 ` Keean Schupke
2012-07-22 17:34 ` Niklas Holsti
2012-07-22 18:21 ` Keean Schupke
2012-07-30 14:18 ` Jacob Sparre Andersen
2012-07-24 16:00 ` robin.vowels
2012-07-25 7:09 ` Niklas Holsti
2012-07-25 9:03 ` Keean Schupke
2012-07-26 0:15 ` Randy Brukardt
2012-07-26 8:38 ` Keean Schupke
2012-07-26 10:10 ` Brian Drummond
2012-07-26 12:32 ` Keean Schupke
2012-07-26 13:46 ` Dmitry A. Kazakov
2012-07-26 17:40 ` Shark8
2012-07-26 18:56 ` Dmitry A. Kazakov
2012-07-27 5:25 ` Shark8
2012-07-27 6:28 ` Dmitry A. Kazakov
2012-07-27 7:01 ` Vasiliy Molostov
2012-07-27 8:48 ` Dmitry A. Kazakov
2012-07-27 12:01 ` Georg Bauhaus
2012-07-27 16:49 ` Vasiliy Molostov
2012-07-27 19:38 ` Dmitry A. Kazakov
2012-07-28 5:32 ` Shark8
2012-07-28 7:37 ` Dmitry A. Kazakov
2012-07-28 18:32 ` Shark8
[not found] ` <6ov218tnkbqu3vpkuo4t77rd7de0a3aesf@invalid.netcom.com>
2012-07-26 18:49 ` Dmitry A. Kazakov
[not found] ` <86d31898ne39maimbl24knds7rf38qg7vc@invalid.netcom.com>
2012-07-27 6:45 ` Dmitry A. Kazakov
2012-07-27 8:21 ` Keean Schupke
2012-07-27 8:50 ` Dmitry A. Kazakov
2012-07-27 9:17 ` Keean Schupke
2013-02-25 21:18 ` Eryndlia Mavourneen
2012-07-26 13:08 ` Georg Bauhaus
2012-07-26 19:37 ` stefan-lucks
2012-07-26 19:21 ` stefan-lucks
2012-07-31 3:12 ` Randy Brukardt
2012-07-26 7:11 ` Markus Schöpflin
2012-07-26 14:47 ` Robin Vowels
2012-07-26 15:18 ` Martin
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox