What is difference between Accel and Amax?

I have some ringing/ghosting, so I was going to decrease acceleration and possibly jerk. The Advanced Settings have these parameters for acceleration:
Accel 500
A-retract 3000
A-travel 500
Amax X 9000
Amax Y 9000
Amax Z 100
Amax E 10000

I think A-travel is for non-printing moves. Given that every individual acceleration is specified, what the heck is “Accel”? And why is it so much smaller than for example Amax-X? I thought maybe it was an overall cap on acceleration (e.g., d/dt of sqrt(x^2+y^2+z^2)), but that does not make sense, because it is much lower than Amax-X and Amax-Y, so those parameters would become meaningless. always capped by the overall Accel. I can’t figure out what it could possibly do.

One update - I initially wrote units of mm/sec2 above, but now I think that might be wrong, at least for some of them. I started looking in the Marlin SW for this, and I see that it uses both steps/sec^2 and mm/sec^2 for various parameters. Since X/Y is about 100.5steps/mm for X/Y, that would account for large difference in numbers; for example Accel might be in mm/sec^2, and Amax-X might be in step/sec^2.

In fact, I see a parameter accel set in planner.cpp that appears to be derived from input * steps/mm, and this is used as a ceiling in some calculation, for example:

if (block->steps[AXIS] && max_acceleration_steps_per_s2[AXIS+INDX] < accel) {
const uint32_t comp = max_acceleration_steps_per_s2[AXIS+INDX] * block->step_event_count;
if (accel * block->steps[AXIS] > comp) accel = comp / block->steps[AXIS];
} \

So my best guess at this point is that “500” above is in mm/sec2, and “9000” above is steps/sec^2, and the “500” is treated as a cap on all the accelerations. But…I don’t really know, I didn’t read the code in detail, and am not super familiar with C++. That is somewhat of a wild guess.