【发布时间】:2018-06-05 21:51:09
【问题描述】:
我有一个相对的问题,我已经定义了结构,我希望结构数组有这个信息(处理器名称和处理器的计算时间)这是我的代码的一部分:
struct stru
{
double arr_time[50];
char pname[50];
};
int main (int argc, char *argv[])
{
struct stru all_info[50];
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&process_id);
MPI_Comm_size(MPI_COMM_WORLD,&num_of_processes);
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
if (process_id == 0)
{ //do somthing
}
if (process_id > 0)
{
double start = MPI_Wtime();
for (k=0; k<array_size; k++)
for (i=0; i<rows; i++)
{
c[i][k]=0.0;
for (j=0; j<array_size; j++)
c[i][k] = c[i][k] + a[i][j] * b[j][k];
}
end_time = MPI_Wtime() - start;
all_info[i].arr_time[i] = end_time;
for (int i=1 ;i <= numworkers ;i++)
strcpy( all_info[i].pname, processor_name);
printf(" time = %f for processor %s
\n",all_info[i].arr_time, all_info[i].pname);
}
MPI_Gather( &end_time, 1, MPI_DOUBLE, &all_info[i].arr_time, 1,
MPI_DOUBLE, 0, MPI_COMM_WORLD);
if (process_id == 0){
for(i = 1; i <= numworkers; i++ )
{
printf(" time %f for processor %s
\n",all_info[i].arr_time , all_info[i].pname);
} }
如果我在(process_id == 0) 中打印它,我没有结果!
输出是
time 0.000000 for processor
time 0.000000 for processor
time 0.000000 for processor
如果我在if (process_id > 0) 中打印,则只是打印时间
事实上,我不知道如何将 Structure 与 MPI 一起使用,谁能给我建议如何生成具有处理器名称和他的时间的结构数组?
提前感谢您的宝贵时间。
【问题讨论】:
-
请正确缩进和格式化您的代码,现在很难阅读。
-
这是我的代码的一部分,我只是在问如何将(end_time 和 processor_name)放入结构数组中?
-
这是一个很好的问题,并且格式化代码可以很好地防止错误。
-
同时,请努力发布正确缩进的可编译代码。
-
@Gilles Gouaillardet,我想要的结构数组的所有想法都必须具有每个并行工作的处理器的名称和时间(每个处理器都有时间和名称)
标签: c struct parallel-processing mpi distributed-computing