Tag: 转置

高速缓存内存优化数组转置:C

typedef int array[2][2]; void transpose(array dst, array src) { int i, j; for (j = 0; j < 2; j++) { for (i = 0; i < 2; i++) { dst[i][j] = src[j][i]; } } } src数组从地址0开始,dst数组从地址0x10开始。 L1数据缓存,直接映射,写分配,8字节块大小。 缓存总大小为16个数据字节。 src和dst数组的每个条目的命中或错过是什么? 答案是: src: [0][0] -> miss, [0][1] -> miss, [1][0] -> miss, [1][1] -> hit dst: […]

在位上旋转8×8块中的位的最快方法是什么?

我不确定我正在尝试做什么的确切术语。 我有一个以8 bytes字节存储的8×8 bits块,每个字节存储一行。 当我完成后,我希望每个字节存储一列。 例如,当我完成时: Byte0out = Byte0inBit0 + Byte1inBit0 + Byte2inBit0 + Byte3inBit0 + … Byte1out = Byte0inBit1 + Byte1inBit1 + Byte2inBit1 + Byte3inBit1 + … 在C中表现良好的最简单方法是什么?

使用涂料矢量来访问多维数组的任意轴向切片?

我正在构建一组函数来处理多维数组数据结构 ,我希望能够定义数组的任意切片 ,这样我就可以实现两个任意矩阵(又名Tensors或nd数组 )的广义内积。 我读过的一篇APL论文(我老实说找不到哪篇 – 我读过这么多篇幅)定义了左边矩阵X上的矩阵乘积,其尺寸为A;B;C;D;E;F和右矩阵Y尺寸G;H;I;J;K其中F==G as Z <- X +.× Y Z[A;B;C;D;E;H;I;J;K] <- +/ X[A;B;C;D;E;*] × Y[*;H;I;J;K] 其中+/是和的和 ,并且×将逐个元素应用于两个相同长度的向量。 所以我需要左边的“行”切片和右边的“列”切片。 我当然可以使用转置,然后使用“行”切片来模拟“列”切片,但我宁愿更优雅地做。 维基百科关于切片的文章引出了关于涂料载体的存根,这似乎是我正在寻找的奇迹治疗方法,但是没有太多可以继续下去。 如何使用涂料矢量来实现任意切片? (很久以后我注意到Stride的一个数组有一些细节。)