SSE3054: Multicore Systems (Spring 2016)
[Programming Assignments]
3D sugar scape
3D sugar scape source code
algorithm ppt
16MB를 제공해드리는 대신 합동식 algorithm을 open합니다. 해당 알고리즘을 이용해서 병렬화해주세요.
과제 점수 공지 드립니다.
과제 점수 (최종)
중요!! github에 output_data에 들어가시면 적절한 test_setup과 관련 결과값이 들어있습니다.
homework.tar.gz에 있는 dir_Test의 결과파일 말고 github의 결과파일 사용하세요.
Pthread 관련 server는 이제 off하였습니다. Open-mp 관련 server가 재 open되었습니다. pthread 코드 upload하지말고 openmp code로 업로드 해주세요.
FAQ
Q. body만 작성하면 되나요?
A. 기본 코드에는 초기화 부분에서 test_setup에 따라서 sugar_map.txt, gen_people_list.txt 를 생성하고,
body loop 수행 후 end에서 종료하는 코드로 구현되어 있습니다. 따라서 초기화 부분에서 sugar_map.txt, gen_people_list.txt를 생성 후 관련 데이터를 읽어서 필요한 Data structure를 생성하시면 됩니다. 그곳에서 생성된 자료구조들을 가지고 Body에서는 pdf에 제시된 step을 수행하고, end에서는 Output format에 맞춰서 파일을 출력해 주시면 되겠습니다.
Q. test_setup.txt의 값의 범위 및 파라미터들의 범주를 어떻게 하실 예정이신가요?
A. - loop : Map, Total people 사이즈에 맞춰서 적절히 setting 할 계획입니다. - Map의 크기는 max : 500 x 500 x 500 으로 하도록 하겠습니다. - Total people의 수는 max : 25,000,000으로 하도록 하겠습니다. - Random Seed : 1~100 중 임의의 값을 넣도록 하겠습니다. - Core 수는 최대 24개까지 제공될 예정입니다.
Q. Output sorting어떤식으로 하는 건가요?
A. https://github.com/byeonghunhyeon/Multicore_project 에 있는 output_sort에 여러분의 people_list.txt를 넣으면 sorting한 output을 출력해주는데, 다음과 같이 생성되는 output의 형태에 맞도록 end()부분에 코드를 적어주시면 됩니다.
Server is open
서버 옮겼습니다. 확인 바랍니다.
115.145.179.127:8080
github에 server에서 check중인 testcase를 업데이트 해놓았습니다 확인해보세요.
Q. Create sugar 에서 bottleneck이 걸리는데 어떻게 해야 하나요?
A.
Moduler 합동식을 잘 활용하면 bottleneck을 풀 수 있는 방법이 있습니다. 하지만.. 본 합동식을 이해하고 적용하는데에 본 과제의 범위와 벗어난다고 판단이 되어서 각각의 seed에 대해서 10000개의 interval로 input file을 제공하여, 관련된 bottleneck을 해결해드리는 방향으로 진행해가도록 하겠습니다.
Q. Server는 언제 오픈되나요?
A.
Server IP : 115.145.179.126:8080 으로 접속하시면 server에서 test를 돌릴 수 있습니다. 그런데, 현재 몇몇 분들의 코드를 server에서 시험용으로 돌려봤는데, 1. 정해주신 양식을 무시하는 바람에 서버가 자꾸 꺼지는 문제가 발생합니다. 2. 큰 input의 파일에 대해서 무한 loop 혹은 저조한 성능으로 인하여 server가 제대로 동작 안하는 문제가 발생합니다. 이와 같은 이유로 server를 잠시 닫고 관련 코드를 수정할 내용입니다. 따라서 혹시나 server에 코드를 돌려 보고 싶으신분들은 개별적으로 메일에 source code를 주시면 우선적으로 성능을 테스트를 하여서 결과를 알려드리겠습니다.
Q. VM을 이용하여 pthread를 진행하는데 결과가 이상합니다.
A.
당연히 가상화를 하여서 관련 코드를 돌리면 CPU가 제대로 core 수만큼 반영이 되지않아서 성능이 제대로 나타나지 않습니다. 따라서 VM이 아니고 머신에 바로 리눅스를 설치하셔서 실험하셔야 어느정도의 병렬화된 결과를 분석 가능합니다.
Q. 코어 수가 부족한데 어떻게 성능을 확인하나요?
A.
위로 두번째의 A를 확인하시면 됩니다. 하지만 기본적으로 본인의 머신에 바로 리눅스를 설치하면thread의 수에 따라서 성능 증가를 관측 가능하며, 어느정도 code가 디버깅되어 완벽하게 도는 상태에서 보내주시면 감사하겠습니다. (저는 디버깅 용도가 아니고, 성능 확인 목적으로 이용해주시면 감사하겠습니다.)
Q. Server는 언제 다시 열리나요?
A.
11일 일차적으로 제출하는 친구들의 코드를 토대로 Server에 몇몇 기능을 추가하여서 다시 열어드리도록 하겠습니다.
코드보고 feedback 드립니다. 모든 분들이 course grain 한 lock으로 list를 관리하시는데 배우셨듯이 course grain 한 lock은 scalability 하지 않습니다. 따라서 여러개의 core로 수행해도 성능이 증가하지 않습니다. 이를 트릭으로 하여서 제가 임의의 core 수를 넣는데도 안에서 input값을 무시하고 임으로 3개 혹은 4개로만 병렬화 하시는 분들이 있는데
제가 분명히 교수님 수업하시기전에 명시해 드렸듯이 argv[1]은 병렬화 하는 개수 입니다. 이를 무시하시고, 구현하신 분들은 적절리 패널티를 부여할 예정입니다.
(자신멋대로 thread를 3개 혹은 4개로 구현하신 분들은 제가 만약에 2개로 thread를 돌렸을 경우에는 이를 어기고 3,4개의 thread를 사용한 경우로 간주됩니다. 혹은 이러한 코너 케이스를 무마하기위에서 내부에서 if문등을 쓰신 경우도 이에 해당합니다.
이미 해당 과제를 가지고 여러개의 thread를 고려하기 위해서 여러가지 병렬화에 좋은 lock을 공부하고 이를 구현하거나, 혹은 병렬화에 좋은 알고리즘, 자료구조등으로 기존의 코드를 변경하여 해강 과제를 수행하는 친구들이 존재하는데 이 과제의 목적은 이와 같습니다.
그런데 단순히 점수만을 위해서 코드상에서 트릭을 써서 별다른 병렬화의 고민없이 코드를 제출하신 분들은 그에 대한 책임을 지실 예정입니다.
이 수업은 멀티코어 수업이며, 교수님께서 수업시간에 알려주신 기법들을 잘 이용하면, 분명히 기존의 성능보다 괜찮은 병렬화를 이뤄낼수 있습니다. 열심히 해주시면 감사하겠습니다.