Files
swift-mirror/utils/benchmark/Graph/test-prims.cpp
Michael Gottesman 9dc54410e5 Change the prims cpp benchmark to match the prims swift benchmark.
Also up the number of iterations the swift benchmark in the stdlib runs so that
it matches the number of iterations the c++ version does. This iteration number
is enough to cause the c++ version to run for ~1 second. With this same number
of iterations, the swift version takes ~10 seconds.

Swift SVN r15205
2014-03-18 21:45:41 +00:00

559 lines
12 KiB
C++

#include <cstdlib>
#include <cstdio>
#include <cassert>
#include <map>
#include "graph.h"
using namespace graph;
static bool scan_header(FILE *f, const char *str1, const char *str2) {
char buf1[128], buf2[128];
if (2 != fscanf(f, "%s %s\n", buf1, buf2) ||
strcmp(buf1, str1) != 0 ||
strcmp(buf2, str2) != 0) {
return false;
}
return true;
}
int main(int argc, char *argv[]) {
// Use predefined small dataset.
std::vector<unsigned> nodes = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
93, 94, 95, 96, 97, 98, 99 };
std::vector<std::pair<std::pair<unsigned, unsigned>, double>> edges = {
{{26, 47}, 921},
{{20, 25}, 971},
{{92, 59}, 250},
{{33, 55}, 1391},
{{78, 39}, 313},
{{7, 25}, 637},
{{18, 19}, 1817},
{{33, 41}, 993},
{{64, 41}, 926},
{{88, 86}, 574},
{{93, 15}, 1462},
{{86, 33}, 1649},
{{37, 35}, 841},
{{98, 51}, 1160},
{{15, 30}, 1125},
{{65, 78}, 1052},
{{58, 12}, 1273},
{{12, 17}, 285},
{{45, 61}, 1608},
{{75, 53}, 545},
{{99, 48}, 410},
{{97, 0}, 1303},
{{48, 17}, 1807},
{{1, 54}, 1491},
{{15, 34}, 807},
{{94, 98}, 646},
{{12, 69}, 136},
{{65, 11}, 983},
{{63, 83}, 1604},
{{78, 89}, 1828},
{{61, 63}, 845},
{{18, 36}, 1626},
{{68, 52}, 1324},
{{14, 50}, 690},
{{3, 11}, 943},
{{21, 68}, 914},
{{19, 44}, 1762},
{{85, 80}, 270},
{{59, 92}, 250},
{{86, 84}, 1431},
{{19, 18}, 1817},
{{52, 68}, 1324},
{{16, 29}, 1108},
{{36, 80}, 395},
{{67, 18}, 803},
{{63, 88}, 1717},
{{68, 21}, 914},
{{75, 82}, 306},
{{49, 82}, 1292},
{{73, 45}, 1876},
{{89, 82}, 409},
{{45, 47}, 272},
{{22, 83}, 597},
{{61, 12}, 1791},
{{44, 68}, 1229},
{{50, 51}, 917},
{{14, 53}, 355},
{{77, 41}, 138},
{{54, 21}, 1870},
{{93, 70}, 1582},
{{76, 2}, 1658},
{{83, 73}, 1162},
{{6, 1}, 482},
{{11, 65}, 983},
{{81, 90}, 1024},
{{19, 1}, 970},
{{8, 58}, 1131},
{{60, 42}, 477},
{{86, 29}, 258},
{{69, 59}, 903},
{{34, 15}, 807},
{{37, 2}, 1451},
{{7, 73}, 754},
{{47, 86}, 184},
{{67, 17}, 449},
{{18, 67}, 803},
{{25, 4}, 595},
{{3, 31}, 1337},
{{64, 31}, 1928},
{{9, 43}, 237},
{{83, 63}, 1604},
{{47, 45}, 272},
{{86, 88}, 574},
{{87, 74}, 934},
{{98, 94}, 646},
{{20, 1}, 642},
{{26, 92}, 1344},
{{18, 17}, 565},
{{47, 11}, 595},
{{10, 59}, 1558},
{{2, 76}, 1658},
{{77, 74}, 1277},
{{42, 60}, 477},
{{80, 36}, 395},
{{35, 23}, 589},
{{50, 37}, 203},
{{6, 96}, 481},
{{78, 65}, 1052},
{{1, 52}, 127},
{{65, 23}, 1932},
{{46, 51}, 213},
{{59, 89}, 89},
{{15, 93}, 1462},
{{69, 3}, 1305},
{{17, 37}, 1177},
{{30, 3}, 193},
{{9, 15}, 818},
{{75, 95}, 977},
{{86, 47}, 184},
{{10, 12}, 1736},
{{80, 27}, 1010},
{{12, 10}, 1736},
{{86, 1}, 1958},
{{60, 12}, 1240},
{{43, 71}, 683},
{{91, 65}, 1519},
{{33, 86}, 1649},
{{62, 26}, 1773},
{{1, 13}, 1187},
{{2, 10}, 1018},
{{91, 29}, 351},
{{69, 12}, 136},
{{43, 9}, 237},
{{29, 86}, 258},
{{17, 48}, 1807},
{{31, 64}, 1928},
{{68, 61}, 1936},
{{76, 38}, 1724},
{{1, 6}, 482},
{{53, 14}, 355},
{{51, 50}, 917},
{{54, 13}, 815},
{{19, 29}, 883},
{{35, 87}, 974},
{{70, 96}, 511},
{{23, 35}, 589},
{{39, 69}, 1588},
{{93, 73}, 1093},
{{13, 73}, 435},
{{5, 60}, 1619},
{{42, 41}, 1523},
{{66, 58}, 1596},
{{1, 67}, 431},
{{17, 67}, 449},
{{30, 95}, 906},
{{71, 43}, 683},
{{5, 87}, 190},
{{12, 78}, 891},
{{30, 97}, 402},
{{28, 17}, 1131},
{{7, 97}, 1356},
{{58, 66}, 1596},
{{20, 37}, 1294},
{{73, 76}, 514},
{{54, 8}, 613},
{{68, 35}, 1252},
{{92, 32}, 701},
{{3, 90}, 652},
{{99, 46}, 1576},
{{13, 54}, 815},
{{20, 87}, 1390},
{{36, 18}, 1626},
{{51, 26}, 1146},
{{2, 23}, 581},
{{29, 7}, 1558},
{{88, 59}, 173},
{{17, 1}, 1071},
{{37, 49}, 1011},
{{18, 6}, 696},
{{88, 33}, 225},
{{58, 38}, 802},
{{87, 50}, 1744},
{{29, 91}, 351},
{{6, 71}, 1053},
{{45, 24}, 1720},
{{65, 91}, 1519},
{{37, 50}, 203},
{{11, 3}, 943},
{{72, 65}, 1330},
{{45, 50}, 339},
{{25, 20}, 971},
{{15, 9}, 818},
{{14, 54}, 1353},
{{69, 95}, 393},
{{8, 66}, 1213},
{{52, 2}, 1608},
{{50, 14}, 690},
{{50, 45}, 339},
{{1, 37}, 1273},
{{45, 93}, 1650},
{{39, 78}, 313},
{{1, 86}, 1958},
{{17, 28}, 1131},
{{35, 33}, 1667},
{{23, 2}, 581},
{{51, 66}, 245},
{{17, 54}, 924},
{{41, 49}, 1629},
{{60, 5}, 1619},
{{56, 93}, 1110},
{{96, 13}, 461},
{{25, 7}, 637},
{{11, 69}, 370},
{{90, 3}, 652},
{{39, 71}, 1485},
{{65, 51}, 1529},
{{20, 6}, 1414},
{{80, 85}, 270},
{{73, 83}, 1162},
{{0, 97}, 1303},
{{13, 33}, 826},
{{29, 71}, 1788},
{{33, 12}, 461},
{{12, 58}, 1273},
{{69, 39}, 1588},
{{67, 75}, 1504},
{{87, 20}, 1390},
{{88, 97}, 526},
{{33, 88}, 225},
{{95, 69}, 393},
{{2, 52}, 1608},
{{5, 25}, 719},
{{34, 78}, 510},
{{53, 99}, 1074},
{{33, 35}, 1667},
{{57, 30}, 361},
{{87, 58}, 1574},
{{13, 90}, 1030},
{{79, 74}, 91},
{{4, 86}, 1107},
{{64, 94}, 1609},
{{11, 12}, 167},
{{30, 45}, 272},
{{47, 91}, 561},
{{37, 17}, 1177},
{{77, 49}, 883},
{{88, 23}, 1747},
{{70, 80}, 995},
{{62, 77}, 907},
{{18, 4}, 371},
{{73, 93}, 1093},
{{11, 47}, 595},
{{44, 23}, 1990},
{{20, 0}, 512},
{{3, 69}, 1305},
{{82, 3}, 1815},
{{20, 88}, 368},
{{44, 45}, 364},
{{26, 51}, 1146},
{{7, 65}, 349},
{{71, 39}, 1485},
{{56, 88}, 1954},
{{94, 69}, 1397},
{{12, 28}, 544},
{{95, 75}, 977},
{{32, 90}, 789},
{{53, 1}, 772},
{{54, 14}, 1353},
{{49, 77}, 883},
{{92, 26}, 1344},
{{17, 18}, 565},
{{97, 88}, 526},
{{48, 80}, 1203},
{{90, 32}, 789},
{{71, 6}, 1053},
{{87, 35}, 974},
{{55, 90}, 1808},
{{12, 61}, 1791},
{{1, 96}, 328},
{{63, 10}, 1681},
{{76, 34}, 871},
{{41, 64}, 926},
{{42, 97}, 482},
{{25, 5}, 719},
{{23, 65}, 1932},
{{54, 1}, 1491},
{{28, 12}, 544},
{{89, 10}, 108},
{{27, 33}, 143},
{{67, 1}, 431},
{{32, 45}, 52},
{{79, 33}, 1871},
{{6, 55}, 717},
{{10, 58}, 459},
{{67, 39}, 393},
{{10, 4}, 1808},
{{96, 6}, 481},
{{1, 19}, 970},
{{97, 7}, 1356},
{{29, 16}, 1108},
{{1, 53}, 772},
{{30, 15}, 1125},
{{4, 6}, 634},
{{6, 20}, 1414},
{{88, 56}, 1954},
{{87, 64}, 1950},
{{34, 76}, 871},
{{17, 12}, 285},
{{55, 59}, 321},
{{61, 68}, 1936},
{{50, 87}, 1744},
{{84, 44}, 952},
{{41, 33}, 993},
{{59, 18}, 1352},
{{33, 27}, 143},
{{38, 32}, 1210},
{{55, 70}, 1264},
{{38, 58}, 802},
{{1, 20}, 642},
{{73, 13}, 435},
{{80, 48}, 1203},
{{94, 64}, 1609},
{{38, 28}, 414},
{{73, 23}, 1113},
{{78, 12}, 891},
{{26, 62}, 1773},
{{87, 43}, 579},
{{53, 6}, 95},
{{59, 95}, 285},
{{88, 63}, 1717},
{{17, 5}, 633},
{{66, 8}, 1213},
{{41, 42}, 1523},
{{83, 22}, 597},
{{95, 30}, 906},
{{51, 65}, 1529},
{{17, 49}, 1727},
{{64, 87}, 1950},
{{86, 4}, 1107},
{{37, 98}, 1102},
{{32, 92}, 701},
{{60, 94}, 198},
{{73, 98}, 1749},
{{4, 18}, 371},
{{96, 70}, 511},
{{7, 29}, 1558},
{{35, 37}, 841},
{{27, 64}, 384},
{{12, 33}, 461},
{{36, 38}, 529},
{{69, 16}, 1183},
{{91, 47}, 561},
{{85, 29}, 1676},
{{3, 82}, 1815},
{{69, 58}, 1579},
{{93, 45}, 1650},
{{97, 42}, 482},
{{37, 1}, 1273},
{{61, 4}, 543},
{{96, 1}, 328},
{{26, 0}, 1993},
{{70, 64}, 878},
{{3, 30}, 193},
{{58, 69}, 1579},
{{4, 25}, 595},
{{31, 3}, 1337},
{{55, 6}, 717},
{{39, 67}, 393},
{{78, 34}, 510},
{{75, 67}, 1504},
{{6, 53}, 95},
{{51, 79}, 175},
{{28, 91}, 1040},
{{89, 78}, 1828},
{{74, 93}, 1587},
{{45, 32}, 52},
{{10, 2}, 1018},
{{49, 37}, 1011},
{{63, 61}, 845},
{{0, 20}, 512},
{{1, 17}, 1071},
{{99, 53}, 1074},
{{37, 20}, 1294},
{{10, 89}, 108},
{{33, 92}, 946},
{{23, 73}, 1113},
{{23, 88}, 1747},
{{49, 17}, 1727},
{{88, 20}, 368},
{{21, 54}, 1870},
{{70, 93}, 1582},
{{59, 88}, 173},
{{32, 38}, 1210},
{{89, 59}, 89},
{{23, 44}, 1990},
{{38, 76}, 1724},
{{30, 57}, 361},
{{94, 60}, 198},
{{59, 10}, 1558},
{{55, 64}, 1996},
{{12, 11}, 167},
{{36, 24}, 1801},
{{97, 30}, 402},
{{52, 1}, 127},
{{58, 87}, 1574},
{{54, 17}, 924},
{{93, 74}, 1587},
{{24, 36}, 1801},
{{2, 37}, 1451},
{{91, 28}, 1040},
{{59, 55}, 321},
{{69, 11}, 370},
{{8, 54}, 613},
{{29, 85}, 1676},
{{44, 19}, 1762},
{{74, 79}, 91},
{{93, 56}, 1110},
{{58, 10}, 459},
{{41, 50}, 1559},
{{66, 51}, 245},
{{80, 19}, 1838},
{{33, 79}, 1871},
{{76, 73}, 514},
{{98, 37}, 1102},
{{45, 44}, 364},
{{16, 69}, 1183},
{{49, 41}, 1629},
{{19, 80}, 1838},
{{71, 57}, 500},
{{6, 4}, 634},
{{64, 27}, 384},
{{84, 86}, 1431},
{{5, 17}, 633},
{{96, 88}, 334},
{{87, 5}, 190},
{{70, 21}, 1619},
{{55, 33}, 1391},
{{10, 63}, 1681},
{{11, 62}, 1339},
{{33, 13}, 826},
{{64, 70}, 878},
{{65, 72}, 1330},
{{70, 55}, 1264},
{{64, 55}, 1996},
{{50, 41}, 1559},
{{46, 99}, 1576},
{{88, 96}, 334},
{{51, 20}, 868},
{{73, 7}, 754},
{{80, 70}, 995},
{{44, 84}, 952},
{{29, 19}, 883},
{{59, 69}, 903},
{{57, 53}, 1575},
{{90, 13}, 1030},
{{28, 38}, 414},
{{12, 60}, 1240},
{{85, 58}, 573},
{{90, 55}, 1808},
{{4, 10}, 1808},
{{68, 44}, 1229},
{{92, 33}, 946},
{{90, 81}, 1024},
{{53, 75}, 545},
{{45, 30}, 272},
{{41, 77}, 138},
{{21, 70}, 1619},
{{45, 73}, 1876},
{{35, 68}, 1252},
{{13, 96}, 461},
{{53, 57}, 1575},
{{82, 89}, 409},
{{28, 61}, 449},
{{58, 61}, 78},
{{27, 80}, 1010},
{{61, 58}, 78},
{{38, 36}, 529},
{{80, 30}, 397},
{{18, 59}, 1352},
{{62, 11}, 1339},
{{95, 59}, 285},
{{51, 98}, 1160},
{{6, 18}, 696},
{{30, 80}, 397},
{{69, 94}, 1397},
{{58, 85}, 573},
{{48, 99}, 410},
{{51, 46}, 213},
{{57, 71}, 500},
{{91, 30}, 104},
{{65, 7}, 349},
{{79, 51}, 175},
{{47, 26}, 921},
{{4, 61}, 543},
{{98, 73}, 1749},
{{74, 77}, 1277},
{{61, 28}, 449},
{{58, 8}, 1131},
{{61, 45}, 1608},
{{74, 87}, 934},
{{71, 29}, 1788},
{{30, 91}, 104},
{{13, 1}, 1187},
{{0, 26}, 1993},
{{82, 49}, 1292},
{{43, 87}, 579},
{{24, 45}, 1720},
{{20, 51}, 868},
{{77, 62}, 907},
{{82, 75}, 306},
};
for (unsigned i = 0; i < 10000; i++) {
// Match how the swift version will be instantiating the graph list and edge
// list for every iteration.
std::vector<Node *> graph;
for (unsigned Index : nodes) {
graph.push_back(new Node(Index));
}
std::map<std::pair<unsigned, unsigned>, double> weight_map;
for (auto P : edges) {
weight_map[P.first] = P.second;
}
// Our closure uses our weight_map to look up the weight in between ndoeindex
// and adj_node_index.
std::vector<unsigned> TreeEdges;
prims(graph, TreeEdges, [&weight_map] (unsigned ind1, unsigned ind2) -> double {
return weight_map[{ind1, ind2}];
});
for (auto *n : graph)
delete n;
}
return 0;
}