分類: Intel

  • 如何利用 Intel 內顯資源進行 OpenCL 開發

    如何利用 Intel 內顯資源進行 OpenCL 開發

     

    這篇主要介紹 Linux/Windows 兩個平臺使用 Intel 內顯資源開發 OpenCL 的解決方案,
    並且不用重新編譯核心,不像這篇太 Hardcore 了xD

    首先你當然要確定自己的 Intel CPU 有沒有支援 OpenCL?

    先參考 Supported APIs for Intel® Graphics

    但是只是參考就好,因為我在裡面用一塊號稱支援 OpenCL 2.0 的晶片支援了 OpenCL 3.0。

    我認為 Intel 並不知道自己在做什麼。

    LINUX

    筆者在此使用 Ubuntu 22.04 做為開發環境,

    在此 OS 下你只需按照這篇安裝 intel i915 驅動,

    然後驗證驅動有沒有裝好?

    sudo apt-get install clinfo
    
    clinfo -l

    如果有裝好應該會像筆者的畫面這樣:

    接著你想要用 gcc 或 g++ 開發都沒問題,

    甚至用 make 編譯專案也可以直接車過去,這就是 UNIX 帶原生編譯器的好處。

    Windows

    筆者在此使用 Windows 10 做為開發環境,

    在 Windows 不用特別去裝 intel 驅動,理論上一定會自行下載。


    但 Windows 因為沒有原生編譯器的優勢,所以你必須選擇編譯器流派。

    如果你沒有要編譯整個專案,只想自己寫一點東西來驗證,

    我推薦使用 MinGW64 就好。

    MinGW64 只要再額外安裝 libheaders 便可以執行後續驗證。

    使用這份 .C程式碼來驗證:

    #include 
    #include 
    
    int main() {
        cl_uint platformCount;
        clGetPlatformIDs(0, nullptr, &platformCount);
    
        if (platformCount == 0) {
            std::cerr << "No OpenCL platforms found." << std::endl;
            return 1;
        }
    
        cl_platform_id* platforms = new cl_platform_id[platformCount];
        clGetPlatformIDs(platformCount, platforms, nullptr);
    
        std::cout << "Number of OpenCL platforms: " << platformCount << std::endl;
    
        for (cl_uint i = 0; i < platformCount; ++i) {
            char platformName[128];
            clGetPlatformInfo(platforms[i], CL_PLATFORM_NAME, sizeof(platformName), platformName, nullptr);
    
            std::cout << "Platform " << i + 1 << ": " << platformName << std::endl;
        }
    
        delete[] platforms;
    
        return 0;
    }
    
    

    如果你需要 CMake 整份專案,

    那先跟我大喊一聲:Fuck you Intel!

    原因是網路上安裝 Intel OpenCL 的教學大多都需要這份:

    ​Intel SDK for OpenCL applications​

    但是這份已經停更了。

    根據 Intel 官方表示後續會分散在各 OneAPI 部件裡面支援,

    所以我們會被引導到這個 Intel 官方文件頁面:

    Intel Tools for OpenCL™ Applications

    我試過了都沒用,不要浪費時間跟 Intel 官方文件在那邊鬧。

    他們最近不知道想推 SYCL 還是什麼東西,總之沒有支援。

    我會說沒有支援的原因是因為:

    你要能 CMake 一份專案最主要要引用兩份東西,

    一份叫做 OpenCL.lib,一份叫做 CL.h or CL.hpp。

    按照 Intel 官方文件裝完上述套件都找不到 CL.h or CL.hpp,

    就算找來 KhronosGroup 版本的 CL.h 代打也會有問題,

    天知道 Intel 怎麼寫他們的 OpenCL.lib?

    另外一個不推 Intel 解決方案的原因是近年來他們都綁 MSVC,

    代表我要載又肥又呆的 Virtual Studio,個人不是很喜歡。

    怎麼辦呢?

    打不贏就加入!

    我在開發死線前尋尋覓覓,發現敵人就在本能寺!

    發現敵人的敵人就是朋友,AMD 有做這個欸?

    我能不能用 AMD 的文件驅動 Intel CPU 呢?

    哇靠!可以!

    大家只要下載這個來安裝,並記住安裝路徑。

    他會提供 CMake 最需要的 OpenCL.lib 及 CL.h。

    接著在你的 CMakeLists.txt 裡面修改,

    通常上面兩行要新增 OpenCL.lib 及 CL.h 的路徑,

    下面兩行應該本來就有,新增一下就好。

    find_path(OPENCL_INCLUDE_DIRS CL/cl.h PATHS /path/to/opencl/include)
    find_library(OPENCL_LIBRARIES OpenCL PATHS /path/to/opencl/lib)
    
    include_directories(${OPENCL_INCLUDE_DIRS})
    target_link_libraries(YourExecutable ${OPENCL_LIBRARIES})
    

    這樣應該就能成功編譯專案了!

    如果本篇內容有誤歡迎聯絡我:

    wuyiulin@gmail.com

    謝謝大家!

    REF.
    OpenCL入门一:Intel核心显卡OpenCL环境搭建

    How to install OpenCL on Windows

    Intel Arc 独显Ubuntu安装指南

  • ZLUDA 收官之戰 – 它還只是個孩子啊!

    ZLUDA 收官之戰 – 它還只是個孩子啊!

    承上文:

    ZLUDA 拓荒之路 – 榨乾 Intel CPU 算力的中短期方案

     

    先說結論:

    ZLUDA 目前在我的環境測試起來並不支援一些好棒棒框架,

    像是 PyTorch、Numba 之類的,雖然我沒有測試,但是有足夠信心認為 Tenserflow 也不支援。

    先附上我的環境:

    OS: Ubuntu 22.04

    Intel GPU: UHD 770

    我的測試方式是下載 ZLUDA 的 Releases 2 的版本

    這個解開會有一個資料夾內含兩個 .so 檔,

    將想執行的檔案放在與 .so 檔同個資料夾下執行即可。

    但是像作者一樣測試 GeekBench 5.2.3 的話是會過的,

    數據差別不大,至於為什麼測出沒有 Sobel 測項?

    因為要有那個測項要付錢啊啊啊啊啊!
    GeekBench 5.2.3 官網下載點

    接著我要勘誤上篇關於 CUDA 與 ZLUDA 的引用關係,

    後來發現 ZLUDA 使用上應該是要完全取代 CUDA 的,

    所以你不裝 CUDA 它也會跑得起來。

    但由於 ZLUDA 並沒有支援 CUDA 的所有功能,

    加上我猜測它是針對某版的 CUDA 來開發的,

    所以 API 串接那邊也會報錯,而 CUDA 本家會動態連結這些函式,

    導致 ZLUDA 的支援性很低。

    最後來談談這東西的未來性還有有志之士可以怎麼發展下去?

    我認為這東西會踩到 Intel 把拔的 oneAPI 計畫,

    短時間內應該就這樣了。

    所以除非有誰與 Nvidia, Intel 同時具有競爭關係又做 CPU + GPU?

    ZLUDA 才會復活。

    (望向蘇媽)

    有志之士的話可以接著試試看,

    因為我曾經在 Python 3.7 及上述環境中讓 Numba 呼叫到 Intel UHD 770 的硬體。

    以下是給有志之士的簡易指南:

    1.確認自己手上有(消費級 Intel CPU 超過 8代 或  Intel XE CPU)且 (有內顯)

    2.裝 Intel 內顯驅動(Ubuntu 20.04 可以參考這篇, 22.04 也可以參考但記得不用降內核)

    3.確認內顯驅動有裝好xD

    4.裝 Python3.7 + Numba 0.49 – 0.58 版本,我印象當時是裝這區間。

    5.下載 ZLUDA 的 Releases 2 的版本 來測試

    裝驅動的時候要特別注意,

    我在那邊卡很久,不一定第一次會裝好,

    重複裝的時候不要反安裝到這個 gawk libc6-dev udev,

    這套件就算你不 –purge 都會幫你把 Gnome 還有一拖拉庫東西 拆掉 :)

    最後講一下 Intel 的 oneAPI,

    我用過裡面的 Intel® oneAPI Base Toolkit + Intel® AI Analytics Toolkit(PyTorch 最佳化)

    用同一台機器來計算同一份呼叫到 PyTorch 的檔案,

    用 Intel 方案的環境會算得比純 PyTorch 版本還要慢。

    就是大家可以收一收回家了,感謝各位。

    如果有志之士想討論 or Intel 官方想維護一下自己的東西(#。

    歡迎聯絡我:

    wuyiulin@gmail.com