小编Gau*_*lra的帖子

使用CUDA的矩阵乘法

我对CUDA上的Matrix乘法感到震惊.得到的乘积矩阵始终为零.我已经阅读了一些示例代码,例如cuda中的矩阵乘法来解决我的问题,但都是徒劳的.

除了0的不稳定结果之外,"宽度"(下面的代码)的最大大小甚至不是512.我无法调试问题所在.也许我们可以在StackOverflow上讨论它.

我指的是"编程大规模并行处理器"

#include<cuda.h>
#include<stdio.h>

int main(void) {
    void MatrixMultiplication(float *, float *, float *, int);
    const int Width = 5;
    float M[Width*Width], N[Width*Width], P[Width*Width];
    for(int i = 0; i < (Width*Width) ; i++) {
        M[i] = 5;
        N[i] = 5;
        P[i] = 0;
    }
    MatrixMultiplication(M, N, P, Width);
    for(int i = 0; i < (Width*Width) ; i++) {
        printf("%d \n", P[i]);
    }
    int quit;
    scanf("%d",&quit);
    return 0;
}

//Matrix multiplication kernel - thread specification
__global__ void MatrixMulKernel(float …
Run Code Online (Sandbox Code Playgroud)

c cuda

8
推荐指数
1
解决办法
1万
查看次数

理解'&'运算符

根据我对'&'运算符的了解,它返回内存中操作数的基址.

让我们想象下面的场景(就像在我的机器上一样):

  • sizeof(int)= 4个字节
  • sizeof(float)= 4个字节
  • sizeof(char)= 1个字节

现在,如果我写这样的东西:

void main() {
 int i = 5411;
 int *ip = &i;
 char *c = &i;

 printf("%d",*ip);
 printf("%c",*c);
}
Run Code Online (Sandbox Code Playgroud)

第一个printf()应该给我5411.谈到第二个printf(),i的基地址包含10101001(高阶8位= 1字节用于char类型指针).因此*c应该给我169,转换为%c时是无效字符.

但是编译器给了我'#'或其他一些有效的输出.为什么会这样?有什么投入?

编辑(取自作者对其中一个答案的评论):

那只是一个虚拟案例,因为我离开了实际的机器.
实际情况是i = 5411

c c++

5
推荐指数
2
解决办法
517
查看次数

并行评估特定值的函数

这个问题可能看似含糊不清,但让我解释一下.

假设我们有一个函数f(x,y,z ....),我们需要在点(x1,y1,z1 .....)找到它的值.

最简单的方法是将(x,y,z ......)替换为(x1,y1,z1 .....).

现在假设该函数在评估中花费了大量时间,我想并行化算法来评估它.显然它也取决于功能的性质.

所以我的问题是:在"思考"并行化f(x,y,z ......)时,我必须寻找什么约束?

如果可能,请分享学习链接.

algorithm math parallel-processing

1
推荐指数
1
解决办法
332
查看次数

标签 统计

c ×2

algorithm ×1

c++ ×1

cuda ×1

math ×1

parallel-processing ×1