【发布时间】:2014-02-21 01:15:40
【问题描述】:
我想使用 cuda 6 进行布尔乘法,但我无法以正确的方式进行。 B 是一个布尔对称矩阵,我必须做 B^n 布尔乘法。
我的 C++ 代码是:
for (m=0; m<dimension; m++) {
for (n=0; n<dimension; n++) {
for (k=0; k<dimension; k++) {
temp=mat[m*dimension+k] && mat[k*dimension+n];
B[m*dimension+n]= B[m*dimension+n] || temp;
}
}
}
我找到了一段代码,但我无法根据我的情况调整它。
__global__ void gpuMM(float *A, float *B, float *C, int N)
{
int row = blockIdx.y*blockDim.y + threadIdx.y;
int col = blockIdx.x*blockDim.x + threadIdx.x;
float sum = 0.f;
for (int n = 0; n < N; ++n)
sum += A[row*N+n]*B[n*N+col];
C[row*N+col] = sum;
}
【问题讨论】:
-
虽然它不会是一个高效的matrixMul,但它是直截了当的。将代码的最内层循环而不是内核中的循环。还将
sum、row、col和N替换为temp、m、n和dimension。 -
你正在做的是正则乘法
B = A * transpose(A)。 ` && ` 等价于*而||等价于+。只需使用 cublas 将这两个矩阵相乘即可。如果 A 是布尔值,请先转换为浮点数。
标签: c++ c cuda parallel-processing multiplication