4차원배열이 있습니다. 원본 데이터를 로딩하는 배열이구요, 동적배열로 선언했습니다.
이 배열은.....임의의 대분류, 중분류, 소분류, 소분류에 속한 다수의 자료..라고 하면 될까요? 이런 구분입니다.
소분류의 자료들을 비교, 가장 큰 데이터를 따로 생성한 2차원 동적배열에 저장합니다.
2차원 배열은 중분류, 소분류로 되어있습니다. 2차원배열은 이미지맵핑을 위한 데이터인데, 대분류는 처음에 사용자가
선택하는 부분이라서 대분류를 고려할 필요가 없습니다. 소분류에는 가장 큰 데이터 1개만 저장되니까 중분류, 소분류
이렇게 2차원 배열만 필요하죠.
질문은 여기서부터인데, 원본 데이터가 상당히 큽니다. 이를 로딩하는건 처음만 하면 되니까 상관없는데, 2차원 배열의 경우
시간이 너무 오래 걸립니다. 아래 코드도 적어두겠지만 소분류가 몇 천개, 소분류에 속한 자료도 몇 천개...중분류는 몇 십 개
이렇습니다. (데이터 크기로 치면 몇백 메가바이트 정도)
이 속도를 빠르게 할 수 있는 방법이 없을까요? 전 아직 초짜중에 초짜라 쓰레드에 대한 지식이 없습니다.
쓰레드는 멀티테스킹이 가능하게 하는 것 같은데, 2차원 배열의 연산을 쓰레드로 절반씩 나눠서 처리한다면 속도가 더 빠를까요?
여기서 찾아보고 간단한 쓰레드 클래스를 올려두신걸로 4부분으로 나눠서 처리해봤는데 속도가 조금 오르긴 했습니다만
그 정도로는 턱도 없는 수준이라서....
조언 부탁드립니다. 아래는 소스입니다.
for(int i=0; i<INFO.COM_Var->indexPts; i++)
{
for(int j=0; j<INFO.COM_Var->scanPts; j++)
{
peakAbsVal[i][j] = 0;
for(int k=Gate1->Value; k<Gate2->Value; k++)
{
if(abs(PNS_DB[CH_Combo->ItemIndex][i][j][k]) > (32768/2))
{
if(abs(PNS_DB[CH_Combo->ItemIndex][i][j][k]) > peakAbsVal[i][j])
peakAbsVal[i][j] = PNS_DB[CH_Combo->ItemIndex][i][j][k];
}
}
}
}
-> CH_Combo->ItemIndex : 사용자가 콤보박스로 선택한 대분류 값
-> i : 중분류, j : 소분류, k : 소분류의 데이터
이 원본데이터에서 대분류는 1개 중분류는 30개, 소분류는 1500개, 자료는 2천개 정도씩입니다.
원본데이터배열 = short[1][30][1500][2000]
최대값배열 = short[30][1500]
이런거죠. 이 부분에 대해서 어떻게 검색하고 찾아봐야할지 막막해서...찾아보다 질문올려봅니다.