[vtkusers] Fw: vtkMPIController

Berk Geveci berklist at nycap.rr.com
Fri Apr 2 09:43:59 EST 2004


Did you enable MPI in you VTK build? I believe the setting is
VTK_USE_MPI.

-Berk

On Fri, 2004-04-02 at 03:08, Goodwin Lawlor wrote:
> ----- Original Message -----
> From: <seafloat at sohu.com>
> To: <goodwin.lawlor at ucd.ie>
> Sent: Friday, April 02, 2004 2:08 AM
> Subject: vtkMPIController
> 
> 
> > > Dear All:
> > >    When I compile a program In VC++, I meet with a error.It is that
> "ParallelIso.obj : error LNK2001: unresolved external symbol
> "__declspec(dllimport) public: static class vtkMPIController * __cdecl
> vtkMPIController::New(void)" (__imp_?New at vtkMPIController@@SAPAV1 at XZ)". I
> have setting the Include files -c:program filesvtk42includevtk, and the
> library files-c:program filesvtk42libvtk, and also add vtkcommon.lib
> vtkfiltering.lib vtkgraphics.lib vtkimaging.lib vtkIO.lib vtkRendering.lib
> vtkParallel.lib in link settings. Why is it?
> > >    Thank you very much.
> > > the program is:
> > > #include "vtkImageReader.h"
> > > #include "vtkContourFilter.h"
> > > #include "vtkAppendPolyData.h"
> > > #include "vtkOutputPort.h"
> > > #include "vtkInputPort.h"
> > > #include "vtkRenderer.h"
> > > #include "vtkRenderWindow.h"
> > > #include "vtkPolyDataMapper.h"
> > > #include "vtkActor.h"
> > > #include "vtkElevationFilter.h"
> > > #include "vtkRenderWindowInteractor.h"
> > > #include "vtkTimerLog.h"
> > > #include "vtkMath.h"
> > > #include "vtkMultiProcessController.h"
> > > #include "vtkMPIController.h"
> > > #include "vtkCamera.h"
> > > #include "vtkPolyData.h"
> > >
> > >
> > > static const float ISO_VALUE=500.0;
> > >
> > > // Just pick a tag which is available
> > > static const int ISO_VALUE_RMI_TAG=300;
> > > static const int PORT_TAG=999;
> > >
> > > // This will be called by all processes
> > >
> > > void MyMain( vtkMultiProcessController *controller, void *arg )
> > > {
> > >   vtkImageReader *reader;
> > >   vtkContourFilter *iso;
> > >   vtkElevationFilter *elev;
> > >   int myid, numProcs;
> > >   float val;
> > >   int numTris,numTris0;
> > >  // char* fname = reinterpret_cast<char*>(arg);
> > >   char * fname = "D:/VTKData/Data/headsq/quarter";
> > >
> > >   myid = controller->GetLocalProcessId();
> > >   numProcs = controller->GetNumberOfProcesses();
> > >
> > >   // Create the reader, the data file name might have
> > >   // to be changed depending on where the data files are.
> > >   reader = vtkImageReader::New();
> > >   reader->SetDataByteOrderToLittleEndian();
> > >
> > >   reader->SetDataExtent(0, 63, 0, 63, 1, 93);
> > >   reader->SetFilePrefix(fname);
> > >
> > >   reader->SetDataSpacing(3.2, 3.2, 1.5);
> > >
> > >   iso = vtkContourFilter::New();
> > >   iso->SetInput((vtkDataSet*)reader->GetOutput());
> > >   iso->SetValue(0, ISO_VALUE);
> > >   iso->ComputeScalarsOff();
> > >   iso->ComputeGradientsOff();
> > >
> > >
> > >   elev = vtkElevationFilter::New();
> > >   elev->SetInput((vtkDataSet*)iso->GetOutput());
> > >   vtkMath::RandomSeed(myid * 100);
> > >   val = vtkMath::Random();
> > >   elev->SetScalarRange(val, val+0.001);
> > >
> > >   if (myid != 0)
> > >     {
> > >
> > >     vtkOutputPort *upPort = vtkOutputPort::New();
> > >
> > >     // Last, set up a RMI call back to change the iso surface value.
> > >     // This is done so that the root process can let this process
> > >     // know that it wants the contour value to change.
> > >
> > >     controller->AddRMI(NULL, (void *)iso, ISO_VALUE_RMI_TAG);
> > > upPort->SetInput((vtkDataObject *)elev->GetPolyDataOutput());
> > >     upPort->SetTag(PORT_TAG);
> > >
> > >     upPort->WaitForUpdate();
> > >
> > >     upPort->Delete();
> > >     }
> > >
> > >   else
> > >     {
> > >
> > >     int i;
> > > vtkAppendPolyData *app = vtkAppendPolyData::New();
> > >
> > > vtkInputPort *downPort;
> > > vtkRenderer *ren = vtkRenderer::New();
> > > vtkRenderWindow *renWindow = vtkRenderWindow::New();
> > > vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
> > > vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
> > > vtkActor *actor = vtkActor::New();
> > > vtkTimerLog *timer = vtkTimerLog::New();
> > > vtkCamera *cam = vtkCamera::New();
> > >
> > > app->AddInput(elev->GetPolyDataOutput());
> > >
> > >
> > > app->ParallelStreamingOn();
> > >
> > > for (i = 1; i < numProcs; ++i)
> > > {
> > > downPort = vtkInputPort::New();
> > > downPort->SetRemoteProcessId(i);
> > >
> > > downPort->SetTag(PORT_TAG);
> > >
> > >      app->AddInput(downPort->GetPolyDataOutput());
> > >
> > > downPort->Delete();
> > > downPort = NULL;
> > > }
> > >
> > >
> > > renWindow->AddRenderer(ren);
> > > iren->SetRenderWindow(renWindow);
> > > ren->SetBackground(0.9, 0.9, 0.9);
> > > renWindow->SetSize( 400, 400);
> > >
> > > mapper->SetInput(app->GetOutput());
> > > actor->SetMapper(mapper);
> > >
> > > ren->AddActor(actor);
> > >
> > > cam->SetFocalPoint(100, 100, 65);
> > > cam->SetPosition(100, 450, 65);
> > > cam->SetViewUp(0, 0, -1);
> > > cam->SetViewAngle(30);
> > >
> > > cam->SetClippingRange(177.0, 536.0);
> > > ren->SetActiveCamera(cam);
> > >
> > >
> > > for (i = 1; i < numProcs; ++i)
> > > {
> > >
> > > controller->TriggerRMI(i, ISO_VALUE_RMI_TAG);
> > > }
> > >
> > >
> > > timer->StartTimer();
> > >    app->Update();
> > >    timer->StopTimer();
> > >    numTris0 = iso->GetOutput()->GetNumberOfCells();
> > > numTris  = app->GetOutput()->GetNumberOfCells();
> > >
> > > val = iso->GetValue(0);
> > > cerr << "total processes:   " << numProcs<<"
> > ";
> > > cerr << "contour value:  " << val<<"
> > " ;
> > >
> > >
> > > renWindow->Render();
> > >
> > > iren->Start();
> > >
> > >
> > > for (i = 1; i < numProcs; ++i)
> > > {
> > >   controller->TriggerRMI(i, vtkMultiProcessController::BREAK_RMI_TAG);
> > > }
> > >
> > >     app->Delete();
> > >       ren->Delete();
> > >       renWindow->Delete();
> > >       iren->Delete();
> > >           mapper->Delete();
> > >    actor->Delete();
> > >           cam->Delete();
> > >       timer->Delete();
> > > }
> > >
> > >
> > >   reader->Delete();
> > >   iso->Delete();
> > >   elev->Delete();
> > > }
> > >
> > >
> > > int main( int argc, char* argv[] )
> > > {
> > >
> > >   vtkMPIController *controller;
> > >
> > >
> > >   controller = vtkMPIController::New();
> > >
> > >   controller->Initialize(&argc, &argv);
> > >
> > >
> > >   controller->SetSingleMethod(MyMain, NULL);
> > >
> > >   if (controller->IsA("vtkThreadedController"))
> > >     {
> > >
> > >          controller->SetNumberOfProcesses(2);
> > >          cout<<"OKOKOK";
> > >     }
> > >   controller->SingleMethodExecute();
> > >
> > >
> > >   controller->Finalize();
> > >   controller->Delete();
> > >
> > >   return 0;
> > > }
> >
> >
> 
> _______________________________________________
> This is the private VTK discussion list. 
> Please keep messages on-topic. Check the FAQ at: <http://public.kitware.com/cgi-bin/vtkfaq>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
-- 
Berk Geveci <berklist at nycap.rr.com>




More information about the vtkusers mailing list