Earlier quoted context omitted.
When you run up against the limits of Moore's law and the end of Dennard Scaling you have to get dirty and do what it takes to get more performance. Personally, I think CPU architecture became too complicated for my taste after the 68k. So what?
As someone with the most basic understanding of CPUs and assembly, why do you say that?
Nvidia Ampere GA102 GPU Architecture [pdf]
21–30 of 51 posts
Re: Nvidia Ampere GA102 GPU Architecture [pdf]
#22These GPU architectures are too complicated for my taste. It reminds me of the days of segmented memory, and makes me feel like having to jump through hoops all the time. I'm curious if people have tried to invent something more elegant, and where these approaches have failed. Also, the fact that NVidia has probably patented this particular architecture makes it less interesting for me to really dig into.
There is roughly equal levels of complexity in any modern, high performance, general purpose/programmable chip.
Re: Nvidia Ampere GA102 GPU Architecture [pdf]
#23Re: Nvidia Ampere GA102 GPU Architecture [pdf]
#24Can the FP32 and Tensor core modules compute at the same time, or are they an abstraction over the underlying silicon, and we can only utilize one at a time?
Re: Nvidia Ampere GA102 GPU Architecture [pdf]
#25Earlier quoted context omitted.
> The FP32 doubling, is one of the most important bits here. But fortunately for programmers, this doesn't really change how you do your code. Early benchmarks are showing games under-performing quite a bit in the worst cases. The crux of the issue is that it's not /exactly/ a no-compromise doubling of FP32. Each data path per SM can either do 2xFP32 or 1xINT32/1xFP32 per clock cycle. So if your game or application h…
Its not uncommon for GPU workloads in games to max out about 20% INT32 calculations, but alas its enough to drop the FP32 performance quite a bit. I suspect Nvidia next time will probably separate out the INT32 and 2x FP32 units and gradually move towards going towards a better ratio of hardware that better suits the usual workload split.
Re: Nvidia Ampere GA102 GPU Architecture [pdf]
#26I posted this a day or two ago: The A100 whitepaper "spoiled" a lot of these factoids already. ( https://www.nvidia.com/content/dam/en-zz/Solutions/Data-Cent ...) The new bit seems to be the doubling of FP32 "CUDA cores" (I really hate that word: when Intel or AMD double their CPU pipelines it doesn't mean that they're selling more cores, it means their cores got wider... anyway). A100 didn't have this feature (I ass…
> The FP32 doubling, is one of the most important bits here. But fortunately for programmers, this doesn't really change how you do your code. Early benchmarks are showing games under-performing quite a bit in the worst cases. The crux of the issue is that it's not /exactly/ a no-compromise doubling of FP32. Each data path per SM can either do 2xFP32 or 1xINT32/1xFP32 per clock cycle. So if your game or application h…
Parallel INT32 was added with the last generation, in Turing. See page 13 of https://www.nvidia.com/content/dam/en-zz/Solutions/design-vi...
So nvidia split out the INT32 from FP32 last gen to make them independent, then re-added FP32 to the INT32 but kept it as 2 datapaths.
Re: Nvidia Ampere GA102 GPU Architecture [pdf]
#27Earlier quoted context omitted.
There is roughly equal levels of complexity in any modern, high performance, general purpose/programmable chip.
But it's not equally exposed to the programmer. The branch predictor in an Intel CPU may be insanely complex but when writing code you usually don't need to care. On the other hand if you want to use a GPU you have to care about a huge amount of complexity right from the start.
A big reason programming for CPUs doesn't seem as complex is because the vast, vast majority of time nobody actually cares about CPU performance. We all just prefer to pretend a runtime or JIT or compiler managed to magically make a language that's god-awful horrendous on modern CPUs run fast. They didn't, we just all look the other way though.
The difference between CPUs & GPUs is when people reach for GPUs, such as for games or HPC, those are also the people that care a lot about performance. And guides like this are for them.
Re: Nvidia Ampere GA102 GPU Architecture [pdf]
#28These GPU architectures are too complicated for my taste. It reminds me of the days of segmented memory, and makes me feel like having to jump through hoops all the time. I'm curious if people have tried to invent something more elegant, and where these approaches have failed. Also, the fact that NVidia has probably patented this particular architecture makes it less interesting for me to really dig into.
It's a good question actually. Intel tried to make a GPU called Larrabee that was mostly a bunch of small x86 cores with giant vector units. Turns out that it couldn't compete in rendering performance on existing games (in 2010) without the fixed function units that GPUs have, so they canceled it as a GPU. It did result in the AVX-512 instruction set though. I think the idea still has promise but there's a chicken an…
The actual hard part with GPUs is ensuring you can divide up the work and that it doesn't branch within a given chunk size. You have those same issues when trying to leverage a many-core CPU with AVX-512. You still want to keep those AVX-512 units loaded, which means work units of 16 FP32's must all take the same "branch" - not really any different from feeding warps on a GPU. And you've still got to scale across dozens if not hundreds of CPU cores.
Re: Nvidia Ampere GA102 GPU Architecture [pdf]
#29Earlier quoted context omitted.
It's a good question actually. Intel tried to make a GPU called Larrabee that was mostly a bunch of small x86 cores with giant vector units. Turns out that it couldn't compete in rendering performance on existing games (in 2010) without the fixed function units that GPUs have, so they canceled it as a GPU. It did result in the AVX-512 instruction set though. I think the idea still has promise but there's a chicken an…
Although I don't think the programming model with Larrabee would have really been any simpler. You still face many of the same issues that you do with GPUs, although being SIMD instead of SIMT would actually make it slightly harder to work with. The actual hard part with GPUs is ensuring you can divide up the work and that it doesn't branch within a given chunk size. You have those same issues when trying to leverage…
The actual actual hard part with GPUs is writing portable code in the face of a million edge cases due to different proprietary hardware architectures and buggy drivers, which you can't test without actually buying and maintaining whole rooms full of hardware. Reducing fixed function parts of the hardware and using a documented ISA, as Larrabee tried, would help with that.
Re: Nvidia Ampere GA102 GPU Architecture [pdf]
#30Earlier quoted context omitted.
But it's not equally exposed to the programmer. The branch predictor in an Intel CPU may be insanely complex but when writing code you usually don't need to care. On the other hand if you want to use a GPU you have to care about a huge amount of complexity right from the start.
Except you really do need to care about this complexity on CPUs. Things like cache locality & predictable access patterns are critical to achieving good CPU performance. This is why there's things like data-oriented design, SoA vs. AoS, and Z-order curves. It's also why linked-lists are so incredibly awful in practice, despite having superb algorithmic performance in theory. A big reason programming for CPUs doesn't…