float data(4Byte) 4096 x 3072 데이터 복사 시간.

메모리 복사시에는 Assert가 발생됨.

 

for 구동시 약 14~15ms 소요 (일정)

Parallel_for 구동시 편차가 발생 max: 15ms,   min 6ms (편차발생)

 

 

전체 소스
#include <iostream>

#include <ppl.h>

 

void CMFCApplication1Dlg::OnBnClickedOk5()
{
int i = 0;
int nX = 4096, nY = 3072;
float** fData = NULL;

fData = (float**)malloc(sizeof(float*) * nX);
for (i = 0; i < nX; i++)
{
fData[i] = (float*)malloc(sizeof(float) * nY);
memset(fData[i], 0x0, sizeof(float) * nY);
}

fData[0][1000] = 500.4f;
fData[1000][1000] = 1000.4f;
fData[1999][1000] = 2000.4f;

SetScanData(fData, nX, nY);
}

 

void CMFCApplication1Dlg::SetScanData(float** afData, int anX, int anY)
{
std::string sz = typeid(afData).name();

int i = 0;
if (afData == NULL)
{
assert(0);
return;
}

m_fData = (float**)malloc(sizeof(float*) * anX);
for (i = 0; i < anX; i++)
{
m_fData[i] = (float*)malloc(sizeof(float) * anY);
memset(m_fData[i], 0x0, sizeof(float) * anY);
}

#if 1

DebugString(L"parallel_for copy .. start");
concurrency::parallel_for(0, anX, [&](int nX)
{
for (int nY = 0; nY < anY; nY++)
{
m_fData[nX][nY] = afData[nX][nY];
}
});
DebugString(L"parallel_for copy .. stop");

 

DebugString(L"for loop copy .. start");
for (int nX = 0; nX < anX; nX++)
{
for (int nY = 0; nY < anY; nY++)
{
m_fData[nX][nY] = afData[nX][nY];
}
}
DebugString(L"for loop copy .. end");

#else

memcpy(m_fData, afData, (sizeof(float) * anX) * anY);

#endif

for (i = 0; i < anX; i++)
{
free(m_fData[i]);
}

free(m_fData);
}

+ Recent posts