C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[52844] Re:밑에 memset() 관련해서 질문했던거 상세히 적어서 다시 올립니다.
방태윤 [nabty] 1477 읽음    2008-03-22 19:30
일단 제 생각은 어차피 데이터를 메모리에서 메모리로 옮겨야하니까 걸리는 시간은 어쩔수 없을거 같으네요,.

그 루틴 전체를 asm 으로 작성하지 않는한  memset 이 제일 빠를거 같습니다.

그보다도 궁금한것은..


물론 위의 내용은 예로 드신거겠지만...

원본 데이터가 a[4800][120] 이 있다면 <-세로가 4800 이니까 이 표현이 맞겠죠? a[120][4800] 이 아니라,,

뻥티기 한 데이터가 b[4800][120*100] 이라면요...

어차피 b의 데이터를 b[y][x] 로 참조 하시려는거 아닌가요,,?

그럼 a[y][x/100] 으로 가져 와도 같은 값인데....굳이 뻥티기 하는 이유가 뭔지 궁금하네요,,,?

그냥 적어 봤습니다..수고하세요,,.






이용태 님이 쓰신 글 :
: 밑에 글에서 제가 설명을 자세히 하지 못한거 같아서 다시 글 올립니다.
:
: 자세히 설명을 하면요... 일단
:
: 원본 데이터는 다음과 같습니다.
:
: 데이터 셋트가 120개 있습니다. 한 셋트는 다시 데이터 4800개로 이루어집니다.
:
: 그러므로 총 데이터 포인트 수는 120개셋트 = 120*4800개입니다.
:
: a[120] [4800] <-- 원본 데이터
:
: 가로 120개..
: 세로 4800개로 다음과 같이 메모리 구조가 되어 있겠죠..(배열에 들어가 있는 값은 랜덤값으로 가정했습니다...)
:                                                                                  --->가로 120
: ___________________                            ___________________
: 0|2|8|9|1|3|4|5|0|1  ---중간생략 ---   1|4|1|2|8|9|6
: 9|2|7|1|3|5|8|0|1|4 ----중간생략 ---  2|3|7|2|7|9|1
: |                                         |                              |
: 중간생략                            중간생략                  중간생략
: |                                          |                              |
: 0|1|5|7|2|5|6|7|9|4  ---중간생략 ---   1|5|7|2|7|8|0
: 8|2|2|2|3|3|7|1|2|4 ----중간생략 ---  1|2|3|2|1|2|4
: ___________________                            ___________________
: 세로 4800
:
:
: 여기서 120*4800개의 데이터 한개한개를 가로로 100개씩 뻥튀기를 합니다..
:
: 그러면 총 데이터 개수는 120*100*4800입니다. 데이터 형은 BYTE 입니다.
:
: b[120*100][4800] <--- 가로로 100배 뻥튀기 된 데이터
:
: 메모리 구조는 다음과 같겠죠..
:
:
: 가로 120*100개
: ___________________                            ___________________
: 0|0|0|0|0|0|0|0|0|0|2|2|2|2|2|2|2|2|2|2  ---중간생략 ---   9|9|9|9|9|9|9|9|9|6|6|6|6|6|6|6|6|6|6|
: 9|9|9|9|9|9|9|9|9|9|7|7|7|7|7|7|7|7|7|7 ----중간생략 ---  9|9|9|9|9|9|9|9|9|1|1|1|1|1|1|1|1|1|1|
: |                                         |                              |
: 중간생략                            중간생략                  중간생략
: |                                          |                              |
: 0|0|0|0|0|0|0|0|0|0|1|1|1|1|1|1|1|1|1|1|  ---중간생략 ---   8|8|8|8|8|8|8|8|8|8|0|0|0|0|0|0|0|0|0|0
: 8|8|8|8|8|8|8|8|8|8|2|2|2|2|2|2|2|2|2|2| ----중간생략 ---  2|2|2|2|2|2|2|2|2|2|4|4|4|4|4|4|4|4|4|4
: ___________________                            ___________________
: 세로 4800개
:
:
: 데이터 맵을 위와 같이 만들려고 하려다 보니... for()문을 돌려 원본 데이터(a[])로부터 일일히 해당 가로/인덱스에 해당하는 값을 읽어와 순차적으로 한개씩 값을 대입하는것보단 한꺼번에 범위로 값을 때려박는게 효율적이어서 memset()를 사용했던 것이죠...
:
: 이렇게 하여 데이터 맵을 만들어보니... memset()가 120*4800번 수행을 하게 되어 시간이 대략 0.23초 정도 걸리더군요..
:
: 데이터를 만든 후, 이미지 맵핑을 하고 각종 다른 부가 작업을 하니 시간이 0.32초 정도 걸립니다. 전체 작업에서 데이터 만드는 부분에서 무려 2/3의 시간을 잡아 먹게 되는거죠...
: 그래서 어떻게 해서든지 memset()보다 더 빠른 함수를 사용하던지 아니면 memset()를 적게 사용하는것이 답인거 같아서 여러가지 생각을 해봤습니다.
:
: memset()보다 빠른 함수를 찾지 못해서... memset()를 적게 사용할 수 있는 방법을 강구해봤습니다.
:
: 위의 데이터 그림에서와 같이.. 한셋트 데이터가 세로로 4800개씩.. 가로로 120개씩 늘어져 있는 모습입니다.
:
: 지금 방법은 각 데이터 포인트에 대해 memset()를 적용하여 뻥튀기를 했기 때문에 4800*120번 memset()을 사용하게 됩니다.
: 그런데 이것을 만약에 세로로 데이터 한셋트를 통채로 복사하여 가로로 복사를 하게 된다면 memset()를 120번만 수행하면 되죠...
:
: 그래서 어떻게 할 수 있을까 생각하면서 테스트를 해봤으나 도저히 방법이 떠오르지 않습니다.
:
: 배열에서 인접한 가로의 값을 긁어와 memcpy()로 복사 할 수 는 있지만.. 세로로 인접한 값은 한꺼번에 긁어오지 못하므로 memcpy()를 쓰지 못하더군요...
:
: 어떻게 하면 될까요?
:
: 0.23초는 너무 많이 걸립니다.. 0.1초 이하로 데이터 맵을 만들 수 있게끔 할려고 하는데요... 어떻게 하면 될까요??

+ -

관련 글 리스트
52841 밑에 memset() 관련해서 질문했던거 상세히 적어서 다시 올립니다. 이용태 1224 2008/03/21
52856     Re:memset() 자체가 그리 빠른 함수가 아닙니다. 김상구.패패루 5567 2008/03/24
52873         Re:조금 정정해야겠군요. 김상구.패패루 1861 2008/03/24
52854     Re:밑에 memset() 관련해서 질문했던거 상세히 적어서 다시 올립니다. 금목암 1484 2008/03/24
52853     Re:밑에 memset() 관련해서 질문했던거 상세히 적어서 다시 올립니다. 장성호 1845 2008/03/24
52844     Re:밑에 memset() 관련해서 질문했던거 상세히 적어서 다시 올립니다. 방태윤 1477 2008/03/22
52842     Re:밑에 memset() 관련해서 질문했던거 상세히 적어서 다시 올립니다. 아제나 1575 2008/03/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.