【问题标题】:Constant output for large Matrix Multiplication sizes大型矩阵乘法大小的恒定输出
【发布时间】:2018-11-05 23:28:49
【问题描述】:

我正在为 GPU 实现一个矩阵乘法代码,矩阵数据类型是浮点数并且大小非常大。因此,对于大尺寸的矩阵,我得到一个常数值 2,147,483,648,即 2^31。 我知道这是浮点数的最大范围,但是有什么方法可以增加输出范围以获得正确的矩阵乘法答案而不更改数据类型?

【问题讨论】:

  • 好吧,我很惊讶 Nvidia 提供的 CUBLAS SGEMM 之类的 Api 如何通过采用单精度浮点输入并提供单精度浮点输出来在更大范围内执行矩阵乘法运算。
  • 你能重新调整矩阵的单位,只牺牲精度吗?
  • 2^31 不是 float32 类型的“最大范围”,它是 (2 − 2^−23) × 2^127。无论您的问题是什么,都与类型无关。
  • 建议:不要实现自己的矩阵 mul,使用 cublas。为了表现这场比赛,你总是会输...

标签: matrix cuda floating-point matrix-multiplication


【解决方案1】:

所以,这是我犯的一个基本错误,将我的输出矩阵的值限制为 2,147,483,648。

for(int i = 0; i < k; i++) 
    {
        sum += A_gpu[row * k + i] * B_gpu[i * m + col];
    }
    C_gpu[row * m + col] = sum;

这是我的代码的一部分,问题是变量 sum 具有整数数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2020-08-19
    • 2011-05-02
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多