我试图从这本书中理解 9 点模板的算法,逻辑对我来说很清楚,但是 WIDTHP 宏的计算是我无法理解的,这里是 breif 代码(原始代码长度超过 300 行!! ):
#define PAD64 0
#define WIDTH 5900
#if PAD64
#define WIDTHP ((((WIDTH*sizeof(REAL))+63)/64)*(64/sizeof(REAL)))
#else
#define WIDTHP WIDTH
#endif
#define HEIGHT 10000
REAL *fa = (REAL *)malloc(sizeof(REAL)*WIDTHP*HEIGHT);
REAL *fb = (REAL *)malloc(sizeof(REAL)*WIDTHP*HEIGHT);
原始数组是 5900 X 10000,但如果我定义 PAD64 ,数组变为 5915.75 X 10000
虽然到目前为止我可以猜到作者正在尝试将数组对齐和填充到 64 字节边界。但是 malloc 返回的数组通常是对齐的(&填充),另外,posix_memalign 给你一块保证有请求对齐的内存,我们也可以使用
__attribute__((align(64)))
这个 WIDTHP 会对我的代码性能产生什么影响?