Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • Issue
  • #221

P
Paddle
  • 项目概览

PaddlePaddle / Paddle
大约 2 年 前同步成功

通知 2325
Star 20933
Fork 5424
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 1423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 1,423
    • Issue 1,423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
    • 合并请求 543
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板
已关闭
开放中
Opened 10月 18, 2016 by saxon_zh@saxon_zhGuest

questions about CpuMatrix::mul(CpuSparseMatrix* a, MatBType* b, MatCType* c, real scaleAB, real scaleT)

Created by: shenhuinuist

1、我现在想用paddle给的方法执行两个矩阵相乘,C = A_B。 A是稀疏矩阵,B是稠密矩阵。我在Matrix.cpp中找到这个函数: void CpuMatrix::mul(CpuSparseMatrix_ a, CpuMatrix* b, real scaleAB, real scaleT) { if (dynamic_cast<CacheRowCpuMatrix*>(b)) { return mul(a, dynamic_cast<CacheRowCpuMatrix*>(b), this, scaleAB, scaleT); } else if (dynamic_cast<SparseRowCpuMatrix*>(b)) { return mul(a, dynamic_cast<SparseRowCpuMatrix*>(b), this, scaleAB, scaleT); } else { return mul(a, b, this, scaleAB, scaleT); } 我的情况应该是最后一个return,但是我不确定mul(a, b, this, scaleAB, scaleT)的实现,我只找到了这个函数: void CpuMatrix::mul(CpuSparseMatrix* a, MatBType* b, MatCType* c, real scaleAB, real scaleT),此处我的理解是否正确? 在void CpuMatrix::mul(CpuSparseMatrix* a, MatBType* b, MatCType* c, real scaleAB, real scaleT)这个函数里面,代码中提到了不支持A是SPARSE_CSR存储格式(CHECK_EQ(a->getFormat(), SPARSE_CSR) << "Not supported" ),且还不支持好几种情况:例如scaleAB=1 等等,现在针对A是SPARSE_CSR存储格式的情况,以及代码中提到的另外几种不支持的情况,paddle给出实现了吗? 2、基于我之前的理解是正确的,那么在这个函数里CpuMatrix::mul(CpuSparseMatrix* a, MatBType* b, MatCType* c, real scaleAB, real scaleT) 我的A设置成 是 [0, 1, 0, 2, 0;1, 0, 0, 0, 0;0, 0, 0, 2, 5]; 按照SPARSE_CSC存储,col [0, 1, 2, 2, 4, 5]; row [1, 0, 0, 2, 2]; value [1, 1, 2, 2, 5]; 函数里面,第一次的start = a->getRowStartIdx(1); end = a->getRowStartIdx(1 + 1); 这样的话对应上述row 的值,start=1,而end = 0? 我无法理解矩阵按照SPARSE_CSC存储下,getRowStartIdx的取值,请指正,谢谢。

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#221
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7