2014年10月18日 星期六

Gaming 或許是 Android 5.0 Lollipop 其中一項重點

Android 5.0 在近日正式釋出了
而在 10/17 也已釋出了 SDK for Android 5.0
對於 Android 5.0 網路上相關介紹文件不少
由於先前並沒有花心思看 Android L Preview 的介紹
所以這幾日花了點時間消化相關新的系統特性

這裡想指出 Google 對於 Android 平台在 Gaming 的野心
首先是 Android 5.0 除了 OpenGL ES 3.1 的支援外提出的 Android Extension Pack(AEP)
The extension pack supports:
* Guaranteed fragment shader support for shader storage buffers, images, and atomics (Fragment shader support is optional in OpenGL ES 3.1.)
* Tessellation and geometry shaders * ASTC (LDR) texture compression format
* Per-sample interpolation and shading
* Different blend modes for each color attachment in a frame buffer

其中前兩點是最重要的,
請搜尋 Tessellation 稍微了解其目的
另外必須知道 Tessellation 是 OpenGL 4.0/DirectX 11 後的特性
Tessellation & Geometry Shader 是近年 GPU 提升模型動態細緻化的重大演進
對於 AEP 詳細的規範可以參考 Khronos 的 spec

而另外一個點在於此次 Google 裝置除了 Nexus 6/9 外
還有個不太受到注目的 Nexus Player,
多數的 Nexus Player 分析著重於 Android TV 與具有語音控制/搜尋的遙控器上, 這點無可厚非
但 Nexus Player 有許多有趣的特性(像是它是第一個官方 x86 Nexus 裝置)
其一便是 Nexus Player 提供了選購的無線藍牙 GamePad
目前已知 Nexus Player 中的 Intel Atom 所使用的 GPU 是 PowerVR 6000 系列
這系列的 GPU 俱備了支援 AEP 的規格
此兩點顯示 Google 有意透過 Nexus Player 做為 Android Gaming Console 的示範平台的野心
儘管 Android Extension Pack 對於 Android 並非必要項目,
但在智慧裝置利潤逐漸下滑的今日, 平台差異化顯得重要
AEP這樣明確規範的規格, 是很容易成為各家IC生產商軍備競賽的比較條件之一...
況且, 若無市場戰略目標, 維持目前 Android 圖形需求, 跟隨 OpenGL ES 標準也已足夠 (若要與 iOS Metal 競爭那又是另外一個面向的事情了)
並無制定這套延伸 OpenGL ES 擴充標準的必要

2014年8月18日 星期一

OpenCL Kernel Optimization Tips 簡報上線

這段日子工作與 OpenCL 相關
因此碰觸到了一些 Mobile 與 Desktop 的 OpenCL Runtime
面對 OpenCL 程式對不同的硬體平台做優化的過程
有許多的層面必須要考量, 因此將這些想法集結為這份 slides
日後希望有機會能update加入 example 與 case study.

2014年6月24日 星期二

OpenCL Utility/Framework 專案 - CLScript

開了自己的第一個 github project
https://github.com/champyen/clscript

這一兩年由於 GPGPU 應用的興起,
心中一直有個關於 video codec 的想法想要付諸實現
近日開始著手動工, 儘管有些地方的設計還沒頭緒
但是基本的問題還是需要解決
CLScript 這個專案因此這些基本問題而產生, 目前百廢待興, 文件與 code 還需要作進一步改進, 但是初版已可以玩一玩
OpenCL 其中一個讓 programmer 感到麻煩的地方在於
OpenCL Host Code 的撰寫很冗長,
且對於一個 function call 需要相當的前置作業
撰寫 kernel code 對應的 Host Program 是無趣的一件事
CLScript 這是個 utility/framework 層面的專案
其目的就在於簡化 OpenCL 的使用流程, 解決上述問題
讓開發者能更專注於 OpenCL 中核心的 kernel code 的開發
C/C++ framework 使用上, 建構的概念是將 .cl file 視為類似於 C library
在 test/test.cpp 中可以看到參考用法
using namespace clscript;
...
CSRuntime runtime(CS_DEV_GPU);
CSLib lib(&runtime, clFileName);
CSBuffer buf(&runtime, 4096*sizeof(cl_int));
CSWorkSize gWS(4096);
lib.exec("test", gWS, NullWorkSize, 0, &buf);

CSLib 的 exec 界面會將傳進的不定數目參數作設定與傳遞
對 C/C++ 使用者而言, 就像是呼叫一個特定的 function
另外一個 exec 界面是為了 csutil CLI tool 而設的
csutil 為直接測試 CL kernel code 的工具, 可以不用寫 Host Program 而直接測試kernel code 程式
csutil 有四大參數, 目前預設使用 GPU device
1. CL 檔案
2. 在 1. 檔案中, 所要使用的 function 名稱
3. WorkSize
     各 dimension 以 ',' 區隔, global 與 local 以 ':' 區隔, local worksize部份並非必要
4. function 所使用的參數
     * float - f:1.0
     * double - d:1.0
     * int - i:1
     * buffer - b:sz=4096,if=/dev/zero,of=out.bin
    這是最麻煩的, 設定參數又有三個sz, if 與 of(皆非必要), sz 為 buffer 大小, 未設置預設為 global worksizes 相乘, if 為用來初始化 buffer 的資料, 會讀入與 buffer size 相同大小的內容, 若無必要初始化無須指定, of為 buffer 結果的輸出, 若為 temp buffer 無須指定

以 source 中附上的 test.cl 就可以這樣使用
./csutl/csutil ../test.cl test 4096 i:2 b:sz=16384,if=/dev/zero,of=out.bin

2012年1月18日 星期三

Xubuntu on EeePC 701 4G

雖然個人有多台機子, 但很少帶來帶去
幾乎是在每個會停留的地方都有台電腦可以使用
在桃園家中, 用的是 2007年推出的 EeePC 701 4G
平日最多的用途就是 Web + Music

以僅有的 4G 容量來說, 對現今系統來說都顯得捉襟見肘
而 Ubuntu 現今預設也都需要 4.x G 才能夠安裝

這篇算是留個紀錄, 最終調整好的結果:
champ@champ-eee701:~$ df
檔案系統           1K-區段      已用     可用 已用% 掛載點
/dev/sda1              3783213   1685305   1902584  47% /

使用約 1.6G (而WinXP SP3 版, 裝完就使用了 3.xGB(80%~83%) 左右)

在這之前, 做了小小的前置作業
為了不額外安裝控制軟體
安裝前將BIOS 升級為能夠選擇 CPU 速度的 0511 測試版本

安裝採用的方式是製作Xubuntu Deskop ISO 製作開機 SD Card
開機不選擇直接安裝, 而是進入 Live環境
進入桌面後編輯 /usr/lib/ubiquity/plugins/ubi-prepare.py
搜尋 min_disk_size = size * 2 一行, 並將" * 2 "移除
如此最低要求就會是 2.1GB

接著安裝與後置步驟所參考的是
https://wiki.ubuntu.com/ReducingDiskFootprint
使用Live 環境terminal, 自行先以 mkfs.ext4 -T small /dev/sda1 格式化作為 / 的 partition
之後安裝過程中選用為 / , 並且不再格式化
光這個步驟, 就會將使用的空間自原本的 65% 降到 59%

以這樣的方式安裝完後,  接著移除不需要的 package
大致上移除了與下列相關的套件
gimp, thunderbird, transmission, gnome-games, linux-headers, gcc, xorg drivers, bluetooth, cups, sane, abiword, gnumeric, nvidia-common, manpages-dev
套件部份, 熟悉套件內容的可以再自行斟酌
移除不需要的package後, 先 apt-get clean
再請參考ReducingFootPrint 的 disable apt cache 之後再進行系統更新

接著可以參考
上述的ReducingFootPrint 的 document/locale 部份



最後如果沒有在使用 synaptic, 單純用 apt-get 可以再參考 Compress File 部份
對 apt 的 index 做壓縮 (否則 synaptic  會很慢)

剩下的 5x% 空間可以有相當的使用彈性
安裝喜歡的軟體, 放資料與音樂...etc


原本有意使用 btrfs 搭配 compress option
然而 btrfs 的 metadata 以佔去相當容量, 已經佔不了便宜
加上ubuntu 這幾版使用 btrfs w/ compress 似乎都有問題
而且在 SSD 上沒有節省到時間外,  反而更慢

2011年7月20日 星期三

Linux Undervolting - Toshiba NB550D

再調整過 MSI X410 後, 不再那麼燙手了
(最後還將最高頻率設為 1.3Ghz)
就能享受其帶來的輕薄大螢幕的好處.

於是又看看另一台 Toshiba NB550D有無機會
如之前所說, 這台使用的是 AMD APU C-50
透過搜尋, 找到了一篇文章講述詳細內容的
要降低電壓, 主要是調整 msr 中對應 VID 的數值
按照文章說得, Acer W500 使用電壓組合為
1.0625V/1Ghz, 0.9375V/800Mhz

按文查表, 發現, NB550D 使用的電壓組合為
1.2250V/1Ghz, 1.025V/800Mhz

找到方法了, 接著就是測試, 並且寫入  /etc/rc.local 中
以下為我加入的內容
主要是改為0.9375V/1Ghz, 0.8250V/800Mhz
按照文章說明, 這樣應該可以降低功耗 2~3Watt
找機會來測試電池使用時間是否增加.

#to allow msr manipulation
modprobe msr

#here we undervolting C50 to 0.9375V/1000Mhz 0.8250V/800Mhz
#original is VID:34 - 1.225V/1000Mhz, VID:54 - 1.025V/800Mhz
#CPU 0
wrmsr -p 0 0xc0010064 0x800002ba00006230
wrmsr -p 0 0xc0010065 0x8000026a00007440

#CPU 1
wrmsr -p 1 0xc0010064 0x800002ba00006230
wrmsr -p 1 0xc0010065 0x8000026a00007440

相關資訊在該文章都有, 有需要可以參考

2011年7月13日 星期三

Linux PHC Undervolting - MSI X410

老婆偶爾玩 Facebook 的 flash game, 閒買給她的 X410 慢
於是好一陣子之前, 拿先前的 MSI CX420 跟老婆換
(這麼說我還蠻愛 MSI 筆電的, MSI 是否該找我寫測試文...XD)

X410當時也是我決定買的, 主要看上輕薄又有 14" 大螢幕
安裝Ubuntu 使用一陣子後, 發現CPU效能對我倒是其次
總是最大轉速的風扇聲, 與左手腕放置地方過熱

搜尋了一下, Windows 上有人使用 RM CPU Clock Utility 來降壓
除了降低CPU電壓, 另外還可以使用額外的 P-state
而在Linux 上要靠 Linux PHC kernel, 達到相同的效果

MSI X410 使用的是 AMD Neo MV-40
基本上預設電壓 1.0V
也只提供 800Mhz 與 1.6Ghz 兩種頻率切換

有了這些資訊, 就開始使用 Linux PHC 來降壓
首先可以透過下列指令加入 Linux PHC PPA

sudo add-apt-repository ppa:linux-phc/ppa

接著更新套件庫與安裝 Linux PHC kernel
sudo apt-get update

sudo apt-get install linux-generic-pae-phc linux-headers-generic-pae-phc linux-image-generic-pae-phc

如果不需要原本 kernel 可以順便移除..
安裝完成後, grub 選擇 phc 的項目重開即可

登入後, 接著要安裝 phc-k8 module
請到此下載

安裝phc-k8前請安裝 dkms
sudo apt-get install dkms

接著以 root 做下列動作
1. cp phc-k8_v0.4.4b1.tar.gz /roo
2. cd /root
3. tar jxvf phc-k8_v0.4.4b1.tar.gz
4. cd phc-k8_v0.4.4b1
5. make dkms install

到這如沒出現錯誤訊息 phc-k8 安裝就完成了
重新開機讓系統載入 phc-k8 module

要測試是否 OK 可以用下列指令
cat /sys/devices/system/cpu/cpu0/cpufreq/phc_controls
這時候你應該會看到下列資訊
8:22 0:22

這是 FID:VID 的組合, 按照說明文件
FID 的意義是 Freq = 800Mhz + (FID*100Mhz)
以筆電預設電壓 1.0V 去看
VID 的意義似乎是 Volt = 1550mv - VID*25mv

為了能夠切換更多的頻率
編譯 /etc/modprobe.d/phc-k8.conf
將  options phc-k8 direct_transitions=1 行前的 # 移除

接著在 /etc/rc.local 加入一行
echo "8:26 4:31 0:35" > /sys/devices/system/cpu/cpu0/cpufreq/phc_controls
即可
(這裡 上述的 26,31,35 是保守值, 可以自行將上述指令調整輸入, 找出最適合的數值)

重新開機後就可以感受不同了...

可以重開機後交換輸入下列指令, 去體會風扇的變化
echo "8:22 4:32 0:22" > /sys/devices/system/cpu/cpu0/cpufreq/phc_controls
echo "8:26 4:31 0:35" > /sys/devices/system/cpu/cpu0/cpufreq/phc_controls

Update:
最近看這篇, 發現, X410 其中用了散熱'墊', 其實散熱效果很不好, 於是也塗了之前存放的散熱膏, 效果的確不錯. 廢熱明顯不容易累積, 搭配上面的方法, 就不再燙手了.

2011年1月30日 星期日

LibreOffice 3.3 released

由於 Oracle 併購 Sun 公司後, 對於 Open Source 專案有著不友善的態度與作法
OpenOffice 成員與社群於是創立了 The Document Foundation (TDF)
而其 Office Suite 命名為 LibreOffice
LibreOffice 的理念也受到 Ubuntu, Fedora, OpenSuse, Go-OO, Google 等社群/公司的支持
相信在 Linux 套件的大宗上, LibreOffice 將會是主流

在TDF經過一段時間的運作, 正式釋出了第一個版本 - LibreOffice 3.3
從網頁上可以看到新的功能特性 (OpenOffice 3.3 新特性在此)

Ubuntu 上可以透過官方 ppa 的方式安裝
支援 Lucid/Maverick/Natty

安裝方式如下:
sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get install libreoffice

安裝過程會自動將 OpenOffice 移除
個人有安裝 libreoffice-pdfimport, 如此能針對 PDF 檔案做編修

LibreOffice 編修 PDF 檔案
基本使用上與 OpenOffice 大同小異
而使用上可以感受到 LibreOffice 的啟動與反應速度加快了些
如果是一路從LibreOffice開發時期版本用到現在, 應該可以感到其進展

相信 LibreOffice 的出現, 也能帶給 FOSS 的 Office Suite 更好的生態

在 ARM 平台上使用 Function Multi-Versioning (FMV) - 以使用 Android NDK 為例

Function Multi-Versioning (FMV) 過往的 CPU 發展歷程中, x86 平台由於因應各種應用需求的提出, 而陸陸續續加入了不同的指令集, 此外也可能因為針對市場做等級區隔, 支援的數量與種類也不等. 在 Linux 平台上這些 CPU 資訊可以透過...