딱 두배만 빠르게 해주세요
----------------------------------------------------------------
객체 타입도 올림
TMemoryObject
TDATA_BLOCK_HEADER
TMemoryPoolTLS_CACHE::TUNITS
----------------------------------------------
메모리 내용
std::sort(pUnFill_Units, pUnFill_Units+nUnits);
80 07 00 07 38 07 00 07 f0 06 00 07 a8 06 00 07 60 06 00
0x0014FB23 07 18 06 00 07 d0 05 00 07 88 05 00 07 40 05 00 07 8c 00
0x0014FB36 2f 00 8f 6a 91 0f 80 08 25 00 80 00 2f 00 9f 00 00 00 a1
0x0014FB49 81 91 0f 80 08 25 00 00 e9 92 0f e0 fa 14 00 09 00 00 00
0x0014FB5C 10 fb 14 00 40 80 74 3c fe 86 69 ad 80 fb 14 00 60 87 91
0x0014FB6F 0f 80 08 25 00 09 00 00 00 80 08 25 00 80 07 00 07 94 fb
0x0014FB82 14 00 73 9a 91 0f 80 07 00 07 7c 02 00 00 40 00 dc 04 b0
0x0014FB95 fb 14 00 b5 14 37 00 80 07 00 07 b9 16 24 75 c8 17 24 75
0x0014FBA8 b0 05 26 75 46 00 00 00 00 fc 14 00 8b 18 37 00 40 00 dc
0x0014FBBB 04 00 00 00 00 01 00 00 00 05 00 00 00 00 53 40 00 00 00
0x0014FBCE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 dc 04 36
0x0014FBE1 25 5d c0 cb 00 00 00 de 10 37 00 5b b5 89 c4 04 fc 14 00
0x0014FBF4 5b b5 89 c4 8c fc 14 00 97 b2 89 c4 8c fc 14 00 bf 27 37
0x0014FC07 00 d7 b5 89 c4 04 21 60 6d 08 21 60 6d 00 e0 fd 7e 11 84
0x0014FC1A 37 00 90 88 37 00 9c 88 37 00 40 84 37 00 54 84 37 00 58
0x0014FC2D fc 14 00 00 53 40 00 01 00 00 00 01 00 00 00 00 00 00 00
0x0014FC40 40 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00
0x0014FC53 00 00 00 00 00 20 03 00 00 00 00 00 00 01 00 00 00 00 00
0x0014FC66 00 00 00 00 00 00 90 18 00 00 2c 07 00 00 ff 00 00 00 00
0x0014FC79 00 00 00 d7 b5 89 c4 c8 fc 14 00 10 78 37 00 ff ff ff ff
0x0014FC8C d8 fc 14 00 14 29 37 00 fd 69 37 00 01 00 00 00 f0 c4 3f
0x0014FC9F 00 30 d9 3f 00 83 b5 89 c4 00 00 00 00 00 00 00 00 00 e0
0x0014FCB2 fd 7e 00 fc 14 00 00 00 00 00 00 00 00 00 a4 fc 14 00 cb
0x0014FCC5 00 00 00 14 fd 14 00 7b 70 37 00 f3 e3 aa c4 00 00 00 00
0x0014FCD8 e4 fc 14 00 8a 33 24 75 00 e0 fd 7e 24 fd 14 00 42 a2 4f
0x0014FCEB 77 00 e0 fd 7e fc 59 54 67 00 00 00 00 00 00 00 00 00 e0
0x0014FCFE fd 7e 00 00 00 00 00 00 00 00 00 00 00 00 f0 fc 14 00 00
0x0014FD11 00 00 00 ff ff ff ff a5 61 53 77 b8 6b 0e 10 00 00 00 00
0x0014FD24 3c fd 14 00 15 a2 4f 77 73 6a 37 00 00 e0 fd 7e 00 00 00
0x0014FD37 00 00 00 00 00 00 00 00 00 00 00 00 00 73 6a 37 00 00 e0
0x0014FD4A fd 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0014FD5D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0014FD70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0014FD83 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0014FD96 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0014FDA9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
다시 실행해서 조사식 내용 올림
와 이거 VS 확장 기능임?
vs 프로피일링기능 alt + F2
쩐다 이거 기본적으로 제공하는 거구나 ㅗㅜㅑ
sort는 굳이 하셔야되는? - return 0;
주소순 정렬을 하는데 주소A~주소B n개는 그룹1에 반납 주소C~주소D n개는 그룹2에 .... 그룹n까지 반복 하는 식이라
TMemoryObject 는 대략 몇 바이트짜리 구조임?
여기서 말하는 그룹은 자원n개를 관리하는데 여기서 사용하는 인터페이스는 잠금으로 보호하기 때문에 한번에 하는게 빠름
객체 정보도 올리겠음 잠시만...
nUnit 자료형이 뭔가여 - return 0;
텍스트로 올리면 너무 보기 힘드니까 스샷으로 올리겠습니다
일단 두개 올림
모니터가 작아서 힘듬 ㅜㅜ
nUnits UINT32 int 입니다
TMemoryObject 는 포인터 크기 입니다
CUunCopyAble 는 데이터 0
일단 객체 디자인을 바꾸는건 좀 힘듭니다, 사이즈낭비 다 계산하고 한거라
_DEF_CACHELINE_SIZE 은 64
추가 질문 비주얼 스튜디오 프로파일링 결과 호출 트리에서 어떤 함수 점유율이 50% 일때 이걸 기준으로 삼아 볼수는 없는지?(50%->100%)
객체정보 더 필요한거 있나여
테스트 중인 저 배열 하나만 16진 hexa 값 텍스트로 덤프 떠서 올려줄래?
pUnfillUnits 는 뭐임? 그냥 무슨 컨테이너형을 정렬하는건지 갈켜주셈 - return 0;
걍 포인터만으로 구성된 링키드리스트를 정렬을 위해 배열로 옮겨놓은거임.
random access 를 지원하는 sort 를 쓰겠다는거지.
제가 멍청하게 함수가 하는 일을 설명안했네여
그림을 그려 보겠습니다
일단 지엽적 최적화도 가능할것 같으니 pUnfillUnits 의 예제 덤프를 요청합니다~
그렇구만 - return 0;
텍스트 파일 하나 만들어서 줘봥
근데 그렇게 구성된 링크드리스트 정렬이 저렇게 심한 병목이 되나? - return 0;
사실 3%가 그리 큰건 아님유
정렬하는 내용은 추측대로 링크드리스트 형태이며 오브젝트들은 보통 64B에 정렬되어 있으며, 크기또한 주소가 정렬되어 있다면 64B의 배수
딴 별거 아닌 이터레이션들 먹는 비용보셈.
대충 시간 점유율은 2배 생각하심 되겠습니당
그러니 3%를 1.5% 로 만들려면 거의 쥐어짜야됨.
성능과 관련없는 테스트 준비과정에서 50%를 먹고 있기 땜시
9.5% -> 19% 정도
덤프는 잠시만~
단순 이터레이션 대입이 0.1 먹으면, 쥐어짰을때 10배 정도 먹으니까 1% 까지는 아마 미치면 가능할듯.
어음 그냥 설명이 낫지 않으려나
올렸습니다
TMemoryPool_TLS_CACHE::TUNITS 에 설명은
TMemoryPool_TLS_CACHE 에 n개의 TUNITS가 소속되며 자원을 n개 유닛을 자원으로 관리함
응? 이게 pUnfillUnits 의 내용 덤프라고?
주소 n 개만 들어있어야 하는거 아님?
마저 올림~
디버그 메모리 정보 이야기인줄 ㅋㅋㅋ
잠시만여~ 다시 실행하고
앙 디버그 덤프야 경계를 모르니 잘라쓰기 귀찮음.
유닛 관리가 링크드 리스트이긴 한데 정렬전에는 로컬스택메모리공간에 복사해서 정렬함
응 알아 배열 설명했잖아 위에.
올렸습니다
가능한 유닛최대 수량은 TMemoryPool_TLS_CACHE::TUNITS 에서 설정합니다
잠깐 10분 자리 비우겠습니다
앙 꼴랑 9개 짜리 예제의 성능 평가네
그러면 저 점유율은 썩 쓸모있는 보고는 아니겠군.
많이 나오는걸로 함 찾아 보겠음~
mFN_Test_Ownership 구조도 알아야함
1스레드에서 64~128B 객체종류를 합쳐 800MB 할당후 해제하는 테스트 입니다
메소드 내용이요?
자원(유닛)을 관리하는 객체에 유닛의 주소가 유효한 관리대상인지 평가 합니다
유효주소 S~E 에 들어가는지 비교만 함
if문 두개 들어감
ㅇㅋ
이제 누가 나타나서 네이밍 극혐이라고 할 타이밍인데...
최적화 너무나 어려운 것...
유닛들 주소관리 형태도 필요한가요?