20150106

1. 영어 기사 읽기
1) Avoid Back-Lit Reading before Bed, Scientific American
– When you curl up in bed, consider reading an old-fashioned printed book rather than a smartphone or tablet. (curl up – 동그랗게 말다)
– Participants reading the iPad took about 10 minutes longer to fall asleep, secreted less sleep-inducing melatonin, and shifted their internal circadian clock. (secrete – 분비하다, circadian – 생물학적 주기의)
2) End of Cancer-Genome Project Prompts Rethink of Research Strategy, Scientific American
– Yet most clinical biopsies are fixed in paraffin and stained for examination by pathologists. (biopsy – 생체검사, pathologist – 병리학자)


2. MARSS 소스 코드 분석
MARSS를 수정하지 않고 실험에만 사용할 때에는 주의깊게 보지 않았었는데, documentation의 memory hierarchy 부분이 개발할 때 코드 이해에 도움이 된다.

2.1 PTLsimConfig의 초기화
PTLsimConfig 변수는 ./ptlsim/config-parser.cpp : setup_default_config()에 의해 초기화되는데, 이는 main보다 먼저 호출된다.

struct PTLsimConfig;
ConfigurationParser<PTLsimConfig> config;
void setup_defualt_config() __attribute__((constructor(65535)));                                                         

/**
 * @brief Initialize Configuration structure                                                                             
 *
 * DO NOT CALL THIS FUNCTION. This function is called before 'main'.                                                     
 */
void setup_defualt_config()                                                                                              
{   
    config.setup();                                                                                                      
    config.reset();                                                                                                      
}         

setup_default_config()는 main보다 먼저 호출되어, PTLsimConfig를 설정한다. (default)
그리고 나중에 ./vl.c : main() 함수에서 ptl_config_from_file()를 호출해 사용자가 준 값으로 설정한다.

2.2 Machine 생성 과정
프로그램 초기화 과정에서 MachineBuilder를 생성함으로써 machine 생성자를 등록한다.

MachineBuilder xeon_dual_core("xeon_dual_core", &gen_xeon_dual_core_machine);

그리고 이 생성자들은 나중에 machine을 초기화할 때 호출한다.
PTLsimConfig의 값을 확인해, machine이 무엇인지 보고 알맞은 생성자를 호출한다.
./ptlsim/sim/machine.cpp : BaseMachine::init()

bool BaseMachine::init(PTLsimConfig& config)
{
    // At the end create a memory hierarchy
    memoryHierarchyPtr = new MemoryHierarchy(*this);

    if(config.machine_config == "") {
        ptl_logfile << "[ERROR] Please provide Machine name in config using -machine\n" << flush;
        cerr << "[ERROR] Please provide Machine name in config using -machine\n" << flush;
        return 0;
    }   

    machineBuilder.setup_machine(*this, config.machine_config.buf);

    foreach(i, cores.count()) {
        cores[i]->update_memory_hierarchy_ptr();
    }   

    init_qemu_io_events();

    return 1;
}

./ptlsim/sim/machine.cpp : setup_machine()

void MachineBuilder::setup_machine(BaseMachine &machine, const char* name)
{
    machine_gen* gen = machineBuilders->get(name);
    if(!gen) {
        stringbuf err;
        err << "::ERROR::Can't find '" << name
           << "' machine generator." << endl;
        ptl_logfile << err;
        cerr << err;
        assert(gen);
    }               

    (*gen)(machine);
}

Machine 생성자가 하는 일을 알아보자.
1) Machine을 setup하는 과정에서 interconnection을 설정해준 다음,
2) 마지막으로 setup_interconnects()를 호출해 이를 연결한다.
gen_xeon_single_core_machine(BaseMachine& machine)

아, 이것 외에 추가로 알아봐야 할 것은
1) MARSS에 있는 버그 수정
2) SimPoint를 사용해 시뮬레이션 하는 방법 확인

앞으로 할 것은
1) 오늘 이해한 것을 바탕으로 MARSS 소스 코드 수정 부분 완벽히 이해
2) Simulator 실행해서 결과가 어떻게 나오는지 보기.
3) 소스 코드가 정리되면 bitbucket에 올려서 버전 관리하기

References :
[1] Memory Hierarchy, MARSSx86, http://marss86.org/~marss86/index.php/Memory_hierarchy
[2] C Language Constructors and Destructors with GCC, Phoxis, http://phoxis.org/2011/04/27/c-language-constructors-and-destructors-with-gcc/
[3] C에서 main 보다 먼저 호출되는 함수 만들기, KLDP, https://kldp.org/node/68257
[4] C에서 main보다 먼저 호출되는 함수 만들기, joinc, http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/C/Documents/Tip
[5] How exactly does __attribute__((constructor)) work?, stackoverflow, http://stackoverflow.com/questions/2053029/how-exactly-does-attribute-constructor-work


3. Computer Architecture A Quantitative Approach 읽음
Chapter 5. Thread Level Parallelism을 읽음. 우리 연구실 그리고 내 연구 분야와 가장 밀접하게 연관되어 있는 부분이라 더 흥미로웠음. 간략한 정리는 조금 더 읽은 다음에 할 것. Thread level parallelism 및 parallel computing에 대한 더 심도있는 책을 찾아봐야겠다. DRAM과 cache는 Memory Systems 책을 잘 보면 다 나와있는데, parallel computing과 관련해 좋은 책은 무엇인지?

Advertisements
Posted in 1) Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Recent Posts
누적 방문자 수
  • 152,489 hits
%d bloggers like this: