У меня есть огромная база данных (СУБД = MySQL), к которой я обращаюсь из программы MPI (используя MPICH2). В этой программе я просто хочу знать о времени выполнения sql-запроса. Это ссылка на мою другую параллельную программу.
Когда код запускается из Visual Studio C++, он работает хорошо (я получаю вывод). Но когда он использует mpiexec
, нет ни вывода, ни сообщения об ошибке. В противном случае, когда я пробую простую программу (без кода mysql, использую mpiexec), она работает хорошо (есть вывод). Должен ли я не использовать библиотеки mysql и 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;
}
Заранее спасибо
localhost
в качестве имени вашего сервера. Процессы, запущенные сmpiexec
, также выполняются наlocalhost
или они отправляются на какие-то серверные вычислительные узлы? - person Hristo Iliev   schedule 04.07.2012getchar()
в концеmain()
? Консольный ввод плохо работает с MPI. - person Hristo Iliev   schedule 06.07.2012