2009年11月13日 星期五

SystemC Kernel 平行化相關紀錄

fiber 可與 pthread 共同使用,一為操作者一為工作排程
再使用上可讓特定條fiber assidn 給某pthread去執行

在win系統上要使用fiber 須先
#define _WIN32_WINNT 0x400 <==
#include
#include

#define FIBER_COUNT 5
void *fiber_context[FIBER_COUNT];
VOID WINAPI fiberProc(void*);

int main()
{
int i;
int fibers[FIBER_COUNT];

for (i = 0; i < FIBER_COUNT; i++)
fibers[i] = i;

fiber_context[0] = ConvertThreadToFiber(NULL);

for (i = 1; i < FIBER_COUNT; i++) {
fiber_context[i] = CreateFiber(0, fiberProc, &fibers[i]);
if (fiber_context[i] != NULL)
printf("Fiber %d created \n", i);
}

for (i = 1; i < FIBER_COUNT; i++) {
if (fiber_context[i] != NULL)
{
SwitchToFiber(fiber_context[i]);
}
}
}

void WINAPI fiberProc(void *fiber_nbr)
{
int nbr;
nbr = *((int*)fiber_nbr);
fprintf(stderr,"Hello from fiber %d\n", nbr);
SwitchToFiber(fiber_context[0]);
}

fiber 再次進入會從上次中斷那點往下繼續去執行
fiber也有屬於自己的fls可提供使用

===========

當systemC 要更新成releace mode /MTD => /MT

==========

使用windos win32 pthread時 須下載新的函示庫

Pre-build.2 裡面包含了include和 lib 分別包含了pthreads for win32 的頭文件和庫文件(包括動態連接庫)

將include 和lib 裡面的內容分別複製到你的編譯器的include 和 lib 目錄,
同時將lib 目錄中的 dll 文件copy 到操作系統的system32 文件夾中。

Project/settings pthreadVC2.lib

===========

TLS(P-thread local storage)

pthread_key_t tlsKey = 0;

void* thr_fn(void* arg){
int TLS_data = 0;
pthread_setspecific(tlsKey, &TLS_data); //將key 跟 data bine再一起
此時使用 TLS_data皆為TLS

pthread_key_delete(tlsKey); //刪除
}

===========
semaphore.h


sem_t sem_key;

sem_init(&sem_key,0,預設值);

sem_wait(&sem_key); //sem_key-- 減為負數 則sleep
sem_post(&sem_key); //sem_key++ 反之

沒有留言:

張貼留言