今日目标:完成InsVertex的第一种实现+调试+实验
上午
- 1
- 背单词
- 新增play
- 2
- 思考新增实验:有必要确认下二级reverse有没有必要:本来最简单实现是直接用map,这样还不需要用onPath1来映射onpath1顶点
- 因此实验变成:新增了2
- (done)基准msbfs:实现原先的数据结构用分开的路径记录结构
- InsVertex.map.separate:比1改了数据结构(map reverse),且加上trick(1step->2step)
- (done)InsVertex.separate:比1改了数据结构(二级reverse),且加上trick(1step->2step)
- InsVertex:比3改了路径合并 [2种实现:控制变量实现:(在路径记录合并前)一种是理论上更快,另一种是实验上更快]
- 实现instance-vertex的合并(基于InsV)
- 实现instance-vertex的合并(基于InsV_slower)
- 实现InsVertex.map.separate(完成代码结构修改和反向结构)
- 3
- 实现InsVertex.map.separate(完成代码,通过编译中)
- 学习模板类继承的成员访问
下午
- 1
- 实现和调试InsVertex.map.separate(编译+调试)
- 跑实验InsVertex.map.separate
- 2
- 实现InsVertex-基于InsV(完成path2和调整路径)
- 实现合并路径是不可避免的,就算3没有2快,合并路径也可以对2进行加快
- 实现InsVertex-基于InsV(完成path2和调整路径)
- 3
- 实现InsVertex-基于InsV(完成路径翻译)
- 调试(进行中)
晚上
- 1
- 分析InsVertex.map.separate和InsVertex.separate的时间分布(这个决定二级结构的价值)
- 这两次的找p1的时间不一样,相差不是特别小,等下晚上的时候全部重新跑一遍看看
- idea_sep和idea_sep_map
- 调试InsVertex-基于InsV(单点对)
- 分析InsVertex.map.separate和InsVertex.separate的时间分布(这个决定二级结构的价值)
- 2
- 调试InsVertex-基于InsV(多点对;小图完成)
- 3
- 浅跑 InsVertex-基于InsV:发现在中图上有Bug
- 修bug:定位bug原因:solution被乱写了,除了solution[0],后面的都是被写乱了
- 4
- 调试,没有解决bug 调试存档
- bug现象:128的batch,solution[0:3]被乱写,但是后面没问题
- 调试,没有解决bug 调试存档
(gdb) p solution[0][0].size()
$19 = 316753783116
(gdb) p solution[1][0].size()
$20 = 934626759737181
(gdb) p solution[2][0].size()
$21 = 1160669814397384
(gdb) p solution[3][0].size()
$22 = 18446405066571923009
(gdb) p solution[4][0].size()
$23 = 2
(gdb) p solution[5][0].size()
$25 = 2
(gdb) p solution[6][0].size()
$26 = 2
(gdb) p solution[126][0].size()
$27 = 2
(gdb) p solution[127][0].size()
$28 = 2
(gdb) p solution[128][0].size()
$29 = 13628
(gdb)
把数组改vector之后是上述现象,改之前是solution[0]没有被乱写,solution[1:2]有被乱写,后面的没有检查
- b BatchVertexPairs/IdeaMerge.cpp:1443 if pos==1
- 1000点对时
pos==1对应(24578 93371)点对
pos==01对应(24578 93371)(21699 62280)点对,只跑这两对没有问题
- 实在不行的话,跟踪1000点对(翻译block),可能问题暴露不是很慢(c num可以continue num次)
- 睡觉之前:跑idea_sep和idea_sep_map
- 5
- 解决Bug:果然是前面有数组越界,同时Get新知识:vector也不会对越界进行检查
- 浅跑看效果
- 三个实验都跑起来~明天上午分析结果和做ppt!