0
간단한 할당을 반복하는 데 약 50 배의 시간이 소요됩니다. 나의 첫 번째 반응은 배열에서 내 메모리 접근을 방해하여 캐시 미스가 발생했다는 것입니다. 그러나이 경우에는 보이지 않습니다.배열을 통한 단순 루프의 경우 메모리 액세스가 매우 느림
픽셀 값 할당 및 배열 업데이트에는 강아지 나이가 필요합니다. 여러분 중 누구라도 이런 일이 일어나는 이유에 관해서는 성향이 있습니까? 당신은 항상 사실이 있는지 확인하고,
memset(columnSumsCurrentFrameA, 0, sizeof(unsigned int) * (_validImageWidth/numSubdivisions));
memset(rowSumsCurrentFrameA, 0, sizeof(unsigned int) * (_validImageHeight/numSubdivisions));
int pixelValue = 0;
int startingRow = 0;
int startingColumn = 0;
for (int i = 0; i < _validImageHeight/numSubdivisions; i++)
{
int index = (i + startingRow) * _imageWidth;
for(int j = 0; j < (_validImageWidth/numSubdivisions); j++)
{
pixelValue = imageData[index + startingColumn + j];
columnSumsCurrentFrameA[j] += pixelValue;
rowSumsCurrentFrameA[i] += pixelValue;
}
}
예상 한 시간이 예상보다 50 배 길다는 것을 어떻게 알 수 있습니까? 여기에 귀하의 목록에 타이밍 코드가 없습니다. 비트 맵을 표시하려고하면 픽셀 쓰기보다 속도가 느립니다. – hotpaw2
어때요? –
도움을 주셔서 감사합니다. 내 문제에 관해서는, 내가 문제라고 생각하는 것을 발견했다. 내 픽셀 값이 메인 시스템 메모리에있는 것처럼 보이게 만들었지 만, 그 값은 GPU 전용 메모리 섹션에 저장되어있는 것 같습니다. 그래서 GPU에서 데이터를 효과적으로 요청하고있었습니다. 높은 지연 시간 작동. 이전 메모리 공간의 모든 데이터에 대해 단일 memcpy를 수행하여 malloc'd 섹션으로이 효과를 완화했습니다. 이것은 나의 공연을 두 배로했다. 애플은 그런 문제에 관한 책이 아니기 때문에 확신 할 수는 없지만 이것이 문제라고 확신한다. – Aerospyke