作为对上一个问题的跟进,我正在尝试实现以下循环,这是一个矩阵向量乘法,其中向量是矩阵 Q 的列,基于循环迭代器:
编辑:Q 不能事先填充,而是用迭代器 K 的进展填充。
for (unsigned K=0;K<N;K++){ // Number of iterations loop
//... do some stuff
for (unsigned i=0; i<N; i++){
float sum = 0;
for (unsigned j=0; j<N; j++){
sum += A[j][i]*Q[j][K];
}
v[i] = sum;
}
//... do some stuff
// populate next column of Q
}
数组的维度是:
一个 [N x N]
Q [N x (0.5N + 1)]
该数组已被展平,以便与 cublasSgemv() 一起使用。我的问题是,是否可以通过告诉它从哪里开始访问 d_Q 以及元素的增量是多少(因为它是行主要 C++)来使用 cublasSgemv():
编辑:将内存访问增量与 sizeof(float) 相乘。据我所知,仍然不起作用。
Niter = 0.5*N + 1;
for (unsigned K=0;K<N;K++){
cublasSgemv(handle, CUBLAS_OP_T, N, N, &alpha, d_A, N, (d_Q + sizeof(float)*K*(Niter)), (Niter), &beta, d_v , 1);
}
我认为不可能像那样索引 d_Q,因为我没有得到任何结果
已解决:@RobertCrovella 的解决方案正是我想要的。谢谢。