fork 에서 실행할 계산 쪼개는 법좀 알려주세요
익명(219.254)
2016-10-21 17:15
추천 0
| ㅇㅇ | 보통 fork()한 후 리턴값 검사해서 부모면 뭐하고 자식이면 뭐해라 하는 식으로 짬58.151.*.* | 2016.10.21 16:56:11 | ![삭제버튼]() |
|
|
| ㅇㅇ | ㄴfork 를 몇번할건지 입력받아서 2받으면 두개로 쪼개고 4받으면 4개로 쪼개서 하라는데 일일히 직접 쪼개야함???219.254.*.* | 2016.10.21 16:57:13 | ![삭제버튼]() |
|
|
노이ㄴ![g_fix.gif]() | 자식 프로세스를 복수로 만들거면 for문 돌릴때 조건문에 자기가 부모 프로세스인지 아닌지 확인하는걸 넣으면 될듯 | 2016.10.21 17:03:47 | ![삭제버튼]() |
|
|
| ㅇㅇ | C 해본지 오래라 헷갈리지만 내가 했던 방식. 먼저 쪼갠다 -> 자식이면 냅두고 부모면 더 쪼개개 한다. 그리고 이 과정을 반복문으로. |
라고 해주셨는데
맨 밑에 먼저 쪼갠다 -> 자식이면 냅두고 부모면 더 쪼개개 한다. 그리고 이 과정을 반복문으로.
이걸 어떻게 해야할지 모르겠어요
기본 예제들이 다 그렇게 되어 있어. 책이든 인터넷이든...
같은 작업을 굳이 fork로 나눠서 할 필요가 있나? 리소스도 많이 먹는데 프로세스로 돌려야하는 이유가 있음? 그냥 쓰레드로 돌려
ㄴ 멀티 프로세싱 배우는 중인거지 뭐.
fork 예제를 계속 찾아봐도 저런건 못찾아가지고 ㅠㅠ
으잉? 그럴리가 ㅋㅋㅋ
fork 로 하는거 찾아보면 그냥 자식프로세스 따로 부모 따로 하는거밖에 못찾았어요
구글에서 fork 딱 치면 pid = fork(); 하고 pid 가 0이 아니면 부모, 0이면 자식으로 나눠서
처리하는 코드 젤 위에 나오는데?
아~ 그거 말하시는거구나 그런데 저는 그게 아니고 부모프로세서 속에서 어떻게 쪼개는 반복문을 만드는지를 모르겠다는 뜻이였어요
그때 0이 아닌 if 문 안에서 for 를 n - 1 번 더해주면 될거 아냐.
즉, if 문 까지를 for 로 싸야 하는거지.
아 위에 for 는 fork
http://stackoverflow.com/questions/9148670/how-to-fork-n-child-processes-correctly-in-c
대충 multiple fork c 뭐 이런 식으로만 쳐도 잔뜩 나오는구만
n-1 번 조건반복하는 for 루프 안에서 pid 가 0이 아닌경우 fork 를 해주면됨
아 걍 fork 만 n 번 해도 되겠구나. 너무 윗글 대로 설명했네.
fork를 n번 해서 나눠주는거를 더 생각해봐야할거같아요
여러개 만드는거는 아는데 제가 돌리려는 계산식을 각각 나눠주는걸 잘 모르겠어요
같은 식을 그대로 주면 똑같은 결과만 여러번 나오지 않을까 해서요
글 되게 못쓰네. 그러니까 본문의 질문은 해결되었다는걸테고, 계산을 분할하는건 무슨 계산을 하느냐에 달린거지.
만약 니가 N 개의 덧셈 누적을 M 개의 프로세스로 하고 싶다면, N / M 개 씩을 각각 나놔서 sum0 .... sumM-1 까지 각각 M 개의 부분 합을 구하고 M 개에 대해 통합 덧셈은 하나의 부모프로세스에서 수행하게 하면 되지.
나눠서.
3*3 행렬이랑 3*1 벡터를 곱한다고 할때 p를 입력받고, 이 계산을 p만큼의 프로세서로 진행하는게 과제에요
3*3 3*1도 고정은 아니고 n*m m*1 이렇게 입력을 받는거
그러니까 일일히 나눠줘야 한다는 말씀이죠??
행렬곱은 각각의 항 연산에 대해 저장공간이 독립적이니, 각각의 pid 들, 그러니까 자식프로세스가 어느 항을 담당할지를 결정하면 되는것.
그러면 2개면 하나는 2n 하나는 2n+1 이렇게 주고 3개면 3n 3n+1 3n+2 이렇게 하면 되겠네요
3개를 한다치면 한놈은 제일 위에꺼 한놈은 중간꺼 한놈은 젤 아래꺼를 계산하게 하면 되는식이잖아. 지가 뭘 해야하는지만 알게 해주면 되지. 즉, 2차 행렬의 각 행에 대한 주소 하나와, 공통 행렬하나, 결과물을 저장할 포인터 를 인자로 다루게 된다는 뜻.
포인터를 다루기 싫으면 행의 index 를 다루면 되고.
일일히->일일이 (틈틈이 간간이 누누이 곰곰이 일일이 번번이 깨끗이 깊숙이 등등..) [리듬 맞춤법 봇♬]
ㅇㅇ//일일히->일일이 (틈틈이 간간이 누누이 곰곰이 일일이 번번이 깨끗이 깊숙이 등등..) [리듬 맞춤법 봇♬]
http://www.tek-tips.com/viewthread.cfm?qid=1661784
이런 코드로 결과를 merge 하는걸 참고하면 됨
shared memory 안쓰면 좀 귀찮은데, 좀 더 좋은 예제는 알아서 찾아보시우~