利用matlab进行矩阵运算,matlab矩阵取值

2023-05-06 21:24:34 阅读:177576 作者: 4410

Hi,chenjie13,

从你的文字和代码来看,这不是正常的点乘法过程。 常用的点乘法是将向量的多个分量相乘,然后累积一个标量。 另一方面,从你的文字和代码来看,这对于你的3D矩阵a的任意1024 * 1024=1M个要素的面As,看起来像其中的各要素as(I,j ) ) c ) I,I )

如果是基于这种理解而不是原始说明,根据代码:

在200阶这个矩阵的任何一面,系数矩阵的任何一面,大小都为8MB(1024*1024*2*sizeof )浮点)。 这远远超过了现在GPU的任何L2 cache的大小。 因此,实际上每次乘法运算时,3D矩阵的各面和系数的这个平面都会从global memory中反复加载。 最终将重复加载8MB * 200 8MB * 200 8MB * 200=约4.8GB。 实际的SM的SP几乎都是空载的,显现很忙。 Profiler会验证我的说法。

考虑到计算能力的差异,这些写法并不一定能充分满载内存。 建议分别进行到下一个步骤:

)1)使用配置文件查看设备内存利用率的程度。 无法接近满载的情况。 考虑在一个线程中计算多组数据(你这里两个元素的乘法运算分别得到实部和虚部的过程)。 对于特定计算能力的卡片,这样做是必要的。

)2)如果你的卡现在这个表示法卡在内存、访问、内存的基本峰值上的话,就必须考虑重复数据的优化。 有巨大的重叠系数面(8MB ),每次与200面大矩阵的各面运算时,默认代码每次都会重新加载该系数面。 这是徒劳的。 必须考虑通过shared memory等手段对每批进行缓冲

(1) )中的任何一种,目前该算法都在访问和保存卡。

实际上达到约300GB/s的纸牌,在你的这个编码理论中,跑到约8MB * 401=3.2GB、3.2GB/300GB/s=约10.x ms (例如1080 )是最佳的,实际上跑到20ms以下是最佳的

Regards,

杀人神。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。

标签: 矩阵   matlab

Copyright © 2022 恩蓝号 Inc. 保留所有权利。 Powered by 恩蓝号

页面耗时0.0205秒, 内存占用107.28 KB, 访问数据库2次