> Standard block dist, with no flags. Average time: 0.84 sec
>
> ...
>
> My custom dist, with no flags. Average time: 1.46 sec
>
> ...

FWIW, I wouldn't waste too much time doing performance comparisons/comm 
counts of non--fast compiles.  The runtime checks that we do are only 
going to add noise, and you wouldn't want to run in this mode in any 
serious study.  So I'd suggest using it for debugging new code, but saving 
yourself that axis in any analysis.


> Standard block dist, with --no-local --fast. Average time: 0.68 sec
>
> (get = 4236, get_nb = 0, put = 0, put_nb = 0, test_nb = 0, wait_nb = 0, 
> try_nb = 0, fork = 0, fork_fast = 0, fork_nb = 1602) (get = 823, get_nb 
> = 0, put = 0, put_nb = 0, test_nb = 0, wait_nb = 0, try_nb = 0, fork = 
> 1608, fork_fast = 0, fork_nb = 0)
>
>
> My custom dist, with --no-local --fast. Average time: 0.95 sec
>
> (get = 4236, get_nb = 0, put = 0, put_nb = 0, test_nb = 0, wait_nb = 0, 
> try_nb = 0, fork = 0, fork_fast = 0, fork_nb = 1602) (get = 5633, get_nb 
> = 0, put = 0, put_nb = 0, test_nb = 0, wait_nb = 0, try_nb = 0, fork = 
> 1608, fork_fast = 0, fork_nb = 0)
>
>
>
> I was a bit surprised about how much faster standard block dist was, 
> because in my previous tests the overhead was significantly smaller. Is 
> it possible that there have been some changes in chapel git (during last 
> month) which could be causing this?

I'm not sure offhand.  Our nightly performance graphs are available here, 
with annotations added when there are significant changes that we can 
explain:

        http://chapel.sourceforge.net/perf/

These are all single-locale configurations, though sometimes tests 
that are run in a --no-local mode can show changes that would also
indicate similar changes for multi-locale tests.

We've recently started working on adding multi-locale nightly performance 
graphs as well, but they're not publicly part of this page just yet.


> I guess it would be simplest to go back to block dist and start building 
> my own dist from it step by step while monitoring performance and comm 
> stats. After all, modifications I made were by no means extensive, most 
> of the time was spent investigating the existing code.

Perhaps.  The technique of asserting that things are where you'd expect it 
to be might also bear some fruit.  As I say, it continues to look to me as 
though something that you think should be on locale 1 is actually on 
locale 0 for some reason.  E.g., if the entire local array or domain class 
were on the wrong locale, it seems like it could result in communication 
patterns like this.

(I'll mention in passing that a professor from WWU is currently working on 
the design and implementation of a Chapel visual debugging tool with the 
goal of rendering how a program is executing in a way that would hopefully 
help catch locality errors like this which can be difficult to detect 
visually in the source code.


> Another question, is it possible to use config param to determine which 
> modules to use? I tried normal conditionals, but that gives me invalid 
> use of module -error.

If I'm understanding properly, I don't think there is at present using 
config params.  The challenge is that conditionals on config params 
introduce new lexical scopes, so I find myself often wanting to do things 
like:

        if myParamTest then
          var x: int;
        else
          var x: real;

        ...x...

but this doesn't work because the scope of 'x' is the branch of the 
conditional, so it's out of scope by the time the conditional ends. In 
many cases, you can switch to a conditional expression:

        var x: if myParamtest then int else real;

or a function:

        var x: myTypeFunction(myParamTest);

but for module uses, I don't think this is an option.

Note that if the goal of your question is to switch between two 
distributions, this could be done by use-ing both modules and then using a 
conditional like the above to specify which dmap to use.  We do this sort 
of thing in [test/release/]examples/benchmarks/lulesh and .../miniMD for 
example.

For switching between different modules, I think the way we typically deal 
with it at present is to name two modules the same thing, put them in 
different directories, and use different -M options to choose between them 
(or name the files diferent things, have them declare their modules 
explicitly, and name them on the command-line).


Note that I/we have had a long-standing desire to have a simplified 
version of param conditionals that could be evaluated early (near parse 
time) and not introduce lexical scopes in order to get a cpp-style 
#if/#ifdef-like capability in the language for cases like this, but 
nobody's pushed on it hard enough to propose a design that has stuck. 
We're definitely open to inspiration here.


> Also, I have a constructor defined as
>
> proc MyPolicy(boundingBox: domain, param rank=boundingBox.rank, type 
> idxType=boundingBox.idxType, targetLocs: [] locale = Locales, 
> relCutTable: [] real)
>
> How could I have relCutTable's default value to be an array filled with 
> 1.0s, with same domain as targetLocs?

Do either of these work?


        relCutTable: [targetLocs.domain] real = 1.0

or:

        targetLocs: [?tld] locale = Locales,
        relCutTable: [tld] real = 1.0

If not, let me know.  (in which case, a lame workaround would be to create 
two constructors, one of which takes relCutTable, the other of which 
doesn't.  If you could forward constructors (something we're currently 
planning for), this wouldn't be so bad, but without that, it'd result in 
lame code duplication (though maybe that could be moved into a helper 
routine).

-Brad


------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
_______________________________________________
Chapel-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/chapel-users

Reply via email to