C++À̳ª C#¿¡¼ RAM³»ºÎÀǵ¥ÀÌÅ͸¦ ´Ù¸¥À§Ä¡·Î ¿Å±â´Â È¿À²ÀûÀÎ ¹æ¹ýÀÌ ÀÖÀ»±î¿ä?
RAM에 올라와있는 데이터중 대략 1~3GB정도의 데이터를 RAM의 다른 위치로 옮기는 작업을 하려고 합니다.
(여러번 반복해서 수행합니다)
Parallel.For문 안에서 Buffer.MemoryCopy함수를 이용해서 옮겨보니, CPU점유율도 너무 많이 사용하고, 시간도 오래걸리네요
지금 프로그램에서 다른 연산을 수행하느라 이미 점유율을 8~90%정도 사용하고있어서 리소스를 대기하느라
오래걸리는 것 같기도 합니다.
DMA같은 방식도 찾아보았는데, 이건 주변장치와 통신할때만 가능한 것으로 보이네요.
혹시 CPU점유율을 최소화 하거나, 빠른 속도로 RAM내부의 데이터를 다른 위치로 옮기는 방법을 아시는분이 있으실까요??
¾Æ¹«Æ° ´ë¿ë·® ¸Þ¸ð¸®¸¦ »çº»À» ¸¸µé¾î¼ ÇØ¾ß ÇÑ´Ù¸é.. cpu¸¦ ¼Ò¸ðÇؼ º¹»çÇϴ¼ö ¹Û¿¡ ¾øÀ» °Ì´Ï´Ù.
±×·±µ¥.. ÀÓº£µðµåµµ ¾Æ´Ï°í ¿äÁò PC¿¡¼ °íÀÛ(?) 1~3GB Á¤µµ memcpy ÇÑ´Ù°í ºÎÇÏ°¡ °É¸±¸¸Å ´À¸®Áø ¾ÊÀ»°Í °°Àºµ¥
ó¸®ÇÏ´Â ¾çÀÌ ¸¹°Å³ª º¹»çȽ¼ö°¡ ¸¹Àº°Ç ¾Æ´Ò±î¿ä?
±×·¸ ¸¹Àº º¹»ç°¡ ÇÊ¿äÇÏ´Ù´Â °ÍÀº ¿¬»êÇÏ´Â ÇÔ¼ö ÀÚü°¡ À߸ø ¼³°èµÈ°Ô ¾Æ´Ò±î ÇÕ´Ï´Ù.
zero-copy ÄÁ¼ÁÀ¸·Î µ¥ÀÌÅÍ´Â À¯ÁöÇÏ°í À妽º¸¦ ¿Å°Ü¼ µ¥ÀÌÅ͸¦ ºÁ¾ßÁö
¿øÇÏ´Â À§Ä¡·Î µ¥ÀÌÅ͸¦ ¸Å¹ø º¹»çÇÏ´Â°Ç ¿À¹öÇìµå°¡ ³Ê¹« Å®´Ï´Ù.
¾Æ¹«¸® ¼º´ÉÀÌ ÁÁÀº CPU¸¦ ½áµµ ´Ù·®ÀÇ ¸Þ¸ð¸® º¹»ç°¡ ÀϾ¸é
󸮼ӵµ°¡ ÃÖ¾ÇÀ¸·Î ¶³¾îÁý´Ï´Ù. ¼º´ÉÁÁÀº ÄÄÇ»ÅÍ·Î ¹Ù²Û´Ù°í ÇØ°áµÉ ¹®Á¦·Î º¸ÀÌÁø ¾Ê³×¿ä.
¿øº»¼Ò½ºÄڵ尡 Á¸ÀçÇÏ´Â »óȲÀ̶ó¸é, ´É·ÂÀÖ´Â °³¹ßÀÚ¿¡°Ô ÃÖÀûÈ ¼öÁ¤À» ¿äûÇغ¸¼¼¿ä.
https://github.com/st1page/SIMDdemo ÀÇ ÇÁ·Î±×·¥À» ¹Þ¾Æ¼ ÇØ ºÃ´Âµ¥... »ý°¢°ú ´Ù¸£°Ô ³ª¿Í¼ Á» ´çȤ½º·´³×¿ä. memcpyµµ AVX¸¦ ¾²´Â °ÍÀ¸·Î ¾Æ´Âµ¥...
3g X 500 °³ÀÇ ¸Þ¸ð¸® ¿ë·®À» °¡Áø°Ô ¾Æ´Ï¸é °°Àº ¸Þ¸ð¸®¸¦ °øÀ¯Çؼ ÀÛ¾÷ÇؾßÇÏ´Ï ¹®Á¦°¡ µÉ¼ö ÀÖ½À´Ï´Ù.
°øÀ¯ÇÏÁö ¾Êµµ·Ï ¿¬»ê ÀÚü¸¦ ºÐÇÒÇؼ ÇÏ´Â°Ô ¾î¶³±î¿ä?
C++À̸é new, delete ¿À¹ö¶óÀ̵åÇÏ°í °øÀ¯¸Þ¸ð¸® °ü¸®ÇÏ´Â ÄÚµå Ãß°¡ÇÏ°í °øÀ¯ÇÏ´Â ÇÁ·Î¼¼½º°£ shared memory ¿µ¿ª ¾µ¶§ ²¿ÀÌ´Â °ÍÀ» ¹æÁöÇϵµ·Ï ·ÎÁ÷ ¼öÁ¤ÇÏ¸é °¡´ÉÇÕ´Ï´Ù.
±Ùµ¥ »ç¿ëÇϽô C++ÀÌ ´å³Ý C++Àΰ¡¿ä? win32api/MFC »ç¿ëÇÏ´Â C++À̸é C ÇÔ¼ö È£ÃâÀÌ °¡´ÉÇÏ´Ï ÀÌ ¹æ¹ýÀ¸·Î ÇØ°á °¡´ÉÇÏÁö¸¸, C#À̳ª ´å³Ý C++ (¸¶¼Ò¿¡¼´Â ´å³ÝÀ¸·Î µµ´Â C++À» managed C++ÀÌ°í ºÎ¸£´õ±º¿ä)ÀÌ¸é ´ä¾ø½À´Ï´Ù. º¹»ç ¾ÈÇÏ°í ó¸®ÇÏ´Â ´Ù¸¥ ¹æ¹ý ã¾Æ¾ß ÇÒ°Ì´Ï´Ù. ƯÈ÷ ´å³ÝÀº ÀÚ¹Ùó·³ VM/¹ÙÀÌÆ®ÄÚµå¹æ½ÄÀ¸·Î µµ´Â°Å¶ó ³×ÀÌƼºê·Î ÄÄÆÄÀϵǴ C++¿¡ ºñÇØ ÆÛÆ÷¸Õ½º°¡ ´õ ¸¹ÀÌ ¶³¾îÁö°í, Àú·¸°Ô ¼ö½Ã·Î ±â°¡±Þ ´ÜÀ§ º¹»çÇϸé Ç®·Îµå °É¸±¼ö¹Û¿¡ ¾ø½À´Ï´Ù.
Ȥ½Ã ´å³Ý¿¡¼ CLR·Î C++À» È£ÃâÇؼ »ç¿ëÇصµ, ÆÛÆ÷¸Õ½º°¡ ¸¹ÀÌ ¶³¾îÁú±î¿ä??
C++·Î º¹»çÇÏ´Â Äڵ带 ¼öÁ¤ÇÑ´Ù¸é, memcpy°¡ °¡Àå ÁÁÀº ¹æ¹ýÀÏÁöµµ ±Ã±ÝÇϳ׿ä..
¾Æ¸¶ C/C++ÀÇ memcpy()°¡ ÀÌ¹Ì ±×·¸°Ô ±¸ÇöµÇ¾î ÀÖÀ»°Í °°½À´Ï´Ù.