gnu: Add python-mediafile.
[jackhill/guix/guix.git] / gnu / packages / patches / combinatorial-blas-awpm.patch
CommitLineData
38dd27e8
EB
1Install BipartiteMatchings headers for SuperLU_DIST. Removes global variables
2and code related to performance measurement that is not useful when used in a
3library setting.
a6b9ebc2
EB
4
5--- a/BipartiteMatchings/ApproxWeightPerfectMatching.h
6+++ b/BipartiteMatchings/ApproxWeightPerfectMatching.h
7@@ -9,7 +9,7 @@
8 #ifndef ApproxWeightPerfectMatching_h
9 #define ApproxWeightPerfectMatching_h
10
11-#include "../CombBLAS.h"
12+#include "CombBLAS.h"
13 #include "BPMaximalMatching.h"
14 #include "BPMaximumMatching.h"
15 #include <parallel/algorithm>
38dd27e8
EB
16@@ -39,9 +39,6 @@
17 std::shared_ptr<CommGrid> commGrid;
18 };
19
20-double t1Comp, t1Comm, t2Comp, t2Comm, t3Comp, t3Comm, t4Comp, t4Comm, t5Comp, t5Comm, tUpdateMateComp;
21-
22-
23 template <class IT, class NT>
24 std::vector<std::tuple<IT,IT,NT>> ExchangeData(std::vector<std::vector<std::tuple<IT,IT,NT>>> & tempTuples, MPI_Comm World)
25 {
26@@ -391,7 +388,7 @@
27
28
29
30-int ThreadBuffLenForBinning(int itemsize, int nbins)
31+inline int ThreadBuffLenForBinning(int itemsize, int nbins)
32 {
33 // 1MB shared cache (per 2 cores) in KNL
34 #ifndef L2_CACHE_SIZE
35@@ -417,7 +414,6 @@
36
37
38
39- double tstart = MPI_Wtime();
40
41
42 MPI_Comm World = param.commGrid->GetWorld();
43@@ -528,9 +524,6 @@
44 }
45 }
46
47- t1Comp = MPI_Wtime() - tstart;
48- tstart = MPI_Wtime();
49-
50 // Step 3: Communicate data
51
52 std::vector<int> recvcnt (param.nprocs);
53@@ -548,7 +541,6 @@
54 std::vector< std::tuple<IT,IT,NT> > recvTuples1(totrecv);
55 MPI_Alltoallv(sendTuples.data(), sendcnt.data(), sdispls.data(), MPI_tuple, recvTuples1.data(), recvcnt.data(), rdispls.data(), MPI_tuple, World);
56 MPI_Type_free(&MPI_tuple);
57- t1Comm = MPI_Wtime() - tstart;
58 return recvTuples1;
59 }
60
61@@ -730,9 +722,6 @@
62
63 // Step 4: Communicate data
64
65- t2Comp = MPI_Wtime() - tstart;
66- tstart = MPI_Wtime();
67-
68 std::vector<int> recvcnt (param.nprocs);
69 std::vector<int> rdispls (param.nprocs, 0);
70
71@@ -748,7 +737,6 @@
72 std::vector< std::tuple<IT,IT,IT,NT> > recvTuples1(totrecv);
73 MPI_Alltoallv(sendTuples.data(), sendcnt.data(), sdispls.data(), MPI_tuple, recvTuples1.data(), recvcnt.data(), rdispls.data(), MPI_tuple, World);
74 MPI_Type_free(&MPI_tuple);
75- t2Comm = MPI_Wtime() - tstart;
76 return recvTuples1;
77 }
78
79@@ -836,7 +824,6 @@
80 param.myrank = myrank;
81 param.commGrid = commGrid;
82
83- double t1CompAll = 0, t1CommAll = 0, t2CompAll = 0, t2CommAll = 0, t3CompAll = 0, t3CommAll = 0, t4CompAll = 0, t4CommAll = 0, t5CompAll = 0, t5CommAll = 0, tUpdateMateCompAll = 0, tUpdateWeightAll = 0;
84
85 // -----------------------------------------------------------
86 // replicate mate vectors for mateCol2Row
87@@ -975,11 +962,7 @@
88 }
89
90 //vector< tuple<IT,IT,IT, NT> >().swap(recvTuples1);
91- double t3Comp = MPI_Wtime() - tstart;
92- tstart = MPI_Wtime();
93 recvTuples1 = ExchangeData1(tempTuples1, World);
94- double t3Comm = MPI_Wtime() - tstart;
95- tstart = MPI_Wtime();
96
97 std::vector<std::tuple<IT,IT,IT,IT, NT>> bestTuplesPhase4 (lncol);
98 // we could have used lnrow in both bestTuplesPhase3 and bestTuplesPhase4
99@@ -1041,14 +1024,9 @@
100
101
102 //vector< tuple<IT,IT,IT, NT> >().swap(recvTuples1);
103- double t4Comp = MPI_Wtime() - tstart;
104- tstart = MPI_Wtime();
105
106 std::vector<std::tuple<IT,IT,IT,IT>> recvWinnerTuples = ExchangeData1(winnerTuples, World);
107
108- double t4Comm = MPI_Wtime() - tstart;
109- tstart = MPI_Wtime();
110-
111 // at the owner of (mj,j)
112 std::vector<std::tuple<IT,IT>> rowBcastTuples(recvWinnerTuples.size()); //(mi,mj)
113 std::vector<std::tuple<IT,IT>> colBcastTuples(recvWinnerTuples.size()); //(j,i)
114@@ -1065,15 +1043,10 @@
115 colBcastTuples[k] = std::make_tuple(j,i);
116 rowBcastTuples[k] = std::make_tuple(mj,mi);
117 }
118- double t5Comp = MPI_Wtime() - tstart;
119- tstart = MPI_Wtime();
120
121 std::vector<std::tuple<IT,IT>> updatedR2C = MateBcast(rowBcastTuples, RowWorld);
122 std::vector<std::tuple<IT,IT>> updatedC2R = MateBcast(colBcastTuples, ColWorld);
123
124- double t5Comm = MPI_Wtime() - tstart;
125- tstart = MPI_Wtime();
126-
127 #ifdef THREADED
128 #pragma omp parallel for
129 #endif
130@@ -1095,13 +1068,9 @@
131 }
132
133
134- double tUpdateMateComp = MPI_Wtime() - tstart;
135- tstart = MPI_Wtime();
136 // update weights of matched edges
137 // we can do better than this since we are doing sparse updates
138 ReplicateMateWeights(param, dcsc, colptr, RepMateC2R, RepMateWR2C, RepMateWC2R);
139- double tUpdateWeight = MPI_Wtime() - tstart;
140-
141
142 weightPrev = weightCur;
143 weightCur = MatchingWeight(RepMateWC2R, RowWorld, minw);
144@@ -1110,32 +1079,8 @@
145 //UpdateMatching(mateRow2Col, mateCol2Row, RepMateR2C, RepMateC2R);
146 //CheckMatching(mateRow2Col,mateCol2Row);
147
148- if(myrank==0)
149- {
150- std::cout << t1Comp << " " << t1Comm << " "<< t2Comp << " " << t2Comm << " " << t3Comp << " " << t3Comm << " " << t4Comp << " " << t4Comm << " " << t5Comp << " " << t5Comm << " " << tUpdateMateComp << " " << tUpdateWeight << std::endl;
151-
152- t1CompAll += t1Comp;
153- t1CommAll += t1Comm;
154- t2CompAll += t2Comp;
155- t2CommAll += t2Comm;
156- t3CompAll += t3Comp;
157- t3CommAll += t3Comm;
158- t4CompAll += t4Comp;
159- t4CommAll += t4Comm;
160- t5CompAll += t5Comp;
161- t5CommAll += t5Comm;
162- tUpdateMateCompAll += tUpdateMateComp;
163- tUpdateWeightAll += tUpdateWeight;
164-
165- }
166 }
167
168- if(myrank==0)
169- {
170- std::cout << "=========== overal timing ==========" << std::endl;
171- std::cout << t1CompAll << " " << t1CommAll << " " << t2CompAll << " " << t2CommAll << " " << t3CompAll << " " << t3CommAll << " " << t4CompAll << " " << t4CommAll << " " << t5CompAll << " " << t5CommAll << " " << tUpdateMateCompAll << " " << tUpdateWeightAll << std::endl;
172- }
173-
174 // update the distributed mate vectors from replicated mate vectors
175 UpdateMatching(mateRow2Col, mateCol2Row, RepMateR2C, RepMateC2R);
176 //weightCur = MatchingWeight(RepMateWC2R, RowWorld);
a6b9ebc2
EB
177--- a/BipartiteMatchings/BPMaximalMatching.h
178+++ b/BipartiteMatchings/BPMaximalMatching.h
179@@ -1,7 +1,7 @@
180 #ifndef BP_MAXIMAL_MATCHING_H
181 #define BP_MAXIMAL_MATCHING_H
182
183-#include "../CombBLAS.h"
184+#include "CombBLAS.h"
185 #include <iostream>
186 #include <functional>
187 #include <algorithm>
38dd27e8
EB
188@@ -14,8 +14,6 @@
189 #define GREEDY 1
190 #define KARP_SIPSER 2
191 #define DMD 3
192-MTRand GlobalMT(123); // for reproducible result
193-double tTotalMaximal;
194
195 namespace combblas {
196
197@@ -25,7 +25,7 @@
198 void MaximalMatching(Par_DCSC_Bool & A, Par_DCSC_Bool & AT, FullyDistVec<IT, IT>& mateRow2Col,
199 FullyDistVec<IT, IT>& mateCol2Row, FullyDistVec<IT, IT>& degColRecv, int type, bool rand=true)
200 {
201-
202+ static MTRand GlobalMT(123); // for reproducible result
203 typedef VertexTypeML < IT, IT> VertexType;
204 int nprocs, myrank;
205 MPI_Comm_size(MPI_COMM_WORLD,&nprocs);
206@@ -354,8 +354,6 @@
207
208 }
209
210- tTotalMaximal = MPI_Wtime() - tStart;
211-
212 IT cardinality = mateRow2Col.Count([](IT mate){return mate!=-1;});
213 std::vector<double> totalTimes(timing[0].size(),0);
214 for(int i=0; i<timing.size(); i++)
a6b9ebc2
EB
215--- a/BipartiteMatchings/BPMaximumMatching.h
216+++ b/BipartiteMatchings/BPMaximumMatching.h
217@@ -1,7 +1,7 @@
218 #ifndef BP_MAXIMUM_MATCHING_H
219 #define BP_MAXIMUM_MATCHING_H
220
221-#include "../CombBLAS.h"
222+#include "CombBLAS.h"
223 #include <mpi.h>
224 #include <sys/time.h>
225 #include <iostream>
38dd27e8
EB
226@@ -11,7 +11,6 @@
227 #include <string>
228 #include <sstream>
229 #include "MatchingDefs.h"
230-double tTotalMaximum;
231
232 namespace combblas {
233
234@@ -231,7 +231,7 @@
235 void maximumMatching(SpParMat < IT, NT, DER > & A, FullyDistVec<IT, IT>& mateRow2Col,
236 FullyDistVec<IT, IT>& mateCol2Row, bool prune=true, bool randMM = false, bool maximizeWeight = false)
237 {
238-
239+ static MTRand GlobalMT(123); // for reproducible result
240 typedef VertexTypeMM <IT> VertexType;
241
242 int nthreads=1;
243@@ -420,8 +420,6 @@
244
245 MPI_Win_free(&winLeaves);
246
247- tTotalMaximum = MPI_Wtime() - tstart;
248-
249 //isMaximalmatching(A, mateRow2Col, mateCol2Row, unmatchedRow, unmatchedCol);
250 //isMatching(mateCol2Row, mateRow2Col); //todo there is a better way to check this
251
a6b9ebc2
EB
252--- a/BipartiteMatchings/MatchingDefs.h
253+++ b/BipartiteMatchings/MatchingDefs.h
254@@ -9,7 +9,7 @@
255 #ifndef MatchingDefs_h
256 #define MatchingDefs_h
257
258-#include "../CombBLAS.h"
259+#include "CombBLAS.h"
260 #include <iostream>
261
262 namespace combblas {
263--- a/BipartiteMatchings/Utility.h
264+++ b/BipartiteMatchings/Utility.h
265@@ -1,7 +1,7 @@
266 #ifndef BP_UTILITY_H
267 #define BP_UTILITY_H
268
269-#include "../CombBLAS.h"
270+#include "CombBLAS.h"
271
272 namespace combblas {
273
274--- a/CMakeLists.txt
275+++ b/CMakeLists.txt
276@@ -68,6 +68,7 @@ set_property(TARGET CombBLAS PROPERTY VERSION ${CombBLAS_VERSION})
277 # installation
278 install(DIRECTORY include/ DESTINATION include)
279 install(DIRECTORY psort-1.0/include/ DESTINATION include)
280+install(DIRECTORY BipartiteMatchings DESTINATION include FILES_MATCHING PATTERN "*.h")
281 install(TARGETS CombBLAS EXPORT CombBLASTargets
282 LIBRARY DESTINATION lib
283 ARCHIVE DESTINATION lib