2013年12月2日 星期一

Open Virtual Platforms - the source of Fast Processor Models & Platforms

Open Virtual Platforms - the source of Fast Processor Models & Platforms

Welcome to one of the most exciting open source software developments in the embedded software world since GNU created GDB. OVP: Fast Simulation, Free open source models, Public APIs: Open Virtual Platforms.

If you are developing embedded software then virtual platforms will be increasingly important to you - especially if you are working on designs with more than one processor - then this portal will become an important resource for you.

Different between QEMU
Both of then are free, but great for multiprocessor platforms with arbitrary shared and local memory configurations.
Simulation of processors with virtual memory with almost no performance penalty.
Peripheral Simulation Engine (PSE) 
Fast 

2013年10月11日 星期五

VIM顯示trailing white space

筆記一下, 這個還蠻不錯用的

" Highlight spaces at eol or before tab or after tab
highlight RedundantSpaces term=standout ctermbg=Grey guibg=#ffddcc 
match RedundantSpaces /\s\+$\| \+\ze\t/

2013年8月21日 星期三

MPI基本函式介紹

MPI_Init (ierr)
啟動 MPI,所有 MPI 指令之前要有這個初始化指令,唯一個引數是必須宣告成整數的 ierr,如果初始化成功,則 ierr 的傳回值是零。

MPI_Finalize (ierr)
關閉 MPI,結束多個 CPU 協同工作的狀態。正常關閉的話則整數 ierr 的回傳值是零。

MPI_Comm_rank (communicator, my_rank, ierr)
獲得此 CPU 在全體多 CPU 中的排行順序,排名的編號會存在整數變數 my_rank 裏(從零開始),每個參與的 CPU 都會分到一個連號但不重覆的數字(像到郵局辦事領號碼牌那樣)。communicator 是在選通訊裝置,一般都是用預設的 MPI_COMM_WORLD 不用自己改(參見範例),至於 ierr 則是和前面一種作為錯誤或正常的旗標。

MPI_Comm_size (communicator, nproc, ierr)
獲得全體有多少個 CPU 的數目(通常用於切割工作份量的基礎),整數變數 nproc 回傳給每一個 CPU 同樣的數值,即共有多少個 CPU 正在一起工作。ierr 是錯誤回傳檢查用,communicator 的定義與用法跟前面的定義一樣。

MPI_Send (buf, count, datatype, dest, tag, communicator, ierr)
送出(由現在這個 CPU 送出一串資料給另一個 CPU),buf 是指要傳送的那一串資料變數的名稱(也就是第一筆資的位址),count 是資料的長度(從前面定的起點開始算起),datatype 是要被傳送之資料的數值型態,只有幾種常見的固定類型,如 MPI_REAL、MPI_INTEGER 等;整數 dest 是要傳的目的地 CPU 的 rank 編號,至於 整數 tag 則是寫程式的人自已設定的標籤。標籤的功能在這裏可以說明一下,當來源端 CPU 發送資料時,送出來的資料未必會被目的地 CPU 收到相同名稱的變數裏,有可能不止送一包資料,也有可能到達的先後順序會打亂,因此一定要利用標簽來設定每一包資料串有精準被接收到。
MPI_Send 指令是一個阻擋性 (blocking) 的指令,也就是說它要等到收到它在等待的東西才會釋放控制權給主程式去執行下一個指令。

MPI_Recv (buf, count, datatype, source, tag, communicator, status, ierr)
接收。其中前三個引數 buf、count、datatype 與前面定義一樣,souce 是來源 CPU 的編號,tag 則是要與送方指令相同的整數值,作為接收的認證。隨後的 communicator 與 ierr 與前面同。值得注意是 status ,它是用來表示接收的狀態。接收與送出有一點點不同,送出是可以立即動作的,然而接收就並不是下了接收指令就可以馬上進行完成,因為總是要等待資料到達。

MPI_Bcast(buf,n,mpi_datatype,i_src_node,MPI_COMM_WORLD,ierr)
廣播 (Broadcast),意指一個 CPU 放送資料出來,其他 CPU 接收,共同取得該比資料的內容。欲傳送資料的啟始位置是 buf 、長度(資料筆數)是 n 、 i_src_node 是 發送源 之 CPU 編號,其他 mpi_datatype 、MPI_COMM_WORLD、ierr 則是與前面的定義的一樣

MPI_Reduce(buf,result,n,mpi_datatype,mpi_op_type,i_trgt_node, MPI_COMM_WORLD,ierr)
收集各個 CPU 上的結果。其中 mpi_op_type 可以是 MPI_SUM 或 MPI_PRODUCT, 而結果則收集到 i_trgt_node 的 result 變數上(並不是每個 node 的 result 都更新)。

MPI_Get_processor_name (nodename,nchar,ierr)
nodename 是字串變數,它會回傳該 CPU 所在的機器名稱; nchar 是整數,回傳 nodename 內含的字元數

資料來源:

2013年8月19日 星期一

Message Passing Interface

Message Passing Interface (MPI) is a standardized and portable message-passing system designed by a group of researchers from academia and industry to function on a wide variety of parallel computers. The standard defines the syntax and semantics of a core of library routines useful to a wide range of users writing portable message-passing programs. We can use it for creating programmes for distributed computing systems (parallel computing).

MPI特點:
  1. 所有的節點(node,為一台電腦)串接在一起,各自有獨立的記憶體及CPU。
  2. 各節點間會透過互相傳遞訊息來了解彼此的進度。

  3. MPI是利用C語言或Fortran等程式的命令,達到節點間的接收訊息與傳達訊息。

Install MPI environment for you ubuntu
sudo apt-get install libcr-dev mpich2 mpich2-doc

MPI Hello Wrold example

/* C Example */
#include <mpi.h>
#include <stdio.h>
 
int main (int argc, char* argv[])
{
  int rank, size;
 
  MPI_Init (&argc, &argv);      /* starts MPI */
  MPI_Comm_rank (MPI_COMM_WORLD, &rank);        /* get current process id */
  MPI_Comm_size (MPI_COMM_WORLD, &size);        /* get number of processes */
  printf( "Hello world from process %d of %d\n", rank, size );
  MPI_Finalize();
  return 0;
}

mpicc mpi_hello.c -o hello
mpirun -np 2 ./hello

不過有點奇怪, 我目前在我的ubuntu上跑這個code, size回傳居然是1@@
這個部份要再研究一下.
MPI tutorial

資料來源:
http://jetcracker.wordpress.com/2012/03/01/how-to-install-mpi-in-ubuntu/

2013年8月6日 星期二

化學元素週期表




我是氫,我最輕,火箭靠我運衛星;
我是氦,我無賴,得失電子我最菜;
我是鋰,密度低,遇水遇酸把泡起;
我是鈹,耍賴皮,雖是金屬難電離;
我是硼,有點紅,論起電子我很窮;
我是碳,反應慢,既能成鏈又成環;
我是氮,我阻燃,加氫可以合成氨;
我是氧,不用想,離開我就憋得慌;
我是氟,最惡毒,搶個電子就滿足;
我是氖,也不賴,通電紅光放出來;
我是鈉,脾氣大,遇酸遇水就火大;
我是鎂,最愛美,攝影煙花放光輝;
我是鋁,常溫裡,濃硫酸裡把澡洗;
我是硅,色黑灰,信息元件把我堆;
我是磷,害人精,劇毒列表有我名;
我是硫,來歷久,沉澱金屬最拿手;
我是氯,色黃綠,金屬電子我搶去;
我是氬,活性差,霓虹紫光我來發;
我是鉀,把火加,超氧化物來當家;
我是鈣,身體愛,骨頭牙齒我都在;
我是鈦,過渡來,航天飛機我來蓋;
我是鉻,正六鉻,酒精過來變綠色;
我是錳,價態多,七氧化物爆炸猛;
我是鐵,用途廣,不鏽鋼喊我叫爺;
我是銅,色紫紅,投入硝酸氣棕紅;
我是砷,顏色深,三價元素奪你魂;
我是溴,揮發臭,液態非金我來秀;
我是銣,鹼金屬,沾水煙花鉀不如;
我是碘,昇華煙,遇到澱粉藍點點;
我是銫,金黃色,入水爆炸容器破;
我是鎢,高溫度,其他金屬早嗚呼;
我是金,很穩定,扔進王水影無形;
我是汞,有劇毒,液態金屬我為獨;
我是鈾,濃縮後,造原子彈我最牛;
我是鎵,易融化,沸點很高難蒸發;
我是銦,軟如金,輕微放射宜小心;
我是鉈,能脫髮,投毒出名看清華;
我是鍺,可晶格,紅外窗口能當殼;
我是硒,補人體,口服液裡有玄機;
我是鉛,能儲電,子彈頭裡也出現;



我不知道來源, 有人知道的話麻煩跟我說一聲!

2013年7月26日 星期五

ACPI介紹

http://blog.csdn.net/celiaqianhj/article/details/6742852

介紹了ACPI的RSDP, RSDT, XSDT ...等等的關係.
整理的很不錯喔.

C-states and P-states are very different

C-states and P-states are very different

C-states are idle states and P-states are operational states. This difference, though obvious once you know, can be initially confusing. 

With the exception of C0, where the CPU is active and busy doing something, a C-state is an idle state. Since an idle CPU isn't doing anything (i.e. any useful work), why not shut it down? No one is going to notice since there's no one using it. (Letting a Penryn run at full bore when idle is like driving in circles very fast; all you're doing is going nowhere quickly.)

A P-state is an operational state, meaning that the core / processor can be doing useful work in any P-state. The most obvious example is when your laptop is using a low power profile and operating on battery. The OS will lower the C0 operating frequency and voltage, i.e. enter a higher P-state. Reducing the operating frequency reduces the speed at which the processor operates, and so the energy usage per second (i.e. power). Reducing the voltage decreases the leakage current from the CPU's transistors, making the processor more energy efficient resulting in further gains. The net result is a significant reduction in the energy usage per second of the processor. On the flip side, an application will take longer to run. This may or may not be a problem from a power perspective. I'll talk about this issue in some depth in a later blog.

C-states and P-states are also orthogonal. This is a fancy mathematical term meaning that each can vary independently of the other. This doesn't mean that in the higher C-states, the voltage doesn't change. It only means that when you resume C0, you go back to the operating frequency and voltage defined by that P-state. 

Linux Plumbers Conference

突然發現這個, 記錄一下 http://www.linuxplumbersconf.org

Linux Plumbers Conference 2012 Videos & Slides
http://www.linuxplumbersconf.org/2012/

USB Port Power Off Kernel/User Space
http://linuxplumbers.ubicast.tv/videos/usb-port-power-off-kerneluserspace-api/

2013年5月29日 星期三

有趣的專利

今天看到2個專利的討論, 記錄一下

(1)電子工程專輯的 醬也行?--有趣“瘋狂專利”分享
原始來源:What were they thinking: Confessing to an apparition

(2)Cash's Blog的UIBC小註解
UIBC 是指 User Input Back Channel,用在 WIFI Display 的情境之下. 由於顯示裝置 (AV sink device) 和發送裝置 (AV source device) 只能透過無線傳輸,所以從顯示裝置反過來操作發送裝置的話,就叫做 UIBC。
Samsung的專利 Method and apparatus for providing user input back channel in audio/video system
專利公開:US20110107388 A1

2013年5月26日 星期日

ctags在vim裏的常用操作

最近又開始想用vim+ctags功能了, 紀錄一下常用的快速指令囉!

ctags in vim
Keyboard Command Action
Ctrl-] 或是 Ctrl-Left_MouseClick 跳到tag所定義的地方
Ctrl-t 或是 Ctrl-Right_MouseClick          返回
:ts <tag>  <RET> Search for a particular tag
:tn Go to the next definition for the last tag
:tp Go to the previous definition for the last tag
:ts List all of the definitions of the last tag

cscope_maps.vim plugin
這邊的用法是Ctrl+\按完後, 全放開, 再去按後面的字母

ctrl+\ s    "s表Symbol,列出所有參考到游標所在字串的地方,包含定義和呼叫。
ctrl+\ g    "g表Global,與ctags的Ctrl+]相同。
ctrl+\ c    "c表Caller,列出所有會呼叫到以游標所在字串當函數名的地方。
ctrl+\ t     "t表Text,列出專案中所有出現游標所在字串的地方。
ctrl+\ f     "f表File,以游標所在字串當檔名,開啟之。
ctrl+\ i     "i表Include,以游標所在字串當檔名,列出所有include此檔的檔案。
ctrl+\ d    "d表calleD,以游標所在字串當函式名,列出所有此函式內呼叫的函式。

在使用cscope時,需注意,cscope.out這個資料庫是否有被connect起來,如果沒有connect那搜尋功能當然就會失效。
發現一件事情,ctags的關聯都是用絕對路徑的,所以就算我任意切目錄,只要database有認到就沒問題。
但是cscope看起來是不行的,它用相對路徑的,一切目錄,就算database認到了,看起來也開不了檔案。

Vim 快速指令
在command mode底下(不用打:)
gf (goto file)
  比如:當你的游標停在#include , 此時直接打gf, 就會自動幫你開啟該header file
  先決條件是,你必需先指定好path, 參考方法是":set path=include;/usr/include"
  當你要返回時,使用ctrl+o返回
* 搜尋字串
  游標停在你要尋找的字串上,直接按shift+8(相當於按*),
  然後就可以用n往下搜尋,按N往上搜尋了
gd 查區域變數, gD查全域變數
  追蹤某個變數宣告時,可以用gd或gD去跳轉
% 括號跳轉
  有時function非常的長, 每次都要用page up/down一直換頁, 還要擔心跳過頭
  %可以幫你直接跳到左括號或右括號上, 也適用於C的#def喔.
  當然, 同樣的你要先把游標移到括號上喔.
mx及'x   標記及返回
          你可以在任意地方標記該行, 然後亂跑後, 再打'x來返回剛剛標記的地方

Linux Trace Tool Introduction

2013年4月28日 星期日

OpenPCR 開放原始碼的基因定序儀


OpenPCR 開放原始碼的基因定序儀 - 
OpenPCR is a low-cost, yet accurate thermocycler you build yourself, capable of reliably controlling PCR reactions for DNA detection, sequencing, and other applications.
一台美金599元

PCR (Polymerase chain reaction聚合酶鏈鎖反應), 複製已知的DNA片斷來作相關的基因研究。
因此OpenPCR 是一台便宜用來複製 DNA 的機器,我們可以將採集到微量DNA,用OepnPCR複製之後,拿來診斷疾病,也可以用來判斷食品是否有受污染,或者檢查食品是否有使用基因改造作物。

新潮玩法:家庭基因实验室

論壇 不過這個論壇似乎很久沒更新了.

GitHub OpenPCR Source Code Project 

基隆米克斯公司的PCR說明

[試劑耗材]基本分生技術介紹 PCR Cloning - 分生實驗的必經之路

簡伯容 博士 - PCR 技術簡介
長庚微免所 劉世東 教授 - 進行 PCR 反應時的注意事項

Hate Brussels Sprouts? It's Genetic - Pearl Biotech's Open PCR Project

How to do a PCR

PCR Procedure


PCR介紹

2013年4月21日 星期日

2013年3月29日 星期五

This small HOWTO is about filesystems and accessing filesystems

This small HOWTO is about filesystems and accessing filesystems. It is not Linux- or Unix-related document as you probably expect. You can find there also a lot of interesting information about non-Unix (file)systems, but Unix is my primary interest :-). More information and the latest version of this document can be found at http://martin.hinner.info/fs/.