Concurrency 并发矩阵求和-过去的试卷

Concurrency 并发矩阵求和-过去的试卷,concurrency,parallel-processing,floating-point,gpu,computer-architecture,Concurrency,Parallel Processing,Floating Point,Gpu,Computer Architecture,我目前正在大学三年级学习——我的计算机系统和并发性考试,我对过去的一个纸上问题感到困惑。没有人——甚至是讲师——回答了我的问题 问题: 考虑以下GPU,它由8个时钟频率为1.5 GHz的多处理器组成,每个处理器包含8个多线程单精度浮点单元和整数处理单元。它有一个内存系统,由8个1GHz图形DDR3DRAM分区组成,每个分区宽8字节,容量为256 MB。通过合理的假设(陈述它们)和简单的矩阵乘法算法,计算计算C=a*B所需的时间。A、 B和C是n*n矩阵,n由系统的内存量决定。 解决方案中给出的答

我目前正在大学三年级学习——我的计算机系统和并发性考试,我对过去的一个纸上问题感到困惑。没有人——甚至是讲师——回答了我的问题

问题:

考虑以下GPU,它由8个时钟频率为1.5 GHz的多处理器组成,每个处理器包含8个多线程单精度浮点单元和整数处理单元。它有一个内存系统,由8个1GHz图形DDR3DRAM分区组成,每个分区宽8字节,容量为256 MB。通过合理的假设(陈述它们)和简单的矩阵乘法算法,计算计算C=a*B所需的时间。A、 B和C是n*n矩阵,n由系统的内存量决定。

解决方案中给出的答案:

> Assuming it has a single-precision FP multiply-add instruction,   
 Single-precision FP multiply-add performance =   
 \#MPs * #SP/MP * #FLOPs/instr/SP * #instr/clock * #clocks/sec =  
8 * 8 * 2 * 1 * 1.5 G = 192 GFlops / second   
Total DDR3RAM memory size = 8 * 256 MB = 2048 MB 
The peak DDR3 bandwidth =   #Partitions * #bytes/transfer * #transfers/clock * #clocks/sec = 8 * 8 * 2 * 1G = 128 GB/sec  

>Modern computers have 32-bit single precision So, if we want 3 n*n SP matrices, 
maximum n is  
3n^2 * 4 <= 2048 * 1024 * 1024

>nmax = 13377 = n

>The number of operations that a naive mm algorithm (triply nested loop) needs is calculated as follows:   
>For each element of the
 result, we need n multiply-adds For each row of the result, 

>we need n * n multiply-adds  For the entire result matrix, we need n * n * n multiply-adds Thus, approximately 2393 GFlops.  

> Assuming no cache, we have loading of 2 matrices and storing of 1 to the graphics memory.

>That is 3 * n^2 = 512 GB of data.  This process will take 512 / 128 = 4 seconds   
Also, the processing will take 2393 / 192 = 12.46 seconds   Thus the
 entire matrix multiplication will take 16.46 seconds.
>假设它有一条单精度FP乘法加法指令,
单精度FP乘法加法性能=
\#MPs*#SP/MP*#触发器/指令/指令*#指令/时钟*#时钟/秒=
8*8*2*1*1.5克=192千兆次/秒
DDR3RAM内存总大小=8*256 MB=2048 MB
峰值DDR3带宽=#分区*#字节/传输*#传输/时钟*#时钟/秒=8*8*2*1G=128 GB/秒
>现代计算机有32位单精度,所以如果我们想要3个n*n SP矩阵,
最大n为
3n^2*4 nmax=13377=n
>朴素mm算法(三重嵌套循环)需要的操作数计算如下:
>对于
结果,我们需要对结果的每一行进行n次乘法相加,
>我们需要对整个结果矩阵进行n*n乘法相加,我们需要n*n*n乘法相加,因此,大约2393gflops。
>假设没有缓存,我们将加载2个矩阵,并将1个矩阵存储到图形内存中。
>即3*n^2=512 GB的数据。此过程将花费512/128=4秒
此外,处理将花费2393/192=12.46秒,因此
整个矩阵乘法需要16.46秒。
现在我的问题是-如何计算3*((13377)^2)=536832387

转换为536832387=512 GB

这是5.368亿个值。每个值的长度为4字节。内存接口的宽度为8字节(假设GPU无法获取2个值并将其拆分),这实际上使读写大小增加了一倍。因此,所使用的2GB内存被有效地读/写了两次(因为读了8个字节,忽略了4个字节),因此在RAM和GPU之间只传递4GB的数据


有人能告诉我哪里出了问题,因为我能想到的唯一方法是,5.368亿个结果是内存操作的值,单位为KB,这在任何地方都没有说明。

看起来开发答案的人将512 Mi 4字节值与512 GiB混淆了。这个问题没有得到很好的解决,因为一个最简单的(分配每个C[i][j]但不阻塞或转置B的寄存器)矩阵在没有缓存的情况下相乘会读取a和B的每个元素n次。此外,虽然A可以作为连续流读取(利用GPU的SIMD特性),但B在每次内存访问中只能读取一个元素;由于GDDR3的突发长度为4,因此为B传输的32B中只有4B会被使用(带宽的巨大浪费)。没有内存访问和计算时间重叠似乎也是一个奇怪的假设。(总的来说,提供的解决方案看起来非常草率。)