Tuesday, November 29, 2005

對Intel (R) Pentium 4處理器,開始使用SSE/SSE2


當軟體的演算法最佳化已經達到了一定的程度,要再向上攀升,已難如登天,我們開始考慮藉重硬體來幫忙提昇效能。

對Intel (R) Pentium 4處理器,開始使用SSE/SSE2(Getting Started with SSE/SSE2 for Intel (R) Pentium 4 Processor)



實行概要


本 文教導程式員如何開始使用Streaming SIMD Extensions(SSE)和Streaming SIMD Extensions 2(SSE2)指令集,它們對Intel (R) 4的處理器有效用。在本文中,我們藉由提出環境需求及使用這種編程技巧的例子,來介紹這些技術。

簡介


Intel (R) Pentium 4處理器根據Intel (R) NetBurst TM 微架構(microarchitecture)。此架構從它的前一代(predecessors)提供新的強化,包括對SIMD(Single Instruction Multiple Data)執行技術的改善。SIMD在具MMX技術的Pentium處理器首次被介紹,在Pentium III處理器家族擴充成包含更多在Streaming SIMD Extensions (SSE)的資料集,而今天Pentium 4處理器則以Streaming SIMD Extensions (SSE) 包含了更多(的資料集)。

為了Interl NetBurst微架構發展的主要特性是從Pentium III處理器的P6微架構找到的指令集的擴充,以引入在雙精度浮點數資料元素上的運算。此架構以它平行處理更多運算的能力,支援更多的資料,且更有效率。

本文件的目標在於提供給不識此道者一堂SSE和SSE2的「速成課(crash course)」,讓你能快速地到達能開始在你的應用程式中實作SSE程式碼的水準。

SIMD


Single Instruction Multiple Data 或SIMD 執行是以單一指令平行地執行多重運算的概念。這項技術,被MMX技術介紹,允許SIMD運算使用64 bit的MMX暫存器來執行。

SSE2 F1
(圖1)

SSE


Streaming SIMD Extensions在給Pentium III處理器的P6微架構中被介紹,擴展了MMX技術,且允許同時對四個packed的單精度浮點數的資料元素執行SIMD計算。這些計算是一次同時執行128 bits。

SSE2


Streaming SIMD Extensions 2在Intel NetBurst 架構中被介紹。SSE2允許以平行來執行更多的運算,而延伸這些於MMX及SSE中的指令。注意!SSE2介紹SIMD的計算在二個雙精度浮點數的資料元素。

開始囉


硬體/軟體需求


選項一(建議需求):這是為了在現在及未來執得到行SSE或SSE2最佳運算效能所建議的硬體和軟體組態設定。當使用SSE及SSE2時,推薦Intel (R) C++編譯器。

Intel (R) Pentium 4 Processor
Microsoft* Windows*2000
Microsoft Visual Studio* C++ 6.0
Intel (R) C++ Compiler 5.0.1 (或更新版本)

選項二(最小需求):此硬體和軟體組態設定也是可行的,且使用有Microsoft Processor Pack的Microsoft編譯器來編譯SSE和SSE.此發展環境包含下列的元件:

Intel (R) Pentium 4 Processor
Microsoft* Windows*2000
Microsoft Visual Studio* C++ 6.0
Microsoft Processor Pack for Visual Studio C++ 6.0

jiing的則是:
Intel (R) Pentium 4 Processor
Microsoft* Windows* XP
Microsoft Visual Studio .NET 2003 C++ 6.0
Intel (R) C++ Compiler 8.1.025 (感謝Jedi

環境設定


為了設定你目前的發展環境以便能夠撰寫並編譯SSE程式碼,你會需要使用下列的步驟來設定環境:(照我的做法寫)
1. 安裝Microsoft Visual Studio .NET 2003
2. 執行Microsoft Visual Studio .NET 2003中的Visual C++ .NET
3. 關掉Visual Studio .NET
4. 安裝Intel (R) C++ Compiler 8.1.025
5. 執行Microsoft Visual Studio .NET 2003中的Visual C++ .NET

根據下列步驟設定建置環境(工具/選項/專案/Visual C++)

SSE2 F2
(圖2)為了Intel (R) 編譯器,在你的「可執行檔」目錄中設定“C:\Program Files\Intel\CPP\Compiler80\Ia32\Bin"目錄,如圖所示。

Include檔案:

SSE2 F3
(圖3)為了Intel (R)編譯器設定設定Include目錄,在你的“C:\Program Files\Intel\CPP\Compiler80\Ia32\Include"目錄,如圖所示。

SSE2 F4
(圖4)為了Intel (R)編譯器設定程式庫檔目錄,在你的“C:\Program Files\Intel\CPP\Compiler80\Ia32\Lib"目錄,如圖所示。

從選單中選擇,工具/選項中可以看到Intel (R) C++,點進去可看到下圖:

SSE2 F5
(圖5)

現在你已經將發展平台設定好了。下一節談論準備你的程式碼以備SSE及SSE2.

辨識是否支援SSE/SSE2


原來文件提的方法在我的電腦上不適用,你可在微軟的MSDN中找到一個幫你測試系統CPUID是否支援MMX/SSE/SSE2的程式。
連結在:http://download.microsoft.com/download/VisualStudioNET/Sample/7.0/NT5XP/EN-US/debugging_crt_debug_cpuid.exe

http://msdn.microsoft.com/library/en-us/vcsample/html/vcsamCPUIDDetermineCPUCapabilities.asp

準備好你的資料!


為 了善用SSE和SSE2的優點,你必須對你的原始碼做一些準備。最重要的事是資料被排列(align)成以16-byte為一個邊界 (boundary)。資料用16-byte排列以避免例外發生是重要的。為了產生輸出,一些指令需要排列好的資料。這些指令,如果資料沒被在使用它們前 排列好,程式會在過早中止而沒有任何的輸出。有可能在未排列好的資料上執行一些SSE和SSE2指令,不過要注意到排列成同樣大小的(aligned equivalents)會比較快。有數個方法可用來確保在靜態配置期間資料的排列。

用Intel編譯器在編譯好的檔案中排列資料最簡單 的方法是使用 __declspec(a1lign(16)) 限定子(specifier)。如果你使用這個方法,你必須重新排列資料結構以確保Intel編譯器能編譯所有Streaming SIMD Extension參考到的資料。如果資料定義是在標頭檔裡,你可能必須使用一個建構函數(construct),例如下面的那一個。對於非結構的 (non-struct),union或class資料型別,你可以在標頭檔裡宣告資料,而不用__declspec(a1lign(16)),然後以 __declspec(a1lign(16))在使用資料的檔案中定義它們,依次地由Intel編譯器編譯。

class cdata{
union{
float xmm_data[400];
#ifdef __ICL
__m128 m128_data[100];
#endif
} ;
……
}

另一個方式是藉由增加一個指標(pointer)到class並且在class建構子(constructor)中強制排列強迫資料被排列為16 bytes。然後class 資料使用pointer來存取,就如同它是以16 bytes排列的,以下列的程式碼舉例說明。

class cdata{
float *m_xmm
float xmm_data[400];
public cdata( ){
m_xmm = (float*) (((unsigned) xmm_data+15)& ~0xf);
}
//譯註:上面那行是在找附近為16倍數的位址(將後面四個bit設成0,就是確保一定是16的倍數)
}

第三個方法是在程式碼中或是相對應的intrinsics函式的未排列版本中使用movups (Move Unaligned Packed Single)。要注意,根據你的應用,這可能會減低你執行期間的效能。

動態地配置的記憶體應該也要被排列。Intel編譯器和伴隨著process pack的Micosoft編譯器,提供了_mm_malloc,可使排列到特定的byte邊界變得可行。它的語法如下:
void * _mm_malloc(int size, int alignment)

也有對應到釋放(free)記憶體的_mm_free(char *p)。新的運算子是被最佳多載化了(overload)的,如:

void * operator new(size_t s) {return _mm_malloc(s,16);}

注意到你也將必須增加新運算子的除錯版本:

void * operator new(size_t s, char *file, int line)
{return _mm_malloc(s,16);}

也 要注意 #pragma pack(num) 或 –Zp[num]編譯器選項的使用,其中num不是16能中斷(disrupt)的16-byte排列。因此,避免在包含Streaming SIMD Extensions的程式碼中,使用邊界排列(boundary alignment)定義的這二個型式。

部署選項


現在你的資料已經準備好給SSE和SSE,有數個方法來在你的程式中實作平行計算。

對C/C ++程式員而言,實作SSE和/或SSE2最簡單的方法會是使用Intel (R) C/C++ Class Libraries。這些函式庫讓程式員使用C++ classes來實作SIMD指令。這些classes被包含在檔案fvec.h, ivec.h和dvec.h(各別是浮點數,整數和雙精度浮點數(double))。Intel (R) C/C++ 類別函式庫參考了SSE和SSE2 intrinsics。在某些情況下,這個替代方案與其它的實作比較起來會花費稍微長一點的執行時間。
SSE 和SSE2 intrinsics對C++ classes而言是一個替代方案。它們使你能直接地存取對應的指令而不需要程式員手動管理暫存器,且使得編譯器能最佳化指令排程 (instruction scheduling)。SSE intrinsic的定義被包含在xmmintrin.h中,裡頭描述了算數、邏輯、比較、轉換、記憶體和對型別__m128做SIMD浮點數運算的初始 化。SSE2 intrinsics定義被包含在emmintrin.h檔裡。它描述了算數、邏輯、比較、轉換、記憶體和各別對型別__m128d和__m128i做 SIMD雙精度浮點數和整數運算的初始化。

可能可以獲得最多執行效能的方法是在組合語言的層次上使用SSE和SSE2指令。SSE和 SSE2組合語言指令對64-bit資料處理使用八個64-bit MMX暫存器(即,MM0-MM7),而對128-bit資料使用八個128-bit XMM暫存器(即,XMM0-XMM7)。使用這個方法,為了執行,程式員必須管理暫存器及指令執行的次序。

在下一節中,這些編程方法中的每一個都有例子。

使用SSE/SSE2的程式碼片段


下面是使用各種SSE和SSE2編程技巧的例子。每個例子開始時以等價的C++寫作,接著以等價的SSE/SSE2。第一個例子秀出使用SSE2指令集的各種方法。第二個例子告訴你如何使用SSE指令集。

範例1:簡單的乘法例子,它一次執行多個整數乘法


譯註:這份原始文件的程式有很多錯的地方,大都已更正如下,下面是在Visual Studio .NET中的程式碼,對了,記得要在專案上按右鍵,把這個專案轉換為Intel (R) C++ Project System。

SSE2 F6
(圖6)
範例1:簡單的乘法例子,它一次執行多個整數乘法
實例1-1:
秀一個簡單的應用程式,它取二個32-bit integer陣列,然後將它們相乘並傳回一個long資料型別的結果。
#include “stdafx.h"
#include
#include
int _tmain(int argc, _TCHAR* argv[])
{
long mul;
int t1[100000], t2[100000];

for (int j = 0; j <100000; j++){
t1[j]= rand();;
t2[j]= rand();;
}

for(int i=0 ; i< 100000; i++){
mul = t1[i]*t2[i];
}
getchar();
return 0;
}

實例1-2:
和上面同樣的計算也是取二個32-bit陣列,然後相乘這二個陣列並傳回一個32-bit的結果,不過使用C++ F32vec4 class來寫,為了重載(overload)運算子(operator),此class參考了SSE2 指令集。
#include “stdafx.h"
#include
#include
#include

int _tmain(int argc, _TCHAR* argv[]){
__declspec(align(16)) int t1[100000];
__declspec(align(16)) int t2[100000];
F32vec4 mul;
F32vec4 temp1, temp2;

for (int j = 0; j <100000; j++){
t1[j]= rand();
t2[j]= rand();
}

// 真正的做運算
for (int i = 0; i < 100000; i+=4)
{
temp1 = _mm_cvtepi32_ps( _mm_load_si128( (__m128i*) ( (char*) &t1[i]) ) );
temp2 = _mm_cvtepi32_ps( _mm_load_si128( (__m128i*) ( (char*) &t2[i]) ) );
mul = temp1*temp2;
}
getchar();
return 0;
}
實例1-3:
顯示與上面相同的計算,取二個32-bit的陣列並將這二個陣列相乘後傳回一個64-bit的結果(存在一個128-bit暫存器中),這次用SSE2 intrinsics寫。
#include “stdafx.h"
#include
#include
#include

int _tmain(int argc, _TCHAR* argv[])
{
// 排列資料
__declspec(align(16)) int t1[100000];
__declspec(align(16)) int t2[100000];

// SSE2 整數變數,temp變數是放置4個32-bit integer到一個128-bit XMM 暫存器中
__m128i temp1, temp2;
__m128i mul1, mul2;
__m128i num1, num2;

for (int j = 0; j <100000; j++){
t1[j]= j;
t2[j]= j+1;
} // 設定暫存變數

// 真正的做運算
for (int i = 0; i < 100000; i+=4)
{
// 載入前四個32-bit integer到 128 bit XMM 暫存器
temp1 = _mm_load_si128( (__m128i*) ( (int*) &t1[i]) );
temp2 = _mm_load_si128( (__m128i*) ( (int*) &t2[i]) );
// 將前二個32-bit integer相乘並儲存此64-bit的結果到一個128-bit的暫存器之中
mul1 = _mm_mul_epu32(temp1,temp2) ;
//搞亂(shuffle)temp1的內容,放到其它二個32 bit integer的的位置以備做相乘的動作,並存到一個128-bit的暫存器之中
num1 = _mm_shuffle_epi32(temp1, _MM_SHUFFLE(1,1,3,3));
num2 = _mm_shuffle_epi32(temp2, _MM_SHUFFLE(1,1,3,3));
//將二個32-bit integer相乘並儲存64-bit的結果到128-bit的暫存器之中
mul2 = _mm_mul_epu32(num1, num2);
}
return 0;
}
實例1-4:
顯示與上面相同的計算,取二個32-bit的陣列並將這二個陣列相乘後傳回一個64-bit的結果(存在一個128-bit暫存器中),不過是用SSE2 組合語言(assembly)寫。
譯註:這個實例一定要轉換成Intel (R) C++ Project 才行。

int _tmain(int argc, _TCHAR* argv[]){
__declspec(align(16)) long mul;
__declspec(align(16)) int t1[100000];
__declspec(align(16)) int t2[100000];

__m128i mul1, mul2;

for (int j = 0; j <100000; j++){
t1[j]= j;
t2[j]= j+1;
}
// 真正的做運算
_asm
{
mov eax, 0
label: movdqa xmm0, xmmword ptr[t1+eax]
movdqa xmm1, xmmword ptr[t2+eax]
pmuludq xmm0, xmm1
movdqa mul1, xmm0
movdqa xmm0, xmmword ptr[t1+eax]
pshufd xmm0, xmm0, 05fh
pshufd xmm1, xmm1, 05fh
pmuludq xmm0, xmm1
movdqa mul2, xmm0
add eax, 16
cmp eax, 100000
jnge label
}
return 0;
}
範例2:
實例2-1:
顯示一個簡單的函式,使用代表一個包含了紅、綠、藍三個部份的像素(pixel)的32-bit integer陣列,並執行一個混合(blend)運算。
void blend(long r1[], long g1[], long b1[], long r2[], long g2[], long b2[])
{
// 用混合因子來將顏色值混在一起
for (int i=0; i < 10000, i++)
{
r1[i] = r1[i]*B + r1[i]*(1-B);
g1[i] = g1[i]*B + g1[i]*(1-B);
b1[i] = b1[i]*B + b1[i]*(1-B);
}
}
實例2-2:
顯示一個簡單的函式,它取了一個包含了紅、綠、藍三個部份的像素(pixel)的32-bit integer陣列,並執行一個混合(blend)運算,不過用SSE intrinsics來一次對三個做混合運算,而不是像前例一樣一次一個顏色。

void blend(long r1[], long g1[], long b1[], long r2[], long g2[], long b2[])
{
//宣告SSE變數
__m128 pixel1, pixel2;
//將混合因子值設到一個128-bit變數裡的32-bit區段
__m128 blend_mu1 = _mm_set_ps1(B);
__m128 blend_m1 = _mm_set_ps1(1.0-B);
// 將pixel1設成包含四個浮點變數。首先載入整數值,然後轉成單精度浮點數值。Pixel2也這麼做
for (int i = 0; i <100000; i++){
pixel1 = _mm_cvtepi32_ps( _mm_set_epi32(0.0, r1[i], g1[i], b1[i] ) );
pixel2 = _mm_cvtepi32_ps( _mm_set_epi32(0.0, r2[i], g2[i], b2[i] ) );
//使用intrinsics來執行乘法和加法,如同在實例2-1中看到的
pixel1 = _mm_add_ps(_mm_mul_ps(pixel1, blend_mu1), _mm_mul_ps(pixel2, blend_m1));
}
}


結論


這 只是介紹如何開始去使用SSE和SSE編程的技術。善用SSE和SSE2指令的優點可以在Pentium 4處理器上改進你的應用程式執行效能。在此展示的例子只驗證了少數可用的指令。若想要學習更多關於SSE/SSE2和其它最佳化的技術,請參考以下的 “References"小節。

參考資料


Intel (R) C++ Compiler User Guide and Reference
Intel (R) Pentium 4 Processor Optimization, Reference Manual.
The Macroarchitecture of the Pentium 4 Processor
Developing Applications Using Both the Intel (R) C/C++ Compiler and the Microsoft Visual C++* Compiler
Intel (R) C++ Compiler for Windows*
IA-32 Intel (R) Architecture Software Developer’s Manual, Volume 1: Basic Architecture
IA-32 Intel (R) Architecture Software Developer’s Manual, Volume 2: Instruction Set Reference
IA-32 Intel (R) Architecture Software Developer’s Manual, Volume 3: System Programming Guide
(幾乎在Intel (R)網站上都找得到)

Saturday, November 12, 2005

PC Architecture and Technical Manuals (include k8)

PC Architecture and Technical Manuals (include k8)

* Intel, Intel Architecture Software Developer's Manual, vol. 3:
System Programming. 1999. Describes the Intel Pentium microprocessor
architecture. It can be downloaded from
http://developer.intel.com/design/pentiumii/manuals/24319202.pdf
* Intel, MultiProcessor Specification, Version 1.4. 1997.
Describes the Intel multiprocessor architecture specifications. It
can be downloaded from
http://www.intel.com/design/pentium/datashts/242016.htm.
* Messmer, H. P. The Indispensable PC Hardware Book (3rd ed.).
Addison Wesley Longman Limited, 1997. A valuable reference that
exhaustively describes the many components of a PC.
=================================================
「The AMD K8 Architecture」:
  http://www.cpuid.org/reviews/K8/index.php

AMD64 Architecture Programmer's Manual Volume 2: System Programming

AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and system Instructions

AMD64 Architecture Programmer's Manual Volume 4: 128-Bit Media Instructions

AMD64 Architecture Programmer's Manual Volume 5: 64-Bit Media and x87 Floating-Point Instructions

Sunday, June 05, 2005

沒有微軟的日子 ---出處

David Becker原著‧陳奭璁譯  2003/08/25

Sterling Ball是個說話風趣且平易近人的老闆,他擔任吉他琴弦製造商Ernie Ball的執行長,該公司在音樂圈享有極高盛名,包括吉他之神Eric Clapton或重金屬搖滾樂團Metallica都指名推薦它的琴弦。

不過自從該公司三年前決定全數揚棄微軟產品後,Ernie Ball又多了一個不小的名氣:一家敢向專屬軟體說「不」,卻又能活到現在的廠商。

話說2000年,商業軟體聯盟(BSA)突擊檢查該公司,並找到好幾版未經合法授權使用的軟體版本。Sterling Ball最後以6.5萬美元外加3.5萬美元律師費與BSA達成和解。但代表軟體大廠版權利益的BSA竟在晚報大幅刊登廣告,拿Ernie Ball為例子警告其他企業要看緊自家的軟體版權。

Ball不甘受此屈辱,下令該公司IT部門在六個月內把所有微軟產品通通掃出門。「我說,即使員工要開始學打算盤我都在所不惜。」最近出席LinuxWorld大會的Ball回憶道。「我不希望跟羞辱我們公司的人做生意。」

Ball的IT手下最後湊合了許多開放原始碼軟體來使用,包括Red Hat版本Linux,OpenOffice辦公室套件、Mozilla的Web瀏覽器,以及幾個開放原始碼還無法取代的專屬程式。

身為Ernie Ball公司第二代繼承人,Sterling Ball表示此一轉變並沒有太大問題,自此他樂得逢人就說開放原始碼的優點。最近他則與CNET記者暢談他的轉變經驗。

Q:可否先概略談一下你怎麼會變成開放原始碼的代言人?

我之所以加入開放原始碼陣營,主因是我們一直都是一家奉公守法的家族企業,經營30年餘年來從沒被告過,也沒有跳票或出過任何問題。結果有一天,警衛通知我有檢警單位要進來檢查軟體,我心想應該沒有問題,我買的電腦都附有合法的軟體版權,但我律師卻跟我說情況會蠻糟糕的。

BSA那時有個「檢舉老闆」(Nail Your Boss)計劃,鼓勵員工舉報自己的公司,我們就這樣被檢舉了,反正,我們就被迫關閉,我們那時也才只有8%不合格而已(公司電腦總數為72台)。

怎麼會這樣?

我們繼續使用舊電腦的關係。工程部若是新購電腦,我們就把舊電腦轉移至行政部門使用,但若你沒把硬碟整個清乾淨,這就算違法使用了。即使他們知道這個軟體 根本沒人在用,但只要存在電腦中就算違法。我覺得大家都應該禮尚往來,我不可能用微軟那種作風來對待我的客戶,我原本也是很支持微軟的,但自此就非常討厭 微軟了。

你那時希望和解嗎?

從來沒有,這是員工與老闆之間的想法上的差異。他們攻擊我的家族名聲,刻意讓我們難堪,我從來就沒打算要和解,我很樂意去打官司,但BSA早已透過國會取 得權力,我們打從第一天就得開始替他們負擔律師費。這也就是為何沒人敢跟他們挑戰,因為沒人付得起。我的律師對我說,這場官司打起來得付上25萬美元,且 你還得負擔他們的費用,至少50萬美元跑不掉,這麼做實在不值得,你就乖乖付錢了事,繼續做生意就好了。一般人多半會被嚇到,趕緊乖乖付權利金,並一直付 下去。

BSA督察員走了之後呢?

就是雙方律師的協商了,從那時起我也下定決心不再使用他們的任何產品。但老實說,當初若不是微軟,我們的企業也不可能做得起來,因此我還是要感謝他們。

因此你不能接受的是被拿來當作活廣告,而非檢查本身?

在商場上,沒人喜歡這樣被踐踏。他們利用我們的商譽來銷售他們產品,這樣做不對,若你覺得我們軟體使用不當,先打個電話來通知我們改進都行,但他們卻是用偷襲的方式,我猜這是因為當初這地區還算是新市場,而我們又是這附近最大的製造商,所以就選我們當作殺雞儆猴的目標吧。

決定驅逐微軟之後呢?

我們研究了所有其他替代方案,我們看過蘋果的,但微軟也有投資這家公司(編按:微軟在1997年投資蘋果1.5億美元),因此我們就不考慮了。我們看過昇陽的Sun Ray系統,市面上有的我們幾乎都看過了,最後還是覺得Linux,尤其是Red Hat可行性最高。

所以現在是什麼樣的Linux環境呢?

我不是IT人員,我是專門做商業決策的,我只知道我們現在用的是Red Hat搭配OpenOffice,與Mozilla,Evolution這些東西。

我們當初找出的方式就是現在市場開始在流行的產物,只是當初我們必須自家動腦筋去想出來。想來真的很有趣,不過短短三年半的時間,我們從當初的意氣用事未 經商業思考,搖身一變到現在竟然可跟技術人員談得頭頭是道,我知道當我改用開放原始碼後,我就馬上省下8萬美元了,每次看到微軟又出新產品,比如 Windows XP,我就省得更多,因為我不用再添購新硬體來滿足軟體需求。最棒的是,原本跑不動Windows 2000,已經快被淘汰的電腦竟然還可起死回生,現在還能在我們的軟體上繼續使用。

轉變後的適應情況如何?

真的很奇妙,我們照樣使用email、client/server、試算表、文書處理,跟Windows環境沒什麼兩樣。有分析師算過,轉換到開放原始碼 的每個員工成本為1250美元,但我們並沒有這麼高,我不想講實際的數字,但我可以這麼說,我不用再按人頭來付權利金了,我不用再買新電腦,若真的有需 要,我們都用組裝電腦就行了,我們所處理的東西並不需要用到多高階的系統。

但現在有人說,若把後續支援與服務費用加進來,開放原始碼的成本也是很高的。

需要什麼支援呢?我又不用打電話向Red Hat求援,不需要,這只是唬人的而已;我們也沒有處理病毒的成本,根本沒碰上過病毒;若員工電腦真的有問題,IT人員也不用跑去現場修理,他只需在自己 座位上就搞定了,因為一切都是伺服器架構了,我真的覺得成本降低很多,至於分析師愛怎麼說那是他們的事。

另一個好處是生產力問題,若你的電腦中包含許多跟工作不相干的功能,員工就很容易會去拿來玩,我公司就沒這種問題。若你只需要用到文書處理,我就安裝文書 處理軟體給你就行了,你的電腦裡不會有小畫家或PowerPoint其他有的沒的。我再跟你說一件事,自從公司把電腦中的瀏覽器移除後,員工上班瀏覽 eBay的次數就大大降低;負責填表格,進出貨的員工幹嘛需要網頁瀏覽器?若你有2000台電腦,每一台都要一個Web瀏覽器,那真的太誇張了。這只會造 成員工分心而已。

微軟方面後來有跟你接觸過嗎?

今天在會場上,有位希望匿名的微軟員工聽了我的演說後跑來跟我道歉。他問我是否有人跟我道歉過,因為他覺得那種作法真的很無理,我跟他說沒有,於是他就跟 我道歉,他說他們其實並沒有惡意。我當然相信他們或許無意那麼做,但當一家公司變大後,它根本不知道它腳下踩中了螞蟻,只是這次他不小心踩中一隻紅螞蟻罷 了。

Erinie Ball在音樂圈素享盛名,現在跨行紅到科技圈,感覺如何?

我很高興在科技產業還能有一些影響力,這也突顯出整個產業的荒謬性,一家改用開放原始碼的小公司竟然可以獲得媒體大幅報導,這其中原因正是因為大家總有錯誤的認知,以為沒有微軟,公司就活不下去,也因此拒用微軟的反而成了新聞。

這只不過是軟體而已,你必須掌握哪些是公司該做的事,然後找出適當的工具來加以執行,我們不是一家落伍的組織,我們是相當先進的,我們也獲得通訊與設計 獎,即使我不用微軟Outlook寄送email也不會對我們有所阻礙,這真的很好笑,我只是用了一套不同軟體,就可以在這種科技大廠雲集的場合跟滿座的 聽眾發表演講。

你多半使用現成的套裝軟體,那麼你在開放原始碼領域中都找得到你需要的東西嗎?

有的,有些東西真的很難找,比如薪資軟體,我們後來有找到相當好用的,但開發人員真的需要開始寫一些商場上真正需要的程式,他們現在都還忙著打造市場上已 經有的伺服器,做一堆之前已經做過的事,大家不應該只是寫一些替代微軟的軟體而已,而是要前瞻一些,做出一些不一樣的全新產品才是。

SCO指控Linux一事,你有任何看法嗎?

我看不出這場官司有任何好處,但我有使用他們的Unix系統,現在我已經下令先移除了,我實在看不慣這種作法。他們這麼做只會對整個Linux社群投下一個巨大的陰影。

看慣了軟體更迭,Windows 98不支援了,NT不支援了,OS/2不支援了,但身為IT主管,你看上Linux的好處就是它會一直被支援下去,這是最主要的考量點之一。

假如SCO打贏呢?

假設性問題很難回答,反正橋到船頭自然直,但我真的很難理解會有人宣稱擁有Linux所有權。

我使用開放原始碼不是為了貪它是免費軟體,我不認為天下有白吃的午餐,光是建置就要花錢了,至於成本高低則要看是誰在說話。微軟與一些分析師會告訴你支援 與服務成本很高,這真是太誇張了,他們不妨來我辦公室做做看,我們找Red Hat來支援的機率很低,幾乎等於零,它也不像Windows那麼會當機,且我也不用每次微軟一推出新版本,就要忙著買新電腦。

微軟有試圖回來拉攏你嗎?

微軟手中握有490億美元現金,它哪會把我看在眼裡。若他們真的在意我這家公司,一開始就不可能用那種方式來對待我。我也很高興他們沒回來拉攏我,我很感 激他們讓我看清楚事情的真相,因為我真的省下很多錢,且工作效率也沒打上折扣,且我跟客戶溝通也沒有任何障礙,我真的很感謝你,微軟。

Friday, May 20, 2005

聯合新聞網 | 友善列印 | 植物突變後…自行修補基因

植物突變後…自行修補基因


編譯楊清順/紐約時報二十三日電

美國普渡大學遺傳學家驚人發現,植物會自行修補有缺陷的基因。這表示有些生物的基因可能有神祕備份,和一般遺傳機制並行不悖。

如果這項發現獲得證明,代表孟德爾在十九世紀發現的遺傳定律將出現例外。還有一點也很驚人,這個神祕的備份基因似乎不是由標準的遺傳物質去氧核醣核酸(DNA)構成。

這項發現還引出很有趣的生物學問題,例如它會不會推翻進化論。進化論的基本論點是突變改變生物,不是備份系統導正生物。

加州理工學院遺傳學家梅洛維茲博士說:「這項發現看起來很神奇。」哈佛大學進化生物學家海格博士說,這項發現確實很奇妙,結果出人意表,如果自然界普遍有這種現象,這項研究就具有重大意義。

普渡大學的普魯伊特博士、羅勒博士等人在「自然」雜誌發表結果,他們是在植物遺傳研究常用實驗素材阿拉伯芥(arabidopsis)發現這個現象。

但據德國馬克斯─普朗克發育生物學學院的魏格爾博士說,跡象顯示這也會發生在人類身上。

普魯伊特、海格等人三年前開始研究控制植物表皮的基因,其中一項研究是探討基因突變使花瓣與其他器官擠在一起。

由於所研究植物的兩種版本基因都發生突變,它們幾乎不可能培育正常的後代。但它們培育的後代卻有多達百分之十恢復正常,這種現象可能出於各種不尋常的原因,不過絕對不是改變DNA的排列。他們進一步分析發生突變的基因,赫然發現這個基因也發生變化,發生突變的DNA恢復正常了。

現在已經知道有很多方法可以導正發生突變的基因,不過這些方法都需要有正確的基因充當模子。普魯伊特團隊檢視阿拉伯芥的所有DNA,希望能找到神祕的備份基因,結果無功而返。普魯伊特及其同事認為,一定有正確的模子存在,但不是DNA,可能是DNA的近親核醣核酸(RNA)。RNA在細胞扮演重要角色,也是一些病毒的遺傳物質。但RNA的穩定性不及DNA,因此被認為不適合保存高等生物的基因資料。

【2005/03/24 聯合報】


Wednesday, March 23, 2005

Friday, February 18, 2005

軟體專利---社會進步最大的阻力

======================================================
請參考以下這篇文章
出處 http://taiwan.cnet.com/news/special/0,2000064597,20096551,00.htm


全文轉貼自: Taiwan.CNET.com
---

觀點:比爾蓋茲與共產黨同路人

Richard Stallman‧陳奭璁譯  18/02/2005
友善列印 Email文章給朋友 儲存文章

CNET前陣子訪問比爾蓋茲(Bill Gates)談到軟體專利問題時,他把話題轉移到「智慧財產權」上,還扯上各種法令來模糊議題。

接著他表示,任何人只要不遵守這些法令就是共產份子(communist)。我雖然不是共產黨,但我批評過軟體專利,所以我就自己對號入座,當他是對我意有所指。

若有人抬出「智慧財產權」(intellectual property)這字眼,他很可能是自己搞不清楚狀況,不然就是想把你搞混。這個泛稱字眼包含了著作權法、專利法與其他多種法令,其中涉及的規定與效應 相差極大。蓋茲先生為何要把這些議題混為一談呢?我們不妨研究一下他想模糊的地方。

軟體開發人員並不反對著作權法,因為程式開發人員本身就握有程式的著作權;只要這些程式碼是程式人員自己寫出來的,其他人就沒有權利主張這些程式的著作權,也因此並不需擔心外人能把任何侵犯的行為加以合理化。

專利則又另當別論。軟體專利並不涵蓋程式或程式碼本身;它講究的是概念(方法、技術、功能、運算法則等)。開發一個大型程式勢必會包含許多概念,即使其中 有幾個全新的想法,其他部分還是會來自開發人員先前在其他軟體上所看過的東西。若每個概念都有人來申請專利,那每個大型程式免不了要侵犯上百個專利。開發 一個大型軟體等於要讓自己吃上上百宗官司。是以軟體專利對軟體開發人員以及用戶(也可能連帶挨告)都是一大威脅。

部分軟體開發人員比較幸運可逃過一劫,這些多半是大型廠商,本身就握有許多專利,還會交叉授權,這讓小廠商吃盡了苦頭,也因此會在國會遊說軟體專利的多半是超級大廠。

微軟現在也是一家握有眾多專利的超級大廠,微軟曾在法庭上表示MS Windows的主要競爭是Linux,也就是自由軟體GNU/Linux作業系統。先前有部分外洩文件顯示微軟有意以軟體專利來打擊GNU/Linux的開發。

蓋茲先生先前大力提倡垃圾郵件(spam)解決方案時,我就懷疑這可能是微軟想利用專利來控制網路的陽謀。果不出所料,微軟在2004年就要求IETF (Internet Engineering Task Force)核准一個微軟想要申請專利的通訊協定。該協定的授權政策想要把自由軟體完全排除在外。只要支援此一郵件協定的程式就不能以自由軟體的形式出 現,不管是GNU GPL(通用公共授權書)、MPL(Mozilla公共授權書),或Apache授權書,甚至是BSD授權,通通不准。

IETF拒絕微軟的申請,但微軟表示還是表示會說服各大ISP來採用。感謝蓋茲先生的提醒,現在我們終於知道,開放式的網際網路原來是一種共產行為,且這個當初架設的共產黨份子還真有名:那就是美國國防部。

以微軟的市場力量,它可直接把它喜歡的程式系統當作市場的de-facto標準。微軟已經替部分.Net部署方式申請了專利,外界不免擔心許多用戶都已經落入了微軟這個壟斷大王的手中。

但資本主義本來就具有壟斷性質,至少「蓋氏」資本主義是這麼認為。比爾蓋茲說,若你認為你有自由撰寫複雜軟體、自由使用軟體的權利,你就是共產黨。但這些共產黨份子也滲透進去微軟董事會了,以下是比爾蓋茲在1991年向微軟員工發表的談話:

「若以前也有軟體專利這回事,人人都把想法拿去申請專利,那麼現今的產業根本前進不了。一家新創公司成立時手中沒有任何自己的專利,他只能任由大廠在專利費用上需索無度。」

蓋茲先生的秘密現在終於現形了:原來他也曾經是個共產黨員,在微軟壯大為超強企業前,他也曾一度認為軟體專利危害之烈。現在微軟則打算以軟體專利來強迫你付錢。若我們拒絕了,蓋茲先生就把你歸為共產黨同路人。

若你不怕被「抹紅」,請前來自由資訊機基礎架構基金會ffii.org的網站,加入歐洲反對軟體專利之戰。我們曾經成功說服歐洲議會過,這次有您的協助,我們必能成功。

(作者為自由軟體基金會總裁暨GNU專案召集人)

Thursday, February 17, 2005

李遠哲:不看電視、報紙就覺台灣美好,曾虛白新聞獎典禮有感而發指記者應探求新聞本質社會才會更進步。

(記者顧美芬∮台北報導)中央研究院院長李遠哲昨天應邀於曾虛白新聞獎頒獎典禮致詞時表示,他有時跟別人說,不要看電視,不要看報紙,就會覺得台灣還是很美好。常有人說,媒體和立院是社會的亂源,他認為媒體的影響力很大,的確需要反省。

由曾虛白新聞獎基金會、政大新聞系、中央通訊社等單位共同主辦的第30屆曾虛白新聞獎昨天在福華國際文教會館舉行頒獎典禮。中央研究院院長李遠哲應邀致詞時表示,外界常說「媒體和立法院是兩大亂源」,媒體或許認為不公平,他認為,媒體的影響力很大,的確需要反省檢討。

李 遠哲透露,當他接到受基金會董事長胡元輝的邀請時,心情很矛盾,因為他從回國開始,每次講話,就被大肆報導。他也深刻體會到,媒體的影響 力真的很大。他說,中研院網羅許多優秀人才回國服務,隔不了多久就說「台灣不能住了,我要回去了」,於是李遠哲就勸他們,不要看電視、不要看報紙,到鄉下 去走走,就會發現台灣還是很美好。就像他從導演吳乙峰執導的紀錄片「生命」中,深受感動。

據研究指出,媒體建構的自殺圖像,影響閱聽 人腦海中的自殺圖像,會助長其自殺行為,「所以媒體常常不知不覺謀殺很多人。」李遠哲強調,如 果記者努力去探求新聞本質,我們的社會會更進步;媒體記者如果常找一些題目創造對立,我們的社會就會變成對立的社會。他希望大家共同努力,讓台灣變成更進 步。

第30屆曾虛白新聞獎得獎名單,分為《報紙報導獎》獲獎者為蘋果日報「泰瑞黑心電視機內幕追蹤報導」,謝素娟等20人。《報紙攝 影獎》獲 獎者為聯合報「教改叫改系列」,杜建重、侯世駿、陳易辰、鄭超文、潘俊宏、張天雄、胡經周、黃義書等人。至於報紙評論獎從缺。廣播報導獎獲獎者為漢聲廣播 電台「浴火重生錄系列報導」,張忠恕、孫瑞麟、陳雅鴻。電視報導獎東森電視「危雞危機:禽流感追蹤」,呂和采、賴志豪、胡毋意、李惠仁。新聞學術獎「節目 品質與優質電視」,世新大學新聞系教授鍾起惠。 .....2004-09-22【台灣日報】

Tuesday, January 25, 2005

社交工程...

不管基因改造的多強,防駭技術多麼先進,但心理卻是有感情的人類永遠的缺陷

Friday, January 07, 2005

English

kcg news

Digital MultiMedia

Digital MultiMedia

開張囉

人生中第一個Blog...
先來test看看吧:)