【问题标题】:Array of Structures in C with MPI带有 MPI 的 C 中的结构数组
【发布时间】: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 &gt; 0) 中打印,则只是打印时间

事实上,我不知道如何将 Structure 与 MPI 一起使用,谁能给我建议如何生成具有处理器名称和他的时间的结构数组? 提前感谢您的宝贵时间。

【问题讨论】:

  • 请正确缩进和格式化您的代码,现在很难阅读。
  • 这是我的代码的一部分,我只是在问如何将(end_time 和 processor_name)放入结构数组中?
  • 这是一个很好的问题,并且格式化代码可以很好地防止错误。
  • 同时,请努力发布正确缩进的可编译代码。
  • @Gilles Gouaillardet,我想要的结构数组的所有想法都必须具有每个并行工作的处理器的名称和时间(每个处理器都有时间和名称)

标签: c struct parallel-processing mpi distributed-computing


【解决方案1】:

在这一行:

processor_name[MPI_MAX_PROCESSOR_NAME];

您开始使用数组变量processor_name 而不在任何地方定义它。

你在它前面缺少像all_info[i]. 这样的东西。就像你有一点点:

all_info[i].processor_name;

然后,为了存储字符串,您的 processor_name 需要内存。单个char 只是一个字节(即一个字母)。所以让我们假设这些名字从不长于 255,你会得到:

struct stru
{
   double end_time;
   char   processor_name[256];   
};

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

【讨论】:

  • 我是在结构中定义的,不知道是真是假?
  • 我做了你的更新,我有这个错误(错误:'processor_name' undeclared (first use in this function) processor_name[MPI_MAX_PROCESSOR_NAME];)
  • 我更新了我的代码,我摆脱了错误,但是打印结果时我没有结果......谢谢你,圣诞快乐! :)
  • 对于这个提示 "char processor_name[256]; "加一个
【解决方案2】:

这里出现错误是因为你没有定义任何类型processor name。 如果我理解您要正确尝试的内容,那么您似乎正在尝试访问结构的属性。为此,您可能需要使用 . 运算符。为此,您可能需要定义一个数组

struct stru all_info[MPI_MAX_PROCESSOR_NAME];

而不是

struct stru all_info[50];

【讨论】:

  • 在这种情况下,我只找到处理器名称??对吗??
  • 我希望所有信息数组必须包含处理器名称和我计算的时间
  • 我更新了我的代码,我摆脱了错误,但是打印结果时没有结果。
猜你喜欢
  • 2016-09-16
  • 2016-05-08
  • 2013-11-18
  • 2012-10-23
  • 1970-01-01
  • 2015-08-20
  • 2013-12-12
  • 2011-04-11
  • 2015-03-29
相关资源
最近更新 更多