hunter315 :
A CUDA core and a shader core are the same thing, they are the small processing unit in a GPU, AMD may have a different name for theirs, but any small core in a GPU is a shader core, nVidia just calls theirs CUDA cores because they can do more than just shade and they like to advertise CUDA as much as they can.
Each core of a CPU has a pipeline that it is shoving instructions through, occasionally there are hold ups that leave certain parts unused, or simply no instructions that want to use it. Basic components are registers, ALU, FPU, memory unit, and peripheral control. If you have a set of code that is
A=2
B=4
C=B/A
D=C+B
You cannot solve for D until you have found C obviously, but division is hard and usually takes ~10 cycles to do compared to addition that takes only 1, so you have nothing in the adding portion of the ALU until the division has completed 10 cycles later, meanwhile the floating point math unit is doing nothing since you are only working with integers so the CPU usage percentage that is contributing is zero.
65 FPS isn't "low", and many open world games suffer from being open. The biggest burden on a CPU in the open world games is often determining what should be in your view. When you get these lows is your hard drive reading data? It may be going slower because it is waiting on data from the hard drive before it can do its thing. One setting that greatly reduces CPU and memory load is reducing the view/draw distance, this means it doesn't have to process nearly as much stuff.
Ah, absolutely superb explanation! I hadn't considered things like the FPU, certain registers, and probably a cache or even two not being used. If I'm following this right, that also explains why a CPU overclock usually does comparatively little for a CPU bound game. If the CPU is bottlenecking in a game, let's say, due to the game only telling the CPU to utilize a single ALU to perform a few integer based operations, then sure increasing the clock speed might help but nowhere near as much as the game actually telling the CPU to utilize its second ALU. Am I right on that? Meanwhile, a well optimized game actually receives a bigger boost from the overclock because now the entire CPU pipeline works faster. For a GPU it's probably much easier to max its usage since I assume the CUDA cores and VRAM comprise most of the GPU, right? CUDA cores probably each receive the instruction to work on a certain portion of an image all at once, probably do to an easier time with an API and such I'd assume, and since VRAM is being used as a buffer it's undoubtedly going to fill up at high resolutions. So if my reasoning holds, it would make sense that GPUs are a lot easier to fill up then CPUs. It almost seems like CPUs are more complex than GPUs, or at least more difficult for programmers to utilize.
Also, I know 65 fps isn't low, but it's surprising because it's comparatively
very low considering that my fps in this game is usually between 300 and 500 fps when I'm indoors, and anywhere from 65 to 120 fps when I'm outside. Since it's a game from 2002, I was incredibly surprised to take such a huge hit to my frame rate, even if I can't see that difference without looking at a frame counter. Also, it's very unlikely my HDD was the root of the problem. This occurs even at the start of the game, in the first cell block the game loads me into when I'm in the block's dead center. There's at least a couple more surrounding cell blocks loaded into RAM anyway, so my HDD can't possibly be accessed. Also in the first place I saw this happening I was standing still, and it occurred when I was just looking around. In one direction I had about 120 fps and when I looked towards the opposite direction without moving I dropped to 65. Additionally, Morrowind's draw distance is CRAP. If you've never played it before, here's its
maximum vanilla draw distance which I was playing at:
As you can see, that's quite low, but unfortunately I didn't get a chance to test out lowering this draw distance before I modded the crap out of it, though I'm sure you're correct, it is due to draw distance and terribly crappy optimization. I'm sure the reason the draw distance was so short was that they didn't how to optimize their coding at all and decided that even at that meager length even the best PCs at the time would be chugging along.
One last thing. You said division takes a while to calculate as compared to addition. I'm a freshman computer science major, so in future when I'm inevitably tested on program optimization, would you recommend that I keep division (and probably multiplication) to a minimum if possible?