AVX512 中“屏蔽”商店的粒度是多少?

use*_*893 7 performance assembly intel cpu-architecture avx512

假设你打电话 _mm512_mask_store_ps,从 CPU 的写入缓冲区的角度来看,它是作为大小为 64 字节的存储执行(带有某种掩码)还是在内部作为大小为 4 字节的多个存储执行?

为了防止store-to-load转发停顿,必须将存储的粒度(大小)与后续加载到同一内存位置的粒度相匹配。希望这个问题是有道理的,我不是 CPU 架构专家。

use*_*893 5

正如 Iwillnotexist 所引用的:

如果掩码不全为 1 或全为 0,则依赖于掩码存储的加载必须等到存储数据写入缓存。如果掩码全部为 1,则数据可以从掩码存储转发到相关负载。如果掩码全部为 0,则负载不依赖于掩码存储。

因此,掩码商店没有从商店到加载的转发,除非掩码全是 1(表现得像常规商店)或全零(微不足道)。在屏蔽存储之后加载通常会等待数据发送到缓存,因此它应该非常昂贵。