Re: [AMBER-Developers] Help with Makefiles for pmemd.cuda

From: Jason Swails <>
Date: Thu, 4 Feb 2016 22:42:31 -0500

My explanation for what was happening is that it seems like "make" keeps
track of all of the rules that it executes and satisfies. Since you added
"cuda_lib_clean" as a prereq rule on 3 separate targets, it would "finish"
on the first target and make would declare victory and decide it didn't
need to run again on the other two.

The solution I came up with was to move cuda_lib_clean out of the list of
dependency targets for each of the programs and instead add a step to each
of the pmemd.cuda_XPYP rules that was $(MAKE) cuda_lib_clean. This would
launch a *new* make process targeting that rule, so the current make
process would have no memory of having completed it. So it would be sure
to run it every time.

Also, the test build finished again and pmemd.cuda_SPXP still didn't get
built, but that's because you have the cuda_SPXP rule commented out for
cuda_serial. So it seems as though that's intentionally omitted.

I haven't looked at the make docs to verify my suspicion, but it's a
reasonable design optimization given typical uses for make and seems (to
me) to be the simplest explanation consistent with everything we've seen.
So I'm reasonably confident this is what was happening.

On Thu, Feb 4, 2016 at 10:33 PM, Jason Swails <>

> On Thu, Feb 4, 2016 at 10:26 PM, Jason Swails <>
> wrote:
>> On Thu, Feb 4, 2016 at 10:08 PM, Ross Walker <>
>> wrote:
>>> If you have a moment to take a look at the master and see if you can
>>> figure out what is causing this still not to work it would be much
>>> appreciated. I am pulling my hair out with this right now.
>> ​Fixed in master, I think. Give it a try.
> ​Actually it was only building SPFP and DPFP because you spelled SPXP as
> SPZP in the cuda_serial rule. I'm running the build again now, but I
> suspect all 3 targets will get built now, and it's passing the correct
> compiler flags for each precision model. Parallel make works, too,
> although it's a bit slower than necessary since it has to rebuild every
> CUDA object every time (and nvcc is the slowest compiler known to man).
> But it works (for some definitions of 'works')​.
> --
> Jason M. Swails
> BioMaPS,
> Rutgers University
> Postdoctoral Researcher

Jason M. Swails
Rutgers University
Postdoctoral Researcher
AMBER-Developers mailing list
Received on Thu Feb 04 2016 - 20:00:04 PST
Custom Search