Commit 6488962c by xiaotong

reduce memory footprint of XMem freeotf

parent 1fada737
...@@ -167,6 +167,22 @@ void T2TTrainer::Train(const char * fn, T2TModel * model) ...@@ -167,6 +167,22 @@ void T2TTrainer::Train(const char * fn, T2TModel * model)
/* get probabilities */ /* get probabilities */
float prob = GetProb(&output, &gold, NULL); float prob = GetProb(&output, &gold, NULL);
MTYPE totalUsed = 0;
MTYPE totalSize = 0;
for (int i = 0; i <= mem->curBlockID; i++) {
totalSize += mem->blocks[i].size;
totalUsed += mem->blocks[i].used;
if (totalSize <= 0) {
int nnn = 0;
}
if (totalUsed <= 0) {
int nnn = 0;
}
}
//fprintf(stderr, "%d(%ld,%ld,%f)\n", mem->curBlockID, totalUsed, totalSize, (float)totalUsed/totalSize);
loss += -prob; loss += -prob;
wordCount += wc; wordCount += wc;
wordCountTotal += wc; wordCountTotal += wc;
......
...@@ -532,7 +532,7 @@ release a piece of memory ...@@ -532,7 +532,7 @@ release a piece of memory
*/ */
void XMem::Release(void * p, MTYPE size, MTYPE code) void XMem::Release(void * p, MTYPE size, MTYPE code)
{ {
if(code == signature) //if(code == signature)
Release(devID, p, size); Release(devID, p, size);
} }
...@@ -667,6 +667,7 @@ void * XMem::AllocStandard(int myDevID, MTYPE mySize, bool myIsRebuiltIndex) ...@@ -667,6 +667,7 @@ void * XMem::AllocStandard(int myDevID, MTYPE mySize, bool myIsRebuiltIndex)
hit->size = mySize; hit->size = mySize;
hit->head.state = 2; hit->head.state = 2;
hit->pReal = beg; hit->pReal = beg;
blocks[hit->head.blockID].used += mySize;
RemoveFreeIndexNode(hit); RemoveFreeIndexNode(hit);
AddAllocIndexNode(hit); AddAllocIndexNode(hit);
...@@ -731,6 +732,7 @@ void * XMem::AllocStandard(int myDevID, MTYPE mySize, bool myIsRebuiltIndex) ...@@ -731,6 +732,7 @@ void * XMem::AllocStandard(int myDevID, MTYPE mySize, bool myIsRebuiltIndex)
header.blockID = bi; header.blockID = bi;
block->head = &header; block->head = &header;
block->used = 0;
result = AllocStandard(myDevID, mySize, myIsRebuiltIndex); result = AllocStandard(myDevID, mySize, myIsRebuiltIndex);
break; break;
...@@ -917,6 +919,8 @@ void XMem::ReleaseStandard(int myDevID, void * p, MTYPE size) ...@@ -917,6 +919,8 @@ void XMem::ReleaseStandard(int myDevID, void * p, MTYPE size)
RemoveAllocIndexNode(hit); RemoveAllocIndexNode(hit);
AddFreeIndexNode(hit); AddFreeIndexNode(hit);
blocks[hit->head.blockID].used -= hit->head.size;
} }
/* rebuild index to merge small fragments of memory and free the block with no use */ /* rebuild index to merge small fragments of memory and free the block with no use */
...@@ -934,6 +938,7 @@ void XMem::RebuildIndex() ...@@ -934,6 +938,7 @@ void XMem::RebuildIndex()
CheckNTErrors(head->size <= block->size, "Illegal memory block!"); CheckNTErrors(head->size <= block->size, "Illegal memory block!");
block->head = NULL; block->head = NULL;
block->used = 0;
/* if the block is not used, we delete it */ /* if the block is not used, we delete it */
if(head->state == 1 && head->size == block->size){ if(head->state == 1 && head->size == block->size){
...@@ -976,7 +981,8 @@ void XMem::RebuildIndex() ...@@ -976,7 +981,8 @@ void XMem::RebuildIndex()
/* make a new index node */ /* make a new index node */
MPieceNode * newNode = memIndex2 + nodeNumUsed2++; MPieceNode * newNode = memIndex2 + nodeNumUsed2++;
newNode->p = p; newNode->p = p;
newNode->size = (char*)p + node->size - (char*)GetPitchedAddress((char*)p, MY_PITCH); newNode->size = (char*)p + head->size -
( head->state == 1 ? (char*)GetPitchedAddress((char*)p, MY_PITCH) : head->indexNode->pReal);
newNode->pre = NULL; newNode->pre = NULL;
newNode->next = NULL; newNode->next = NULL;
...@@ -1004,6 +1010,7 @@ void XMem::RebuildIndex() ...@@ -1004,6 +1010,7 @@ void XMem::RebuildIndex()
newNode->pReal = head->indexNode->pReal; newNode->pReal = head->indexNode->pReal;
MPieceNode * entry = memIndex2 + indexEntryNum + FindIndexEntry(newNode->size); MPieceNode * entry = memIndex2 + indexEntryNum + FindIndexEntry(newNode->size);
AddAllocIndexNode(newNode, entry); AddAllocIndexNode(newNode, entry);
block->used += head->size;
} }
if(newLast == NULL) if(newLast == NULL)
......
...@@ -162,6 +162,7 @@ XTensor::XTensor(const XTensor &reference) ...@@ -162,6 +162,7 @@ XTensor::XTensor(const XTensor &reference)
devID = reference.devID; devID = reference.devID;
mem = reference.mem; mem = reference.mem;
data = reference.data; data = reference.data;
signature = reference.signature;
/* what we really want to do is "reference.data = NULL;" /* what we really want to do is "reference.data = NULL;"
As "reference" is constant, we cannot reset reference.data As "reference" is constant, we cannot reset reference.data
...@@ -299,6 +300,7 @@ XTensor& XTensor::operator= (const XTensor& tensor) ...@@ -299,6 +300,7 @@ XTensor& XTensor::operator= (const XTensor& tensor)
newTensor->SetTMP(); newTensor->SetTMP();
newTensor->data = data; newTensor->data = data;
newTensor->dataHost = dataHost; newTensor->dataHost = dataHost;
newTensor->signature = tensor.signature;
XLink::Replace(this, newTensor); XLink::Replace(this, newTensor);
XLink::ClearOutgoing(this); XLink::ClearOutgoing(this);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论