MCPcopy Create free account
hub / github.com/Kitware/VTK / ExchangeIdArraysFast

Method ExchangeIdArraysFast

Filters/ParallelGeometry/vtkPDistributedDataFilter.cxx:1924–2073  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

1922
1923//------------------------------------------------------------------------------
1924vtkIdTypeArray** vtkPDistributedDataFilter::ExchangeIdArraysFast(
1925 vtkIdTypeArray** myArray, int deleteSendArrays, int tag)
1926{
1927 vtkIdTypeArray** ia = nullptr;
1928 int proc;
1929 int nprocs = this->NumProcesses;
1930 int iam = this->MyId;
1931
1932 vtkMPIController* mpiContr = vtkMPIController::SafeDownCast(this->Controller);
1933
1934 vtkIdType* sendSize = new vtkIdType[nprocs];
1935 vtkIdType* recvSize = new vtkIdType[nprocs];
1936
1937 for (proc = 0; proc < nprocs; proc++)
1938 {
1939 recvSize[proc] = sendSize[proc] = 0;
1940
1941 if (proc == iam)
1942 {
1943 continue;
1944 }
1945
1946 if (myArray[proc])
1947 {
1948 sendSize[proc] = myArray[proc]->GetNumberOfTuples();
1949 }
1950 }
1951
1952 // Exchange sizes of arrays to send and receive
1953
1954 vtkMPICommunicator::Request* reqBuf = new vtkMPICommunicator::Request[nprocs];
1955
1956 for (proc = 0; proc < nprocs; proc++)
1957 {
1958 if (proc == iam)
1959 {
1960 continue;
1961 }
1962 mpiContr->NoBlockReceive(recvSize + proc, 1, proc, tag, reqBuf[proc]);
1963 }
1964
1965 mpiContr->Barrier();
1966
1967 for (proc = 0; proc < nprocs; proc++)
1968 {
1969 if (proc == iam)
1970 {
1971 continue;
1972 }
1973 mpiContr->Send(sendSize + proc, 1, proc, tag);
1974 }
1975
1976 for (proc = 0; proc < nprocs; proc++)
1977 {
1978 if (proc == iam)
1979 {
1980 continue;
1981 }

Callers 1

ExchangeIdArraysMethod · 0.95

Calls 9

NoBlockReceiveMethod · 0.80
DeleteMethod · 0.65
NewFunction · 0.50
GetNumberOfTuplesMethod · 0.45
BarrierMethod · 0.45
SendMethod · 0.45
WaitMethod · 0.45
GetPointerMethod · 0.45
SetArrayMethod · 0.45

Tested by

no test coverage detected