关于同步 - 异步的概念,我在这里从阻塞和非阻塞操作(在OpenMPI中)的上下文中略微混淆了:
我已经完成了之前的同步 - 异步 - 阻塞 - stackoverflow上的非阻塞问题(异步与非阻塞),但对我没有帮助.我所知道的 :
MPI_Isend):方法返回并执行下一行 - >非阻塞MPI_Send):对于大型消息,它会阻塞直到传输完成那么如何以及为什么MPI_ISEND阻止(链接1)以及阻止(链接2)?这是异步和同步的意思MPI_Isend吗?
类似引起混淆关于MPI_Ssend&MPI_Issend中,由于小号在MPI_ 小号 SEND装置同步(或阻塞),并且: -
也是我 mmediate是非阻塞的,那么,怎样才能MPI_ IS SEND是小号 ynchronous&回到我 mmediately?
我想在阻塞和非阻塞OpenMPI通信的上下文中异步和同步需要更清晰.在这方面的实际例子或类比将是非常有用的.
我正在尝试探索 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)
现在运行代码,我得到:
进入 …