ÀÎÅÚ Æз¯·² ½ºÆ©µð¿À¸¦ ÀÌ¿ëÇÑ ÃֽŠº´·Ä ÇÁ·Î±×·¡¹Ö ±â¼úÀÇ ½ÇÀü ³ëÇϿ츦 ´ãÀº C++ °³¹ßÀÚ Çʵ¶¼
Parallel Studio, TBB, Cilk Plus, ArBB, OpenMP, PPL µî º´·Ä ÇÁ·Î±×·¡¹Ö ¶óÀ̺귯¸®¸¦ ÇÑ ±ÇÀÇ Ã¥¿¡ ¸ðµÎ Á¤¸®Çß´Ù. º´·Ä ÇÁ·Î±×·¡¹ÖÀÇ ´ëÁßÈ¿¡ ±â¿©ÇÏ°íÀÚ º´·Ä ÇÁ·Î±×·¡¹ÖÀ» ¼Õ½±°Ô ¼³¸íÇßÀ» »Ó¸¸ ¾Æ´Ï¶ó ½Ç¹«ÀÚÀÇ ³Á¦ ÇØ°áÀ» À§ÇÑ ´Ù¾çÇÑ ¿¹Á¦¸¦ ¼ö·ÏÇØ ½ÇÁúÀûÀÎ ³ëÇÏ¿ì °øÀ¯¿¡ Æ÷Ä¿½º¸¦ ¸ÂÃè´Ù. ³¯ÀÌ °¥¼ö·Ï ÇÒ ÀÏÀÌ ´Ã¾î¸¸ °¡´Â °³¹ßÀڵ鿡°Ô ÀÌ Ã¥Àº '°¡¹³ ¼Ó ´Üºñ'°¡ µÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
Part ¥°. Intel Parallel Studio È°¿ë
1. ±Þº¯ÇÏ´Â °³¹ß Æ®·»µåÀÇ Áß½É, º´·Ä ÇÁ·Î±×·¡¹Ö
¡Ü ¹«¾îÀÇ ¹ýÄ¢°ú ¸ÖƼÄÚ¾î¡Ü °³¹ßÀÚ°¡ ¹«½¼ ÁËÀÎÀ̳Ä?¡Ü ¸ÖƼÄÚ¾î ½Ã´ëÀÇ Çعý, ¡°º´·Ä ÇÁ·Î±×·¡¹Ö¡±¡Ü °¨»çÇÕ´Ï´Ù. º´·Ä ÇÁ·Î±×·¡¹Ö Åø
¡Ü ¸ÖƼÄÚ¾î CPUÀÇ ±¸Á¶¿Í ¿ø¸®¡Ü º´·Ä ÇÁ·Î±×·¡¹ÖÀ» ¹è¿ì´Â º¸´Ù ½º¸¶Æ®ÇÑ ¹æ¹ý2. Parallel Studio °³¿ä ¹× ¼³Ä¡¹ý
¡Ü Intel Parallel Studio °³¿ä¡Ü Intel Parallel Studio Á¦Ç° ¼³Ä¡¡Ü Visual Studio 2008 vs Visual Studio 2010 ÅëÇÕ È¯°æÀÇ Â÷ÀÌÁ¡¡Ü Intel Parallel Studio È°¿ë º´·ÄÈ °úÁ¤ ÇÁ·ÎÁ§Æ®3. Intel ÄÄÆÄÀÏ·¯¸¦ ÀÌ¿ëÇÑ º´·ÄÈ ¹× Æ©´×¡Ü ¾Ï´Þ(Amdahl)ÀÇ ¹ýÄ¢
¡Ü ÃøÁ¤ ½Ã°£°ú ºÎÇÏ Á¶Á¤¡Ü ½Ã½ºÅÛ ¼³Á¤ ¹× ¼º´É ÃøÁ¤¡Ü Intel ÄÄÆÄÀÏ·¯ÀÇ Æ¯Â¡
¡Ü Intel ÄÄÆÄÀÏ·¯ ½ºÀ§Ä¡ »ç¿ë¹ý¡Ü º´·ÄÈ ´ë»ó È®ÀÎ
¡Ü º´·ÄÈ ¹æ¹ý
¡Ü º£Å¸ Á¦¾î ¹æ¹ý
¡Ü ÄÚ¾î¿Í ½º·¹µåÀÇ °ü°è
¡Ü Parallel ComposerÀÇ º´·ÄÈ ±â´É
¡Ü ÀÚµ¿ º´·ÄÈ
¡Ü SIMD(single instruction, multiple data) È°¿ë¹ý4. Parallel Debugger È®Àå ±â´ÉÀ» ÀÌ¿ëÇÑ º´·Ä ÄÚµå µð¹ö±ë¡Ü ½º·¹µå °£ µ¥ÀÌÅÍ °øÀ¯ »óÅ Á¶»ç¡Ü ÇÁ·Î±×·¥ÀÇ ÀçÁøÀÔ Å½Áö¡Ü OpenMP µð¹ö±ë
¡Ü º´·Ä ¿µ¿ªÀ» ¼øÂ÷ ½ÇÇàÇϱâ¡Ü SIMD È®ÀÎ
5. ÀáÀçÀû ¹ö±× Ž»ö
¡Ü ÀáÀçÀû ¹ö±×¶õ?
¡Ü Parallel Inspector ¼Ò°³¡Ü ¸ÖƼ ½º·¹µù¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¹®Á¦¡Ü µð¹ö±ë ¿¹Á¦ (¿øÁÖÀ² ±¸Çϱâ)¡Ü ¸Þ¸ð¸® °ü·Ã ¹®Á¦
6. ¼º´É Æ©´×
¡Ü Æ©´×À̶õ?
¡Ü ÇÖ½ºÆÌÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ý¡Ü ¸ÖƼ ½º·¹µù È¿À²¼º °ËÁõ - Concurrency Level¡Ü ¸ÖƼ ½º·¹µù È¿À²¼º ÀúÇÏ °ËÁõ - Àá±Ý°ú ´ë±â
Part ¥±. TBB¸¦ ÀÌ¿ëÇÑ º´·ÄÈ1. TBB ÀÌÇØ
¡Ü TBB¶õ ¹«¾ùÀΰ¡?
¡Ü Á¶Á¤¼º (scalability)
¡Ü ŽºÅ© (task)
¡Ü ŽºÅ© ½ºÄÉÁÙ·¯ ÀÌÇØ
¡Ü TBB ±â¼ú ±¸Á¶
¡Ü ·çÇÁ º´·ÄÈÀÇ ÀÌÇØ
¡Ü ¼º´É ½ÇÇè °á°ú
2. TBB ±âº» »ç¿ë¹ý
¡Ü TBB ¼³Ä¡
¡Ü °³¹ßȯ°æ ¼³Á¤
¡Ü TBB ÃʱâÈ
¡Ü ŸÀ̹Ö
¡Ü TBBÀÇ ¾Ë·ÁÁø ¹®Á¦Á¡
3. ¾Ë°í¸®Áò »ç¿ë¹ý
¡Ü parallel_for
¡Ü parallel_reduce
¡Ü parallel_while
¡Ü parallel_sort
¡Ü Áßø º´·ÄÈ
4. µ¿½Ã ÄÁÅ×À̳Ê
¡Ü µ¿½Ã¼ºÀÌ ÀÖ´Â queue ÄÁÅ×ÀÌ³Ê¡Ü µ¿½Ã¼ºÀÌ ÀÖ´Â vector ÄÁÅ×ÀÌ³Ê¡Ü µ¿½Ã¼ºÀÌ ÀÖ´Â map ÄÁÅ×À̳Ê5. ¸Þ¸ð¸® ÇÒ´ç
¡Ü ¸Þ¸ð¸® ÇÒ´ç ÀÛ¾÷ ½Ã ¹ß»ýÇÏ´Â ¹®Á¦¡Ü ¸Þ¸ð¸® ÇÒ´çÀÚ
¡Ü new¿Í delete ´ëüÇϱâ6. ŽºÅ© ½ºÄÉÁÙ·¯ È°¿ë
¡Ü ÇǺ¸³ªÄ¡ ¼ö¿ °è»êÀ» ÅëÇÑ Å½ºÅ© ½ºÄÉÁÙ·¯ È°¿ë¹ý ÀÌÇØ¡Ü Å½ºÅ© ½ºÄÉÁÙ¸µ °³¿ä
7. TBB¸¦ ÀÌ¿ëÇÑ Vision ¿µ»ó ó¸® ¿¹Á¦¡Ü Vision ¿µ»ó ó¸® ÇÁ·Î±×·¥ ¼Ò°³¡Ü TBB Àû¿ë °á°ú
¡Ü »çÀü Áغñ ¼³Ä¡ (OpenCV 2.2 ¹× CMake 2.8)¡Ü ¿¹Á¦ ÇÁ·ÎÁ§Æ® »ý¼º ¹× °³¹ßȯ°æ ¼³Á¤¡Ü ¿µ»ó ó¸® ·ÎÁ÷ ÀÌÇØ
¡Ü ¿µ»ó ó¸® Ŭ·¡½º Ãß°¡¡Ü È¸é µðÀÚÀÎ ¹× À̺¥Æ® ó¸® ÇÔ¼ö Ãß°¡¡Ü º´·ÄÈ ÀÛ¾÷
¡Ü ÄÚµå ¿Ï¼º ¹× Å×½ºÆ®
Part ¥². ArBB¸¦ ÀÌ¿ëÇÑ º´·ÄÈ1. ¹è°æ
¡Ü º´·Ä ÇÁ·Î¼¼¼ ºÐ·ù
¡Ü º¤ÅÍ Ã³¸®
¡Ü ArBB
¡Ü º´·ÄÈ Ç¥Çö
¡Ü µ¥ÀÌÅÍ º´·ÄÈ ÇÁ·Î±×·¡¹Ö ¸ðµ¨ ºñ±³2. °³¹ß ȯ°æ
¡Ü ArBB ¼³Ä¡
¡Ü ArBB ¼³Ä¡ È®ÀÎ
¡Ü Visual Studio µð¹ö±× ȯ°æ ¼³Ä¡¡Ü ArBB ÇÁ·ÎÁ§Æ® ȯ°æ ¼³Á¤¡Ü ArBB ÇÁ·ÎÁ§Æ® µð¹ö±×¡Ü ½ÇÇà ÃÖÀûÈ ¼öÁØ
3. ½ºÄ®¶ó ŸÀÔ
¡Ü ½ºÄ®¶ó Ŭ·¡½º
¡Ü C/C++ µ¥ÀÌÅÍ º¯È¯
¡Ü Á¦¾î ±¸¹®
4. ÄÁÅ×ÀÌ³Ê Å¸ÀÔ
¡Ü ÄÁÅ×ÀÌ³Ê Å¸ÀÔ À¯Çü
¡Ü arbb::dense ÄÁÅ×ÀÌ³Ê Å¸ÀÔ¡Ü arbb::nested ÄÁÅ×ÀÌ³Ê Å¸ÀÔ¡Ü ¹Ýº¹ÀÚ
¡Ü µ¥ÀÌÅÍ Á¢±ÙÇϱâ
¡Ü ±âº» °ª ä¿ì±â
¡Ü arbb::bind ÇÔ¼ö
5. ÇÔ¼ö È£Ãâ ¸ÞÄ¿´ÏÁò
¡Ü »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö
¡Ü arbb:capture°ú arbb::call ÇÔ¼ö Â÷ÀÌÁ¡¡Ü Ŭ·ÎÀú È°¿ë
¡Ü ĸó ºÎÀÛ¿ë
¡Ü arbb::value ÇÔ¼ö »ç¿ë Á¦ÇÑ¡Ü arbb::map ÇÔ¼ö
¡Ü °¡º¯/°íÁ¤ ¸Å°³º¯¼ö
¡Ü º¤ÅÍ ÇÁ·Î¼¼½Ì°ú ½ºÄ®¶ó ÇÁ·Î¼¼½Ì ºñ±³6. ½Ã°£ ÃøÁ¤
¡Ü arbb::scoped_timer Ŭ·¡½º7. ¿¹¿Ü ó¸®
¡Ü ·±Å¸ÀÓ ¿¹¿Ü
8. ¸¸µ¨ºê·Î ÁýÇÕ ¿¹Á¦
¡Ü °³¿ä
¡Ü ·çÇÁ ÀüÀÌ ÀÇÁ¸¼º È®ÀÎ¡Ü ¼º´É Çâ»ó °á°ú
9. Çà·Ä-º¤ÅÍ °ö¼À ¿¹Á¦
¡Ü °³¿ä
¡Ü Çà·Ä-º¤ÅÍ °ö¼À ·ÎÁ÷
¡Ü ¼º´É Çâ»ó °á°ú
Part ¥³. Cilk Plus ¼Ò°³
1. Cilk Plus ÀÌÇØ
¡Ü Cilk Plus¶õ?
¡Ü ±â¼ú ±¸Á¶
¡Ü Cilk Plus¸¦ ÀÌ¿ëÇÏ¿© C++ Á÷·Ä ÇÁ·Î±×·¥À» º´·ÄÈÇÏ´Â ÀýÂ÷¡Ü ¼º´É Çâ»ó »ç·Ê ¼Ò°³
2. Cilk Plus ¼³Ä¡ ¹× »ùÇà Å×½ºÆ®¡Ü Æò°¡ÆÇ ´Ù¿î·Îµå
¡Ü »ùÇà ÇÁ·Î±×·¥ Å×½ºÆ® ¹× °³¹ß ȯ°æ ¼³Á¤3. Å°¿öµå¸¦ ÅëÇÑ Å½ºÅ© º´·ÄÈ¡Ü º´·ÄÈ ¿¹Á¦¸¦ ÅëÇÑ ±âÃÊ ÀÌÇØ¡Ü cilk_spawn
¡Ü cilk_sync
¡Ü cilk_for
¡Ü cilk_for¿Í Á÷·Ä ·çÇÁ ½ºÆ÷´× ¹æ½Ä ºñ±³¡Ü Grain Å©±â
4. ¹è¿ Ç¥±â¹ýÀ» ÅëÇÑ µ¥ÀÌÅÍ º´·ÄÈ¡Ü °³¿ä
¡Ü ¿µ¿ª ¿¬»êÀÚ
Part ¥´. OpenMP¸¦ ÀÌ¿ëÇÑ º´·ÄÈ1. OpenMP °³¿ä
2. OpenMP ±âº» »ç¿ë¹ý
¡Ü Çʼö ¿ä°Ç
¡Ü º´·Ä ¿µ¿ª°ú ½º·¹µå ¼ö
¡Ü OpenMP º´·Ä ¿µ¿ªÀÇ ¹üÀ§¡Ü µ¥ÀÌÅÍ À¯È¿¹üÀ§¿Í µ¥ÀÌÅÍ ¼Ó¼º¡Ü ÀÛ¾÷ºÐÇÒ (Work Sharing)¡Ü µ¿±âÈ
¡Ü ŽºÅ© Á¦¾î
3. OpenMP Áö½Ã¹®
¡Ü OpenMP Ç¥ÁØ Áö½Ã¹®
¡Ü ÀÎÅÚ ÄÄÆÄÀÏ·¯ È®Àå Áö½Ã¹® (OpenMP 3.0)4. OpenMP API¿Í ȯ°æ º¯¼ö¡Ü ȯ°æ º¯¼ö (Data Environment)¡Ü ·±Å¸ÀÓ API
¡Ü Àá±ÝÇÔ¼ö (Lock Functions)¡Ü ŸÀÓ·çƾ (timing Routines)¡Ü ÀÎÅÚ ÄÄÆÄÀÏ·¯°¡ Á¦°øÇÏ´Â ·±Å¸ÀÓ ÇÔ¼ö5. OpenMP È°¿ë
¡Ü for·çÇÁ ±¸¹®À» ÀÌ¿ëÇÏ´Â °ÍÀÇ ÁÖÀÇÁ¡¡Ü º´·Ä ¿µ¿ªÀÇ Áßø ó¸®¡Ü Å½ºÅ© Á¦¾î
¡Ü Sections È°¿ë
Part ¥µ. º´·Ä ÆÐÅÏ ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÑ º´·ÄÈ1. µ¿½Ã¼º ·±Å¸ÀÓ
¡Ü º´·Ä¼º
¡Ü ȯ°æ
¡Ü µ¿½Ã¼º ·±Å¸ÀÓÀÇ ±¸Á¶
¡Ü ½º·¹µå
¡Ü Ư¡
2, º´·Ä ÆÐÅÏ ¶óÀ̺귯¸®(Parallel Pattern Library)¡Ü ŽºÅ©
¡Ü ŽºÅ© ±×·ìÀ» ÀÌ¿ëÇÑ º´·Äó¸®¡Ü Å½ºÅ© º´·ÄÈ
¡Ü ·çÇÁ º´·ÄÈ
¡Ü º´·Ä ÄÁÅ×À̳Ê
¡Ü º´·Ä °´Ã¼
Part ¥¶. ºÎ·Ï
1. OpenMP µ¥ÀÌÅÍ À϶÷Ç¥2. IPP È°¿ë¹ý
¡Ü ÀÎÅÚ IPP ÇÁ·ÎÁ§Æ®¸¦ ÅëÇÕ¡Ü MSVS 2010¿¡¼ »ç¿ë
3. Quick-Reference Guide to Optimization with Intel compolers¡Ü ÀϹÝÀûÀÎ ÃÖÀûÈ ¿É¼Ç
¡Ü º´·ÄÈ ¿É¼Ç
¡Ü ÇÁ·Î¼¼¼ Àü¿ë ¿É¼Ç
¡Ü ÇÁ·Î½ÃÀú°£ ÃÖÀûÈ(IPO), ¿É¼Ç°ú ÇÁ·ÎÆÄÀÏ¿¡ ±Ù°ÅÇÑ ÃÖÀûÈ(PGO)¡Ü ºÎµ¿¼Ò¼öÁ¡ ¿¬»ê ÃÖÀûÈ¡Ü ¼¼ºÎÀûÀÎ Æ©´× (¸ðµç ÇÁ·Î¼¼¼) Æî󺸱⠴ݱâ