當需要指定特定的thread給特定的core(CPU)去執行,
WINDOWS 可先使用GetCurrentThread();函式先去抓到當前的thread,
接著再使用SetThreadAfinityMask(thread_handle,0x01);
將取得的thread指定給0x01就是第一core去執行.
2009年11月14日 星期六
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++ 反之
再使用上可讓特定條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++ 反之
2009 11月14日 小紀錄
C++ 用於宣告大量類似的變數
可使用new 加上for loop
ex====
#define DEC_NUM 64
int main(){
char str[50]; //紀錄特殊字
dec_type *temp[DEC_NUM];
for(int i = 0; i sprintf(str, "hello%d",i);
temp[i] = new dec_type(str);
}
...
temp[i]->...;
...
}
可使用new 加上for loop
ex====
#define DEC_NUM 64
int main(){
char str[50]; //紀錄特殊字
dec_type *temp[DEC_NUM];
for(int i = 0; i
temp[i] = new dec_type(str);
}
...
temp[i]->...;
...
}
訂閱:
意見 (Atom)