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

📄 fmtest.c

📁 基于linux环境的ns2多机并行仿真补丁
💻 C
字号:
/*---------------------------------------------------------------------------*//* A simple performance test application for FM.                             *//* N processors pass a single token around in a circular (ring) pattern.     *//* Author(s): Kalyan Perumalla <http://www.cc.gatech.edu/~kalyan> 20July2001 *//* $Revision: 1.5 $ $Name: v26apr05 $ $Date: 2005/02/03 14:56:23 $ *//*---------------------------------------------------------------------------*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "mycompat.h"#include "fm.h"/*---------------------------------------------------------------------------*//*                                                                           *//*---------------------------------------------------------------------------*/static int dbg = 0;static int mid = 0, lastmid = 1;static unsigned int hid = 0;static void test_sender( int i, int n ){    int dest = (i+1)%n, maxlen = 64;    FM_stream *stream = FM_begin_message( dest, maxlen, hid );    FM_send_piece( stream, &i, sizeof(i) );    FM_send_piece( stream, &n, sizeof(n) );    FM_send_piece( stream, &mid, sizeof(mid) );    FM_end_message( stream );    mid++;}/*---------------------------------------------------------------------------*/static int test_handler( FM_stream *stream, unsigned int sender ){    int i = -1, n = -1, mid = -1;if(dbg>1){printf("test_handler() from %d\n", sender);fflush(stdout);}    FM_receive( &i, stream, sizeof(i) );    FM_receive( &n, stream, sizeof(n) );    FM_receive( &mid, stream, sizeof(mid) );if(dbg>1){printf("i=%d, n=%d, mid=%d\n", i, n, mid); fflush(stdout);fflush(stdout);}    MYASSERT( i==sender, ("sender mismatch %d %d",i,sender) );    MYASSERT( n==FM_numnodes, ("numnodes mismatch") );if(dbg>1 && mid % (lastmid/lastmid)==0) {printf("mid=%d\n",mid);fflush(stdout);}    test_sender( FM_nodeid, FM_numnodes );    return FM_CONTINUE;}/*---------------------------------------------------------------------------*/int main( int ac, char *av[] ){    int i = 0, n = 1;    int nextracts = 0;    TIMER_TYPE t1, t2;    FM_pre_init( &ac, &av ); /*XXX*/    {char *estr = getenv("FMTEST_DEBUG"); dbg = estr ? atoi(estr) : 1;}    {char *estr = getenv("FMTEST_MAXTRANS"); lastmid=estr ? atoi(estr) :100000;}    MYASSERT( ac == 1, ("Usage: %s\nSet node config using NODEINFO", av[0]) );    {        NodeInfo nodeinfo;	FM_getenv_nodeinfo( &nodeinfo );	FM_setenv_nodenames( &nodeinfo );	i = nodeinfo.my_index;	n = nodeinfo.nproc;    }if(dbg>0){printf("i=%d n=%d trans=%d\n", i, n, lastmid);fflush(stdout);}    FML_FMInit();    FML_RegisterHandler( &hid, test_handler );    if( i==0 ) test_sender( FM_nodeid, FM_numnodes );    TIMER_NOW(t1);    for(mid=0;mid<lastmid;)    {        FM_extract(1000);	nextracts++;	if(0&&nextracts%100000==0){printf("nx=%d\n",nextracts);fflush(stdout);}    }    TIMER_NOW(t2);    FML_Barrier();{TIMER_TYPE t1,t2; double dt; TIMER_NOW(t1); do{FM_extract(~0);TIMER_NOW(t2);dt=TIMER_DIFF(t2,t1);}while(dt<1/*secs*/);}    FM_finalize();if(dbg>0){printf("i=%d done %d rounds %f us per round\n", i,lastmid,TIMER_DIFF(t2,t1)/lastmid*1e6);fflush(stdout);}    return 0;}/*---------------------------------------------------------------------------*/

⌨️ 快捷键说明

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