Loading tests/mpi/Functions.h +6 −3 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ class FunctionToEvaluate<Real,2> : public Functions::Domain< 2, Functions::MeshD //return meshEntity.getCoordinates().y()*10+meshEntity.getCoordinates().x(); return meshEntity.getCenter().y()*100+meshEntity.getCenter().x(); } }; Loading @@ -89,6 +90,8 @@ class ZeroFunction<Real,2> : public Functions::Domain< 2, Functions::MeshDomain { public: typedef Real RealType; Real Number; ZeroFunction( ) {}; Loading @@ -97,7 +100,7 @@ class ZeroFunction<Real,2> : public Functions::Domain< 2, Functions::MeshDomain const RealType& time = 0.0 ) const { //return meshEntity.getCoordinates().y()*10+meshEntity.getCoordinates().x(); return -1.0; return this->Number; } }; tests/mpi/MeshFunctionEvauateTest.cpp +61 −52 Original line number Diff line number Diff line Loading @@ -10,24 +10,15 @@ using namespace std; unsigned int errors=0; unsigned int success=0; #define TEST_TEST(a) if((a)){cout << __LINE__ <<":\t OK " <<endl;success++;}else{cout << __LINE__<<":\t FAIL" <<endl;errors++;} #define TEST_RESULT cout<<"SUCCES: "<<success<<endl<<"ERRRORS: "<<errors<<endl; inline void Test_Say( const char * message) { #ifdef TEST_VERBOSE cout << message <<endl; #endif } #include <TNL/Containers/Array.h> #include <TNL/Meshes/Grid.h> #include <TNL/Meshes/DistributedGrid.h> #include <TNL/Meshes/DistributedGridSynchronizer.h> #include <TNL/Functions/MeshFunction.h> #include <TNL/Timer.h> #define OUTPUT #include "Functions.h" Loading @@ -39,15 +30,15 @@ using namespace TNL::Devices; int main ( int argc, char *argv[]) { Timer all,setup,eval,sync; #ifdef OUTPUT cout << "MeshFunction Evaluate Test for MPI develop by hanouvit" << endl; #endif #ifdef HAVE_MPI MPI::Init(argc,argv); //cout << "MPI is inicialized: "<<MPI::Is_initialized() << endl; // cout << MPI::COMM_WORLD.Get_rank() << "/" << MPI::COMM_WORLD.Get_size() << endl; //typedef Grid<1,double,Host,int> MeshType; typedef Grid<2,double,Host,int> MeshType; typedef MeshFunction<MeshType> MeshFunctionType; Loading @@ -56,19 +47,30 @@ int main ( int argc, char *argv[]) typedef typename MeshType::IndexType IndexType; typedef typename MeshType::PointType PointType; int size=10; int cycles=1; if(argc==3) { size=strtol(argv[1],NULL,10); cycles=strtol(argv[2],NULL,10); //cout << "size: "<< size <<"cycles: "<< cycles <<endl; } all.start(); setup.start(); PointType globalOrigin; globalOrigin.x()=-0.5; globalOrigin.y()=-0.5; PointType globalProportions; globalProportions.x()=8; globalProportions.y()=7; globalProportions.x()=size; globalProportions.y()=size; MeshType globalGrid; //globalGrid.setDimensions(9); globalGrid.setDimensions(8,7); globalGrid.setDimensions(size,size); globalGrid.setDomain(globalOrigin,globalProportions); DistributedGrid<MeshType> distrgrid(globalGrid); Loading @@ -87,29 +89,35 @@ int main ( int argc, char *argv[]) SharedPointer< FunctionToEvaluate<double,2>, Host > functionToEvaluate; SharedPointer< ZeroFunction<double,2>, Host > zero; //zeroevaluator.evaluateBoundaryEntities( meshFunctionptr , zero ); evaluator.evaluateAllEntities( meshFunctionptr , functionToEvaluate ); zeroevaluator.evaluateBoundaryEntities( meshFunctionptr , zero ); setup.stop(); int maxx=gridptr->getDimensions().x(); int maxy=gridptr->getDimensions().y(); double sum=0.0; /* distrgrid.printcoords(); for(int j=0;j<maxy;j++) { for(int i=0;i<maxx;i++) for(int i=0;i<cycles;i++) { cout <<dof[maxx*j+i]<<" "; } cout << endl; } cout << endl;*/ //zero->Number=MPI::COMM_WORLD.Get_rank(); zero->Number=i; eval.start(); zeroevaluator.evaluateInteriorEntities( meshFunctionptr , zero ); //evaluator.evaluateAllEntities( meshFunctionptr , functionToEvaluate ); zero->Number=-1; zeroevaluator.evaluateBoundaryEntities( meshFunctionptr , zero ); MPI::COMM_WORLD.Barrier(); eval.stop(); sync.start(); DistributedGridSynchronizer<DistributedGrid<MeshType>,MeshFunctionType,2>::Synchronize(distrgrid,*meshFunctionptr); MPI::COMM_WORLD.Barrier(); sync.stop(); //print local dof sum+=dof[2*gridptr->getDimensions().y()]; //dummy acces to array } #ifdef OUTPUT //print local dof int maxx=gridptr->getDimensions().x(); int maxy=gridptr->getDimensions().y(); distrgrid.printcoords(); for(int j=0;j<maxy;j++) { Loading @@ -119,26 +127,27 @@ int main ( int argc, char *argv[]) } cout << endl; } cout << endl; cout << endl<<endl; #endif // int maxx=gridptr->getDimensions().x(); /* distrgrid.printcoords(); for(int i=0;i<maxx;i++) { cout <<dof[i]<<" "; } cout << endl;*/ all.stop(); /*distrgrid.printcoords(); for(int i=0;i<maxx;i++) if(MPI::COMM_WORLD.Get_rank()==0) { cout <<dof[i]<<" "; cout << sum <<endl<<endl; cout<<"setup: "<<setup.getRealTime() <<endl; cout<<"evalpercycle: "<<eval.getRealTime()/cycles<<endl; cout<<"syncpercycle: "<<sync.getRealTime()/cycles<<endl; cout <<"eval: "<<eval.getRealTime()<<endl; cout <<"sync: "<<sync.getRealTime()<<endl; cout<<"all: "<<all.getRealTime()<<endl<<endl; } cout << endl;*/ MPI::Finalize(); MPI::Finalize(); #else std::cout<<"MPI not Supported." << std::endl; #endif Loading Loading
tests/mpi/Functions.h +6 −3 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ class FunctionToEvaluate<Real,2> : public Functions::Domain< 2, Functions::MeshD //return meshEntity.getCoordinates().y()*10+meshEntity.getCoordinates().x(); return meshEntity.getCenter().y()*100+meshEntity.getCenter().x(); } }; Loading @@ -89,6 +90,8 @@ class ZeroFunction<Real,2> : public Functions::Domain< 2, Functions::MeshDomain { public: typedef Real RealType; Real Number; ZeroFunction( ) {}; Loading @@ -97,7 +100,7 @@ class ZeroFunction<Real,2> : public Functions::Domain< 2, Functions::MeshDomain const RealType& time = 0.0 ) const { //return meshEntity.getCoordinates().y()*10+meshEntity.getCoordinates().x(); return -1.0; return this->Number; } };
tests/mpi/MeshFunctionEvauateTest.cpp +61 −52 Original line number Diff line number Diff line Loading @@ -10,24 +10,15 @@ using namespace std; unsigned int errors=0; unsigned int success=0; #define TEST_TEST(a) if((a)){cout << __LINE__ <<":\t OK " <<endl;success++;}else{cout << __LINE__<<":\t FAIL" <<endl;errors++;} #define TEST_RESULT cout<<"SUCCES: "<<success<<endl<<"ERRRORS: "<<errors<<endl; inline void Test_Say( const char * message) { #ifdef TEST_VERBOSE cout << message <<endl; #endif } #include <TNL/Containers/Array.h> #include <TNL/Meshes/Grid.h> #include <TNL/Meshes/DistributedGrid.h> #include <TNL/Meshes/DistributedGridSynchronizer.h> #include <TNL/Functions/MeshFunction.h> #include <TNL/Timer.h> #define OUTPUT #include "Functions.h" Loading @@ -39,15 +30,15 @@ using namespace TNL::Devices; int main ( int argc, char *argv[]) { Timer all,setup,eval,sync; #ifdef OUTPUT cout << "MeshFunction Evaluate Test for MPI develop by hanouvit" << endl; #endif #ifdef HAVE_MPI MPI::Init(argc,argv); //cout << "MPI is inicialized: "<<MPI::Is_initialized() << endl; // cout << MPI::COMM_WORLD.Get_rank() << "/" << MPI::COMM_WORLD.Get_size() << endl; //typedef Grid<1,double,Host,int> MeshType; typedef Grid<2,double,Host,int> MeshType; typedef MeshFunction<MeshType> MeshFunctionType; Loading @@ -56,19 +47,30 @@ int main ( int argc, char *argv[]) typedef typename MeshType::IndexType IndexType; typedef typename MeshType::PointType PointType; int size=10; int cycles=1; if(argc==3) { size=strtol(argv[1],NULL,10); cycles=strtol(argv[2],NULL,10); //cout << "size: "<< size <<"cycles: "<< cycles <<endl; } all.start(); setup.start(); PointType globalOrigin; globalOrigin.x()=-0.5; globalOrigin.y()=-0.5; PointType globalProportions; globalProportions.x()=8; globalProportions.y()=7; globalProportions.x()=size; globalProportions.y()=size; MeshType globalGrid; //globalGrid.setDimensions(9); globalGrid.setDimensions(8,7); globalGrid.setDimensions(size,size); globalGrid.setDomain(globalOrigin,globalProportions); DistributedGrid<MeshType> distrgrid(globalGrid); Loading @@ -87,29 +89,35 @@ int main ( int argc, char *argv[]) SharedPointer< FunctionToEvaluate<double,2>, Host > functionToEvaluate; SharedPointer< ZeroFunction<double,2>, Host > zero; //zeroevaluator.evaluateBoundaryEntities( meshFunctionptr , zero ); evaluator.evaluateAllEntities( meshFunctionptr , functionToEvaluate ); zeroevaluator.evaluateBoundaryEntities( meshFunctionptr , zero ); setup.stop(); int maxx=gridptr->getDimensions().x(); int maxy=gridptr->getDimensions().y(); double sum=0.0; /* distrgrid.printcoords(); for(int j=0;j<maxy;j++) { for(int i=0;i<maxx;i++) for(int i=0;i<cycles;i++) { cout <<dof[maxx*j+i]<<" "; } cout << endl; } cout << endl;*/ //zero->Number=MPI::COMM_WORLD.Get_rank(); zero->Number=i; eval.start(); zeroevaluator.evaluateInteriorEntities( meshFunctionptr , zero ); //evaluator.evaluateAllEntities( meshFunctionptr , functionToEvaluate ); zero->Number=-1; zeroevaluator.evaluateBoundaryEntities( meshFunctionptr , zero ); MPI::COMM_WORLD.Barrier(); eval.stop(); sync.start(); DistributedGridSynchronizer<DistributedGrid<MeshType>,MeshFunctionType,2>::Synchronize(distrgrid,*meshFunctionptr); MPI::COMM_WORLD.Barrier(); sync.stop(); //print local dof sum+=dof[2*gridptr->getDimensions().y()]; //dummy acces to array } #ifdef OUTPUT //print local dof int maxx=gridptr->getDimensions().x(); int maxy=gridptr->getDimensions().y(); distrgrid.printcoords(); for(int j=0;j<maxy;j++) { Loading @@ -119,26 +127,27 @@ int main ( int argc, char *argv[]) } cout << endl; } cout << endl; cout << endl<<endl; #endif // int maxx=gridptr->getDimensions().x(); /* distrgrid.printcoords(); for(int i=0;i<maxx;i++) { cout <<dof[i]<<" "; } cout << endl;*/ all.stop(); /*distrgrid.printcoords(); for(int i=0;i<maxx;i++) if(MPI::COMM_WORLD.Get_rank()==0) { cout <<dof[i]<<" "; cout << sum <<endl<<endl; cout<<"setup: "<<setup.getRealTime() <<endl; cout<<"evalpercycle: "<<eval.getRealTime()/cycles<<endl; cout<<"syncpercycle: "<<sync.getRealTime()/cycles<<endl; cout <<"eval: "<<eval.getRealTime()<<endl; cout <<"sync: "<<sync.getRealTime()<<endl; cout<<"all: "<<all.getRealTime()<<endl<<endl; } cout << endl;*/ MPI::Finalize(); MPI::Finalize(); #else std::cout<<"MPI not Supported." << std::endl; #endif Loading