C++ mm_排名(MPI_COMM_WORLD和id);MPI通信大小(MPI通信世界和进程);printf(“从进程%d开始的Sql初始化,共%d!\n”,id,进程);mysql_init(&mysql);MPI_Finalize();getchar();返

C++ mm_排名(MPI_COMM_WORLD和id);MPI通信大小(MPI通信世界和进程);printf(“从进程%d开始的Sql初始化,共%d!\n”,id,进程);mysql_init(&mysql);MPI_Finalize();getchar();返,c++,mysql,parallel-processing,mpi,mpich,C++,Mysql,Parallel Processing,Mpi,Mpich,mm_排名(MPI_COMM_WORLD和id);MPI通信大小(MPI通信世界和进程);printf(“从进程%d开始的Sql初始化,共%d!\n”,id,进程);mysql_init(&mysql);MPI_Finalize();getchar();返回0;}试试这个:#include#include#include#include#include#include int main(int-argc,char*argv[]){int-proc,id,mysqlretval=0;MYSQL-M


mm_排名(MPI_COMM_WORLD和id);MPI通信大小(MPI通信世界和进程);printf(“从进程%d开始的Sql初始化,共%d!\n”,id,进程);mysql_init(&mysql);MPI_Finalize();getchar();返回0;}试试这个:
#include#include#include#include#include#include int main(int-argc,char*argv[]){int-proc,id,mysqlretval=0;MYSQL-MYSQL;MPI-Init(&argc,&argv);MPI-Comm-rank(MPI-Comm-WORLD,&id);MPI-Comm-size(MPI-Comm-size(MPI-Comm-WORLD,&proc);&proc);printf;mysqlretval=mysql_init(&mysql);printf(“Sql init从proc%d返回%d,共%d!\n”,mysqlretval,id,proc);fflush(stdout);MPI_Finalize();return 0;}
mysql_init()有“mysql*”返回值,因此无法保存为整数。如果我更改mysqlretval类型,它是相同的。该程序在VisualStudio中运行良好/只需双击可执行文件,而不是从mpiexec。对不起,我错过了返回值。我们需要检查返回值是否为空。我强烈怀疑它是
null
这可能很愚蠢,但我还是要问。。。您的服务器名为
localhost
。以
mpiexec
启动的进程是否也在
localhost
上运行,或者它们是否被发送到一些后端计算节点?是的,我使用localhost作为mysql服务器。是的,我只在本地主机上尝试过(仅1台电脑)。您能尝试删除
main()
末尾的
getchar()
调用吗?控制台输入不能很好地与MPI配合使用。这可能很愚蠢,但我还是要问。。。您的服务器名为
localhost
。以
mpiexec
启动的进程是否也在
localhost
上运行,或者它们是否被发送到一些后端计算节点?是的,我使用localhost作为mysql服务器。是的,我只在本地主机上尝试过(仅1台电脑)。您能尝试删除
main()
末尾的
getchar()
调用吗?控制台输入与MPI不兼容。
#include <stdio.h>
#include <windows.h>
#include <mysql.h>
#include <iostream>
#include <winsock.h>
#include <mpi.h>
#include <stdlib.h>

using namespace std;

//namespace for error handling
namespace ekception{
        struct error{
        const char *p;
        error(const char *q){
        p=q;
        }
    };
}

int main(int argc, char *argv[]){
    MYSQL mysql,*sock;
    MYSQL_RES *res;
    int state;
    char *host="localhost";
    char *user="root";
    char *password="";
    char *dbName="sp";
    double start,finish,time;
    long j;
    char s[]="SELECT COUNT(kolom2) FROM coba WHERE kolom1<=";
    char query[BUFSIZ];

    MPI_Init(&argc,&argv);

    for(j=250000;j<=25000000;j+=250000){
    sprintf_s(query,"%s%d",s,j);
    start=MPI_Wtime();
    try{
        mysql_init(&mysql); 
        if(!(sock=mysql_real_connect(&mysql,host,user,password,dbName,0,NULL,0))){
            throw ekception::error("Connection failed\n");
        }
        mysql.reconnect=1;

        state=mysql_query(sock,query);

        if(state!=0){
            throw ekception::error("Query execution Failed\n");
        }

        res=mysql_store_result(sock);
        mysql_free_result(res);
        mysql_close(sock);
    }

    catch(ekception::error e){
        printf("%s\n",e.p);
    }

    finish=MPI_Wtime();
    time=finish-start;
    printf("Data size = %d *** time = %f\n",j,time);
}

MPI_Finalize();
getchar();
return 0;
}
int id, nprocs;

MPI_Comm_rank(MPI_COMM_WORLD, &id);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);

printf("Sql Init from proc %d out of %d!\n", id, nprocs);