CN100437520C - 一种用计算机对矩阵进行运算的方法 - Google Patents
一种用计算机对矩阵进行运算的方法 Download PDFInfo
- Publication number
- CN100437520C CN100437520C CNB2004100782448A CN200410078244A CN100437520C CN 100437520 C CN100437520 C CN 100437520C CN B2004100782448 A CNB2004100782448 A CN B2004100782448A CN 200410078244 A CN200410078244 A CN 200410078244A CN 100437520 C CN100437520 C CN 100437520C
- Authority
- CN
- China
- Prior art keywords
- matrix
- cache
- redundant
- elements
- computer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 196
- 238000004519 manufacturing process Methods 0.000 title 1
- 238000000034 method Methods 0.000 claims abstract description 31
- 238000012360 testing method Methods 0.000 claims abstract description 11
- 230000017105 transposition Effects 0.000 claims description 17
- 238000013507 mapping Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 6
- 230000008520 organization Effects 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 101001062093 Homo sapiens RNA-binding protein 15 Proteins 0.000 description 2
- 102100029244 RNA-binding protein 15 Human genes 0.000 description 2
- 230000007613 environmental effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种用计算机进行矩阵运算的方法,该方法用于解决在矩阵运算中常见的“Cache颠簸”现象。该方法包括:对第一矩阵进行测试,得到适用于所述第一矩阵的冗余矩阵的维数;将所得到的冗余矩阵的维数作为一个参数进行存储;当计算机对形式与第一矩阵相同的矩阵进行运算时,从所存储的参数中得到冗余矩阵的维数,然后根据所得到的维数为所要进行运算的矩阵添加冗余矩阵,得到第二矩阵;利用第二矩阵实现矩阵的运算从而使得所述第一矩阵中的待处理区域的元素同时读入到Cache中,其中,待处理区域的元素映射到相同Cache组的元素不超过Cache组的路数。采用本发明的方法可以避免计算机进行矩阵运算中的“Cache颠簸”现象,从而大幅度提高运算效率。
Description
技术领域
本发明涉及应用N路组相联Cache组织方式的计算系统中大规模矩阵转置运算的运行效率。
背景技术
用计算机对大规模矩阵进行运算在工程和科学计算中有着广泛应用。在这些运算中,通常要涉及对整个矩阵或者矩阵中一个区域内的元素进行处理。例如在对大规模矩阵进行转置运算时,如果采用采用矩阵分块的方法,则这种转置运算一般要涉及矩阵分块后子矩阵之间的元素交换以及一个子矩阵内部的元素的转置。
众所周知,在计算机中,为了减少CPU与内存之间的速度差异,通常在相对慢速的主存(DRAM)和相对快速的CPU之间插入一速度较快、容量较小的高速缓冲存储器(Cache),以起到缓冲作用。CPU与主存之间通过Cache进行数据交换,以提高数据传输速度。其中,组相联Cache是Cache的一种基本结构,而多路组相联Cache是多级存储系统中的常用技术。多路组相联Cache是将一定容量大小为M的Cache分成U组,每组N路,主存和Cache之间采用数据块进行数据交互。主存数据块以固定的映射关系映射到确定的Cache组上,其在组内位置相对灵活,可以根据需要选择该组的N路中的某一路。以一维编码的主存模型为例,通常,对于在主存中编号为J的数据块在Cache中的对应组号为Q,其中Q=J MOD U,即主存中编号与U同余的主存数据块被映射到相同的Cache组内。也已经知道,类似于“Q=J MODU”的这种映射关系在一定的计算机系统中是保持固定的。如图1所示,例如,Cache1被分为0~7共8组,每组两路(在图1中用相同的组号表示),主存2中的数据块按照一维模型进行编号,这样,主存2中编号与数字8同余的数据块被映射到Cache1相同的组内。例如在图1中,主存2中编号为0和16的数据块都被映射到Cache1的0号组内,尽管它们可以位于0号组不同的路中。
从前述的内容可知,当用计算机对矩阵进行运算时,需要将所需要处理的矩阵区域内的元素从主存中读取到cache中。例如,采用矩阵分块的方法进行矩阵的转置运算,当进行两个子矩阵的数据交换时,需要将两个子矩阵的元素读取到cache中进行处理。但是,由于前述的计算机主存数据块和cache的固定映射关系,例如“Q=J MOD U”,即使所处理的元素数据总量比Cache容量低,但是由于被映射到相同Cache组的元素超过了其路数N,因此无法将所处理的元素数据一次全部读入到cache中,而是需要主存和cache多次的数据交换。这种情况下就会发生“Cache颠簸”现象。“Cache颠簸”会增加访存开销,降低数据预取效率,程序运行的预测性和可控性都会下降。
发明内容
本发明的目的在于提供一种用计算机对矩阵进行运算的方法,该方法可以大规模提高矩阵运算的效率。
为了实现上述目的,本发明提供了一种用计算机对矩阵进行运算的方法,包括以下步骤:
步骤1)、对第一矩阵进行测试,得到适用于所述第一矩阵的冗余矩阵的维数以及所述第一矩阵的最佳分块方式;其中,
对所述的第一矩阵进行测试时,根据所述第一矩阵的规模及其分块方式,选择不同维数大小的冗余矩阵进行测试,根据测试结果选择一个符合条件的最佳的冗余矩阵,从而得到适用于所述第一矩阵的冗余矩阵的维数;
步骤2)、将所得到的冗余矩阵的维数以及所述第一矩阵的最佳分块方式作为参数进行存储;
步骤3)、当所述的计算机对规模与分块方式和所述的第一矩阵相同的矩阵进行运算时,从所存储的参数中得到冗余矩阵的维数,然后根据所得到的维数为所要进行运算的矩阵添加冗余矩阵,得到第二矩阵;
步骤4)、利用所述的第二矩阵实现矩阵的运算,从而使得所述第一矩阵中的待处理区域的元素同时读入到Cache中,其中,待处理区域的元素映射到相同Cache组的元素不超过Cache组的路数。
上述技术方案中,所述矩阵的运算为对转置运算。
上述技术方案中,所述矩阵的运算为对矩阵进行分块操作后的转置运算。
采用本发明的方法可以避免计算机进行矩阵运算中的“Cache颠簸”现象,从而大幅度提高运算效率。
附图说明
图1是二路组相联Cache组织方式;
图2是本发明方法应用于矩阵转置运算的一个实施例的流程图;
图3是16384×512矩阵转置时间随分块大小的变化曲线;
图4是16384×512矩阵以128×128分块的矩阵转置时间随冗余矩阵的不同的变化曲线。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细描述。
为了描述与理解的方便,在下文的实施例中采用一个16×16的示例性矩阵为例来描述本发明的方法,但是应该理解,本领域的技术人员可以很容易地将本发明的方法应用于其它规模的矩阵,例如大规模矩阵。
表1示出了一个16×16的矩阵,每一个单元格表示一个矩阵元素,每一个矩阵元素在计算机的主存中占用一个数据块。在该实施例中,采用一维模型对主存数据块进行编码,相应地,表1中每一个单元格中的数字表示了该矩阵元素在主存中的位置。从表1中可看出,该矩阵的元素按行优先的顺序存储在主存中,即矩阵元素从上之下从左至右按顺序存储在主存中。应当理解,本发明并不限制主存模型的类型,主存也可以采用诸如二维模型等其它模型进行编码,而矩阵的元素也可以采用诸如列优先的顺序存储在主存中。
计算机中容量为M的Cache分成U个Cache组,每个Cache组中有N路。主存与Cache之间有固定的映射关系,以一维编码的主存模型为例,若主存块的编号为J,则其对应组号为“Q=J MOD U”,即U同余的主存数据块被映射到相同的Cache组中。主存块号J作为标记(tag)与块数据一起存于此组的某一路中。同样地,为了描述与理解的方便,在下文的实施例中采用一个如表2所示的16×2(16组,2路)的示例性Cache为例来描述本发明的方法,但是应该理解,本领域的技术人员可以很容易地将本发明的方法应用于其它容量和组织方式的组相联Cache。其中,在表2中,第一列为Cache组号,第二和第三列表示每一Cache组有两路组成,即每一个Cache组最多存储映射到该组的两个数据。
表1
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |
65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 |
81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 |
97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 |
113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 |
129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 |
145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 |
161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 |
177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 |
193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 |
209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 |
225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 |
241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 |
表2
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | ||
11 | ||
12 | ||
13 | ||
14 | ||
15 | ||
16 |
在对矩阵进行处理时,有时需要对整个矩阵或者矩阵中的某些区域的数据进行处理。一个典型的矩阵运算是矩阵的转置运算,特别是对矩阵分块后进行的转置运算。在进行整个矩阵的转置运算时,需要将对应的子矩阵进行数据交换并在子矩阵内部进行转置运算。在一个实施例中,表1所示的16×16矩阵采用4×4的分块方式,将该矩阵分为16个4×4的子矩阵。对表1中的矩阵进行转置运算时,包括对子矩阵A1和子矩阵A2的处理。子矩阵A1和A2如表3所示,其矩阵元素的编号与表1一致,分别是位于表1左下角和右上角的4×4矩阵。对子矩阵A1和A2的处理通常包括子矩阵A1和A2之间矩阵元素的交换以及子矩阵内部矩阵元素的转置,此时的子矩阵A1和A2就是待处理的矩阵区域。
表3
在对子矩阵A1和A2进行运算时,需要将其从主存中调入到Cache中。而在现有技术中,通常是将主存中的矩阵元素按照诸如“Q=J MOD U”的映射关系直接读取到Cache中。以表3中的子矩阵A1和A2为例,当按照“Q=J MOD U”的映射关系将其元素读取到Cache中时,则主存中的元素与Cache组号的对应关系如表4所示,其中表4中的第一列为Cache的组号,第2~5列中的数字对应于该元素在主存中的位置。
表4
1 | 193 | 209 | 225 | 241 |
2 | 194 | 210 | 226 | 242 |
3 | 195 | 211 | 227 | 243 |
4 | 196 | 212 | 228 | 244 |
5 | ||||
6 | ||||
7 | ||||
8 | ||||
9 | ||||
10 | ||||
11 | ||||
12 | ||||
13 | 13 | 29 | 45 | 61 |
14 | 14 | 30 | 46 | 62 |
15 | 15 | 31 | 47 | 63 |
16 | 16 | 32 | 48 | 64 |
从表4中可看出,根据主存与Cache的固定映射关系,会有四个元素对应同一个Cache组的情况发生。但是,从表2可知,Cache的容量为16×2(16组,2路),即每一个Cache组最多同时存储两个同组数据。也就是说,在一次运算中,当所处理的矩阵区域的元素映射到相同Cache组中的元素超过Cache的路数时,即使该矩阵区域的规模比Cache容量低,但这些区域的元素仍然无法同时被读入Cache,在完成相应操作运算时需要多次将待处理区域的元素调入和换出Cache,即发生“Cache颠簸”现象。
在本发明中,为待处理的矩阵(称为第一矩阵)增加一冗余矩阵从而构成一个新的矩阵(称为第二矩阵),然后将第二矩阵读取到主存中。在对第一矩阵进行诸如转置之类的运算处理时,冗余矩阵不参加运算,但是,由于冗余矩阵的存在,改变了第一矩阵的元素在主存中排列顺序。当冗余矩阵选择合适时,可使得第一矩阵中的待处理区域的元素可以同时读入到Cache中,从而消除“Cache颠簸”现象。在这里,为了使得第一矩阵中的待处理区域的元素可同时读入到Cache中,一般是要求待处理区域的元素映射到相同Cache组的元素不超过Cache组的路数。
为了描述的更清楚,以表1的矩阵为第一矩阵来说明本发明的方法。其中,表3中的子矩阵A1和A2为对第一矩阵进行转置运算时的一个待处理区域。
首先,为表1的16×16的第一矩阵提供一个16×4的冗余矩阵,该冗余矩阵与第一矩阵一起构成一个新的16×20的矩阵,称为第二矩阵,如表5所示。表5中的第17~20列为所提供的冗余矩阵。
表5
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 |
61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 |
81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 |
101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 |
121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 |
141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 |
161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 |
181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 |
201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 |
221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 |
241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 |
261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 |
281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 |
301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 |
将表5所示的第二矩阵读入主存中,表5中单元格内的数字表示在一维主存模型中该元素在主存中的位置。对比表5和表1可知,由于提供了冗余矩阵,表5中第一矩阵的元素或者说部分元素在主存中的位置发生了变化。
仍然以第一矩阵中的子矩阵A1和A2为例,在增将冗余矩阵之后,这两个子矩阵A1和A2的元素在主存中的位置如表6所示。
表6
将这两个子矩阵按照前述的映射关系“Q=J MOD U”读取到Cache中,其结果如表7所示。其中,表7中的第一列为Cache的组号,第二和第三列中的数字对应于该元素在主存中的位置。
表7
1 | 33 | 241 |
2 | 34 | 242 |
3 | 35 | 243 |
4 | 36 | 244 |
5 | 53 | 261 |
6 | 54 | 262 |
7 | 55 | 263 |
8 | 56 | 264 |
9 | 73 | 281 |
10 | 74 | 282 |
11 | 75 | 283 |
12 | 76 | 284 |
13 | 13 | 301 |
14 | 14 | 302 |
15 | 15 | 303 |
16 | 16 | 304 |
从表7可以看出,增加冗余矩阵之后,第一矩阵的待处理区域(例如子矩阵A1和A2)的元素映射到Cache后,映射到相同Cache组的元素不超过Cache组的路数,因此第一矩阵中待处理区域的元素可以同时地全部读入到Cache中,有效地避免了“Cache颠簸”现象的发生。
从上述描述可知,虽然冗余矩阵不参加矩阵的运算,但是冗余矩阵的存在改变了第一矩阵的元素或者其部分元素在主存中的存储位置,使得第一矩阵的待处理区域的元素映射到Cache时,映射到同一Cache组的元素不超过Cache组的路数。进一步的,由于该冗余矩阵不参加矩阵的运算,因此该矩阵的元素值并不限定,仅关心该冗余矩阵的规模,也就是该冗余矩阵的维数。
冗余矩阵的维数可以在对第一矩阵运算前通过计算机测试得到。例如对于矩阵的转置运算,可以针对第一矩阵的规模及其分块方式,选择不同维数大小的冗余矩阵进行测试,根据测试结果选择一个符合条件的最佳的冗余矩阵,并将该最佳的冗余矩阵的维数作为一个参数存储起来。在下一次处理具有同样规模和分块方式的第一矩阵时,可直接调用前述参数形成冗余矩阵并与第一矩阵组合成第二矩阵。作为另一种可选择的方式,在做矩阵的转置运算时也可以将矩阵的分块方式作为一个参数,通过计算机测试获得该矩阵的最佳分块方式,并将该最佳分块方式作为参数储存起来以便做矩阵运算时调用。
图2示出了采用本发明方法做矩阵转置运算时的一个优选实施例的流程图。如图2所示:
步骤100:计算机运行一个测试程序计算针对第一矩阵规模的最佳分块方式。
步骤110:计算机运行一个测试程序计算针对第一矩阵规模的最佳冗余矩阵的规模。
步骤120:将所得的最佳分块大小和最佳冗余度作为环境参数储存。
步骤130:对一具体的第一矩阵进行转置运算时,从环境参数中读入最佳冗余矩阵的规模,并根据该最佳冗余矩阵的规模生成一冗余矩阵,该冗余矩阵与第一矩阵组合成第二矩阵。
步骤140:读取环境参数中的最佳分块方式,将第一矩阵分块。
步骤150:将第二矩阵读入计算机主存中。
步骤160:根据上述最佳分块方式对第一矩阵进行转置运算。
在一个大规模矩阵的转置运算的实施例中,在Intel xeon2.8G处理器平台上对大小为16384×512的第一矩阵进行转置运算。在步骤100可以得到如图3所示的第一矩阵的转置时间(纵坐标)随分块大小(横坐标)的变化曲线,可以得到最佳分块大小为128×128。在步骤110可以得到如图4所示的第一矩阵以128×128分块时转置时间(纵坐标)随冗余矩阵规模(横坐标表示已增加冗余矩阵后的第二矩阵的列数,其行数为16384)的变化曲线,可以得到已增加冗余矩阵后的第二矩阵最佳列数为517,即最佳冗余矩阵的列数为(517-512=)5,则最佳冗余矩阵的规模为16384×5。上述所测得的结果存为环境参数。并且在做矩阵转置运算时,读取存储在环境参数中的分块大小值和冗余矩阵规模。
在当前的研究中,已发现利用本发明所述的利用冗余矩阵进行矩阵运算可以大大提高运算的效率,计算机系统的运算效率可以得到指数级的增长。在曙光刀片服务器平台上,CPU为XEON2.8G,内存2G,运行红帽子Linux操作系统,对规模为16384×512单精度浮点复数矩阵进行转置运算,运用原有方法需时1.387秒,而采用本发明所述的方法以后,只需要0.155秒,效果十分明显。
Claims (3)
1、一种用计算机对矩阵进行运算的方法,包括以下步骤:
步骤1)、对第一矩阵进行测试,得到适用于所述第一矩阵的冗余矩阵的维数以及所述第一矩阵的最佳分块方式;其中,
对所述的第一矩阵进行测试时,根据所述第一矩阵的规模及其分块方式,选择不同维数大小的冗余矩阵进行测试,根据测试结果选择一个符合条件的最佳的冗余矩阵,从而得到适用于所述第一矩阵的冗余矩阵的维数;
步骤2)、将所得到的冗余矩阵的维数以及所述第一矩阵的最佳分块方式作为参数进行存储;
步骤3)、当所述的计算机对规模与分块方式和所述的第一矩阵相同的矩阵进行运算时,从所存储的参数中得到冗余矩阵的维数,然后根据所得到的维数为所要进行运算的矩阵添加冗余矩阵,得到第二矩阵;
步骤4)、利用所述的第二矩阵实现矩阵的运算,从而使得所述第一矩阵中的待处理区域的元素同时读入到Cache中,其中,待处理区域的元素映射到相同Cache组的元素不超过Cache组的路数。
2、根据权利要求1所述的用计算机对矩阵进行运算的方法,其特征在于,所述矩阵的运算为对转置运算。
3、根据权利要求1所述的用计算机对矩阵进行运算的方法,其特征在于,所述矩阵的运算为对矩阵进行分块操作后的转置运算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100782448A CN100437520C (zh) | 2004-09-21 | 2004-09-21 | 一种用计算机对矩阵进行运算的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100782448A CN100437520C (zh) | 2004-09-21 | 2004-09-21 | 一种用计算机对矩阵进行运算的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1752950A CN1752950A (zh) | 2006-03-29 |
CN100437520C true CN100437520C (zh) | 2008-11-26 |
Family
ID=36679808
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100782448A Expired - Fee Related CN100437520C (zh) | 2004-09-21 | 2004-09-21 | 一种用计算机对矩阵进行运算的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100437520C (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018184570A1 (zh) * | 2017-04-06 | 2018-10-11 | 上海寒武纪信息科技有限公司 | 运算装置和方法 |
CN110990299B (zh) * | 2020-03-03 | 2020-07-14 | 江苏华创微系统有限公司 | 非规整组相联cache组地址映射方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4918527A (en) * | 1987-12-03 | 1990-04-17 | Etat Francais (Cnet) | Device and method with buffer memory, particularly for line/column matrix transposition of data sequences |
US20030088600A1 (en) * | 2001-08-13 | 2003-05-08 | Sun Microsystems, Inc. A Delaware Corporation | Matrix transposition in a computer system |
-
2004
- 2004-09-21 CN CNB2004100782448A patent/CN100437520C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4918527A (en) * | 1987-12-03 | 1990-04-17 | Etat Francais (Cnet) | Device and method with buffer memory, particularly for line/column matrix transposition of data sequences |
US20030088600A1 (en) * | 2001-08-13 | 2003-05-08 | Sun Microsystems, Inc. A Delaware Corporation | Matrix transposition in a computer system |
Also Published As
Publication number | Publication date |
---|---|
CN1752950A (zh) | 2006-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102433153B1 (ko) | 고대역폭 메모리 시스템에서 호스트-기반 및 클라이언트-기반 명령어 스케줄링 | |
Ueyoshi et al. | QUEST: A 7.49 TOPS multi-purpose log-quantized DNN inference engine stacked on 96MB 3D SRAM using inductive-coupling technology in 40nm CMOS | |
CN112926022A (zh) | 用于在存储器阵列内执行分集矩阵运算的方法及设备 | |
CN107203807B (zh) | 神经网络加速器的片上缓存带宽均衡方法、系统及其装置 | |
US9110778B2 (en) | Address generation in an active memory device | |
TW201907319A (zh) | 適用於人工神經網路之矩陣及向量相乘的方法 | |
KR20160039544A (ko) | 실시간 분석을 지원하는 인-메모리 팝 카운트 | |
US20210232407A1 (en) | Method and system for compressing application data for operations on multi-core systems | |
CN104636273A (zh) | 一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法 | |
US11277149B2 (en) | Bit string compression | |
US20230289398A1 (en) | Efficient Matrix Multiply and Add with a Group of Warps | |
GB2562041A (en) | Multi-output decoder for texture decompression | |
US9323774B2 (en) | Compressed pointers for cell structures | |
Jin et al. | GPUSGD: A GPU‐accelerated stochastic gradient descent algorithm for matrix factorization | |
TW202429312A (zh) | 用於計算加速器中之神經網路權重區塊壓縮的方法及設備 | |
CN100437520C (zh) | 一种用计算机对矩阵进行运算的方法 | |
CN113454612A (zh) | 存储装置操作编排 | |
Nakano et al. | The random address shift to reduce the memory access congestion on the discrete memory machine | |
US11941371B2 (en) | Bit string accumulation | |
US20230169144A1 (en) | Operation method, processor, and related product | |
CN113407904B (zh) | 兼容多维度卷积神经网络的Winograd处理方法、系统及介质 | |
CN116339680A (zh) | 一种实时的多端口并行读写近存处理器 | |
WO2018126274A2 (en) | Data operations performed between computing nodes using direct memory access (dma) | |
Bai et al. | Parallel block tridiagonalization of real symmetric matrices | |
GB2604193A (en) | Texture address generation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20081126 Termination date: 20160921 |