그러니까 CUDA나 openCL 프로그램에서 cpu 멀티코어의 역할이 의심스러워서요.
gpgpu 프로그램에서 cpu는 싱글 쓰레드 gpu는 멀티 쓰레드를 담당하는 것으로
알고 있는데요.
프로그램중 절대 시리얼 그러니까 순차 프로세스 그러니까 병렬화가 불가능한
부분은 cpu가 처리합니다. 멀티코어 cpu를 가진다고 해도 사용할 수 없습니다.
그냥 단일 코어가 처리합니다.
그리고 병열화가 가능한 부분은 몇백개에서 1000개에 육박하는 gpu 코어가
처리합니다.
그러니까 gpgpu 프로그램에서 멀티 코어 cpu는 단일 코어만 사용한다.
그러니까 멀티 코어 cpu는 의미 없다는 것이지요.
이것이 제가 알고 있는 gpgpu 프로그램이 작동하는 방식입니다.
CUDA나 openCL 모두 빠르게 발전하기 때문에 멀티 코어 cpu를 사용할 수
있는 명령어가 추가되었는지는 알지 못합니다.
사실 멀티 코어 cpu를 사용하는 것은 예전 MPI같은 것이 있었습니다.
이거 cpu 병렬 처리 기술입니다.
근데 일단 병렬 처리가 가능하다면 gpgpu도 가능하고
몇 않되는 cpu의 코어들을 사용하는 것보다 위어서 언급한
천개 가까운 gpu 코어를 사용하는 것이 훨씬 효과적입니다.
그러니까 gpgpu 프로그램을 위한 최선의 cpu/gpu 조합은
단일 코어 cpu + 가능한한 많은 gpu라는 것입니다.
혹시 잘못 알고 있는 부분이 있으면 지적해 주세요.
GPU ½Ã½ºÅÛ¿¡¼ CPU°¡ ±×¸® ³ôÀ» ÇÊ¿ä°¡ ¾øÁö¿ä..
CUDA¶ó¸é Ä¿³ÎÀ» ¿Ã¸®°í µ¥ÀÌÅÍ º¹»ç°¡ µÈ ÀÌÈĺÎÅÍ´Â CPU°¡ ÇÒ ÀÏÀÌ º°·Î ¾ø½À´Ï´Ù.
Ä«ÇÇ¿£ÁøÀÌ µÎ °³ ÀÌ»óÀÎ Quadro³ª Tesla±ÞÀÌ¸é¼ µ¥ÀÌÅÍ ¼Û¼ö½ÅÀÌ ÀæÀº °æ¿ì ¾ç¹æÇâ Åë½Å(¸ÖƼ¾²·¹µå)À» Á¦¾îÇؾßÇÏ´Â ¾÷¹«°¡ Ãß°¡µÇ±â´Â ÇÕ´Ï´Ù¸¸
¹æ¹ý·ÐÀûÀ¸·Î º¸¸é Ä¿³ÎÀÌ ½ÇÇàµÈ ÀÌÈÄ CPU´Â ¿¬»ê°úÁ¤¿¡¼ Àǹ̰¡ ¾ø½À´Ï´Ù.
Ä¿³ÎÀ» ½ÇÇàÆÄÀÏ°ú ÇÔ²² ÄÄÆÄÀÏ ÇÏÁö ¾Ê´Â °æ¿ì (ƯÈ÷ Shader±â¹Ý, OpenGL Compute Shader¿Í °°ÀÌ)
½ÇÇට Ä¿³Î/¼ÎÀÌ´õ¸¦ ÄÄÆÄÀÏÀ» ÇØÁà¾ß Çϱ⠶§¹®¿¡ CPUÀÇ ¼º´ÉÀÌ ÇÁ·Î±×·¥ ÃÖÃÊ ½ÇÇà¼Óµµ¿¡ ¿µÇâÀ» ÁÝ´Ï´Ù.
´Ù¸¸ ÀÌ °æ¿ì´Â ¿©·¯°³ÀÇ ÄÄÆÄÀÏÀ» µ¿½Ã¿¡ ½ÇÇàÇÏ°Ô ÀÛ¼ºÇÏÁö ¾Ê´Â °æ¿ì (´ëºÎºÐÀÇ °æ¿ì) ´ÙÁßÀÛ¾÷°ú »ó°üÀÌ ¾ø½À´Ï´Ù.
OpenCLÀº ¸ÖƼÄÚ¾îCPUÀÇ Àǹ̰¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù.
OpenCLÀÇ ÀÔÀå¿¡¼ GPU¿Í CPU´Â ¸ðµÎ °³º° CU·Î Ãë±Þ °¡´ÉÇϱ⠶§¹®¿¡ ÀÌ·ÐÀûÀ¸·Î´Â CPU¿Í GPU¸¦ µ¿½Ã¿¡ È°¿ëÇÑ ¸ÖƼÀÛ¾÷À» ÇÒ ¼ö ÀÖ½À´Ï´Ù.
À̷и¸ µûÁö¸é CPU, GPU, ºÎ°¡ÀûÀΠó¸®ÀåÄ¡(XeonPiµî..)À» °³º° CU·Î ¹¾î µ¥ÀÌÅÍó¸® Ŭ¶óÀ̾ðÆ®·Î ¸¸µé°í
±× Ŭ¶óÀ̾ðÆ®¸¦ Ŭ¶ó¿ìµå·Î ¹¾î »óÀ§ È£½ºÆ® ÀÔÀå¿¡¼ °³º° CU·Î Ãë±Þµµ °¡´ÉÇÕ´Ï´Ù.
´Ù¸¸, °¢ Çϵå¿þ¾î º¥´õ°¡ OpenCL¿ë µå¶óÀ̹ö¸¦ °¢±â ¸¸µé°í ÀÖ´Â »óȲÀÌ°í, ÃÖÀûÈ ¹®Á¦µµ Àֱ⠶§¹®¿¡
½ÇÁ¦ ¼·Î ¿¬°èÇؼ »ç¿ë½Ã ¾ÈÁ¤ÀûÀÏÁö´Â È®½ÇÇÏÁö ¾Ê½À´Ï´Ù..
´Ù¸¥ ¸Ó½ÅÀº ³ë½º¿ìµå 2.8±â°¡ cpu¿¡ °°Àº ÁöÆ÷½º 980 µÎ°³·Î ½Ã½ºÅÛÀ» ²Ù¸ë´Ù°í »ý°¢Çغ¾½Ã´Ù. ½Ã½ºÅÛÀÌ ´Ü°¡´Â
»ó´çÇÑ Â÷ÀÌ°¡ ÀÖÀ» °ÍÀÔ´Ï´Ù¸¸ ¼º´ÉÀº ¾î¶³±î¿ä. ¸¸ÀÏ ¾îÂ÷ÇÇ cpuÀÇ ´ÜÀÏ Äھ °è»ê¿¡ ±â¿©ÇÑ´Ù¸é
Äõµå ÄÚ¾îÁß ³ª¸ÓÁö 3°³ ÄÚ¾î´Â CUDAÀÇ °æ¿ì´Â ³ë´Â °ÍÀÌ°í openCLÀÇ °æ¿ì Ãß°¡·Î ¿¬µ¿µÇ°ÚÁö¿ä.
980 Ä«µå´Â Äھ 2048°³ÀÔ´Ï´Ù 2õ°³ ¾²·¹µå°¡ µ¿½Ã¿¡ °¡µ¿ °¡´ÉÇÏ´Ù´Â °ÍÀÔ´Ï´Ù. µÎ°³¸¦ ¼³Ä¡Çϸé
4õ°³ ÄÚ¾îÀÔ´Ï´Ù. 3°³ÀÇ Ãß°¡ Äھ Àǹ̰¡ ÀÖÀ»±î¿ä?
ÇÏÁö¸¸ °á°ú´Â »óȲ¿¡ µû¶ó ´Ù¸¨´Ï´Ù.
¼³°è ¸ñÇ¥ÀÇ Æ¯Â¡À¸·Î ÀÎÇØ, GPUÀÇ »ó´ëÀûÀÎ ¾àÁ¡Àº LatencyÀÌ°í CPUÀÇ »ó´ëÀûÀÎ ¾àÁ¡Àº ThroughputÀÔ´Ï´Ù.
CPU´Â ó¸®ÇÒ µ¥ÀÌÅÍ°¡ °°Àº ¿¬»êÀÌ ¹Ýº¹µÇ´Â ´ë·®ÀÇ ÀÛ¾÷À» ÇÊ¿ä·Î ÇÏ´Â °æ¿ì ó¸®ÇÒ ÁÖü (ALU) ¼ö¿¡ Á÷Á¢ ¿µÇâÀ» ¹ÞÀ» ¼ö ¹Û¿¡ ¾ø½À´Ï´Ù.
GPU´Â ºÐ±â¹® ¹«½Ã ¹æħ, VRAMÀÇ ´ë¿ªÆø, Á¦ÇÑµÈ Ä³½Ã, ½ºÄÉÁì·¯ÀÇ ¼º´ÉµîÀÇ ¾àÁ¡À» °¡Áö°í ÀÖ°í, GPU ¼¼´ë¿¡ µû¶ó¼ µ¥ÀÌÅÍ Å¸ÀÔ(char,int,float..)ÀÇ ¿µÇâµµ ÀÖ½À´Ï´Ù. °á°úÀûÀ¸·Î ¾Æ¹«¸® ¼öõÀÇ Äھ µ¿¿øÇصµ ½ÇÁ¦ ÀÛµ¿Àº ¸î°³¸¸ ÇÏ´Â »óȲµµ °¡´ÉÇÕ´Ï´Ù.
GPGPU ½Ã½ºÅÛÀº À§ÀÇ ¼·Î°£ »ó´ëÀûÀÎ ¾àÁ¡À» Àß º¸¿ÏÇØ ÁÙ ¶§ ÃÖ»óÀÇ ¼º´ÉÀ» °¡Áú ¼ö ÀÖ½À´Ï´Ù.
DAQ, ³×Æ®¿öÅ©µîÀ¸·Î ¼öÁýµÇ´Â µ¥ÀÌÅ͸¦ Àß Á¤¸®ÇÏ°í GPU°¡ ó¸®Çϱ⠽¬¿î ÇüÅ·Π³Ñ°ÜÁÖ°í, ó¸®µÈ µ¥ÀÌÅÍÀÇ ¿¹¿ÜÀûÀÎ ÈÄ󸮴 CPUÀÇ ¸òÀÌ°í,
µ¥ÀÌÅͺ´·Ä, ÇÁ·Î±×·¥º´·ÄÀÇ Á¶°ÇÀÌ Àß °®ÃçÁø »óÅ¿¡¼ ¹Ýº¹ÀÛ¾÷À» ÃÖ´ëÇÑ È¿À²ÀûÀ¸·Î ½ÇÇàÇϴ°ÍÀÌ GPUÀÇ ¸ñÀûÀÔ´Ï´Ù.
´Ù½Ã¸»ÇØ, ½Ã½ºÅÛ Àüü°¡ °°Àº ÇÁ·Î±×·¥À» ¹Ýº¹Çؼ ¼öÇàÇÏ´Â °æ¿ì¶ó¸é cpuÄÚ¾î´Â Å« Àǹ̰¡ ¾ø½À´Ï´Ù. (gpu 1Äھ cpu 1ÄÚ¾î¿Í µ¿±ÞÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» °¨¾ÈÇصµ)
ÀÌ°ÍÀº gpu·Î ¸¸µç Ŭ¶ó¿ìµå½Ã½ºÅÛ, µ¥ÀÌÅͼ¾Å͵îÀÇ °æ¿ì cpuÀÇ ¼º´ÉÀÌ ¶Ù¾î³ªÁö ¾ÊÀº ÀÌÀ¯°¡ µË´Ï´Ù.
ÇÏÁö¸¸ ½Ã½ºÅÛÀÇ ±¸¼º ¸ñÀû¿¡ µû¶ó¼ gpu¿ÜÀûÀÎ °ÍÀ» ó¸®Çϱâ À§ÇØ ¸¹Àº cpuÄھ µµ¿òÀÌ µÇ´Â °æ¿ì´Â ÀÖ½À´Ï´Ù.
¿¹¸¦ µé¾î tegra tk1[4core arm + 196 cuda core]À¸·Î ÀÚµ¿ÁÖÇàÂ÷·®À» Á¦¾î½Ã armÀº ³×Æ®¿öÅ©, Ä«¸Þ¶óµî ¿ÜºÎÀåÄ¡ ¹× os¸¦ °üÀå, cuda´Â ¿µ»ó󸮸¦ °üÀåÇϴµîÀÇ °æ¿ìÀÔ´Ï´Ù.
gpuÀÇ ÄÚ¾î´Â È¥ÀÚ ÀÛµ¿°¡´ÉÇÏÁö ¾Ê´Ù´Â°ÍÀ» Âü°í·Î º´·Äó¸®ÀÇ °³³äÀ» È®ÀÎÇØ º¸½Ã´Â°ÍÀ» Ãßõµå¸³´Ï´Ù.
¾î¶² µ¥ÀÌÅ͸¦ ¾î¶»°Ô ¾µ±î -> gpu°¡ ÀûÇÕÇÑ°¡ ¸¦ ¸¸Á·ÇØ¾ß Àǹ̰¡ ÀÖ½À´Ï´Ù. ´Ù½Ã ¸»ÇØ, gpu´Â µµ±¸ÀÏ »ÓÀ̶ó´Â°ÍÀÔ´Ï´Ù.
ÀÚµ¿ÁÖÇà Â÷·®ÀÇ °æ¿ìµµ ¸ÖƼÄھ ¾î¶»°Ô ¾²´À³Ä¿¡ µû¶ó ¼º´ÉÀÌ ´Þ¶óÁöÁö Äھ ´Ã¾î³´Ù°í ¼º´ÉÀÌ ºñ·ÊÇÏÁö ¾Ê½À´Ï´Ù.
¸»¾¸µå¸°´ë·Î GPU´Â Àû¾îµµ Çö½ÃÁ¡¿¡¼ º¸¿ÏÀçÀÌÁö ´ëüÀç°¡ ¾Æ´Õ´Ï´Ù.
´Ù½Ã¸»ÇØ ±×°ÍÀ» ¾µ ¼ö ÀÖµµ·Ï ±¸¼ºµÇ°í »ç¿ëµÇ´Â ½Ã½ºÅÛÀÌ ¾Æ´ÑÀÌ»ó Àǹ̰¡ ¾ø½À´Ï´Ù.
1. Àú»ç¾ç CPU + GPU, ±×¸®°í ±× Ŭ¶ó¿ìµå ¼ºñ½º´Â ¾Æ¸¶Á¸ EC2ÀÇ GPU ÀνºÅϽº¸¦ Âü°í·Î ÇÏ½Ã¸é µÉ µí ÇÕ´Ï´Ù.
2. NASÀÇ °æ¿ì°¡ Á¦°¡ ´äº¯ ÀÌÀü »çÁ·À» ´Þ°ÔµÈ ÀÌÀ¯¿Í ºñ½ÁÇÕ´Ï´Ù. ±×·²¼öµµ ¾Æ´Ò¼öµµ ÀÖ½À´Ï´Ù.
3. ÀÚµ¿ÁÖÇàÂ÷¶û ÄõµåÄÚ¾î : MCU (GPIO Á¦¾î °¡´ÉÇÑ)ÀÇ ¸ñÀûÀÌ ¿ÜºÎÀåÄ¡ Á¦¾îÀÌ°í, ÄõµåÄÚ¾î´Â Tegra K1ÀÇ ±¸¼ºÀÌ ÄõµåÀ̱⠶§¹®ÀÔ´Ï´Ù.
4. ¸ÖƼÄÚ¾î È°¿ëÀ» À§ÇÑ Æ¯º°ÇÑ ¼ÒÇÁÆ®¿þ¾î.. : À̰͵µ 2¹øÇ×°ú ºñ½ÁÇÕ´Ï´Ù. ±¸¼º°ú ÇÁ·Î±×·¥À» ¾î¶»°Ô ¸¸µå´À³Ä¿¡ µû¶ó ´Ù¸¨´Ï´Ù. ¸ÖƼÄھ »ç¿ëÇÒ ÇÊ¿ä°¡ ÀÖ´Ù¸é ¾²°Ô ¸¸µå´Â°Ô ´ç¿¬ÇÕ´Ï´Ù.
¹«ÀÛÁ¤ tesla k20 Çϳª ¾ò¾î¿Í¼ ²Å°í °øºÎ½ÃÀÛÇߴµ¥.. ÁÁÀºÁ¤º¸ ¾ò¾î°©´Ï´Ù!