1. No software. Your ram has a listing in bios that shows its timings, that's the 16-18-18-39 2T (primary) numbers, followed by 30+ (secondary and Tertiary) other numbers. If you look up videos on Ryzen ram tweaking, there's a few of those that can be changed lower.
Each of those numbers represents a thing. Think of it as the amount of time it takes data to enter a door, cross a room, exit another door. Thats the primary. Secondary and Tertiary would be how much time it takes to turn the first door handle, time waited before actually opening the door, time to move you through the doorway, speed of closing the door, how hard the door is closed etc.
So all that needs to be in harmony, smooth and swift, or you run into the door because you didn't wait long enough, you slam your foot in the door because you closed it too fast.
Tweaking ram is the same. The faster that you can get the data into the ram, through the ram and on its way to the cpu when demanded, the faster your cpu can operate per clock. It's not waiting for the bus.
Ryzen cpus are not a single die (that's the block itself) under the lid like Intel. Because of the way cores radiate heat when working, pack them in tight and they heat up everything next to them. Ryzen splits up into 3-6 dies, that allows the heat better transfer through the lid, without affecting its neighbors as much. Runs cooler. But each of those dies has a freeway connecting them to allow for data to move. That's governed by Infinity Fabric. IF works best at a 1:1:1 ratio with fclock:mclock:uclock. It's speeds are set by the Data Rate of your ram.
Ram is Dual Data Rate, DDR, so with 3600MHz ram, the Data Rate is 1800MHz. So you'd want IF to be 1800:1800:1800. Auto settings usually apply that, but not always, there's variables and chances fclock will change, like the way vcore voltages lower and dip as clock speeds change. So manually setting fclock locks it at exactly half of your DDR. Trying to set it faster or slower messes with the ratio and makes it unstable.
2. Voltage use creates heat. Higher the voltage of the cpu, more heat it makes. If you look in HWInfo, you'll see that vcore per core changes with use, a single core might demand 1.5v, but realistically only needs 1.3v. All cores working boosts to a lower limit but all cores at 1.5v will end up damaging the cpu, too much instant heat. So I changed vcore (auto) to (manual) for the 4.4GHz set OC, just as has always been done with OC's, but didn't like the heat result because that sets all cores to 4.4GHz permanently, even if running CSGO which only uses 2 cores, the other 6 doing nothing, no work. That's a ton of wasted voltage, effort and excess heat.
So by further change to (offset) (negative) (0.2v) and leaving boost at (auto), I get a single core boost at 1.3v instead of 1.5v, and if all cores are boosted, they still max out at 1.3v instead of 1.5v. So CSGO use sees 2 cores at 4.4GHz 1.3v, and 6 cores at 3.5GHz resting at 0.9v. Much less heat, maximum boost. Same affect as the hard OC. Maximum fps.
The specific size of the negative offset can/does change. It all depends on what your individual cpu actually needs, vs what it demands. Could be 0.2v or 0.3v (that's max setting) or more likely 0.15v etc.
3. Yes. PBO works very well with low end cpus. It really doesn't do anything useful for cpus that are already seeing use close to power limits. So PBO I disabled, and no 'Auto OC' which adds upto 200MHz to the boost clocks. That's additional stuff added that isn't necessary. A 3700x boosts to 4.4GHz, no point trying to force it to boost to 4.4GHz when it already does.
But most things other than the ram timings and vcore I left at factory defaults. Ryzens factory overclock themselves, that's boost. All I've done is tweak the process so that boost is more efficient and overall that means more affective. Makes the cpu work faster and stronger without working any harder, in affect the voltage changes make it actually work less hard than default.
Ryzens take a very Human approach to things. You understand the expression 'Work Smarter, not Harder', that's their philosophy. All a Ryzen OC should be is streamlining the boost, making the cpu work smarter. Set OC limits just makes the cpu work harder. And at the end of the day, harder = hotter.