python的matmul_在Python中TensorFlow tf.sparse_tensor_dense_matmul

我运行了一个小实验来对tf.sparse_tensor_dense_matmul操作进行基准测试.不幸的是,我对结果感到惊讶.

我正在运行稀疏矩阵,密集向量乘法,并且变化

>稀疏矩阵的列数(减少)

>密集向量的行数(减少)

>稀疏矩阵的稀疏性(增加)

在增加每次运行的稀疏性时,我会减少列数.这意味着非零值(nnz)的数量始终保持不变(每行100个).

当测量计算matml操作所需的时间时,我预计它将保持不变(因为输出大小和nnz不同).

我所看到的是以下内容:

我查看了C代码,看看我是否能发现结果的任何原因.虽然,考虑到C代码,我希望每次运行的时间相同.如果我理解正确的代码,它会循环遍历稀疏矩阵的所有nnz值(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/sparse_tensor_dense_matmul_op.cc#L239).对于每个nnz值,它循环遍历第二个密集矩阵的所有列(在我的情况下,它只是一列,因为它是一个向量)(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/sparse_tensor_dense_matmul_op.cc#L245).

我可以想象第二个矩阵/向量的行数影响性能的唯一点是https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/sparse_tensor_dense_matmul_op.cc#L246,如果它遍历第二个矩阵/向量的所有行,则“maybe_adjoint_b”函数到达当前需要的行.

[令人烦恼的是,对于“maybe_adjoint_b”调用,它是通过作为行索引传递的变量“k”来调用的.虽然,我认为“m”是行索引,“k”是稀疏矩阵的列索引.

问题:为什么我会为matmul操作获得不同的执行时间,即使nnz和输出大小始终相同?

我实际上认为这不是TensorFlow的问题,而是第一种情况下输入向量的8MB输入不适合L2内存.在所有其他情况下,矢量<= 800kb并且适合L2存储器.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值