通过cache_line_size得到L1 cache size

通过cache_line_size 可以得到L1 cache的size
    if (cache_line_size() == 128 || cache_line_size() == 256) {
        mlx4_dbg(dev, "Enabling CQE stride cacheLine supported\n");
        /* Changing the real data inside CQE size to 32B */
        dev_cap->flags &= ~MLX4_DEV_CAP_FLAG_64B_CQE;
        dev_cap->flags &= ~MLX4_DEV_CAP_FLAG_64B_EQE;

        if (mlx4_is_master(dev))
            dev_cap->function_caps |= MLX4_FUNC_CAP_EQE_CQE_STRIDE;
    } else {
        if (cache_line_size() != 32  && cache_line_size() != 64)
            mlx4_dbg(dev, "Disabling CQE stride, cacheLine size unsupported\n");
        dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_CQE_STRIDE;
        dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_EQE_STRIDE;
    }
}

在arm64 实现如下:
static inline int cache_line_size(void)
{
    u32 cwg = cache_type_cwg();
    return cwg ? 4 << cwg : L1_CACHE_BYTES;
}
static inline u32 cache_type_cwg(void)
{
    return (read_cpuid_cachetype() >> CTR_CWG_SHIFT) & CTR_CWG_MASK;
}
static inline u32 __attribute_const__ read_cpuid_cachetype(void)
{
    return read_cpuid(CTR_EL0);
}
#define read_cpuid(reg)            read_sysreg_s(SYS_ ## reg)

可见最终是通过读取SYS_CTR_EL0 这个寄存器来得到L1 cache size的
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值