ÆÄÀ̽ã3 multiprocessing Áú¹®

   Á¶È¸ 3904   Ãßõ 0    

안녕하세요

또 질문을 올리게 되었습니다.

아래의 스크립트를 실행 시키면 32번 반복이 되는데, 너무 오래 걸려서 multiprocessing을 사용하여서 계산을 빨리 끝내고 싶습니다.



나름 찾아보면서 이래저래 시도를 해보았지만, 제 수준으로는 도저히 모르겠어서 또 질문을 올립니다.

반복문이 포함되어 있어서 더 어려운거 같습니다.ㅠ

코어는 32개 까지 사용할 수 있어서 multiprocessing을 사용한다면 단 시간 안에 계산을 끝낼 수 있을 것 같습니다.

도움 부탁드려 봅니다.





ªÀº±Û Àϼö·Ï ½ÅÁßÇÏ°Ô.
±èÁ¦¿¬ 2017-03
Àú°Ç.. ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°´Â°Å¶ó¼­ ¸ÖƼ ÇÁ·Î¼¼½ÌÀ¸·Î 󸮰¡ ¾ÈµÉ²®´Ï´Ù...
32¹ø ½ÇÇàÀÌ ¿À·¡°É¸®´Â°Ç 1°³ ³¡³ª°í 2¹ø° 3¹ø° ÀÌ·±½ÄÀ¸·Î ½ÇÇàµÇ¼­ ±×·¯½Å°Ç°¡¿ä?

±×·±°Å¶ó¸é... ÇÁ·Î±×·¥À» º´·Ä½ÇÇà ½ÃÅ°´Â ¹æ¹ýÀ» »ç¿ëÇغ¸¼¼¿ä ..
gmx ¶õ ÇÁ·Î±×·¥À» 32°³ ´ÙÁß ½ÇÇà Çϴ°ÅÁÒ ..

Áö±ÝÀº 1°³ ³¡³ª°í 2°³ 3°³ µ¹¾Æ°¡³ª¿ä?¾Æ´Ï¸é 32°³°¡ Çѹø¿¡ µ¹¾Æ°¡´ÂÁö?
     
³×ÀÌÃÄ 2017-03
multiprocessing ¾È¾²¸é, ÇÑ °³¾¿ µ¹¾Æ°©´Ï´Ù. ù ¹ø° ³¡³ª¸é µÎ ¹ø°, µÎ ¹ø° ³¡³ª¸é ¼¼ ¹ø°... ÀÌ·¸°Ô °è»êÀÌ µ½´Ï´Ù.
ÀÌ·± ¹æ¹ýÀ¸·Î ´Ù¸¥ ¸í·É¾îµµ »ç¿ëÇÒ »ý°¢Àε¥ Çѹø °è»ê¿¡ 10ºÐÀÌ °É¸®¸é 320ºÐÀ̳ª ±â´Ù·Á¾ß µÇ¼­¿ä ¤Ð
À§¿¡ temp_set¿¡ Áö±ÝÀº 32°³°¡ Àִµ¥, 100°³°¡ ³Ñ¾î°¥ ¼ö µµ Àְŵç¿ä..

multiprocessingÀÌ º´·Ä·Î °è»êµÇ°Ô ÇØÁÖ´Â°Ô ¾Æ´Ñ°¡¿ä?
±×·³ multiprocessingÀº subprocess¿Í °°ÀÌ »ç¿ëÇÒ ¼ö ¾ø´Â °Ç°¡¿ä??

Ç×»ó ½Å°æ½á Áּż­ °¨»çÇÕ´Ï´Ù.
     
³×ÀÌÃÄ 2017-03
md °è»êÀÌ ¾Æ´Ï¶ó, ºÐ¼®À» ÄÚ¾î ¼ö ¸¸Å­ µ¿½Ã¿¡ ÁøÇàÇϵµ·Ï Äڵ带 Â¥°í ½Í½À´Ï´Ù~
±èÁ¦¿¬ 2017-03
http://brownbears.tistory.com/214

Çѹø Âü°í Çغ¸¼¼¿ä .. ¾Æ·¡
import subprocess
from time import time


def run_sleep(period):
    proc = subprocess.Popen(['python','waiting30.py'])
    return proc

start = time()

procs = []
for _ in range(10):
    proc = run_sleep(0.1)
    procs.append(proc)

for proc in procs:
    proc.communicate()

end = time()

print('finished in %.3f seconds' % (end - start))

ÀÌ ¼Ò½º·Î ÇϽøé... Çѹø¿¡ 10 °³ º´·Ä ½ÇÇà ÇÒ ¼ö Àֳ׿ä
     
³×ÀÌÃÄ 2017-03
°¨»çÇÕ´Ï´Ù~ Âü°íÇØ °øºÎÇØ º¸°Ú½À´Ï´Ù~~
     
³×ÀÌÃÄ 2017-03
º¸°í µû¶ó Çغôµ¥¿ä,

temp_set = [300.00, 302.88, 305.78, 308.70, 311.65, 314.61, 317.60, 320.62, 323.65, 326.71, 329.79, 332.89,
336.02, 339.17, 342.35, 345.55, 348.77, 352.02, 355.29, 358.58, 361.90, 365.25, 368.62, 372.01, 375.44, 378.88,
382.36, 385.86, 389.39, 392.95, 396.53, 400.13, 403.30, 407.81, 410.21]

def post_processing():
    command = "gmx trjconv -s grompp.tpr -f traj_comp.xtc -o md_%02d.xtc" % temp_set.index(temp)
    gmx_trjconv_xtc = Popen(command, stdin=PIPE, shell=True, universal_newlines=True)
    gmx_trjconv_xtc.stdin.write("1\n")
    gmx_trjconv_xtc.stdin.flush()
    return gmx_trjconv_xtc

start = time()

procs = []

for _ in range(1):
    for temp in temp_set:
        gmx_trjconv_xtc = post_processing()
        procs.append(gmx_trjconv_xtc)

for gmx_trjconv_xtc in procs:
    gmx_trjconv_xtc.communicate()

end = time()

============================================================================================================
¿ì¼±, Á¦ÀÏ ¾Æ·¡¿¡
gmx_trjconv_xtc.communicate(input="1\n") À̶ó°í ³ÖÀ¸´Ï±î, ÀÛ¾÷µéÀÌ º´·Ä·Î´Â ÀÔ·ÂÀÌ µÇ´Â °Í °°Àºµ¥,
"1" °ªÀ» ù ¹ø° ÀÛ¾÷ÀÌ ³¡³ª°í µÎ ¹ø° ÀÛ¾÷¿¡ ÀԷµǰí, µÎ ¹ø° ÀÛ¾÷ÀÌ ³¡³ª¸é ¼¼ ¹ø° ÀÛ¾÷¿¡ ÀԷµǰí... °á±¹ ¼øÂ÷ÀûÀ¸·Î °è»êÀÌ µÇ´õ¶ó±¸¿ä

±×·¡¼­,
gmx_trjconv_xtc.stdin.write("1\n")
gmx_trjconv_xtc.stdin.flush()
À» À§·Î »©ÁÖ´Ï±î µ¿½Ã¿¡ °è»êÀÌ ÁøÇàÀÌ µÇ³×¿ä~

¶Ç, CPU Äھ 32°³ Àε¥ temp_set¿¡´Â ÃÑ 35°³°¡ ÀÖ½À´Ï´Ù.
±×·¡¼­ 32°³ÀÇ °è»êÀÌ ³¡³ª¸é ³ª¸ÓÁö 3°³ÀÇ °è»êÀÌ µ¹¾Æ°¥ ÁÙ ¾Ë¾Ò´Âµ¥,
35°³ ÀÛ¾÷¸ðµÎ µ¿½Ã¿¡ °è»êÀÌ µÇ³×¿ä

Á¦¿¬´Ô ´öºÐ¿¡ ÀÏ´Ü ÇØ°áÀº ÇÑ °Í °°½À´Ï´Ù ¤¾¤¾ °¨»çÇÕ´Ï´Ù.
Á» ´Ùµë°í °³¼±ÇÒ Á¡ÀÌ ÀÖ´ÂÁö °øºÎÇØ¾ß °Ú³×¿ä
          
±èÁ¦¿¬ 2017-03
¹«½¼ ¸»ÀÎÁö ¸ð¸£°ÚÁö¸¸.. ±×·¡µµ µµ¿ò µÇ¼ÌÀ¸´Ï ´ÙÇàÀÔ´Ï´Ù.. ¸ÚÁøÀÏ ÇϽô°Š°°Àºµ¥ .. ºÎ·´½À´Ï´Ù ¤¾¤¾ Àü ¼öÇÐÀÌ À뺴ÀÌ¶ó ¤»


QnA
Á¦¸ñPage 2005/5684
2014-05   4957437   Á¤ÀºÁØ1
2015-12   1493880   ¹é¸Þ°¡
2017-03   3706   À¯Æ÷¸®¾Æ
2017-03   3905   ³×ÀÌÃÄ
2017-03   3766   ÄĹÚ
2017-03   4076   ¸Ó¶óÄ«´Âµ¥
2017-03   5675   °øµ¹ÀÌ¿¡¿ä
2017-03   3601   ¹Ì¼ö¸Ç
2017-03   3216   ¼Ò½ÉÀÌ
2017-03   3888   ±è°Ç¿ì
2017-03   3310   ûÃá
2017-03   3525   ¼ÛÁÖȯ
2017-03   3685   ÇϴþƷ¡¼­
2017-03   5292   ¾ËÆÄ°í
2017-03   5031   À¯Æ÷¸®¾Æ
2017-03   7130   ½Å°è½Â
2017-03   3640   KindOfBlue
2017-03   4248   ÄĹÚ
2017-03   4310   ¾Æ½ÃŸī
2017-03   4871   LINKINPARK
2017-03   4993   ȲÁø¿ì
2017-03   5007   Realwook