I have a dream...
2014年5月27日 星期二
cache copy back and cache invaliate
/* MemMgr_CacheInvalidate() is used to invalidate the cache tags with the specific memory section. */
SCODE MemMgr_CacheInvalidate(HANDLE hObject, DWORD dwVirtAddr, DWORD dwSize);
/* MemMgr_CacheCopyBack() is used to copy data from cache back to external memory with the specific
memory section. */
SCODE MemMgr_CacheCopyBack(HANDLE hObject, DWORD dwVirtAddr, DWORD dwSize);
當 CPU 處理過記憶體位置(from EDMC)所指的資料且HW engine要使用該位置資料時 , 需對此位置呼叫MemMgr_CacheCopyBack().
application ---> CPU (cache) ---> Memory <---- HW
當 HW 處理過記憶體位置(from EDMC)所指的資料且CPU 要使用該位置資料時, 需對此位置呼叫MemMgr_CacheInvalidate() (告訴CPU此位置的 cache tag無效, CPU要去external memeory取得此位置的資料)
HW ---> Memory <--- CPU (cache) <--- application
2013年10月30日 星期三
心情好複雜
哎!現在心情好複雜...
為什麼另一半總是不能多多體諒我的心情...
照成今天這樣的局面...雖自己也有問題...但夫妻不就是要能夠多為對方想想麻?
有了小孩...讓我很難做切斷夫妻關係的決定...做下這決定...對小孩真的是一種傷害...
若選擇婚姻繼續下去....我也很痛苦....都要去忍受妳那難溝通的態度....
妳回去的這幾個月來...自己也改變自己...不那麼固執...對妳好一點...但似乎那些好對妳來說似乎永遠都不夠....
一邊是自己的父母...一邊是自己的老婆與小孩...
好想脫離你們之間....但自己捨不得小孩...
今天打電話給妳... 似乎妳冷冷的口氣...讓我真的心冷了....
好難過... 這些痛苦也不知向誰說...
2013年7月4日 星期四
How to recovery MBR
For raid : 1. The following is how to create Ubuntu live USB: http://blog.xuite.net/yh96301/blog/57645340-%E5%85%8D%E8%B2%BB%E8%A3%BD%E4%BD%9CUbuntu+Live+USB%E9%96%8B%E6%A9%9F%E9%9A%A8%E8%BA%AB%E7%A2%9F%E7%9A%84%E8%BB%9F%E9%AB%94unetbootin 2. check the raid device id : When "df -h", will see the following raid partitions: /dev/mapper/isw_dcgajhgdje_Volume0p1 (/) /dev/mapper/isw_dcgajhgdje_Volume0p5 (/home) The "/dev/mapper/isw_dcgajhgdje_Volume0" is raid id. 3. After enter Ubuntu live USB: mkdir /mnt/sda mount /dev/mapper/isw_dcgajhgdje_Volume0p1 /mnt/sda mount --bind /proc /mnt/sda/proc mount --bind /dev /mnt/sda/dev chroot /mnt/sda grub-install /dev/mapper/isw_dcgajhgdje_Volume0p
2011年9月20日 星期二
real time, user time, sys time of a process
針對一個process的時間統計:
real==>指逝去的時間(elapsed time)(time of waiting for I/O to complete + time used by other processes)(透過gettimeofday()或times()收集)
user==>指CPU執行該process的user-mode code的時間(透過 times()收集)
sys==>指CPU執行該process的kernel-mode code的時間(透過times()收集)
User+Sys==>指CPU真正執行該procees的時間(可透clock()收集)
http://www.gnu.org/s/hello/manual/libc/CPU-Time.html#CPU-Time
http://osr600doc.sco.com/en/SDK_c++/_Measuring_Program_Execution_Tim.html
#include stdio.h
#include time.h
#include sys/param.h
#include sys/times.h
#include sys/types.h
int main(){
int i;
struct tms t,u;
long r1,r2;
struct timeval start, end;
clock_t start_c, end_c;
gettimeofday(&start, NULL);
r1 = times(&t);
start_c=clock();
for(i=0;i < 10000 ;i++){
printf("hello!!\n");
}
end_c=clock();
r2 = times(&u);
gettimeofday(&end, NULL);
printf("\nHZ=%d\n",HZ);
printf("user time=%f\n",((float)(u.tms_utime-t.tms_utime))/(HZ));
printf("system time=%f\n",((float)(u.tms_stime-t.tms_stime))/(HZ));
printf("real time=%f\n",((float)(r2-r1))/(HZ));
printf("real time(gettimeofday())=%f\n", (float)((end.tv_sec * 1000000 + end.tv_usec)- (start.tv_sec * 1000000 + start.tv_usec))/1000000);
printf("user+real=%f\n" ,((double) (end_c - start_c)) / CLOCKS_PER_SEC);
return 0;
}
output:
hello!!
.....
hello!!
HZ=100
user time=0.000000
system time=0.020000
real time=0.150000
real time(gettimeofday())=0.151931
user+real=0.020000
clock()的實作:
#include sys/times.h
#include sys/param.h
#include time.h
#include unistd.h
clock_t clock(void) {
struct tms buf;
times(&buf);
#if CLOCKS_PER_SEC == HZ
return (unsigned long) buf.tms_utime + buf.tms_stime;
#elif CLOCKS_PER_SEC % HZ == 0
return ((unsigned long) buf.tms_utime + buf.tms_stime) * (CLOCKS_PER_SEC / HZ);
#elif HZ % CLOCKS_PER_SEC == 0
return ((unsigned long) buf.tms_utime + buf.tms_stime) / (HZ / CLOCKS_PER_SEC);
#else
return ((unsigned long long) buf.tms_utime + buf.tms_stime) * CLOCKS_PER_SEC / HZ;
#endif
}
real==>指逝去的時間(elapsed time)(time of waiting for I/O to complete + time used by other processes)(透過gettimeofday()或times()收集)
user==>指CPU執行該process的user-mode code的時間(透過 times()收集)
sys==>指CPU執行該process的kernel-mode code的時間(透過times()收集)
User+Sys==>指CPU真正執行該procees的時間(可透clock()收集)
http://www.gnu.org/s/hello/manual/libc/CPU-Time.html#CPU-Time
http://osr600doc.sco.com/en/SDK_c++/_Measuring_Program_Execution_Tim.html
#include stdio.h
#include time.h
#include sys/param.h
#include sys/times.h
#include sys/types.h
int main(){
int i;
struct tms t,u;
long r1,r2;
struct timeval start, end;
clock_t start_c, end_c;
gettimeofday(&start, NULL);
r1 = times(&t);
start_c=clock();
for(i=0;i < 10000 ;i++){
printf("hello!!\n");
}
end_c=clock();
r2 = times(&u);
gettimeofday(&end, NULL);
printf("\nHZ=%d\n",HZ);
printf("user time=%f\n",((float)(u.tms_utime-t.tms_utime))/(HZ));
printf("system time=%f\n",((float)(u.tms_stime-t.tms_stime))/(HZ));
printf("real time=%f\n",((float)(r2-r1))/(HZ));
printf("real time(gettimeofday())=%f\n", (float)((end.tv_sec * 1000000 + end.tv_usec)- (start.tv_sec * 1000000 + start.tv_usec))/1000000);
printf("user+real=%f\n" ,((double) (end_c - start_c)) / CLOCKS_PER_SEC);
return 0;
}
output:
hello!!
.....
hello!!
HZ=100
user time=0.000000
system time=0.020000
real time=0.150000
real time(gettimeofday())=0.151931
user+real=0.020000
clock()的實作:
#include sys/times.h
#include sys/param.h
#include time.h
#include unistd.h
clock_t clock(void) {
struct tms buf;
times(&buf);
#if CLOCKS_PER_SEC == HZ
return (unsigned long) buf.tms_utime + buf.tms_stime;
#elif CLOCKS_PER_SEC % HZ == 0
return ((unsigned long) buf.tms_utime + buf.tms_stime) * (CLOCKS_PER_SEC / HZ);
#elif HZ % CLOCKS_PER_SEC == 0
return ((unsigned long) buf.tms_utime + buf.tms_stime) / (HZ / CLOCKS_PER_SEC);
#else
return ((unsigned long long) buf.tms_utime + buf.tms_stime) * CLOCKS_PER_SEC / HZ;
#endif
}
2011年9月6日 星期二
##巨集定義的用法
/*
~/tmp$ gcc -D_CACHE=arm920 -g -static -o test test.c
~/tmp$ ./test
call arm920_dma_flush_range()!!
~/tmp$ gcc -D_CACHE=arm926 -g -static -o test test.c
~/tmp$ ./test
call arm926_dma_flush_range()!!
~/tmp$
*/
#include
#define ____glue(name,fn) name##fn
#define __glue(name,fn) ____glue(name,fn)
void arm926_dma_flush_range(){
printf("call arm926_dma_flush_range()!!\n");
}
void arm920_dma_flush_range(){
printf("call arm920_dma_flush_range()!!\n");
}
#define dmac_flush_range __glue(_CACHE,_dma_flush_range)
int main()
{
dmac_flush_range();
return 0;
}
~/tmp$ gcc -D_CACHE=arm920 -g -static -o test test.c
~/tmp$ ./test
call arm920_dma_flush_range()!!
~/tmp$ gcc -D_CACHE=arm926 -g -static -o test test.c
~/tmp$ ./test
call arm926_dma_flush_range()!!
~/tmp$
*/
#include
#define ____glue(name,fn) name##fn
#define __glue(name,fn) ____glue(name,fn)
void arm926_dma_flush_range(){
printf("call arm926_dma_flush_range()!!\n");
}
void arm920_dma_flush_range(){
printf("call arm920_dma_flush_range()!!\n");
}
#define dmac_flush_range __glue(_CACHE,_dma_flush_range)
int main()
{
dmac_flush_range();
return 0;
}
2011年4月14日 星期四
2011年3月25日 星期五
只是情緒的抒發.....
車也買了...工作也滿穩定的...但現在自己似乎被感情事所影響著...
唉...不久前的那個感情傷害似乎對自己很大...本是對愛情充滿著理想的人...
經歷這些感情的不順遂...漸漸讓自己對感情變得不信任與不安...
如夢醒時分中所說的 "早知道傷心總是難免的...自己又何苦一往情深..."....
放低標準?或堅持下去?或是真的一切隨緣了?
真的喜歡自己和珍惜自己...只有自己了...只有自己能走的出來...
多愛自己一點~這一陣子傷心夠了...趕快走出來吧....小灰等你陪他到台灣各處去....
小D也等你帶他去各地去開開眼界....
唉...不久前的那個感情傷害似乎對自己很大...本是對愛情充滿著理想的人...
經歷這些感情的不順遂...漸漸讓自己對感情變得不信任與不安...
如夢醒時分中所說的 "早知道傷心總是難免的...自己又何苦一往情深..."....
放低標準?或堅持下去?或是真的一切隨緣了?
真的喜歡自己和珍惜自己...只有自己了...只有自己能走的出來...
多愛自己一點~這一陣子傷心夠了...趕快走出來吧....小灰等你陪他到台灣各處去....
小D也等你帶他去各地去開開眼界....
訂閱:
文章 (Atom)