小编Pun*_*han的帖子

openmpi中的Immidiate与同步通信

关于同步 - 异步的概念,我在这里从阻塞和非阻塞操作(在OpenMPI中)的上下文中略微混淆了:

  • 链路1 :MPI_Isend不一定异步(这样它可以同步的?)

  • 链接2 :MPI_Isend()MPI_Irecv()是MPI的ASYNCHRONOUS通信原语.

我已经完成了之前的同步 - 异步 - 阻塞 - stackoverflow上的非阻塞问题(异步与非阻塞),但对我没有帮助.我所知道的 :

那么如何以及为什么MPI_ISEND阻止(链接1)以及阻止(链接2)?这是异步和同步的意思MPI_Isend吗?

类似引起混淆关于MPI_Ssend&MPI_Issend中,由于小号在MPI_ 小号 SEND装置同步(或阻塞),并且: -

  • MPI_Ssend:同步发送块直到远程进程收到数据并且发送方收到ack,
  • MPI_Issend:表示立即同步发送

也是 mmediate是非阻塞的,那么,怎样才能MPI_ IS SEND是小号 ynchronous&回到 mmediately?

我想在阻塞和非阻塞OpenMPI通信的上下文中异步和同步需要更清晰.在这方面的实际例子或类比将是非常有用的.

asynchronous mpi blocking openmpi

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

进入 SGEMM 时,参数号 8 具有非法值

我正在尝试探索 cblas 库;所以我尝试使用 Level3 cblas_sgemm例程进行二维矩阵乘法。

C=(alpha)* A * B + (beta) * C
;; where aplha=1 & beta=0
Run Code Online (Sandbox Code Playgroud)
#define TYPE float
#define A_R 3
#define A_C 2
#define B_R 2
#define B_C 3

    int main()
    {
        TYPE *A=NULL,*B=NULL,*C=NULL;
        if(A_C != B_R)
                {
                printf("\nA(%d,%d) X B(%d,%d) not possible\n",A_R,A_C,B_R,B_C);
                exit(1);
                }

        A=(TYPE*)malloc(A_R*A_C*sizeof(TYPE));
        B=(TYPE*)malloc(B_R*B_C*sizeof(TYPE));
        C=(TYPE*)malloc(A_R*B_C*sizeof(TYPE));
        initM(A,B,C);//initializes matrix
        cblas_sgemm(CblasRowMajor, CblasNoTrans,CblasNoTrans,A_R, B_C,A_C, 1.0, A,A_R, B, B_R,0.0, C, A_C);
        //multiply(A,B,C);

        printf("\n%f\n",C[ (A_R*B_C)-1]);
}
Run Code Online (Sandbox Code Playgroud)

我使用静态库编译了我的程序:

gcc mxm_blas.c -L/CBLAS/lib/ -lcblas -L/BLAS/ -lblas -I/CBLAS/include/ -lgfortran
Run Code Online (Sandbox Code Playgroud)

现在运行代码,我得到:

进入 …

c c++ blas matrix-multiplication

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

标签 统计

asynchronous ×1

blas ×1

blocking ×1

c ×1

c++ ×1

matrix-multiplication ×1

mpi ×1

openmpi ×1