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);
}
'프로그래밍 > 병렬처리(TBB)' 카테고리의 다른 글
Opem MP 병렬처리 (0) | 2014.01.17 |
---|---|
[본문스크랩] parallel_for 를 이용한 병렬 프로세싱 ( Threading Building Blocks ) (0) | 2014.01.17 |