PCI bar 空间可预取与不可预取概念

      PCI BAR空间分为两类:IORESOURCE_IO(非可预取)和IORESOURCE_MEM(可预取),一般来说,对于BAR为寄存器空间,都要设置为IORESOURCE_IO;对于BAR为存储器空间,要设置为IORESOURCE_MEM;那么为什么要区分两种类型的空间呢?      所谓预取,重点在“取”字,这要从读取IO寄存器和RAM内存的区别来看。LDD3如果这个内存区被标识为可预取的, CPU 可缓存它的内容并且对它做所有类型的优化. 非可预取的内存存取, 另一方面, 不能被优化因为每
摘要由CSDN通过智能技术生成

      PCI BAR空间分为两类:IORESOURCE_IO(非可预取)和IORESOURCE_MEM(可预取),一般来说,对于BAR为寄存器空间,都要设置为IORESOURCE_IO;对于BAR为存储器空间,要设置为IORESOURCE_MEM;

 

那么为什么要区分两种类型的空间呢?

      所谓预取,重点在“取”字,这要从读取IO寄存器和RAM内存的区别来看。

 

 

 

LDD3

 

如果这个内存区被标识为可预取的, CPU 可缓存它的内容并且对它做所有类型的优化. 非可预取的内存存取, 另一方面, 不能被优化因为每次存取可能有边际效果, 就象 I/O 端口. 映射它们的寄存器到一个内存地址范围的外设声明这个范围是非可预取的, 而象在 PCI 板的视频内存的一些是可预取的.

 

WEB SEARCH

 

在一些应用中我们会遇到"可预取"内存的概念,可预取性是指存储器空间的可预取能力。如果读操作没有副作用(即如同从 RAM 中读数据一样不会破坏数据),则称存储器空间可预取。必要时可将字节写操作合并成一个双字写操作。可预取是读取一次以后不会改变读取地址和存储状态的任何改变,CPU 可缓存它的内容并且对它做所有类型的优化,.非"可预取"的内存就象FIFO地址影射到内存地址,读取数据以后会引起FIFO指针的改变.另外还象一些中断状态IO影射到内存,读取这个内存后,可能会清除中断标志等等,所以CPU不可缓存这个内存地址.

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
OpenBLAS中可以使用不同的预取指令来预取一部分矩阵的数据。其中,L1级别的预取指令可以预取矩阵中相邻的一行或一列的数据,L2级别的预取指令可以预取相邻的一块矩阵的数据,L3级别的预取指令可以预取更大的矩阵块的数据。具体来说,可以使用以下函数来实现OpenBLAS中的预取操作: ```c void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc); ``` 其中,M、N、K表示矩阵的维度,A、B、C表示矩阵的数据,alpha、beta表示矩阵乘法的系数,lda、ldb、ldc表示矩阵的存储格式和布局。 举例来说,如果要预取矩阵A的第一行数据,可以使用以下代码: ```c #define L1_CACHE_LINE_SIZE 64 float A[M*K]; float B[K*N]; float C[M*N]; for (int i = 0; i < M; i++) { __builtin_prefetch(&A[i*K], 0, 1); // 预取A的第i行数据 } cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, M, N, K, alpha, A, K, B, N, beta, C, N); ``` 在上面的代码中,__builtin_prefetch函数用于预取矩阵A的第i行数据。这里使用了L1级别的预取指令,第二个参数为0表示预取到L1缓存,第三个参数为1表示预取读取数据后立即触发数据传输,即预取A的下一行数据。需要注意的是,在使用预取指令时,应该根据实际情况进行调整,以避免对性能产生负面影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值