[Paraview] capability of ParaView, Catalyst in distributed computing environment ...
u.utku.turuncoglu at be.itu.edu.tr
u.utku.turuncoglu at be.itu.edu.tr
Sun Jun 19 04:07:47 EDT 2016
Hi Andy,
I used first approach and fix the issue using following customised
coprocessorinitializewithpython function. In this case, i converted type
of communicator coming from Fortran to C using MPI_Comm_f2c call. Now, the
code works without any problem. Thanks for your kindly help.
extern "C" void my_coprocessorinitializewithpython_(int *fcomm, const
char* pythonScriptName, const char strarr[][255], int *size) {
if (pythonScriptName != NULL) {
if (!g_coprocessor) {
g_coprocessor = vtkCPProcessor::New();
MPI_Comm handle = MPI_Comm_f2c(*fcomm);
vtkMPICommunicatorOpaqueComm *Comm = new
vtkMPICommunicatorOpaqueComm(&handle);
g_coprocessor->Initialize(*Comm);
vtkSmartPointer<vtkCPPythonScriptPipeline> pipeline =
vtkSmartPointer<vtkCPPythonScriptPipeline>::New();
pipeline->Initialize(pythonScriptName);
g_coprocessor->AddPipeline(pipeline);
//pipeline->FastDelete();
}
if (!g_coprocessorData) {
g_coprocessorData = vtkCPDataDescription::New();
// must be input port for all model components and for all dimensions
for (int i = 0; i < *size; i++) {
g_coprocessorData->AddInput(strarr[i]);
std::cout << "adding input port [" << i << "] = " << strarr[i] <<
std::endl;
}
}
}
}
Regards,
--ufuk
> Hi Ufuk,
>
> I can think of two potential fixes:
>
> - Use the vtkCPProcessor:: Initialize(vtkMPICommunicatorOpaqueComm&
> comm) method to initialize each process with the proper MPI
> communicator.
> Note that vtkMPICommunicatorOpaqueComm is defined in
> vtkMPICommunicator.cxx. A similar example to this is available in the
> Examples/Catalyst/MPISubCommunicatorExample directory.
> - Call vtkCPProcessor::Initialize() on all processes with your global
> communicator and then create a vtkMPIController partitioned the way you
> want and set that to be the "global" communicator through
> vtkMPIController::SetGlobalController().
>
> Please let us know if either of these methods work for you.
>
> Also, what code are you working on and is it a publicly available code? If
> you show your implementation I may have some in-depth suggestions for
> improvements.
>
> Best,
>
> Andy
>
>
>
> On Fri, Jun 17, 2016 at 4:17 AM, <u.utku.turuncoglu at be.itu.edu.tr> wrote:
>
>> Hi All,
>>
>> I was working on the issue recently and i am very close to having
>> prototype code but i had some difficulties in initialization of the
>> co-processing component with coprocessorinitializewithpython call. In my
>> case, two model components and adaptor have its own processing source
>> (or
>> MPI_COMM_WORLD). For example, MPI processor 0, 1, 2, 3 are used by 1st
>> model, 4, 5, 6, 7 are used by 2nd model code and 8, 9, 10, 11 is used by
>> adaptor. The code basically handles transferring the grid information
>> and
>> data to adaptor. So, the problem is that if i try to call my custom
>> coprocessorinitializewithpython call in adaptor (only in 8, 9, 10, 11)
>> then it hangs in g_coprocessor->Initialize(); (see code at the end of
>> the
>> mail) step but if i call coprocessorinitializewithpython in the main
>> code
>> that uses all the available processor (between 0 and 11) and it runs
>> without any problem. It seems that there is a restriction in the
>> ParaView
>> side (expecially vtkCPProcessor::Initialize() that can be found in
>> CoProcessing/Catalyst/vtkCPProcessor.cxx) but i am not sure. Do you have
>> any suggestion about that? Do you think that is it possible to fix it
>> easily. Of corse the adaptor code could use all the processor but it is
>> better to have its own dedicated resource that might have GPU support in
>> those specific servers or processors. I am relatively new to VTK and it
>> might be difficult for me to fix it and i need your guidance to start.
>>
>> Best Regards,
>>
>> --ufuk
>>
>> vtkCPProcessor* g_coprocessor;
>>
>> extern "C" void my_coprocessorinitializewithpython_(const char*
>> pythonScriptName, const char strarr[][255], int *size) {
>> if (pythonScriptName != NULL) {
>> if (!g_coprocessor) {
>> g_coprocessor = vtkCPProcessor::New();
>> g_coprocessor->Initialize();
>> vtkSmartPointer<vtkCPPythonScriptPipeline> pipeline =
>> vtkSmartPointer<vtkCPPythonScriptPipeline>::New();
>> pipeline->Initialize(pythonScriptName);
>> g_coprocessor->AddPipeline(pipeline);
>> //pipeline->FastDelete();
>> }
>>
>> if (!g_coprocessorData) {
>> g_coprocessorData = vtkCPDataDescription::New();
>> // must be input port for all model components and for all
>> dimensions
>> for (int i = 0; i < *size; i++) {
>> g_coprocessorData->AddInput(strarr[i]);
>> std::cout << "adding input port [" << i << "] = " << strarr[i]
>> <<
>> std::endl;
>> }
>> }
>> }
>> }
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the ParaView Wiki at:
>> http://paraview.org/Wiki/ParaView
>>
>> Search the list archives at: http://markmail.org/search/?q=ParaView
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/paraview
>>
>
More information about the ParaView
mailing list