Your matrix is of size 15,000 x 15,000, so you have 225M elements in the matrix. This makes for roughly 2GB of memory. This is much more than the cache size of your processor, so it has to be loaded completely from main memory in every matrix multiplication, making for approximately 100GB of data transfers, plus what you need for the source and destination vectors. The maximum memory bandwith of the i3 is approximately 21 GB/s based on the Intel specs, but if you look around the web, you'll find that at most half of that is really available in reality. Thus, at the very least, you'd expect your benchmark to last 10 seconds, and your actual measurement of 45 seconds isn't so far off that mark. At the same time, you are also doing some 10 billion floating point multiplies and adds. Considering, say, 10 clock cycles for the combination, and 3 GHz clock rate, you'll come out at ~30 seconds. Of course, they can run concurrently with speculative memory loads if the cache is clever. All in all, I'd say you're not too far off the mark. What would you have expected?