2011年11月10日 星期四

TEGRA 3 登場!

NVIDIA 在近期發佈了全新的手機運算核心: Tegra 3 ! (Project Kal-El)

2011年4月16日 星期六

Android setup

終於更新一下網誌了,這學期真的很忙...
這次先放上很久之前就弄好的Android 設置教學,我會分成2個部分來解說:第一部分是整個安裝流程跟一些可能會遇到的問題及解決方法;第二部分則是用Android開發環境來開發Hello World程式。

2011年2月14日 星期一

[ 轉 ] 大學生出去的說話技巧

在FB上看到的,感覺蠻實際的就backup一下~

[ 轉 ] 大學生出去的說話技巧
by Halu Kuan on Tuesday, February 8, 2011 at 2:42am
雖然我已經工作兩年了,並且在工作中一直都很上進,可是這篇文章對我現在依然很受用,希望大家用心閱讀,或許對你有幫助.。

2011年1月16日 星期日

[VLSI] DFT script

延續上篇,這次是DFT script
*******************************************

[VLSI] Design Vision scripts 分享!

這學期終於結束了,在課堂上學了蠻多CAD TOOL的。在這邊就自己備份、分享一下。有興趣的人就看看吧!

Script for Design Vision:


#####################
#Synthesis part
#####################
read_file -format verilog {/home/raid2_2/user99/r99079/final/CPU_TOP.v}

#####################
#Set Constraints
#####################
current_design CPU_TOP
create_clock -name "clk" -period 20 -waveform {"0" "10"} {"clk"}
set_dont_touch_network [ find clock clk]
set_fix_hold clk
set_operating_conditions "typical" -library "typical"
set_wire_load_model -name "ForQA" -library "typical"
set_wire_load_mode "segmented"
####################
set_input_delay -clock clk 2 interrupt
set_input_delay -clock clk 2 rst
set_input_delay -clock clk 2 instr_IF[*]
set_input_delay -clock clk 2 MEMdata_MEM[*]
set_output_delay -clock clk 2 PCout[*]
set_output_delay -clock clk 2 memWrite
set_output_delay -clock clk 2 memRead
set_output_delay -clock clk 2 ALUresult_MEM[*]
set_output_delay -clock clk 2 data2_MEM[*]

####################
set_max_area 0
set_max_fanout 8 CPU_TOP
set_max_transition 1 CPU_TOP
set_load 0.05 [get_ports "interrupt"]
set_load 0.05 [get_ports "rst"]
set_load 0.05 [get_ports "instr_IF[*]"]
set_load 0.05 [all_outputs]

# Remove unconnecting wire
set sh_enable_line_editing true
set_fix_multiple_port_nets -all -buffer_constants [get_designs *]

#####################
# Compile Desin
#####################
uplevel #0 check_design
compile -map_effort high

#####################
# Report timing, area
# and power
#####################
uplevel #0 { report_clock -nosplit }
uplevel #0 { report_timing -path full -delay max -nworst 1 -max_paths 1 -significant_digits 2 -sort_by group }
uplevel #0 { report_power -analysis_effort low }
uplevel #0 { report_area -nosplit }

# Remove assign
remove_unconnected_ports -blast_buses [get_cells * -hier]
set bus_inference_style {%s[%d]}
set bus_naming_style {%s[%d]}
set hdlout_internal_busses true
change_names -hierarchy -rule verilog
define_name_rules name_rule -allowed "a-z A-Z 0-9 _" -max_length 255 -type cell
define_name_rules name_rule -allowed "a-z A-Z 0-9 _[]" -max_length 255 -type net
define_name_rules name_rule -map {{"\\*cell\\*" "cell"}}
change_names -hierarchy -rules name_rule

#####################
# Save gate level
# verilog file and sdf file
#####################
write -hierarchy -format ddc
write -hierarchy -format verilog -output /home/raid2_2/user99/r99079/final/CPU_syn.vg
write_sdf -version 2.1 /home/raid2_2/user99/r99079/final/CPU_syn.sdf
write_sdc CPU.sdc
######### End of Synthesis part ##########

2011年1月7日 星期五

[CUDA] Share memory conflict 筆記 (From google到的資料)


這是很久之前google到有關CUDA shared memory的資料,備份給自己一下XDD


Shared memory


目前 CUDA 裝置中,每個 multiprocessor 有 16KB 的 shared memory。Shared memory 分成 16 個 bank。如果同時每個 thread 是存取不同的 bank,就不會產生任何問題,存取 shared memory 的速度和存取暫存器相同。不過,如果同時有兩個(或更多個) threads 存取同一個 bank 的資料,就會發生 bank conflict,這些 threads 就必須照順序去存取,而無法同時存取 shared memory 了。
Shared memory 是以 4 bytes 為單位分成 banks。因此,假設以下的資料:
    __shared__ int data[128];
那麼,data[0] 是 bank 0、data[1] 是 bank 1、data[2] 是 bank 2、…、data[15] 是 bank 15,而 data[16] 又回到 bank 0。由於 warp 在執行時是以 half-warp 的方式執行,因此分屬於不同的 half warp 的 threads,不會造成 bank conflict。
因此,如果程式在存取 shared memory 的時候,使用以下的方式:
    int number = data[base + tid];
那就不會有任何 bank conflict,可以達到最高的效率。但是,如果是以下的方式:
    int number = data[base + 4 * tid];
那麼,thread 0 和 thread 4 就會存取到同一個 bank,thread 1 和 thread 5 也是同樣,這樣就會造成 bank conflict。在這個例子中,一個 half warp 的 16 個 threads 會有四個 threads 存取同一個 bank,因此存取 share memory 的速度會變成原來的 1/4。
一個重要的例外是,當多個 thread 存取到同一個 shared memory 的位址時,shared memory 可以將這個位址的 32 bits 資料「廣播」到所有讀取的 threads,因此不會造成 bank conflict。例如:
    int number = data[3];
這樣不會造成 bank conflict,因為所有的 thread 都讀取同一個位址的資料。
很多時候 shared memory 的 bank conflict 可以透過修改資料存放的方式來解決。例如,以下的程式:
    data[tid] = global_data[tid];
    …
    int number = data[16 * tid];
會造成嚴重的 bank conflict,為了避免這個問題,可以把資料的排列方式稍加修改,把存取方式改成:
    int row = tid / 16;
    int column = tid % 16;
    data[row * 17 + column] = global_data[tid];
    …
    int number = data[17 * tid];
這樣就不會造成 bank conflict 了。

2011年1月6日 星期四

研究生筆記: Survey Paper的重要性

Hello 各位或是我XD 今天要跟分享一個大家都懂,但又時常犯的錯誤。就是對於Paper Survey 的忽視...

有些時候我們做研究,以為這項東西沒人做就貿然投入下去弄,到最後時常發生這東西已經有人做過或是發過paper的情況...我就是一個活生生的例子 (老馬了...)
所以大家在做研究前,一定要!務必要!做相關研究的paper survey!看過,做過筆記後,確定沒有再下去弄!

另外別人跟你說的未必都是對的,必須你問過,或是驗證過才能相信,對於別人嘴砲要有抵抗力!千萬別亂相信!這就跟詐騙集團的例子很像,你以為真的沒人弄,真的這麼easy嗎?請求正過後再說,不然免談!

這邊分享給各位研究生及自己做一個警惕,希望日後研究不會在發生這種慘事(不要再老馬囉 >.^)

2011年1月2日 星期日

媲美Matlab的Freeware: Octave (附加MAC安裝教學)

相信很多學工程或是數學計算的人對Matlab都不會感到陌生。只是對於Matlab的取得方式我想不是正版的話就是去找一些神奇的版本...

這邊推薦一套類似Matlab的軟體:Octave。Octave 跟 Matlab很非常像,只是不用錢而已 XD
有興趣的朋友可以去這個網站看看:http://www.gnu.org/software/octave/

Windows 的安裝很簡單(點到底就對了),這邊就不提了。Linux的話其實也很好裝,如果是Ubuntu的話就apt-cache search看看吧~這邊我就用MAC OSX 做一個簡單的安裝教學。

Octave on MAC tutorial:

1. 首先到 http://octave.sourceforge.net/ 去下載For OSX的Octave

2. 打開下載的檔案,然後把Octave drag to Application 就ok了~(沒錯就這麼簡單XD)

3. 為了讓Octave也可以plot graphic,必須安裝gnuplot。但不用重新下載,他就已經在octave原本的dmg裡面了!打開Extras,然後一樣把gunplot drag to Application就ok了!

4. 但這邊的gnuplot有一個bug,會導致你在畫圖的時候出現這個訊息:


dyld: Library not loaded: /usr/local/lib/libaquaterm.1.0.0.dylib
  Referenced from: /usr/local/bin/gnuplot
  Reason: image not found
dyld: Library not loaded: /usr/local/lib/libaquaterm.1.0.0.dylib
  Referenced from: /usr/local/bin/gnuplot
  Reason: image not found
error: you must have gnuplot installed to display graphics; if you have gnuplot installed in a non-standard location, see the 'gnuplot_binary' function

看起來很嚇人對吧?其實是gnuplot link library不對所導致。但沒關係,把它改對就好:
     a. 打開你的terminal(如果有人沒用過的話就用MAC search terminal)
     b. cd /Applications/Gnuplot.app/Contents/Resources/bin (這行指令是換到Gnuplot裡面的bin資料夾)
     c. vim gnuplot (用vim文字處理器去編輯gnuplot)
     d. 到第34行把 DYLD_LIBRARY_PATH="${ROOT}/lib:${DYLD_LIBRARY_PATH}" 改成 DYLD_LIBRARY_PATH="${ROOT}/lib"。存檔後跳出
     e.重開octave再試一次,應該就ok了!


這邊我只有寫在MAC上安裝的流程跟遇到問題的解法,如果有其他人對於MAC安裝上還有問題的在一起互相交流吧!

PS:另外最新版的Gnuplot好像都有用Aquaterm了,所以就不用另外再安裝囉~