안녕하세요
또 질문을 올리게 되었습니다.
아래의 스크립트를 실행 시키면 32번 반복이 되는데, 너무 오래 걸려서 multiprocessing을 사용하여서 계산을 빨리 끝내고 싶습니다.
나름 찾아보면서 이래저래 시도를 해보았지만, 제 수준으로는 도저히 모르겠어서 또 질문을 올립니다.
반복문이 포함되어 있어서 더 어려운거 같습니다.ㅠ
코어는 32개 까지 사용할 수 있어서 multiprocessing을 사용한다면 단 시간 안에 계산을 끝낼 수 있을 것 같습니다.
도움 부탁드려 봅니다.
32¹ø ½ÇÇàÀÌ ¿À·¡°É¸®´Â°Ç 1°³ ³¡³ª°í 2¹ø° 3¹ø° ÀÌ·±½ÄÀ¸·Î ½ÇÇàµÇ¼ ±×·¯½Å°Ç°¡¿ä?
±×·±°Å¶ó¸é... ÇÁ·Î±×·¥À» º´·Ä½ÇÇà ½ÃÅ°´Â ¹æ¹ýÀ» »ç¿ëÇغ¸¼¼¿ä ..
gmx ¶õ ÇÁ·Î±×·¥À» 32°³ ´ÙÁß ½ÇÇà Çϴ°ÅÁÒ ..
Áö±ÝÀº 1°³ ³¡³ª°í 2°³ 3°³ µ¹¾Æ°¡³ª¿ä?¾Æ´Ï¸é 32°³°¡ Çѹø¿¡ µ¹¾Æ°¡´ÂÁö?
ÀÌ·± ¹æ¹ýÀ¸·Î ´Ù¸¥ ¸í·É¾îµµ »ç¿ëÇÒ »ý°¢Àε¥ Çѹø °è»ê¿¡ 10ºÐÀÌ °É¸®¸é 320ºÐÀ̳ª ±â´Ù·Á¾ß µÇ¼¿ä ¤Ð
À§¿¡ temp_set¿¡ Áö±ÝÀº 32°³°¡ Àִµ¥, 100°³°¡ ³Ñ¾î°¥ ¼ö µµ Àְŵç¿ä..
multiprocessingÀÌ º´·Ä·Î °è»êµÇ°Ô ÇØÁÖ´Â°Ô ¾Æ´Ñ°¡¿ä?
±×·³ multiprocessingÀº subprocess¿Í °°ÀÌ »ç¿ëÇÒ ¼ö ¾ø´Â °Ç°¡¿ä??
Ç×»ó ½Å°æ½á Áּż °¨»çÇÕ´Ï´Ù.
Âü°í¿ëÀÔ´Ï´Ù.
Çѹø Âü°í Çغ¸¼¼¿ä .. ¾Æ·¡
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 °³ º´·Ä ½ÇÇà ÇÒ ¼ö Àֳ׿ä
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°³ ÀÛ¾÷¸ðµÎ µ¿½Ã¿¡ °è»êÀÌ µÇ³×¿ä
Á¦¿¬´Ô ´öºÐ¿¡ ÀÏ´Ü ÇØ°áÀº ÇÑ °Í °°½À´Ï´Ù ¤¾¤¾ °¨»çÇÕ´Ï´Ù.
Á» ´Ùµë°í °³¼±ÇÒ Á¡ÀÌ ÀÖ´ÂÁö °øºÎÇØ¾ß °Ú³×¿ä