예제 #1
0
void ElementFile::optimizeOrdering()
{
    if (numElements < 1)
        return;

    util::ValueAndIndexList item_list(numElements);
    index_t* index = new index_t[numElements];
    ElementFile* out = new ElementFile(etype, MPIInfo);
    out->allocTable(numElements);

#pragma omp parallel for
    for (index_t e = 0; e < numElements; e++) {
        std::pair<index_t,index_t> entry(Nodes[INDEX2(0, e, numNodes)], e);
        for (int i = 1; i < numNodes; i++)
            entry.first = std::min(entry.first, Nodes[INDEX2(i, e, numNodes)]);
        item_list[e] = entry;
    }
    util::sortValueAndIndex(item_list);

#pragma omp parallel for
    for (index_t e = 0; e < numElements; e++)
        index[e] = item_list[e].second;

    out->gather(index, this);
    swapTable(out);
    delete out;
    delete[] index;
}
예제 #2
0
void CKeyMgr::ProcessingSequence()
{
	/*
	1. 테이블을 바꾼다
	2. 현재 테이블을 모두 KS_None으로 세팅
	3. KeyCheck를 통해 눌린 상태를 조사한다
	*/

	swapTable();
	memset(curr_KeyTable, KS_None, sizeof(curr_KeyTable));
	KeyCheck();
}