⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sixth.c

📁 MPICH是MPI的重要研究,提供了一系列的接口函数,为并行计算的实现提供了编程环境.
💻 C
字号:
#include <stdio.h>#include "mpi.h"#ifdef HAVE_STDLIB_H#include <stdlib.h>#elseextern char *malloc();#endif#include "test.h"typedef struct _table {  int references;  int length;  int *value;} Table;/* Prototypes for picky compilers */int copy_table ( MPI_Comm, int, void *, void *, void *, int * );void create_table ( int, int *, Table ** );int delete_table ( MPI_Comm, int, void *, void * );/* These are incorrect...*/int copy_table ( MPI_Comm oldcomm, int keyval, void *extra_state, 		 void *attr_in, void *attr_out, int *flag){  Table *table = (Table *)attr_in;;  table->references++;  (*(void **)attr_out) = attr_in;  (*flag) = 1;  (*(int *)extra_state)++;  return (MPI_SUCCESS);}void create_table ( int num, int *values, Table **table_out ){  int i;  (*table_out) = (Table *)malloc(sizeof(Table));  (*table_out)->references = 1;  (*table_out)->length = num;  (*table_out)->value = (int *)malloc(sizeof(int)*num);  for (i=0;i<num;i++)     (*table_out)->value[i] = values[i];}int delete_table ( MPI_Comm comm, int keyval, 		   void *attr_val, void *extra_state){  Table *table = (Table *)attr_val;  if ( table->references == 1 )	free(table);  else	table->references--;  (*(int *)extra_state)--;  return MPI_SUCCESS;}int main ( int argc, char **argv ){  int rank, size;  Table *table;  MPI_Comm new_comm;  int table_key;  int values[3];   int table_copies = 1;  int found;  int errors = 0;  MPI_Init ( &argc, &argv );  MPI_Comm_rank ( MPI_COMM_WORLD, &rank );  MPI_Comm_size ( MPI_COMM_WORLD, &size );  values[0] = 1; values[1] = 2; values[2] = 3;  create_table(3,values,&table);    MPI_Keyval_create ( copy_table, delete_table, &table_key, 		      (void *)&table_copies );  MPI_Attr_put ( MPI_COMM_WORLD, table_key, (void *)table );  MPI_Comm_dup ( MPI_COMM_WORLD, &new_comm );  MPI_Attr_get ( new_comm, table_key, (void **)&table, &found );  if (!found) {      printf( "did not find attribute on new comm\n" );      errors++;  }  if ((table_copies != 2) && (table->references != 2)) {      printf( "table_copies != 2 (=%d) and table->references != 2 (=%d)\n",	      table_copies, table->references );      errors++;  }  MPI_Comm_free ( &new_comm );  if ((table_copies != 1) && (table->references != 1)) {      printf( "table_copies != 1 (=%d) and table->references != 1 (=%d)\n",	      table_copies, table->references );      errors++;  }  MPI_Attr_delete ( MPI_COMM_WORLD, table_key );  if ( table_copies != 0 ) {      printf( "table_copies != 0 (=%d)\n", table_copies );      errors++;  }  if (errors)    printf("[%d] OOPS.  %d errors!\n",rank,errors);  MPI_Keyval_free ( &table_key );  Test_Waitforall( );  MPI_Finalize();  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -