Commit 97b41e35 by xiaotong

xmem bugs

parent 1a687dab
...@@ -44,6 +44,9 @@ int main( int argc, const char ** argv ) ...@@ -44,6 +44,9 @@ int main( int argc, const char ** argv )
{ {
//_CrtSetBreakAlloc(123); //_CrtSetBreakAlloc(123);
TestXMem();
return 0;
/* a tiny test */ /* a tiny test */
//SmallTest(); //SmallTest();
......
...@@ -279,7 +279,6 @@ initialize the index ...@@ -279,7 +279,6 @@ initialize the index
*/ */
void XMem::SetIndex(INT_64 indexSize, MTYPE minSizeFirst, int minSizeNum) void XMem::SetIndex(INT_64 indexSize, MTYPE minSizeFirst, int minSizeNum)
{ {
delete freeMemIndex; delete freeMemIndex;
delete minSizeIndex; delete minSizeIndex;
......
...@@ -53,22 +53,6 @@ typedef long long INT_64; ...@@ -53,22 +53,6 @@ typedef long long INT_64;
#define MIN_BLOCK_SIZE_FOR_MEMPOOL 128 * 1024 * 1024 #define MIN_BLOCK_SIZE_FOR_MEMPOOL 128 * 1024 * 1024
#define MIN_BLOCK_NUM_FOR_MEMPOOL 1024 #define MIN_BLOCK_NUM_FOR_MEMPOOL 1024
/* memory block */
struct XMemBlock
{
/* pointer to where to start */
void * mem;
/* size of the block */
MTYPE size;
/* size of the used memory in this block */
MTYPE used;
/* disired size of the block */
MTYPE sizeDesired;
};
/* /*
mode of runnig a memory pool mode of runnig a memory pool
- UNI_FREE: free all memory space when the memory allocation is no use - UNI_FREE: free all memory space when the memory allocation is no use
...@@ -112,6 +96,25 @@ struct MPieceNode ...@@ -112,6 +96,25 @@ struct MPieceNode
/* pointer to the head of a memory piece */ /* pointer to the head of a memory piece */
void * p; void * p;
/* header of the memory piece */
MHeader * head;
};
/* memory block */
struct XMemBlock
{
/* pointer to where to start */
void * mem;
/* size of the block */
MTYPE size;
/* size of the used memory in this block */
MTYPE used;
/* desired size of the block */
MTYPE sizeDesired;
}; };
/* /*
......
...@@ -33,50 +33,65 @@ bool TestXMemCase1() ...@@ -33,50 +33,65 @@ bool TestXMemCase1()
int blcokSize = 16; int blcokSize = 16;
int testNum = caseNum * 10; int testNum = caseNum * 10;
for(int i = 0, scalar = 1; i < 3; i++){ int devIDs[2];
XMem mem; int devNum = 1;
mem.Initialize(-1, FREE_ON_THE_FLY, blcokSize * sizeof(int) * scalar * scalar, 1000, 0); devIDs[0] = -1;
mem.SetIndex(10000, blcokSize * sizeof(int) / 2);
srand(907); /*if (GDevs.nGPU > 0) {
devIDs[1] = 0;
devNum = 2;
devIDs[0] = 0;
devNum = 1;
}*/
int ** p = new int*[caseNum];
int * size = new int[caseNum];
for(int i = 0; i < caseNum; i++){ for (int id = 0; id < devNum; id++) {
p[i] = NULL; int devID = devIDs[id];
size[i] = rand() % (2*blcokSize); for (int i = 0, scalar = 1; i < 3; i++) {
} XMem mem;
mem.Initialize(devID, FREE_ON_THE_FLY, blcokSize * sizeof(int) * scalar * scalar, 1000, 0);
mem.SetIndex(10000, blcokSize * sizeof(int) / 2);
for(int i = 0; i < testNum * scalar; i++){ srand(907);
int j = rand() % caseNum;
if(p[j] == NULL){ int ** p = new int*[caseNum];
p[j] = (int*)mem.AllocStandard(mem.devID, size[j] * sizeof(int)); int * size = new int[caseNum];
for(int k = 0; k < size[j]; k++)
p[j][k] = j; for (int i = 0; i < caseNum; i++) {
} p[i] = NULL;
else{ size[i] = rand() % (2 * blcokSize);
mem.ReleaseStandard(mem.devID, p[j]);
for(int k = 0; k < size[j]; k++)
p[j][k] = -1;
p[j] = NULL;
} }
for(int k = 0; k < caseNum; k++){ for (int i = 0; i < testNum * scalar; i++) {
if(p[k] != NULL){ int j = rand() % caseNum;
for(int o = 0; o < size[k]; o++){
if(p[k][o] != k){ if (p[j] == NULL) {
ok = false; p[j] = (int*)mem.AllocStandard(mem.devID, size[j] * sizeof(int));
for (int k = 0; k < size[j]; k++)
p[j][k] = j;
}
else {
mem.ReleaseStandard(mem.devID, p[j]);
for (int k = 0; k < size[j]; k++)
p[j][k] = -1;
p[j] = NULL;
}
for (int k = 0; k < caseNum; k++) {
if (p[k] != NULL) {
for (int o = 0; o < size[k]; o++) {
if (p[k][o] != k) {
ok = false;
}
} }
} }
} }
} }
}
delete[] p; delete[] p;
delete[] size; delete[] size;
scalar *= 2; scalar *= 2;
}
} }
return ok; return ok;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论