带有MPI的C中的结构数组

问题描述 投票:2回答:2

我有一个相对的问题,我已经定义了struct,我希望结构数组有这个信息(处理器名称和处理器的计算时间)这是我的代码的一部分:

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 

如果我在qazxsw poi打印,那就打印出来了

事实上,我不知道如何使用if (process_id > 0)的结构,任何人都可以给我建议如何生成具有处理器名称和时间的结构数组?提前谢谢您的时间。

c struct parallel-processing mpi distributed-computing
2个回答
3
投票

在这一行:

MPI

你开始使用数组变量processor_name[MPI_MAX_PROCESSOR_NAME]; 而不在任何地方定义它。

你在它面前丢失了像processor_name这样的东西。就像你有点低:

all_info[i].

然后,为了存储字符串,你的all_info[i].processor_name; 需要记忆。单个processor_name只是一个字节(即一个字母)。所以我们假设这些名字永远不会超过255,你会得到:

char

您的代码中存在许多基本错误,您的问题似乎表明您对C编程缺乏基本的了解。因此,我的建议是花更多时间学习这门语言。


1
投票

此处发生错误,因为您尚未定义任何类型的struct stru { double end_time; char processor_name[256]; }; 。如果我理解你正在尝试的是什么,似乎你试图访问结构的属性。为此,您可能需要使用processor name运算符。为此,您可能需要定义一个数组

.

代替

struct stru all_info[MPI_MAX_PROCESSOR_NAME];
© www.soinside.com 2019 - 2024. All rights reserved.