The version of make that is used by our cluster is 3.82, but the version installed on my desktop is 3.81. I can run the test script with make on my desktop with the -j option, and it runs multiple tasks in parallel as expected. It's just qmake that doesn't seem to want to work. Here's the debug output:

qmake -V -cwd -- -d -f Makefile -j 2 today.slp yesterday.slp
qmake: *** cannot determine architecture from environment variable SGE_ARCH
           no default architecture set
GNU Make 3.82
Built for x86_64-unknown-linux-gnu (distributed make
load balancing by Grid Engine
)
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Reading makefiles...
Reading makefile `Makefile'...
Updating makefiles....
 Considering target file `Makefile'.
...
[omitted many lines of "Trying implicit pattern rule etc"]
...
Updating goal targets....
Considering target file `today.slp'.
 File `today.slp' does not exist.
 Looking for an implicit rule for `today.slp'.
 Trying pattern rule with stem `today'.
 Found an implicit rule for `today.slp'.
 Finished prerequisites of target file `today.slp'.
Must remake target `today.slp'.
Need a job token; we don't have children
Invoking recipe from Makefile:4 to update target `today.slp'.
echo 094331 ; sleep 300 ; touch today.slp
dynamic mode
Putting child 0x238dd00 (today.slp) PID 1498 (remote) on the chain.
Recipe of `today.slp' is being run.
Considering target file `yesterday.slp'.
 File `yesterday.slp' does not exist.
 Looking for an implicit rule for `yesterday.slp'.
 Trying pattern rule with stem `yesterday'.
 Found an implicit rule for `yesterday.slp'.
 Finished prerequisites of target file `yesterday.slp'.
Must remake target `yesterday.slp'.
Live child 0x238dd00 (today.slp) PID 1498  (remote)
Live child 0x238dd00 (today.slp) PID 1498  (remote)
Live child 0x238dd00 (today.slp) PID 1498  (remote)
094331

Andrew Joplin
Space and Geophysics Lab
Applied Research Laboratories - The University of Texas at Austin
(512) 835-3050


On 02/28/2014 05:58 PM, Reuti wrote:
Am 01.03.2014 um 00:17 schrieb Andrew Joplin:

Correct.  In qstat I see the qmake job itself on one node, and a single sh job that gets 
scheduled to a different node.  In the output of "ps -e f" on the 1st node 
(where qmake is running) I see a single qrsh process, and the corresponding sh process on 
the other node.

Can you explain what you mean by "the rule isn't parallized"?  I thought if it works in 
parallel with make, it's "parallelized"...
`make` 3.82 also works correctly when being called on the command line (BTW 
which version do you have there?).

Maybe the hooks put into `make` were not the same as for the older version and 
something got screwed up; and/or the remote-calls are not made correctly by 
`make`.

What is the output when you add -d:

  $ qmake -V -cwd -- -d -f Makefile -j 2 today.slp yesterday.slp

-- Reuti


Andrew Joplin
Space and Geophysics Lab
Applied Research Laboratories - The University of Texas at Austin
(512) 835-3050


On 02/28/2014 04:58 PM, Reuti wrote:
Am 28.02.2014 um 23:56 schrieb Andrew Joplin:

SoGE is using gmake 3.82 as well.  If this is an actual bug, do you have any 
suggestions regarding a workaround?  I've tried to eliminate my need to call 
shell functions in the makefile, but haven't figure out how to do away with 
them.
I don't think that the problem is the used shell function, but that the rule 
isn't parallelized. In:

$ ps -e f

on the node in question, resp.:

$ qstat

you see only one job running / being submitted?

-- Reuti


Thanks!

Andrew Joplin


On 02/28/2014 04:34 PM, Reuti wrote:
Am 28.02.2014 um 23:20 schrieb Andrew Joplin:

$ qmake --version
GNU Make 3.82
Built for x86_64-unknown-linux-gnu (distributed make
load balancing by Grid Engine
)
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

The version at the end of the qmake man page is:

OGS/Grid Engine 2011.11  $Date: 2007/07/19 09:04:30 $                QMAKE(1)

Is this an old bug that's been fixed?
No, a new one which was introduced I fear. I get (forgot to mention):

$ qmake --version
GNU Make version 3.78.1-distributed make
load balancing by Grid Engine


I'm not sure which version the SoGE fork is using, but it's worth to try:

https://arc.liv.ac.uk/trac/SGE

-- Reuti


Andrew Joplin


On 02/28/2014 03:55 PM, Reuti wrote:
Am 28.02.2014 um 20:37 schrieb Andrew Joplin:

I've come up with a simple example to illustrate this problem.  I think it's 
not so much an implicit rule problem as it is using a shell function within the 
makefile:

Makefile:

x=$(shell date -d $(*F) +"%H%M%S")
%.slp:
     echo $(x) ; sleep 30 ; touch $@

Running with make starts both targets simultaneously as it should:

$ make -f Makefile -j 2 today.slp yesterday.slpecho 133400 ; sleep 30 ; touch 
today.slp
133400
echo 133400 ; sleep 30 ; touch yesterday.slp
133400

But running with qmake only spawns a single qsh job:

$ qmake -V -cwd -- -f Makefile -j 2 today.slp yesterday.slp
qmake: *** cannot determine architecture from environment variable SGE_ARCH
            no default architecture set
echo 133523 ; sleep 30 ; touch today.slp
dynamic mode
For me it's working as intended (but I have still SGE 6.2u5).

What is the output of.

$ qmake --version

-- Reuti


Does the use of the shell function somehow prevent qmake from running in 
parallel?
Andrew Joplin

On 02/27/2014 05:35 PM, Andrew Joplin wrote:
Newbie again with a qmake question.  I have several analysis jobs that I run 
with qmake (each rule processes data and generates some output file).  Some of 
my makefiles have all explicit rules, and they run fine in dynamic allocation 
mode.  But a couple newer makefiles use a couple implicit rules, and it does 
run on our cluster, but only one target at a time.

The syntax I'm using is:

$ qmake -V -cwd -- -f Makefile -j 20 --keep-going

I've already tried running with make instead, and it uses as many threads as I 
tell it.  Any ideas?  I'll try to work up a simplified test makefile.



_______________________________________________
users mailing list

[email protected]
https://gridengine.org/mailman/listinfo/users
_______________________________________________
users mailing list
[email protected]
https://gridengine.org/mailman/listinfo/users

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

_______________________________________________
users mailing list
[email protected]
https://gridengine.org/mailman/listinfo/users

Reply via email to