- 发帖可能变空内容,邪门暂不知所以然
- 『稷下学宫』新认证方式,24年网站打算和努力目标
主题:世界首台100P超级计算机-神威太湖之光在中国诞生了! -- 尖石
Linpack的操作对象是一个稠密矩阵,可以认为就是C中的二维数组。其操作大致是这样的,每个循环中首先喂每个计算线程m个数字,要计算线程在其中做m^2次浮点运算,然后在计算线程间交换m个数字,再让计算线程做m^2次浮点运算。然后这样的循环迭代n次。对每个循环我们有:
1) 输入(/输出)m个数字
2) k*m^2次浮点运算
3) 线程间交换m个数字
可以看出来浮点运算的阶数比数据移动(包括第一步和第三步)多1。因此当n元一次线性方程组中间这个"n"变大时,浮点运算的次数增长得比数据移动更快,那么每次浮点运算消耗的时间在总时间中的权重也就越大。如果你的机器浮点运算快,但是数据移动慢,那么你就玩个花招,选择一个更大的n,这样表现相对就好一些;反之你就选择一个小一点的n。
在这里缓存的大小是有影响的,主要影响第1步。如果你要操作64MB的数据,如果你的缓存是1byte,你需要去取内存64M次,如果你有64k的cache,理想情况下是1k次,如果你有64M的cache,理想情况下你只需要取内存1次。读写同样大小的数据,多次少量读写的时间明显长于少次大量读写,所以如果你真的去做取内存64M次这样的操作,性能必定惨不忍睹。如果内存数据是连续的,其读写就偏向于理想情况,同时取1k次64k内存和取1次64M内存,很多时候差距不是那么显著。Linpack数据是规规矩矩排好的,编译器也知道CPU的缓存大小之类的信息,计算线程一次读取连续的一段数据,cache miss被最小化,因此缓存超过一定大小很多时候差距不甚显著。
但是普通应用程序在64M缓存的CPU和在64k缓存的CPU上性能差距很大,这是因为普通应用程序通常任意随机访问内存,又没有为特定的CPU的缓存大小做优化,因而经常发生cache miss,缓存大小的差距就暴露出来。HPCG操作的是压缩存储的稀疏矩阵,就是将非零的矩阵元素按行或者列连续地存在一起。这个时候对程序而言找一个元素要好几步寻址操作,内存访问偏向随机的内存访问,缓存的大小就变成关键性的因素之一。
- 相关回复 上下关系8
压缩 3 层
🙂MD simulation里GPU,CPU 喜欢喝冰茶 字81 2016-08-01 00:19:20
🙂说下个人看法 3 红茶冰 字951 2016-07-31 08:31:19
🙂请教一下Linpack和HPCG跑分问题 预备役师的防化 字640 2016-06-21 19:40:23
🙂数据移动速率也会影响Linpack,但是影响比较小
🙂9000,你这么牛逼,你的开发者知道吗? 预备役师的防化 字1201 2016-06-22 10:53:20
🙂随机寻址当然影响性能 2 大山猫 字332 2016-06-22 16:26:49
🙂我并不知道内存寻址是怎么工作的 预备役师的防化 字564 2016-06-22 17:17:56
🙂内存读写一样要寻址 3 大山猫 字555 2016-06-22 17:46:28