如何在Ubuntu上構建編譯LLVM和ISPC,以及Ubuntu上ISPC的使用方法

之前一直在 Mac 上使用 ISPC,奈何核心/線程太少了。最近想在 Ubuntu 上搞搞,但是 snap 安裝的 ISPC不知道為什么只能單核,很奇怪,就想著編譯一下,需要 Clang 和 LLVM。但是 Ubuntu 很搞,他的很多軟件版本是和系統版本掛鉤的,默認安裝的是 14,這樣安裝可能會缺東西。沒辦法,搞吧,順道研究下這兩個的編譯和使用。

本文并不是很詳細,屬于備忘錄性質。

準備工作

首先安裝需要的工具:

sudo apt-get install git curl cmake xz-utils m4 flex bison python3 libtbb-dev g++-multilib

LLVM

雖然官方文檔里說可以用 APT 安裝,但是版本不太對。雖然 LLVM 編譯需要很長時間,如果你的核心數不夠多,那么可以用官方腳本安裝,然后自己手動改名稱,嗯,也挺麻煩的。
不過現在絕大部分處理器編譯的速度都還可以,畢竟大小核心加起來基本上都有十幾個了。我曾經在 6 核處理器上編譯了一晚上,太慢了。

需要注意 LLVM 編譯時間很長而且選項很復雜,這里只說我們需要的 LLVM、Clang 和 LLD,命令如下:

cmake -S llvm -B build -G 'Unix Makefiles' -DLLVM_ENABLE_PROJECTS="clang;lld" -DCMAKE_BUILD_TYPE=Release

這里使用全部的線程構建:

make -j$(nproc)

然后安裝命令如下(就是放到該放的地方):

cmake --build . --target install

不過沒有復制FileCheck,所以自己挪一下(不知道是我執行其他命令的緣故還是就是這個命令沒有操作,反正我手動挪了):

sudo cp FileCheck /usr/local/bin/FileCheck

安裝完之后看看llvm-config版本和位置:

$ which llvm-config
/usr/local/bin/llvm-config
$ llvm-config --version
21.0.0git

你也可以對clang等進行相關檢查。

如果你想看更多編譯情況可以看我的另外一篇博客:

ISPC

首先克隆倉庫:

git clone https://github.com/ispc/ispc.git

不建議使用官方的腳本,因為網絡問題,下載太慢了。

然后開始編譯(不要在 ISPC 項目目錄下運行,因為是單獨生成build-ispc文件夾存放生成內容):

cmake -B build-ispc ispc

然后開始構建(不要用官方文檔里的cmake --build build-ispc,這個只能使用一個核心,太慢了):

cd build-ispc
make -j$(nproc)

然后把生成二進制目錄添加到PATH環境變量里:

export PATH="$PATH:<自己改目錄>/build-ispc/bin"

關于這部分如果你不熟悉,那么可以看看 macOS在終端上如何直接使用腳本或者下載的程序 - ZhongUncle CSDN。

最后看看ispc版本:

$ ispc --version
Intel(r) Implicit SPMD Program Compiler (Intel(r) ISPC), 1.27.0dev (build commit f988909621671856 @ 20250313, LLVM 21.0.0)

使用 ISPC

這里需要注意,ispc編譯的時候使用--pic選項:

ispc SGEMM_kernels.ispc -O3 -o SGEMM_kernels_ispc.o -h SGEMM_kernels_ispc.h --target=avx2-i32x16 --pic

--pic這個選項太冷了,我是翻文檔翻出來的,絕了。

然后再使用clang++g++之類的通用編譯器編譯:

clang++ -O3 SGEMM_main.cpp SGEMM_kernels_ispc.o ../common/tasksys.cpp

否則可能會出現如下問題:

/usr/bin/ld: SGEMM_kernels_ispc.o: relocation R_X86_64_32 against `.text' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: failed to set dynamic section sizes: bad value
collect2: error: ld returned 1 exit status

正確編譯后,運行看看:

$ ./a.out 2048 16 4096Usage: SGEMM (optional)[ispc iterations] (optional)[[Matrix A Rows] [Matrix A Columns/ matrix B Rows] [Matrix B Columns]]
./a.out
ispc iterations = 500[default],	 Matrix A Rows = 2048,	 Matrix A Columns/ matrix B Rows = 16, Matrix B Columns = 4096SGEMM_naive_withTasks     5.4232 millisecs    49.4920 GFLOPs Validation: valid.SGEMM_tileShuffle_withTasks     2.7940 millisecs    96.0635 GFLOPs Validation: valid.SGEMM_tileNoSIMDIntrin_withTasks     1.4964 millisecs   179.3685 GFLOPs Validation: valid.SGEMM_tileBlockNoSIMDIntrin_withTasks     1.0402 millisecs   258.0334 GFLOPs Validation: valid.SGEMM_tileBlockNoSIMDIntrin_2_withTasks     1.0505 millisecs   255.5048 GFLOPs Validation: valid.

這時候 CPU 利用率需要滿載,如下(注意看./a.out 2048 16 4096這行):
請添加圖片描述

題外話

ISPC 是我學過的第一個并行計算語言,并且付出了很大精力去研究和學習。

雖然有感情,但是我并不推薦使用 ISPC,原因很簡單,Intel 修改 ISPC 太快太多了,再加上文檔并不完善。這樣會浪費大量時間在研究和更新上,而不是寫代碼上,太麻煩了。

希望能幫到有需要的人~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73230.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73230.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73230.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Spring IOC/AOP】

IOC 參考&#xff1a; Spring基礎 - Spring核心之控制反轉(IOC) | Java 全棧知識體系 (pdai.tech) 概述&#xff1a; Ioc 即 Inverse of Control &#xff08;控制反轉&#xff09;&#xff0c;是一種設計思想&#xff0c;就是將原本在程序中手動創建對象的控制權&#xff…

電感與電容的具體應用

文章目錄 一、電感應用1.?電源濾波&#xff1a;2. 儲能——平滑“電流波浪”? ?3. 調諧——校準“頻率樂器”?4. 限流——防止“洪水災害”?二、電容應用1.核心特性理解2.應用場景 三.電容電感對比 一、電感應用 1.?電源濾波&#xff1a; ?場景&#xff1a;工業設備中…

前端面試:axios 請求的底層依賴是什么?

在前端開發中&#xff0c;Axios 是一個流行的 JavaScript 庫&#xff0c;用于發送 HTTP 請求。它簡化了與 RESTful APIs 的交互&#xff0c;并提供了許多便利的方法與配置選項。要理解 Axios 的底層依賴&#xff0c;需要從以下幾個方面進行分析&#xff1a; 1. Axios 基于 XML…

springboot 3 集成Redisson

maven 依賴 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.12</version></parent><dependencies><dependency><groupId>org.red…

C#中繼承的核心定義?

1. 繼承的核心定義? ?繼承? 是面向對象編程&#xff08;OOP&#xff09;的核心特性之一&#xff0c;允許一個類&#xff08;稱為?子類/派生類?&#xff09;基于另一個類&#xff08;稱為?父類/基類?&#xff09;構建&#xff0c;自動獲得父類的成員&#xff08;字段、屬…

Deep research深度研究:ChatGPT/ Gemini/ Perplexity/ Grok哪家最強?(實測對比分析)

目前推出深度研究和深度檢索的AI大模型有四家&#xff1a; OpenAI和Gemini 的deep research&#xff0c;以及Perplexity 和Grok的deep search&#xff0c;都能生成帶參考文獻引用的主題報告。 致力于“幾分鐘之內生成一份完整的主題調研報告&#xff0c;解決人力幾小時甚至幾天…

Android SharedPreference 詳解

前提&#xff1a;基于 Android API 30 1. 認識 SharedPreference SharedPreference 是 Android 提供的輕量級的&#xff0c;線程安全的數據存儲機制&#xff0c;使用 key-value 鍵值對的方式將數據存儲在 xml 文件中&#xff0c;存儲路徑為 /data/data/yourPackageName/share…

自動化測試腳本語言選擇

測試人員在選擇自動化測試腳本語言時面臨多種選項。Python、Java、C#、JavaScript 和 Ruby 都是常見選擇&#xff0c;但哪種語言最適合&#xff1f;本文將詳細分析這些語言的特點、適用場景和優劣勢&#xff0c;結合行業趨勢和社會現象&#xff0c;為測試人員提供全面指導。 選…

【Java項目】基于JSP的KTV點歌系統

【Java項目】基于JSP的KTV點歌系統 技術簡介&#xff1a;采用JSP技術、B/S結構、MYSQL數據庫等實現。 系統簡介&#xff1a;KTV點歌系統的主要使用者分為管理員和用戶&#xff0c;實現功能包括管理員&#xff1a;個人中心、用戶管理、歌曲庫管理、歌曲類型管理、點歌信息管理&a…

element-plus文檔解析之Layout布局(el-row,el-col)

前言 這是element-plus提供的響應式布局組件。可以非常方便的實現響應式布局以及快速按比例分塊。 例如實現下面的效果&#xff1a; 第一行&#xff1a;寬度占100% 第二行&#xff1a;寬度1&#xff1a;1 第三行&#xff1a;1&#xff1a;1&#xff1a;1 第四行&#xff1a;1…

【Java】——數據類型和變量

個人主頁&#xff1a;User_芊芊君子 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 文章目錄&#xff1a; 1.Java中的注釋1.1.基本規則1.2.注釋規范 2.標識符3.關鍵字4.字面常量5.數據類型6.變量6.1變量的概念6.2語法6.3整型變量6.3.1整型變量6.3.2長整…

串口數據記錄儀DIY,體積小,全開源

作用 產品到客戶現場出現異常情況&#xff0c;這個時候就需要一個日志記錄儀、黑匣子&#xff0c;可以記錄產品的工作情況&#xff0c;當出現異常時&#xff0c;可以搜集到上下文的數據&#xff0c;從而判斷問題原因。 之前從網上買過&#xff0c;但是出現過丟數據的情況耽誤…

JVM中是如何定位一個對象的

在 Java 中&#xff0c;對象定位指的是如何通過引用&#xff08;Reference&#xff09;在堆內存中找到對象實例及其元數據&#xff08;如類型信息&#xff09;。JVM 主要通過 直接指針訪問 和 句柄訪問 兩種方式實現&#xff0c;各有其優缺點和應用場景&#xff1a; 一、直接指…

Mac 如何在idea集成SVN

在windows系統上面有我們最為熟悉的小烏龜TortoiseSVN&#xff0c;在mac系統上面則沒有什么好用的svn的工具&#xff0c;而且大部分都付費&#xff0c;需要各種渠道找PJ版&#xff0c;費事費力&#xff0c;作為程序員&#xff0c;大部分人應該都會安裝開發工具&#xff0c;本文…

批量測試IP和域名聯通性

最近需要測試IP和域名的聯通性&#xff0c;因數量很多&#xff0c;單個ping占用時間較長。考慮使用Python和Bat解決。考慮到依托的環境&#xff0c;Bat可以在Windows直接運行。所以直接Bat處理。 方法1 echo off for /f %%i in (E:\封禁IP\ipall.txt) do (ping %%i -n 1 &…

LabVIEW變頻器諧波分析系統

隨著工業自動化的發展&#xff0c;變頻器在電力、機械等領域的應用日益廣泛&#xff0c;但諧波問題直接影響系統效率與穩定性。傳統諧波檢測設備&#xff08;如Norma5000&#xff09;精度雖高&#xff0c;但價格昂貴且操作復雜&#xff0c;難以適應現場快速檢測需求。本項目基于…

Unity Shader學習總結

1.幀緩沖區和顏色緩沖區區別 用于存儲每幀每個像素顏色信息的緩沖區 幀緩沖區包括&#xff1a;顏色緩沖區 深度緩沖區 模板緩沖區 自定義緩沖區 2.ImageEffectShader是什么 后處理用的shader模版 3.computerShader 獨立于渲染管線之外&#xff0c;在顯卡上運行&#xff0c;大量…

OpenPLC WebServer啟動

簡述 OpenPLC OpenPLC 可運行在嵌入式系統和普通計算機上&#xff0c;其基本原理是在硬件上安裝類似 Linux 的操作系統&#xff0c;并在該環境下運行 OpenPLC 應用程序&#xff0c;從而讓用戶開發、調試和運行工業自動化控制邏輯。它目前只支持部分 ARM 架構的嵌入式系統&…

【基礎知識】回頭看Maven基礎

版本日期修訂人描述V1.02025/3/7nick huang創建文檔 背景 項目過程中&#xff0c;對于Maven的pom.xml文件&#xff0c;很多時候&#xff0c;我通過各種參考、仿寫&#xff0c;最終做出想要的效果。 但實際心里有些迷糊&#xff0c;不清楚具體哪個基礎的配置所實現的效果。 今…

ROS實踐(四)機器人SLAM建圖(gmapping)

目錄 一、SLAM技術 二、常用工具和傳感器 三、相關功能包 1. gmapping建圖功能包 2. map_server 四、SLAM 建圖實驗 1. 配置gmapping(launch文件) 2. 啟動機器人仿真(含機器人以及傳感器) 3. 運行gmapping節點 4. 啟動rviz可視化工具 5. 保存地圖文件 一、SLAM技…