我正在运行稀疏矩阵,密集向量乘法,并且变化
>稀疏矩阵的列数(减少)
>密集向量的行数(减少)
>稀疏矩阵的稀疏性(增加)
在增加每次运行的稀疏性时,我会减少列数.这意味着非零值(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存储器. 总结以上是内存溢出为你收集整理的python – TensorFlow tf.sparse_tensor_dense_matmul全部内容,希望文章能够帮你解决python – TensorFlow tf.sparse_tensor_dense_matmul所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)