-
Notifications
You must be signed in to change notification settings - Fork 59
Open
Description
运行环境
iEDA docker
测例
我并非使用标准的数字流程,而是仅使用Lef、Def完成布线流程,相关数据因为NDA无法提供。
问题
由于布线资源较为紧张,会产生大量违例。 在运行5个小时并跑完10次布线迭代完成之后,出现core dump错误或者是double free,依据rt.log和gdb我找到错误的函数为
void DataManager::updateViolationToGCellMap(ChangeType change_type, Violation* violation)其中的violation指针已经为空,但是依然进行了free。
if (change_type == ChangeType::kDel) {
delete violation;
violation = nullptr;
}我通过增加以下判断指针是否为空规避了这个问题,此后再跑此处就没有问题。
if (violation == nullptr) {
return;
}本可以提交pr完成debug修复,但是我仔细研究了一下布线算法,发现其在处理violation时某一函数存在数据竞争问题。以下函数在并发环境下在RTDM中删除violation,即便我可以看到dr_box已经做了错位处理以避免相邻并发单元互相冲突,但是在违例较多的情况下,是否依然存在数据竞争?
void DetailedRouter::buildViolation(DRBox& dr_box)所以我认为以上的判断语句仅能修复我的例子,或许并不能根本解决我遇到的问题。此问题已经超出了我个人修bug的范围,望开发组可以看一下这个问题。如果我的表述存在问题,希望批评指正。
Metadata
Metadata
Assignees
Labels
No labels