Heresy's profile[Heresy' Space]PhotosBlogListsMore Tools Help
    4/29/2008

    感覺虛掉的 3D Mark Vantage…

    3DMV_box_M比較有在玩電腦的,應該都知道 3D Mark 這系列著名的 3D 效能評測軟體吧?這套軟體是由 FutureMark 這家公司所推出的,在 3D 遊戲、顯示卡方面來說,一般都會被當作一個滿重要的評測指標。而以往的 3D Mark 03, 05, 06 的炫麗畫面,也讓不少人可以看到當時頂級遊戲的畫面。

    而自從 3D Mark 06 推出後(應該是 2006 年一月?),也很久沒有推出新版本了…而最新的 3D Mark Vantage,也終於在數次延遲、眾所期待下,於昨天推出了!

    而第一件事呢,就先來看他的系統需求吧~

    處理器 須支援 SSE2(Pentium4 和 Athlon64 開始,應該都有支援了)
    建議:雙核心處理器,效能等同 Intel Core 2 Duo E6600、AMD Athlon X2 6000+ 或更好
    顯示卡 完全支援 DirectX 10
    建議要有 512MB 的顯示卡記憶體
    顯示裝置 至少 1280x1024 的解析度
    建議要有 1920x1200 的解析度
    系統記憶體 至少要到 Vista 的最低要求(好像廢話…)
    建議 2GB 或以上
    硬碟 需要 1GB 的空間
    作業系統 Windows Vista Service Pack 1

    看完後,最討厭的一點,大概就是「Vista Only」吧? 由於微軟的策略,Direct X 10 只能在 Windows Vista 上使用,不能在 Windows XP 上用;這也導致了僅為 Direct X 10 設計的 Vantage 也僅能在 Vista 上執行了…

    這次在 Vantage 中,根據不同的狀況,他提供了四種不同的預設組態:

      Entry Performance High Extreme
    解析度 1024*768 1280*1024 1680*1050 1920*1200
    反鋸齒 關閉 2x 4x
    texture filtering trilinear anisotropy
    Anisotropic Filtering 關閉 8x 16x
    Texture 品質 Entry Performance High Extreme
    Shadow Shader 品質
    陰影解析度品質
    陰影品質
    後處理 Scale 1:5 1:2 1:5
    Bloom 開啟
    Streaks
    Anaomorphic Flare
    Lens Flare
    Lenticular Halo
    動態模糊 關閉 開啟
    Depth of Field
    Fog 開啟
    Color Noise
    物理模擬(PhysX)
    GPU 模擬 關閉 開啟

    參考資料:FutureMark's 3D Mark Vantage Review

    不同設定下的差異,可以參考 benchzone 的《FutureMark's 3D Mark Vantage Review》一文中,第三頁的抓圖。

    而這次的測試,分成 Jane NashNew CalicoCPU Test 1 - AICPU Test 2 - Physics 四項。個別主要測什麼呢?可以參考上文的第四頁,或者也可以參考對岸的簡體中文文章;比較特別的,應該是在這一代,已經把 PhysX 這種物理加速卡加入支援了~(話說…這東西有前途嗎?nVidia 以後不是打算用 CUDA 來做嗎?)在第四項測試時,如果有 PhysX 的話,是會影響到測試的~而在benchzone 的那篇,還有提供了測試時的影片,可以給不想安裝 Vantage 的人參考。

    另外,Vantage 這次總共有四種版本:

      免費試用 Basic Advanced Professional
    售價 免費 6.955 19.95 495
    執行次數 一次 無限制
    預設組態 Performance 四種全部
    檢視結果 需要上線檢視 離線檢視
    Feature Tst 無法使用 允許使用
    命令列執行
    商業使用 不允許 可以
    參考資料:FutureMark's 3D Mark Vantage Review

    有發現最討厭的一件事嗎?那就是免費版只能用一次!在下載安裝 Vantage 後,還必須要到 FutureMark 官網申請試用序號,才可以執行測試…這也大大的降低了免費版的可用性。 = =
    而 Heresy 也在一台 Vista 的電腦安裝了,並用測試序號跑了一組測試,但是到了最後要連上網路看結果時,卻一值失敗,沒辦法看…所以也別問 Heresy 跑的分數了。在 Benchzone驅動之家都有做一些測試的結果出來,有興趣的可以自己去看看。

    接下來,直接講 Heresy 的感想吧~

    1. 介面好像很炫。
    2. 很討厭。連免費版本要申請序號才能用,而且只能用一次。
    3. 畫面很醜。benchmark 的東西只有四項,但是沒有一項看起來就很炫…和以往的 3DMark05 或 06 比起來,時在是落差很大。 = =
      第一項 Jane Nash 的人物醜到翻,水面處理效果應該是重點之一,但是也沒有多真實感?
      第二項 New Calico 的太空船和宇宙效果還比較可以一點,但是也沒多有吸引力…
      第三項、第四項的 CPU 測試?恩…就幾台很簡單的飛機飛來飛去,不知道在慢個什麼鬼…(好像是慢在人工智慧和物裡模擬就是了…)
    4. 跑完成績只能網上看。但是 Heresy 這邊一直不能看,結果完全不知道幾分

    Heresy 個人總覺得,FutureMark 好像藉由 Vantage 把以往 3DMark 系列做出來的聲譽毀了?當然啦~只是個人感覺,實際上狀況就不清楚了;只能說,這套 benchmark 程式,實在很難吸引 Heresy 去跑他…

    全民捐電池,用心愛地球

    官方活動網址:http://www.fe-geant.com.tw/promotion.aspx?serial_no=210

    GetMediaData

    活動時間是 4/16 到 7/15,只要用廢電池,就可以到愛買更換東西囉~

    基本上,一顆電池就可以換一點 Happy Go 點數。而如果不想換點數,也可以五顆電池換一顆心的電池、十顆電池換一株樹苗、廿顆電池換一支金頂兔~

    家裡有廢電池的,可以考慮去換囉!不過,Heresy 自己現在都用充電電池,好像沒東西可以去換就是了。 ^^"

    CUDA Volume Rendering [Part.2 程式流程]

    在前面 part.1 的部分,已經先做了一些簡單的介紹;接下來,開始看程式碼吧~這一部分,主要是看 volumeRender.cu 中 main function,並大概講一下 volume data 的前置處理。

    main() 函式裡,主要分成幾個部分:

    1. 透過 cutil 來處理執行時的參數。
    2. 讀取 volume data,並初始化 volume 資料
    3. 設定 glut 環境
    4. 起始設定 pixel buffer object
    5. 執行 glut 的 main loop

    第一部分主要就是透過 cutil 的 cutGetCmdLineArgumenti() 這個函式,來處理 main()argc 以及 argv。而這個程式是設計成可以指定檔案的檔名以及大小,例如:「-file=brain.raw -xsize=512 -ysize=512 -zsize=125」就是指定檔名為 brain.raw,x, y, z 三軸的大小依序為 512, 512, 125。

     

    第二部分則是先透過 cutFindFilePath() 去找出檔案完整的路徑,然後再透過 loadRawFile() 來讀取 RAW 資料成為一個 unsigned char 的陣列;這邊的 RAW 資料,原則上就是一張一張 2D 灰階圖組合成的單一檔案。接著,就是透過 initCuda(),來把讀取進來 uchar 陣列(本程式一開始就把 uchar 定義為 unsigned char,以下將以 uchar 沿用),轉換成 ray casting 需要的 3D Texture 了~
    (由於他是使用 cudaArray 來 bind 到 3D texture,所以建議可以先參考看看之前寫的《CUDA Texture Part.1 簡介》)

    接下來,就是直接看 initCuda() 這個函式了~這個函式裡做的事,主要包含了兩部分:

    1. 建立 volume 資料本身的 3D texture
    2. 建立將 volume 資料的灰階,對應到彩色的 transfer function,以及他的 1D texture

    將 volume data 建立成 3D texture 的程式如下:

    // create 3D array
    cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<uchar>();
    CUDA_SAFE_CALL( cudaMalloc3DArray(&d_volumeArray, &channelDesc, volumeSize) );
    
    // The sample does not work with pageable memory
    // This is a known issue for beta that will be fixed for the public release
    #define USE_PAGE_LOCKED_MEMORY 1
    #if USE_PAGE_LOCKED_MEMORY
    // copy to page-locked mem
    cudaPitchedPtr pagelockedPtr;
    pagelockedPtr.pitch = volumeSize.width*sizeof(uchar);
    pagelockedPtr.xsize = volumeSize.width;
    pagelockedPtr.ysize = volumeSize.height;
    size_t size = volumeSize.width*volumeSize.height*volumeSize.depth*sizeof(uchar);
    CUDA_SAFE_CALL( cudaMallocHost(&(pagelockedPtr.ptr), size) );
    memcpy(pagelockedPtr.ptr, h_volume, size);
    #endif
    
    // copy data to 3D array
    cudaMemcpy3DParms copyParams = {0};
    #if USE_PAGE_LOCKED_MEMORY
    copyParams.srcPtr   = pagelockedPtr;
    #else
    copyParams.srcPtr   = make_cudaPitchedPtr((void*)h_volume,
                          volumeSize.width*sizeof(uchar), volumeSize.width, volumeSize.height);
    #endif
    copyParams.dstArray = d_volumeArray;
    copyParams.extent   = volumeSize;
    copyParams.kind     = cudaMemcpyHostToDevice;
    CUDA_SAFE_CALL( cudaMemcpy3D(&copyParams) );  
    
    // set texture parameters
    tex.normalized = true;                      // access with normalized texture coordinates
    tex.filterMode = cudaFilterModeLinear;      // linear interpolation
    tex.addressMode[0] = cudaAddressModeClamp;  // wrap texture coordinates
    tex.addressMode[1] = cudaAddressModeClamp;
    
    // bind array to 3D texture
    CUDA_SAFE_CALL(cudaBindTextureToArray(tex, d_volumeArray, channelDesc));

    在這邊,讀進來的資料是 h_volume,他是一個 uchar 的陣列。而和 2D CUDA Array 時一樣,先透過一個 cudaChannelFormatDesc 來描述 cudaArray 的資料型別,然後再透過 cudaMalloc3DArray() 來建立一個大小為 volumeSize 的 3D cudaArrayd_volumeArray

    不過,在註解裡有寫,目前的 2.0 beta 版,還不能直接把一般的記憶體空間的資料,直接複製到 3D 的 cudaArray 裡;必須要先透過 cudaMallocHost() 宣告一個 page lock 的記憶體空間,並把 h_volume 的資料複製到這個 page lock 的變數 pagelockedPtr。然後再設定 cudaMemcpy3DParms,把資料用 cudaMemcpy3D() 複製到 d_volumeArray。比起來,是多了一個先轉成 page lock 變數的過程,不過這個問題在正式版發佈時,應該是會解決的掉的。

    而把資料複製到 cudaArray 後,就是設定一下 3D texture 的參數,然後再透過 cudaBindTextureToArray(),把 cudaArray d_volumeArray bind 到 texture<uchar, 3, cudaReadModeNormalizedFloat> tex 了。

    而在把 Volume 資料本身處裡完了之後,接下來還有一份額外的陣列。由於在醫學的 volume rendering 中,CT、MRI 這些資料都是灰階的;如果要用彩色來呈現、凸顯某些部位的話,大部分都是用一個 transfer function 來做色彩的對應。

    initCuda() 這個函式中的後段,就是在處理這份資料。

    // create transfer function texture
    float4 transferFunc[] = {
        {  0.0, 0.0, 0.0, 0.0, },
        {  1.0, 0.0, 0.0, 1.0, },
        {  1.0, 0.5, 0.0, 1.0, },
        {  1.0, 1.0, 0.0, 1.0, },
        {  0.0, 1.0, 0.0, 1.0, },
        {  0.0, 1.0, 1.0, 1.0, },
        {  0.0, 0.0, 1.0, 1.0, },
        {  1.0, 0.0, 1.0, 1.0, },
        {  0.0, 0.0, 0.0, 0.0, },
    };
    
    cudaChannelFormatDesc channelDesc2 = cudaCreateChannelDesc<float4>();
    cudaArray* d_transferFuncArray;
    CUDA_SAFE_CALL(cudaMallocArray( 
            &d_transferFuncArray, &channelDesc2, sizeof(transferFunc)/sizeof(float4), 1)); 
    CUDA_SAFE_CALL(cudaMemcpyToArray( 
            d_transferFuncArray, 0, 0, transferFunc, sizeof(transferFunc), cudaMemcpyHostToDevice));
    
    transferTex.filterMode = cudaFilterModeLinear;
    transferTex.normalized = true;    // access with normalized texture coordinates
    transferTex.addressMode[0] = cudaAddressModeClamp;   // wrap texture coordinates
    
    // Bind the array to the texture
    CUDA_SAFE_CALL( cudaBindTextureToArray( transferTex, d_transferFuncArray, channelDesc2));

    在這個範例中,他是先宣告一個 float4 的陣列 transferFunc,裡面算是有九個控制點,分別代表灰階值不同所要呈現的階段顏色(介於中間的值,會透過 texture 用線性內插來算)。而這邊他就是用一般的 1D cudaArray 來做,也就不多加介紹了;最後會拿來用的,就是已經 bind 好資料的 texture<float4, 1, cudaReadModeElementType> transferTex

     

    再來的第三部分,則是透過 glut 來建立 OpenGL 的環境。

    // initialize GLUT callback functions
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutInitWindowSize(width, height);
    glutCreateWindow("CUDA volume rendering");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutReshapeFunc(reshape);
    glutIdleFunc(idle);
    
    glewInit();
    if (!glewIsSupported("GL_VERSION_2_0 GL_ARB_pixel_buffer_object")) {
        fprintf(stderr, "Required OpenGL extensions missing.");
        exit(-1);
    }
    

    前面兩行,是在起始化整個 OpenGL 的環境,而第三、四行則是在建立一個 width * height,標題為「CUDA volume rendering」的視窗。而之後的 glut*Func() 則是在設定不同的 callback function。而之後,則是做 glew 的起始化,並確認目前的 OpenGL 環境,是否有支援必要的 pixel buffer object。

     

    第四部分,就是在 initPixelBuffer() 這個函式中,建立用來當輸出結果的 pixel buffer object。

    if (pbo) {
        // delete old buffer
        CUDA_SAFE_CALL(cudaGLUnregisterBufferObject(pbo));
        glDeleteBuffersARB(1, &pbo);
    }
    
    // create pixel buffer object for display
    glGenBuffersARB(1, &pbo);
    glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo);
    glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, width*height*sizeof(GLubyte)*4, 0, GL_STREAM_DRAW_ARB);
    glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
    
    CUDA_SAFE_CALL(cudaGLRegisterBufferObject(pbo));
    
    // calculate new grid size
    gridSize = dim3(iDivUp(width, blockSize.x), iDivUp(height, blockSize.y));

    第一段的 if 是判斷 pbo 這個 buffer object(型別是 GLuint)是否已經被建立,如果有的話,就先把現有的刪除掉。而第二段就是透過 OpenGL 的函式,來建立大小為 width * height,每一點的資料是 4 個 GLubyte 的一塊 GL_PIXEL_UNPACK_BUFFER_ARB 了~

    而在 CUDA 的部分,則是需要透過 cudaGLRegisterBufferObject() 這個函式來註冊 pbo 這個 buffer object;如此,之後才能在 kernel 程式中存取透過 cudaGLMapBufferObject() 所取得的記憶體位址。

    當使用完後,如果在 if 的區段中所做,除了必須要透過 OpenGL 的 glDeleteBuffersARB() 來把 buffer object 刪除外,在之前也需要使用 cudaGLUnegisterBufferObject() 來取消這份 buffer object 的註冊。

     

    而在 main() 中最後的 glutMainLoop(),就是開始執行 OpenGL 的 main loop;之後,要顯示內容、控制程式,就是要靠之前設定的 callback function 囉~


  • nVidia CUDA 相關文章目錄

  • 4/28/2008

    遲疑不決

    這周末有個親戚要在高雄結婚了。好死不死,剛好和大學校友會衝到…

    而 Heresy 是請了幾天假,想說早點去,晚點回來。但是呢,剩沒幾天了,Heresy 還是沒有決定要怎麼回去…是要第三次挑戰機車殺下去?還是要安穩點,坐火車呢?自己到現在,離出發也沒幾天了,還是沒能決定。

    個性使然吧?總覺得,好像常常這樣。很多事情,總是覺得「到時候再說」,然後就遲遲未決,最後則是想辦法順其自然;而很多事情,也就這樣拖掉了。

    自己也知道這樣其實不好。很多事情,其實根本沒有必要這樣遲疑,也沒必要這樣拖延。但是,自己還是沒辦法很快的,直接下決定;很多時候,甚至是用丟銅板的方法來決定…

    當然,會用丟銅板這樣決定的事情,一定是不是很重要的啦~但是,也只是一個無法做決定的具現了…

    4/26/2008

    新竹市 玻璃工藝博物館

    DSC06276Heresy 住在新竹也好幾年了,但是其實新竹市很多地方,還是都沒有去過。像是玻璃工藝博物館,就是一個例子。前一陣子假日,就決定去看看了~而在這個地方,應該是每年都會有所謂的「國際玻璃藝術節」的活動,Heresy 去的時候也剛好碰到了。

    而整個園區的配置,可以參考這張導覽圖。基本上,入口是很顯眼的「築夢仙橋」(右邊的照片),而過了橋後,就是一個廣場。廣場的後方,有一座簡單的城堡造型的建築;不過,當下是被舞台遮住了許多,變得很不顯眼。而在廣場旁,還有一個鐵管搭造的「南瓜馬車」。

    DSC06277 DSC06279

    除了「玻璃工藝博物館」 本身,其他玻璃工藝博物館的建築,還有「玻璃工坊」、「玻璃產業行銷館」、「美人魚館」、「玻璃藝術街」(指的應該是玫瑰花館、杜鵑花館、茶花館)等。而和玻璃沒關係的,還有「風城願景館」、「姊妹市館」等。此外,新竹動物園、孔廟也都在這一帶。

    而玻璃工藝博物館要進去,是要購買門票的~所以呢…Heresy 理所當然的沒有進去了。博物館裡面值不值得買票進去?Heresy 就不知道了~ ^^"

    因此,接下來,就是這一帶外部的照片了~

    DSC06281
    玻璃工藝博物館本體
    DSC06282
    玻璃工坊
    DSC06285
    杜鵑花館
    DSC06283
    姊妹市館
    DSC06284
    姊妹市館
    DSC06286
    忘了是茶花館還是玫瑰花館
    DSC06290
    九曲橋
    DSC06291
    九曲橋
    DSC06287
    忘了是茶花館還是玫瑰花館(背面照)
    DSC06292
    九曲橋
    DSC06289
    九曲橋
    DSC06293
    風城願景館
    DSC06295
    美人魚館附近的舊砲台
    DSC06294
    美人魚館附近的舊砲台
     

    在九曲橋一帶,人還滿多的~有一群人在這裡學吉他、也有人在橋上餵魚;感覺上,應該是不少人假日來這兒休憩。

    而由於沒有進博物館裡,所以逛一圈要花的時間並不多 ^^"
    接下來,再貼一些其他區域的照片吧~

    DSC06298
    新竹市動物園
    DSC06288
    新竹市動物園(側門)
    DSC06296
    孔廟
    DSC06297
    孔廟外的老人家

    4/24/2008

    PhotoShop Plug-in Filter CUDA 版

    來自 nVidia 論壇的公告:Beta Photoshop CS3 Plug-in filters

    重點就是:nVidia 釋出了第一個 CUDA 的 PhotoShop plun-in 的 beta 版!

    相關資訊,主要在他的文件中:http://developer.download.nvidia.com/compute/cuda/Photoshop/CUDAFilters4.pdf

    未命名 -2重點呢,他提供了四個 filter:

    1. InvertFilter:
      A basic filter that inverts color channels, used as a simple example of CUDA image processing
    2. AutoLevelsFilter:
      A histogram normalization filter, demonstrating how to use more advanced techniques with CUDA (such as creating histograms)
    3. knnFilter:
      A k nearest neighbor denoising algorithm.
    4. LRDeconvFilter: A GPU implementation of a Lucy-Richardson deconvolution that demonstrates frequency domain processing on the GPU using the CUDA FFT libraries in the filter.

    他不但提供了編譯好的 PhotoShop filter 的 8BF 檔案,也提供 Source code!
    http://developer.download.nvidia.com/compute/cuda/Photoshop/cudaFilters_02.zip

    如此一來,應該也可以成為一般人想要用 CUDA 寫 PhotoShop filter 的一個參考範本了~

    而雖然他是寫 CS3 版,但是 Heresy 這邊用 PhotoShop CS 來做試驗,也是可以使用的!不過,由於既是 Beta 又只是 Demo,其實也沒選項可以調,就是按下去就執行就是了。 ^^" 

    做了一些簡單的測試,原圖是:

    lena_std

    結果:

    lena_std_autolevel
    Autolevel
    lena_std_deconv
    LRDeconvFilter 
    lena_std_invert
    Invert
    lena_std_KNN
    knnFilter


    nVidia CUDA 相關文章目錄

    CUDA Volume Rendering [Part.1 簡介]

    volumeVolume Render 是 CUDA 2.0 Beta 版新加入的一個範例,主要是直接透過 3D Texture 來做 Volume 的 Ray marching。

    關於 Volume Rendering 這項技術,可以先去參考維基百科的說明:「立體渲染」。不過還是大概提一下,Volume Rendering 實際上在醫學方面其實相當普遍;主要是一般的斷層掃描都是一張一張的平面影像,把這些平面影像按照順序堆疊起來,就會變成一個 3D 的影像資料(也就是所謂的 Volume data)。Volume Rendering 就是一種用來繪製這種 3D 影像資料的技術。(應用參考

    而由於傳統的電腦圖學都是以多邊形的方式來建構、繪製 3D 場景;這點和呈現 Volume 所需要的技術是不同的!所以 Volume Rendering 沒辦法直接使用傳統的電腦圖學方法來呈現。

    而一般來說,常見的 Volume Rendering 有兩種概念:第一種是將 Volume data 建立出多邊形的資料,然後再用這些資料還繪圖;第二種則是直接拿整個 Volume 資料去畫,這種方法一般叫做 Direct Volume Render。

    在 Direct Volume Rendering 又有數種不同的技術,下面列舉常見的兩種:

    Ray casting Slice base
    ray

    由觀測點(eye)往 volume 看,每一條「視線」,都根據某個固定的間距在 Volume 中取樣,然後依此累算出這條視線最後會呈現的顏色。

    實際上,每一條線會對應到最後呈現的圖上的一個點;所以最後要呈現的解析度要多高,就得做幾次這樣的運算。

    slice

    根據和視線的垂直方向,把 Vloume data 重新取樣,產生出多張和視線垂直的 slice;接著再由後而前,依序把這些 Slice 用傳統的多邊形方法來繪製。

    上圖資料來源:Volume Rendering For Games

    而在 CUDA 2.0 的 SDK 中所提供的 Volume Rendering 範例(專案名稱就是 volumeRender,檔案在 C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects\volumeRender),就是 ray casting 的方法;不過,他藉由 CUDA 這套 SDK,可以發揮 nVidia GPU 的大量平行化的好處,來做 GPU 的 ray casting。

    程式的基本概念,是把 Volume 的資料讀到電腦的主記憶體後,當成 3D Texture 來 bind 到 device memory 中,然後再透過 CUDA kernel 來透過存取 3D texture,進行 ray casting 的計算。而運算的結果,會直接當成 OpenGL 的 Buffer Object,直接畫出來;如此也避免了必須要先把結果由 device memory 複製回 host memory,再送到 OpenGL render 的傳輸時間。

    他的程式檔有兩個:

    • volumeRender.cu
      主程式、資料讀取和 OpenGL 等相關的部分。
    • volumeRender_kernel.cu
      實際做 ray casting 的 CUDA kernel。

    volumeRender.cu 中的 function 列表如下:

    main main function。
    loadRawFile 用來讀取 Volume data 的函式。
    在這個範例中,Volume 的資料是用 3D 的 RAW 檔來儲存的。
    initPixelBuffer 建立 OpenGL 的 pixel buffer object,用來對應到 CUDA ray casting 儲存結果的記憶體空間。也直接拿來畫出結果。
    cleanup 清理資料用的。
    iDivUp 做除法的無條件進位,用來算 grid 大小用的。
    initCuda 起始化 CUDA 的資料。
    主要是把讀進來的資料建立成 3D Texture,以及建立顏色對應用的 transfer function(包含陣列資料以及 1D texture)。
    render 把旋轉矩陣由 host memory 複製成 device 上的 constant 變數。
    然後呼叫 kernel 函式,進行計算。
    display glut 的 callback function,用來顯示用的,每次要更新畫面,都是執行這個函式。
    他會計算物體的旋轉矩陣,然後再呼叫 render() 來做 ray casting 計算,最後再把儲存了結果的 pixel buffer object 畫出來。
    reshape 這四個 function 是 glut 的 callback function。
    reshape 是當視窗大小位置改變時會被執行到、motion 是滑鼠移動時會被呼叫的、mouse 是滑鼠按鈕會執行的函式、keyboard 則是鍵盤的。
    這邊不多加解釋了。
    motion
    mouse
    keyboard

    而在 volumeRender_kernel.cu 中,則是:

    intersectBox 計算一條視線和 Volume 的 box 的交點,並傳回相交的最近點和最遠點。
    mul 計算矩陣乘上一個向量。
    rgbaFloatToInt 把 rgba 四項的 color,轉換成一個 int 來儲存。
    d_render CUDA 的 device kernel function。
    為每一個像素,用 Ray casting 的方法來計算他的顏色。

    而更進一部的內容,請參考下一篇《CUDA Volume Rendering [Part.2]》。


  • nVidia CUDA 相關文章目錄

  • 4/22/2008

    トライアングラー

    《トライアングラー》這首歌,也是本季新番之一的《Macross Frontier》的主題曲。《Macross Frontier》也算是這季裡,Heresy 比較期待的動畫之一了!

    而以往的《Macross》(台灣翻譯應該是《超時空要塞》)系列,也都有不少好聽的歌。這次的主題曲是坂本真綾唱的,《トライアングラー》就是 Triangular,也就是三角關係的意思。實際上,坂本真綾的歌其實有不少都相當好聽,像之前的《Tune the Rainbow》也是一手非常好聽的歌。

     

    歌:坂本真綾
    作曲・編曲:菅野よう子
    作詞:Gabriela Robin

    君は誰とキスをする?
    わたし それともあの娘?
    君は誰とキスをする?
    星を巡るよ 純情

    弱虫泣き虫連れて
    また行くんだと思う わたし
    愛するより求めるより
    疑うほうがずっとたやすい自分が悔しい

    痛いよ
    味方だけど愛してないとか
    守るけど側にいれないとか
    苦い二律背反
    今すぐ タッチミー
    運命ならばつながせて

    君は誰とキスをする?
    わたし それともあの娘?
    こころ揺らす言葉より
    無責任に抱いて 限界

    妄想を裁くオキテ
    うしろから蹴りあげたら
    むき出しの恋によろけた
    呼吸だけで精一杯
    むかえに来て おぼれてるから

    痛いよ
    前向きな嘘 真に受けるのは
    笑ってる声せがめないから
    未来もてあました
    今すぐ Hold me
    理性なんて押し倒して

    君は誰とキスをする?
    わたし それともあの娘?
    涙まるで役立たず
    星を駆けるよ 純情

    What is this triangle for ?

    キミは誰とキスをする?

    君は誰とキスをする?
    わたし それともあの娘?
    たったひとつ命をタテに
    いまふりかざす 感傷

    你會和誰親吻?
    是我  還是那女生?
    你會和誰親吻?
    繞著星球轉呀 我的純情

    明明自己膽小又愛哭
    卻還想跟你走下去
    與其愛你渴求你
    懷疑起你反而比較容易 懊悔這樣的自己

    心好痛
    說什麼我是你知己但從來沒愛過
    說什麼要保護我卻不能陪在身旁
    苦澀 自相矛盾
    現在立刻 Tuch me
    若是命中註定 就讓我倆連繫

    你會和誰親吻?
    是我  還是那女生?
    與其聽那些動搖我心的話語
    不如不顧一切的擁抱我 我已不行

    分辨妄想的基準
    若從身後突然把它踢高
    我會被失控的愛情所絆倒
    光是呼吸都有困難
    快來接我吧  因為我已沈溺

    心好痛
    你那善意的謊言 我卻當真接受
    只因為笑聲是不會被你嫌棄
    未來 已經難以捉摸
    現在立刻 Hold me
    什麼理性 早就推到雲端裡

    你會和誰親吻?
    是我  還是那女生?
    眼淚對你完全使不上力
    繞著星球衝呀 我的純情

    What is this triangle for ?

    你會和誰親吻?

    你會和誰親吻?
    是我  還是那女生?
    就用這寶貴的性命當掩護
    快點拭去吧  我的感傷

    歌詞來自:http://bbs.liouming.net/viewthread.php?tid=30996

    4/21/2008

    CUDA 2.0 Beta for Windows and Linux

    ㄟ~因為前幾天沒有注意,所以晚了幾天了。 ^^"
    總之,在 4/17 的時候,nVidia 已經放出了第一個版本,給 Windows 用的 CUDA 2.0 Beta 版的 driver、SDK 以及 toolkit 了。當時 Heresy 有馬上注意到,也寫了篇《CUDA Beta 2.0 for Windows & Vista》。

    而在隔天的 4/18,nVidia 也立刻推出了 Red Hat Enterprise Linux 4/5 的 CUDA Linux beta 版本~根據之前的說法,在正式版之前,應該只會有這些版本了。

    同時,在 Windows 版的部分,也把 SDK 做了一個小更新,從原來的 beta20a 變成了 beta20b;據說主要是修正了 threadMigration 在 64 位元下命名錯誤的問題(在 release note 裡沒有註明… @@)。而除了 SDK 外,Driver 和 toolkit 看來是都沒有改變了~

    下載連結:

    Windows XP 32 顯示卡驅動程式 Toolkit SDK
    Windows Vista 32 顯示卡驅動程式
    Windows XP 64 顯示卡驅動程式 Toolkit SDK
    Windows Vista 64 顯示卡驅動程式
    RHEL4 32bit 顯示卡驅動程式 Toolkit SDK
    RHEL5 32bit Toolkit
    RHEL4 64bit 顯示卡驅動程式 Toolkit
    RHEL5 64bit Toolkit


    nVidia CUDA 相關文章目錄

    4/20/2008

    梁靜茹:彩虹

    好久沒有聽中文歌了…

    昨天回台北,沒事打開電視,剛好聽到歌唱比賽,有人在唱梁靜茹的《彩虹》,才又想起,其實 Heresy 還滿喜歡梁靜茹的歌的!而彩虹,也是在最喜歡的之中。

    想聽看看這首歌的話,可以到 Youtube 找

    歌名:彩虹
    附註:
    語言:國語, 曲長:5m55s
    作曲:, 編曲:梁伯君
    監製:, 填詞:阿信

    坐在浴缸裡蓮蓬頭 代替我哭泣像下雨
    其實我不知道 眼淚有沒有流
    就像這故事中 你有沒有愛過我

    虛弱的窗簾留不住 房裡的黑夜也要走
    清晨喚醒了我 照亮昨夜的夢
    一直到這時候 才開始有一點懂

    你的愛就像彩虹 雨後的天空
    絢爛卻叫人迷惑 藍綠黃紅
    你的愛就像彩虹 我張開了手
    卻只能抱住風

    你的愛就像彩虹 雨後的天空
    絢爛卻叫人迷惑 你的輪廓
    你的愛就像彩虹 我張開了手
    卻只能抱住風

    吻我離開我你就像 出太陽下雨難捉摸
    越是努力揣摩 越是搞不懂
    只好慢慢承認 這故事叫做錯

    Oh 一層一層 一層一層 一層一層 又一層層的迷宮 我來不及回頭
    Oh 忽左忽右 忽上忽下 忽東忽西 忽前忽後的折磨 都是你的捉弄

    吻我離開我你就像 出太陽下雨難捉摸
    越是努力挽留 越是一無所有
    只好慢慢期待 雨後你的影蹤

    4/17/2008

    CUDA Beta 2.0 for Windows & Vista

    之前 nVidia 在官方論壇就有預告過,即將推出 CUDA 2.0 的 beta 版了~而今天,也確實有公布 CUDA Beta for Windows 版的下載了!詳細資料,可以在他的官方論壇找到。

    注意!SDK 已有新版,請參考《CUDA 2.0 Beta for Windows and Linux
    32bit Toolkit SDK Windows XP 顯示卡驅動程式
    Windows Vista 顯示卡驅動程式
    64bit Toolkit SDK Windows XP 顯示卡驅動程式
    Windows Vista顯示卡驅動程式

    而文章中主要的重點,大致有:

    • 在 Vista 下:
      • 要執行 CUDA,要把 SLi 關閉。(此功能已解決,但是沒放到這次的 beta 版中)
      • 要使用多個 GPU,那每個 GPU 必須要有桌面延伸到該 GPU。這也代表了,在 Vista 下沒辦法使用沒有螢幕輸出的 Tesla。
    • CUDA 目前還是只能用 Visual Studio 2005 來編譯(在今年內會支援 VisualStudio 2008)。
    • 64bit SDK sample 的「thradMigration」在設定上有問題。

    而硬體支援的部分:

    • 支援 G80、G84、G86、G92;但是 9800GTX 在這版還不支援,不過有支援 9800GX2。
    • 筆記電腦的晶片在這版的驅動程式有支援,但是休眠、待命、省電、風扇轉速等功能可能會有問題。

    而實際在安裝 CUDA 2.0 Beta 時,必須要把舊版移除掉,而顯示卡驅動程式也要換成專用的 174.55。而程式開發的文件部分,在 doc 目錄下(預設是 C:\CUDA\doc),除了新的《Programming Guide 2.0 Beta》,還多了 PDF 版和 CHM 版的《CudaReferenceManual》這份參考手冊,可以用來查詢函式的內容(包含 CUFFT、CUBLAS)。此外,也多了一份《CUBLAS Library 2.0》的說明文件和範例。

    而在程式編寫上比較大的新功能,一如上次所提及的,應該就 3D Texture 的支援了~在 CUDA Array 的 texture 方面,維度正式支援 3D 了!也因此,也多了 tex3D() 這個函式。

    關於 double…雖然在內建的型別有多了一個「double2」,但是實際上,卻還是沒有多在 Programming Guide 中多加著墨;因此,目前應該還是只能視為不支援了。

    在範例程式的部分,2.0Beta 有總共 58 個專案;新增了 dct8x8, quasirandomGenerator, recursiveGaussian, simpleD3D9Texture, simpleTexture3D, threadMigration, and volumeRender 這七個範例。

    其中…volumeRender 的部分應該就是用 GPU 來做 volume 的 ray-casting 了…某種程度上,是 Heresy 最想用 CUDA 來做的事之一;而他的 sample code 之短,也還真是讓 Heresy 有點傻眼了。 orz

    而整體來說,以目前的 2.0 beta 來說,CUDA 算是大改版嗎?以開發程式的觀點來看,Heresy 覺得不太像…1.0 到 1.1 主要是增加了 async 和 stream;而 1.1 到 2.0,看來也只增加了 3D Texture?當然,如果就能支援 Vista 來說,算是改善很多啦~不過,總覺得還不到版號大躍進的地步?希望 CUDA 2.0 正式 release 的時候,能多一些更實用的功能了。(Heresy 希望 texture 可以不用宣告在 global scope 啊…)


    nVidia CUDA 相關文章目錄

    4/16/2008

    利用 GPU 加速的 H.264 Encoder!

    nv_81知到這消息,是看到日本的《NVIDIA、GPUを使った高速HDエンコード技術を紹介 -対応ソフトの利用で18倍の速度向上》的這篇文章。

    主要呢,就是「Elemental Technologies」這家公司,和 nVidia 共同發表了一系列利用 CUDA 開發的 GPGPU(General-Purpose computation on GPUs) 版本 H.264 壓縮編碼軟體:RapiHD。

    他號稱將兩小時的 1280x720 的 MPEG2 影像,壓縮成 H.264 的格式,透過 RapiHD 使用 nVidia GeForce 8800GTS 512MB 只要 23 分鐘;而使用 Intel Core 2 Quad Extreme 3.0GHz 則需要四小時五十三分!而使用 Core 2 Duo 1.66GHz 甚至區要七個小時以上。相較之下,使用 8800GTS 真的是快了非常、非常、非常的多!(話說,Heresy 還不知道他的 18 被是怎麼算出來的?)不過當然,相對的,你必須要擁有一張 nVidia GeForce 8 系列以上的顯示卡,才能享受到這樣的快感了~ ^^"


    實際上,影像的壓縮、解壓縮應該是最適合大量平行化、最有可能適合給 GPU 來做的;而目前,看來也被證實了~在解壓縮方面,nVidia 自身已經有針對 HD-DVD(已陣亡)和 BD 來做 GPU 加速的 PureVideo 了;而一直沒看到的壓縮編碼,也有了曙光了!

    但是這是否代表了 GPGPU 的技術將走入一般使用市場呢?其實不見得。因為他也不是第一套有使用 GPGPU 的軟體。像大家常用的 Acrobat Reader 8 就有內建透過 GPU 來增加頁面呈現效果的功能(參考);Premiere Pro 也有類似的加速功能(參考)。不過像 Acrobat 的 GPU 加速,一般人可能覺得有開沒開差不多吧? XD

    不過,還是希望這類透過 GPU 來加速的應用,能越來越多。畢竟,一般來說,顯示卡在某種程度上已經可以算是整台電腦最耗電、最熱的元件了!如果能透過各種方式,讓他能在更多的場合,發揮他的能力。


    關於 CUDA,可以參考 Heresy 的《nVidia CUDA 學習紀錄》。

    ASUS P5K Pro BIOS 1001 溫度誤判?

    前一陣子,華碩推出了 ASUS P5K Pro 的新版 BIOS,1001;主要是更新對於新的 CPU 的支援吧~
    http://support.asus.com/download/download.aspx?model=P5K+PRO&f_name=p5kpro1001.zip&SLanguage=zh-tw
    在 1001 版,增加了對 Core 2 Extreme QX9650、Core 2 Quad Q9450、Core 2 Quad Q9550 這三顆 CPU C1 版的支援性

    不過,Heresy 更新後,卻發生了些怪問題。

    把 BIOS 更新到 1001 後,使用時 CPU 的溫度好像會誤判?Heresy 發現就算沒在做什麼事,CPU 溫度還是飆到 5x 度!而 CPU 的風扇轉數也因此爆高…而就算 Heresy 用大電風扇對著吹也沒用。後來關機去摸 CPU 散熱器,根本沒有熱的感覺。搞了好一陣子,才決定把 BIOS 刷回舊版。

    而把 BIOS 刷回舊的 0904 後,溫度又瞬間變回 3x 度了…而且,是在什麼都沒做的情形下。
    Heresy 是透過 ASUS 內建在 BIOS 裡的工具更新的,在更新前還特別先看了一下溫度,5x 度;更新完後進 BIOS 第一件事是看問度,當場掉到 3x 度。

    因此,也大致確認是主機板 BIOS 的誤判了~

    而後來去函華碩,才知道原來這版 BIOS 是 Beta 版…但是在  Heresy 連進去的網頁,卻完全沒有註明?華碩客服是說要點上方的「BIOS」進去,才會看到該標示;Heresy 總覺得這樣的標示很怪…

    4/15/2008

    努力與放棄

    人通常只有兩種選擇,不是「努力」就是「放棄」,
    在面對問題的時候,說來說去,也只有這兩條路走。

    form 《Honey&Clover》 Chapter 30

    4/13/2008

    人數破二十萬了!

    2007/10/18,人數成功突破十萬大關。而過了半年左右,現在又累積到下一個十萬,變成廿萬了!

    space

    會飆這麼快,其實真的遠遠超過 Heresy 自己的估計。主要還是感謝各大搜尋引擎啦~ XD

    而由於前一陣子寫的 CUDA 系列文章,看來似乎讓 Heresy 在這方面算是個名人了?(笑)
    現在在 Google 搜尋 CUDA 這個字的話,Heresy 的排名可是在非常前面呢!如果限定是中文的話,更是遠遠把 nVidia 官方拋在後面了 XD(也沒啥意義就是了 ^^")
    而拜此之賜,Heresy 也第一次有「成為名人」的感覺了!(狂笑中…)
    為了這東西,也還有不少人找來呢~不過,這細節就再說吧。 :p

    總之,Heresy's Space 看來發展已經遠遠超出一開始的預想了…本來只是想自己寫寫東西,順便是記錄自己的感想,或是貼一些自己覺得好玩的東西;目前的情形,看來某種程度上,應該已經超過了。

    不過,不管如何,也還是按照 Heresy 自己的形式傳統:順其自然吧!

    人懶…

    算是倦怠期嗎?總覺得,最近真的做什麼事都提不起勁…(雖然好像好一段時間了…)
    不少事雖然做了,但是也出了一堆狀況…感覺都是一整個不夠理想。 @@

    最近,Heresy 自己感覺在某方面,如果肯多花點時間,似乎可以有一些發展?
    但是一則是 Heresy 自己也不知道這樣好不好,再則也是提不起勁去做…

    人懶到什麼程度?現在居然連動話都懶得看了… orz
    Need For Speed Prostreet 也懶得玩完了…
    Clannad 的渚的線路和 After tory 也還沒玩、Fate /Stay Night 有中文化了,但是也是提不起勁來玩。
    唯一有去動的,好像只剩下無腦、亂砍的蛇魔無雙?

    不知道,什麼時候才會有衝勁?
    不過,就這樣繼續混吃等死,搞不好永遠不會有吧…

    大樓間的風力發電機

    原文來自《巴林世貿中心發電風扇全面啟用

    bahrain1

    上面這張圖,不是電腦模擬圖,也不是想像圖,而是實際上已經接近完工的巴林世貿中心。240 公尺高,50 層樓的巴林世貿中心在兩座塔之間建有三座直徑 29 公尺的風力發電渦輪扇,靠著從波斯灣吹進來的海風發電,同時塔本身的形狀也有助於集中風力。三座發電機佔了大樓總造價的 3.5%,但因為預計啟用後將可提供大樓每年 10%~15% 的電力,因此長期算起來還是有賺的,更不要說這對環境保護的貢獻了。
    巴林世貿中心的建設已經進入了最後收尾階段,預計年內就會完工啟用。

    在 BBC 的《Skyscraper powered by wind》這則新聞中,還有提供實際運轉的影片~

    理論上,這樣的確是一個不錯的設計!透過大樓本身的形狀來集風,同時也利用大樓的結構,把風力發電機架起來。但是,不知道風切聲的問題解決了沒?

    另外,想想之前的一些事故(1, 2, 3, 4)…恩~安全性希望是夠周全啦…

    4/12/2008

    ef - the latter tale.

    ef_index_top200711

    動畫版的《ef - a tale of memories》已經結束好一段時間了。原著遊戲《ef - a fairy tale of the two》的第一部《ef - the first tale.》也 KO 好一陣子了。

    不過,不管是遊戲或是動畫,給 Heresy 的感動都滿大的。他的音樂,也非常好聽~Heresy 也一連串貼過《euphoric field》、《I'm here》和《刻む景色》三首歌;遊戲的《悠久の翼》更是 Heresy 列為神曲級的。

    而第二部遊戲,也終於有消息了!《ef - the latter tale.》將在 5 月 30 號推出!原則上,第一部是廣野和宮子、景和堤這兩對戀人的故事;而第二部,則是動畫中已經有的千尋和連治,以及動畫中沒有描述的羽山和久瀨修一的故事了~當然,另一個重點就是優子的故事,不知道會不會完全鋪陳出來了~

    而目前官方網站已經有提供 demo 影片了!

      

    不過說實話,新曲《emotional flutter》感覺上…不是 Heresy 一聽就喜歡的類型,不知道會不會久一點變順耳就不知道了…

    4/10/2008

    Windows XP 不死! 至少沒這麼快死…

    目前這一代的 Windows Vista 已經推出好一段時間了,英文版的 Service Pack1 也已經推出了(中文版還沒),但是 Vista 對很多人來說,還是不是很有吸引力;至今,普及率…主要應該是靠隨套裝電腦出貨的隨機版衝的吧?

    Heresy 對他始終興趣缺缺。原因很簡單,除了介面華麗(Heresy 甚至不覺得好看,Heresy 自己的 Windows XP,都還是用傳統介面)外, 並沒有什麼新功能是真得吸引 Heresy 的…推出前開的一堆新功能,都因為時程上來不及,而沒有辦法在 Vista 中實現;唯一比較有可能有用的,大概也只是被綁死在 Vista 上的 DirectX 10 吧?

    而微軟為了推動世代轉換,也不斷有消息放出說要終止 Windows XP 的技術支援。不過,看來是沒這麼快了~

    來源:http://chinese.engadget.com/2008/04/10/microsoft-about-windows-xp-windows-7/

    重點只有兩個,引新聞稿文字如下:

    一、Windows XP技術支援不會在2008年6月30日終止。主流支援將至2009年4月14日,延伸支援服務將至2014年4月8日。
    二、新一代作業系統Windows 7測試版推出時間及上市日期目前尚未確定。

    跳轉後可看新聞稿更詳細的雜七雜八廢話。個人想說一個心得,那就是:我怎麼可能相信Windows 7測試版及上市日期目前尚未確定?XD
    此外,這篇新聞稿算是少見難得沒寫什麼多餘的資訊,不會讓人讀得很辛苦,所以個人引用稿上文字如下:

    Windows XP即將於今年6月30日終止零售版本的銷售以及停止出貨給OEM廠商的消息發佈後,微軟即頻頻接到消費者來電詢問產品終止銷售後是否就不再提供技術支援?為了解答消費者的疑惑,台灣微軟特別於今(十)日整理公佈Windows XP各種版本停止銷售的時程與產品技術支援的期限及內容。

    Windows XP停止出貨與銷售後,微軟仍會持續提供包括安全性修補與更新等主流技術支援服務至2009年4月14日,並且提供付費延伸支援到2014年4月8日止。此外,有關新一代作業系統Windows 7的相關報導,微軟公司表示:Windows 7測試版及上市日期目前尚未確定,目前坊間謠傳各個上市時程,均未獲得微軟證實。

    一般桌上型電腦及筆記型電腦安裝的Windows XP作業系統,零售版本及OEM版將於2008年6月30日停止銷售與出貨,COEM(隨機版)將於2009年1月31日停止出貨,(詳見附表一)。

    但Windows XP的技術支援服務並不會在2008年6月30日終止,依照微軟產品技術支援週期原則,微軟將持續免費提供主流支援至2009年4月14日,內容包含: 事件支援(免費事件支援、付費事件支援、計時付費支援、保固聲明支援)、安全性更新支援、可要求非安全性產品程式碼修補程式,讓使用者可以隨時更新。微軟公司特別提醒使用者必須安裝最新的Service Pack,如此才可持續享有主流支援服務。

    至2009年4月14日後,Windows XP將從主流支援轉換為延伸支援,微軟將持續免費提供安全性修補與5年的Windows XP付費支援,有效期限至2014年4月8日,主要內容包含: 付費支援、免費的安全性更新支援、非安全性相關產品程式碼修補程式支援(然必須付費註冊「延伸產品程式碼修補程式支援方案」且可能需針對每一產品程式碼修補程式付費)。

    此外,微軟將保留部分原來的團隊,負責隨時處理使用者所遇到的問題,一旦發生重大的安全性威脅,仍會推出修補程式,但不再提供保固支援、設計變更或是新功能等服務。關於Windows XP產品技術支援週期的「主流支援」和「延伸支援」之完整定義與支援類型清單,詳細情形可參考此連結

    莫名其妙的電腦…

    前幾天有提過一下,電腦怪怪的問題。

    主要的狀況是,電腦有的時候會莫名其妙的整台停住;畫面就停在那,但是不再有反應。不過比較有趣的是,聲音的部分,不知道是不是在音效卡的 buffer 裡?還會繼續放一小段時間,才會中斷。

    總之,就是完全沒反應!研判應該也不是過熱,因為 CPU 不到 40 度、北橋沒超過 55 度,顯示卡也在 70 度以下…而且,有的時候連不是跑 3D,光看網頁也會死當。

    後來開始想辦法排除,發現用 Everest 作穩定性測試會當,但是個別測試 CPU 或記憶體又不會當…最後只好把零件拆下來試試看。結果,沒想到把顯示卡、硬碟、記憶體都拆下來,又再裝回去後,感覺就都好了;禮拜天貼完文章後,開始拆機測試,到現在都沒有發生同樣的狀況過。

    不知道該把這問題歸給誰了?之前都沒動過硬體,也都好好的,忽然就這樣不穩了…難不成是靜電或是接觸不良嗎?還是是最近濕氣太重嗎? 這個大概又是一個無解的問題了…

    不過,也讓 Heresy 想到,現在的新電腦有的時候要開機按電源鈕,沒辦法按一下就有反應,需要壓一小段時間,才能把電腦開起來,不知道有沒有關係?也不知道是為什麼會這樣?有人知道嗎? @@