我有一个 100 万列 x 100 万行的矩阵。
我的算法需要做:
Matrix m = Matrix(rows,cols)
for (colB: cols){
vector currColA = m.getcolumn(colA)
for (colB: cols){
vector currColB = m.getcolumn(colB)
result = currColA.dotProduct(colB)
return result;
}}
或者你也可以说:
Vectors [] v = Vectors[]
for (i: v.length){
vector v1 = v[i]
for (i: v.length){
vector v2 = v[i]
result = v1.dotProduct(v2)
return result;
}}
我的问题:为这个问题分配内存和初始化内存的正确方法是什么:
- 我应该为完整矩阵分配内存,用完整矩阵初始化它,然后运行算法吗?
- 或者我应该为向量列表分配内存,然后遍历这个列表?
- 要不然??
我担心的是我想尽量减少到 gpu 的传输时间。我已经通过修改JCublas hello world 示例来尝试这种计算,以对 2 个向量进行 sgemm 操作,但是在我的大量向量上执行此操作时,最终导致传输时间删除了 gpu 加速的好处。
谢谢!PS:实现可以在任何Java库中