Skip to Content.
Sympa Menu

charm - Re: [charm] Global variables in Charm++

charm AT lists.cs.illinois.edu

Subject: Charm++ parallel programming system

List archive

Re: [charm] Global variables in Charm++


Chronological Thread 
  • From: "Hammond, Jeff R" <jeff.r.hammond AT intel.com>
  • To: "Van Der Wijngaart, Rob F" <rob.f.van.der.wijngaart AT intel.com>, "Phil Miller" <mille121 AT illinois.edu>
  • Cc: Nikhil Jain <nikhil.life AT gmail.com>, "Kunzman, David M" <david.m.kunzman AT intel.com>, "Mattson, Timothy G" <timothy.g.mattson AT intel.com>, "charm AT cs.illinois.edu" <charm AT cs.illinois.edu>
  • Subject: Re: [charm] Global variables in Charm++
  • Date: Mon, 29 Sep 2014 19:37:39 +0000
  • Accept-language: en-US
  • List-archive: <http://lists.cs.uiuc.edu/pipermail/charm/>
  • List-id: CHARM parallel programming system <charm.cs.uiuc.edu>

Can you do something evil where you extern pointer to storage and then
declare it in a generic C++ file that will be preprocessed properly?

Obviously, may provoke the question “what is that terrible smell?” but I’ve
seen far worse workarounds associated with legacy Fortran :-)

Jeff

From: "<Van Der Wijngaart>", Rob F
<rob.f.van.der.wijngaart AT intel.com<mailto:rob.f.van.der.wijngaart AT intel.com>>
Date: Monday, September 29, 2014 at 9:55 AM
To: Phil Miller
<mille121 AT illinois.edu<mailto:mille121 AT illinois.edu>>
Cc: Nikhil Jain
<nikhil.life AT gmail.com<mailto:nikhil.life AT gmail.com>>,
"Kunzman, David M"
<david.m.kunzman AT intel.com<mailto:david.m.kunzman AT intel.com>>,
Jeff R Hammond
<jeff.r.hammond AT intel.com<mailto:jeff.r.hammond AT intel.com>>,
"Mattson, Timothy G"
<timothy.g.mattson AT intel.com<mailto:timothy.g.mattson AT intel.com>>,

"charm AT cs.illinois.edu<mailto:charm AT cs.illinois.edu>"

<charm AT cs.illinois.edu<mailto:charm AT cs.illinois.edu>>
Subject: RE: Global variables in Charm++

OK, it appears not to be the problem of running the preprocessor per se, but
of having expressions in array dimensions. I replaced
readonly double weight[(2*RADIUS+1)*(2*RADIUS+1)];
with
readonly double weight[3+3+3];
and got another syntax error.
This looks like a pretty serious limitation to me. I am now required to do
the array dimension computation for charmc and stuff that into the .ci file
explicitly as a constant. This means running another script/preprocessor
before I can run charmc.

Rob

From: Van Der Wijngaart, Rob F
Sent: Friday, September 26, 2014 3:49 PM
To: 'Phil Miller'
Cc: Nikhil Jain; Kunzman, David M; Hammond, Jeff R; Mattson, Timothy G;
charm AT cs.illinois.edu<mailto:charm AT cs.illinois.edu>
Subject: RE: Global variables in Charm++

Thanks Phil. I just added –E to my OPTS parameter, but then all hell breaks
loose.
This is what charmc says is happening when it tries to compile my .ci file:
../../../bin/charmc -Ofast -DRADIUS=1 -DSTAR -E jacobi2d.ci
And this is the line in my .ci file that it complains about:
readonly double weight[(2*RADIUS+1)*(2*RADIUS+1)];

Output:
[rfvander@bar1
PRKstencil5]$ make
../../../bin/charmc -Ofast -DRADIUS=1 -DSTAR -E jacobi2d.ci
STDIN:8: Charmxi syntax error> syntax error
Invalid construct
Fatal Error by charmc in directory
/home/rfvander/charm/examples/charm++/PRKstencil5
Command ../../../bin/charmxi -orig-file jacobi2d.ci returned error code 1
charmc exiting...
../../../bin/charmc -Ofast -DRADIUS=1 -DSTAR -c jacobi2d.C
jacobi2d.C(1): catastrophic error: cannot open source file "jacobi2d.decl.h"
#include "jacobi2d.decl.h"

By the way, you may wonder about the subject line of this message. It started
because I wanted a (small) 2D array as a global variable. I couldn’t get that
to work (is that by design?), so made it into a 1D array. And then I ran into
the issue I just reported.

Rob

From:unmobile AT gmail.com<mailto:unmobile AT gmail.com>

[mailto:unmobile AT gmail.com]
On Behalf Of Phil Miller
Sent: Friday, September 26, 2014 3:37 PM
To: Van Der Wijngaart, Rob F
Cc: Nikhil Jain; Kunzman, David M; Hammond, Jeff R; Mattson, Timothy G;
charm AT cs.illinois.edu<mailto:charm AT cs.illinois.edu>
Subject: Re: Global variables in Charm++

For historical reasons [1], charmc defaults to *not* running the preprocessor
on .ci files. Preprocessing .ci files can be enabled by passing charmc the -E
flag when it's working on .ci files.

[1] Enabling pre-processing when it wasn't historically the default risks
breaking existing application code by having macros that may have been used
as identifiers in .ci files suddenly be subject to expansion/substitution.

On Fri, Sep 26, 2014 at 5:31 PM, Van Der Wijngaart, Rob F
<rob.f.van.der.wijngaart AT intel.com<mailto:rob.f.van.der.wijngaart AT intel.com>>
wrote:

Hello Nikhil,



I have a symbol that I define on the compile line (i.e. I stuff it in OPTS,
as below):

OPTS=-DRADIUS=1

CHARMC=../../../bin/charmc $(OPTS)

When I now use RADIUS in my .C file, the C preprocessor does its work nicely
and recognizes that I have defined RADIUS, and also what its value is.
However, when I use RADIUS in the .ci file, charmc croaks. So is it true that
no preprocessor is run on .ci files? Thanks!



Rob






Archive powered by MHonArc 2.6.16.

Top of Page