【发布时间】:2020-09-09 13:49:48
【问题描述】:
所以我目前正在 SDL_GPU/C++ 中尝试一些东西,我有以下设置,图像分别为 32 x 32 像素,第二张图像是透明的。
//..sdl init..//
GPU_Image* image = GPU_LoadImage("path");
GPU_Image* image2 = GPU_LoadImage("otherpath");
for (int i = 0; i < screenheight; i += 32) {
for (int j = 0; j < screenwidth; j += 32) {
GPU_Blit(image, NULL, screen, j, i);
GPU_Blit(image2, NULL, screen, j, i);
}
}
这个带有 WQHD 尺寸屏幕的代码有 ~20FPS。但是,当我执行以下操作时
for (int i = 0; i < screenheight; i += 32) {
for (int j = 0; j < screenwidth; j += 32) {
GPU_Blit(image, NULL, screen, j, i);
}
}
for (int i = 0; i < screenheight; i += 32) {
for (int j = 0; j < screenwidth; j += 32) {
GPU_Blit(image2, NULL, screen, j, i);
}
}
即在两个不同的 for 循环中分离两个 blitt 调用,我得到 300FPS。
有人可以尝试向我解释一下,或者知道这里可能发生了什么吗?
【问题讨论】:
-
可能是因为引用的局部性更好,因此缓存未命中率更低。