아 디시 확인해보니까.. 비주얼 스튜디어 상에서만 cpu값이 낮게 찍히고 있었네,, 태스크 창 켜보니까 90% 넘게 찍힌다. 아.. 그리고 unity 아님 ㅎㅎ 어쨌든 답변 땡큐
익명(112.133)2023-07-12 00:45:00
답글
C++임? parallel 돌리는 코드의 영역이 너무 짧으면 오히려 그게 더 느릴 수도 있음
스케쥴러 뭐 쓰는지 모르겠지만 잡 큐 왔다갔다하고 반납하는 과정에서 오버헤드가 더 클 수도 있거든
쓰레드 n개에 태스크를 n개로 나눠서 주는게 오히려 나을 수도 있음. 또 메모리 캐시 히트도 고려해서 vector를 사용하고
익명(222.117)2023-07-12 00:49:00
답글
c#이고 그냥 for 문 돌리면 65ms 나오고 이닐땐 17ms 정도 나옴. 스케줄러는 따로 안쓰고, 단순하게 vector 배열에 위치값 넣어서 넘기는 방식. 멀티쓰레드 는 시도해볼게. ,,, 근데 오늘은 자야겠다.. ㅂㅂ2 고마웠다.
CPU가 아니라 GPU가 병목일거임 (정확히는 CPU가 GPU한테 그리라고 시키는 콜, CPU와 GPU간의 소통이 프레임마다 스프라이트 개수 만큼 일어나서) GPU 인스턴싱을 켜야함. 스프라이트 셰이더를 따로 짜는 방법도 있고 타일맵/텍스쳐 아틀라스로 우회해서 인스턴싱하는 방법도 있음
콜시키는 부분 확인하니까 1ms 이하 찍히고, cpu 쪽에서 위치 업데이트 하는 부분에서 대부분 시간 걸림.. 그리고 인스턴싱은 했음. 병목 심한게, parallel 해도 병렬 효율이 안좋은거 같음.
하이고야 그럼 vectorization 했음? 쓰레드는 너무 많은건 아니지?
대충 버스트 컴파일러 쓰면 네이티브 코드가 알아서 simd로 최적화된다는 것 같은데
한번 시도해보는것도 좋을듯?
https://docs.unity3d.com/Packages/com.unity.burst@1.3/manual/index.html
아 디시 확인해보니까.. 비주얼 스튜디어 상에서만 cpu값이 낮게 찍히고 있었네,, 태스크 창 켜보니까 90% 넘게 찍힌다. 아.. 그리고 unity 아님 ㅎㅎ 어쨌든 답변 땡큐
C++임? parallel 돌리는 코드의 영역이 너무 짧으면 오히려 그게 더 느릴 수도 있음 스케쥴러 뭐 쓰는지 모르겠지만 잡 큐 왔다갔다하고 반납하는 과정에서 오버헤드가 더 클 수도 있거든 쓰레드 n개에 태스크를 n개로 나눠서 주는게 오히려 나을 수도 있음. 또 메모리 캐시 히트도 고려해서 vector를 사용하고
c#이고 그냥 for 문 돌리면 65ms 나오고 이닐땐 17ms 정도 나옴. 스케줄러는 따로 안쓰고, 단순하게 vector 배열에 위치값 넣어서 넘기는 방식. 멀티쓰레드 는 시도해볼게. ,,, 근데 오늘은 자야겠다.. ㅂㅂ2 고마웠다.
이 모든걸 해도 안된다면... C#의 한계에 도달했거나 ECS 써야할듯..
탄막게임은 탄막 디자인이 메인이지 최적화따윈 필요가없는 장르인데 뭐라는거노