伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于openEuler平臺的CPU、GPU與FPGA異構加速實戰

FPGA設計論壇 ? 來源:FPGA設計論壇 ? 2026-04-08 11:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01開篇導語

隨著 AI、視頻處理、加密和高性能計算需求的增長,單一 CPU 已無法滿足低延遲、高吞吐量的計算需求。openEuler 作為面向企業和云端的開源操作系統,在多樣算力支持方面表現出色,能夠高效調度 CPU、GPUFPGA 及 AI 加速器,實現異構計算協同。

本文我將結合 openEuler 平臺,介紹 CPU、GPU 與 FPGA 的異構計算能力,并展示在圖像處理、加密和網絡加速中的實際應用。

02多樣算力支持概覽

openEuler 對多樣算力的支持主要體現在以下幾個方面:

CPU 多核優化:openEuler 內核對多核 CPU 調度和 NUMA 拓撲優化良好,保證高性能計算任務的并行效率。

GPU 加速:通過 CUDA、OpenCL 等接口,openEuler 可以直接調度 GPU 進行浮點計算、圖像處理和深度學習任務。

FPGA/AI 加速器:openEuler 支持 FPGA 管理器、DMA 設備和 OpenCL 運行環境,可用于低延遲加速和定制硬件計算。

異構計算協同:通過 openEuler 的任務調度和驅動支持,可以實現 CPU/GPU/FPGA 的混合調用,充分利用硬件資源。

03FPGA 在 openEuler 上的支持

FPGA 是典型的異構計算單元,低延遲、低功耗、高靈活性。在 openEuler 上可以通過/dev/xdma*和/sys/class/fpga_manager/管理 FPGA 設備,并使用 Vivado/Vitis 或 OpenCL 進行開發。

# 檢測 FPGA 設備 lspci |grep-i fpga lspci |grep-i xilinx lspci |grep-i altera # 查看 FPGA 設備信息 ls -la/dev/xdma*  ls -la/sys/class/fpga_manager/

151d7c4c-2f24-11f1-90a1-92fbcf53809c.png

158056dc-2f24-11f1-90a1-92fbcf53809c.png

CPU / GPU / FPGA 性能對比

特性 CPU GPU FPGA ASIC
靈活性
性能 最高
延遲 最低 最低
功耗 最低
開發周期
適用場景 通用計算 并行計算 定制加速 大規模部署

Xilinx FPGA 開發環境在 openEuler 上的安裝

# 安裝依賴dnf install -y gcc gcc-c++ make ncurses-libs libstdc++# 安裝 Vivado/Vitis./xsetup# 設置環境變量exportXILINX_VIVADO=/tools/Xilinx/Vivado/2023.1exportXILINX_VITIS=/tools/Xilinx/Vitis/2023.1exportPATH=$XILINX_VIVADO/bin:$XILINX_VITIS/bin:$PATHsource$XILINX_VIVADO/settings64.sh# 驗證安裝vivado -version vitis -version

15dd9428-2f24-11f1-90a1-92fbcf53809c.png

163773c6-2f24-11f1-90a1-92fbcf53809c.png

16913fc8-2f24-11f1-90a1-92fbcf53809c.png

04HDL 與 HLS 編程示例

在 FPGA 開發中,我經常使用 HDL(硬件描述語言)和HLS(高層次綜合)兩種方法。用 HDL,比如 Verilog 或 VHDL,需要手動描述硬件結構和時序邏輯,能精確控制資源和性能。例如我實現一個 16×16 的矩陣乘法時,要自己設計乘法器、累加器和流水線控制。而用 HLS,我可以直接用 C/C++ 編寫算法,像matrix_mul這樣的函數只需關注矩陣乘法邏輯,綜合工具會幫我生成帶流水線和 AXI 接口的硬件實現,這大大加快了我的開發效率,也讓我能更專注于算法優化。

使用C/C++編寫FPGA程序:

// matrix_mul.cpp - 矩陣乘法HLS#include#defineN 16voidmatrix_mul(  int A[N][N],  int B[N][N],  int C[N][N]){#pragmaHLS INTERFACE m_axi port=A offset=slave bundle=gmem0#pragmaHLS INTERFACE m_axi port=B offset=slave bundle=gmem1#pragmaHLS INTERFACE m_axi port=C offset=slave bundle=gmem2#pragmaHLS INTERFACE s_axilite port=return// 矩陣乘法for(inti =0; i < N; i++) { ? ? ? ?for?(int?j =?0; j < N; j++) {#pragma?HLS PIPELINE II=1int?sum =?0; ? ? ? ? ? ?for?(int?k =?0; k < N; k++) { ? ? ? ? ? ? ? ? sum += A[i][k] * B[k][j]; ? ? ? ? ? ? } ? ? ? ? ? ? C[i][j] = sum; ? ? ? ? } ? ? } }// 測試代碼#includeintmain(){  intA[N][N], B[N][N], C[N][N];    // 初始化矩陣for(inti =0; i < N; i++) { ? ? ? ?for?(int?j =?0; j < N; j++) { ? ? ? ? ? ? A[i][j] = i + j; ? ? ? ? ? ? B[i][j] = i - j; ? ? ? ? } ? ? } ? ? ? ??// 調用硬件函數matrix_mul(A, B, C); ? ? ? ??// 驗證結果? ? ?std::cout <
# HLS綜合vitis_hls -f run_hls.tcl# run_hls.tcl內容# open_project matrix_mul_proj# set_top matrix_mul# add_files matrix_mul.cpp# add_files -tb matrix_mul_tb.cpp# open_solution "solution1"# set_part {xcvu9p-flga2104-2-i}# create_clock -period 10 -name default# csim_design# csynth_design# cosim_design# export_design -format ip_catalog

16e86654-2f24-11f1-90a1-92fbcf53809c.png

HLS優化指令

指令 作用 示例 效果
PIPELINE 流水線 #pragmaHLS PIPELINE II=1 吞吐量提升10x
UNROLL 循環展開 #pragmaHLS UNROLL factor=4 并行度提升4x
ARRAY_PARTITION 數組分割 #pragmaHLS ARRAY_PARTITION 帶寬提升
DATAFLOW 數據流 #pragmaHLS DATAFLOW 延遲降低50%
INLINE 函數內聯 #pragmaHLS INLINE 減少開銷

05圖像處理、加密與網絡加速案例

在工作中,我經常用 FPGA 做圖像處理、加密和網絡加速。在圖像處理方面,我用 HLS 實現了 Sobel 邊緣檢測,通過流水線和行緩存優化,使高分辨率視頻幀能實時處理。在加密領域,我設計了 AES 和 SM4 的硬件加速模塊,讓數據加密速度比純軟件快好幾倍,同時降低了 CPU 占用。在網絡加速方面,我實現了基于 FPGA 的數據包過濾和轉發邏輯,把關鍵路徑的計算卸載到硬件上,顯著提升了吞吐量和延遲表現。

FPGA在圖像處理中的應用:

// sobel_filter.cpp - Sobel邊緣檢測#include#include#defineWIDTH 1920#defineHEIGHT 1080typedefap_uint<8>pixel_t;voidsobel_filter(  pixel_t input[HEIGHT][WIDTH],  pixel_t output[HEIGHT][WIDTH]){#pragmaHLS INTERFACE m_axi port=input offset=slave bundle=gmem0#pragmaHLS INTERFACE m_axi port=output offset=slave bundle=gmem1#pragmaHLS INTERFACE s_axilite port=return// Sobel算子constintGx[3][3] = {{-1,0,1}, {-2,0,2}, {-1,0,1}};  constintGy[3][3] = {{-1,-2,-1}, {0,0,0}, {1,2,1}};    // 行緩存pixel_tline_buf[2][WIDTH];#pragmaHLS ARRAY_PARTITION variable=line_buf complete dim=1for(inty =1; y < HEIGHT -?1; y++) { ? ? ? ?for?(int?x =?1; x < WIDTH -?1; x++) {#pragma?HLS PIPELINE II=1int?grad_x =?0, grad_y =?0; ? ? ? ? ? ? ? ? ? ? ? ??// 計算梯度for?(int?i =?-1; i <=?1; i++) { ? ? ? ? ? ? ? ?for?(int?j =?-1; j <=?1; j++) { ? ? ? ? ? ? ? ? ? ?pixel_t?pixel = input[y+i][x+j]; ? ? ? ? ? ? ? ? ? ? grad_x += pixel * Gx[i+1][j+1]; ? ? ? ? ? ? ? ? ? ? grad_y += pixel * Gy[i+1][j+1]; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ??// 計算梯度幅值int?grad =?abs(grad_x) +?abs(grad_y); ? ? ? ? ? ? output[y][x] = (grad >255) ?255: grad;     }   } }

1742a5b0-2f24-11f1-90a1-92fbcf53809c.png

圖像處理性能對比

算法 CPU (x86) GPU (CUDA) FPGA (Alveo) 延遲
Sobel邊緣檢測 45 fps 1200 fps 800 fps 1.2ms
高斯模糊 30 fps 950 fps 720 fps 1.4ms
形態學運算 38 fps 1100 fps 850 fps 1.2ms
直方圖均衡 52 fps 1400 fps 900 fps 1.1ms
功耗 150W 300W 75W -

FPGA功耗僅為GPU的1/4,延遲更低!

加密加速

FPGA在加密算法中的應用:

// aes_encrypt.cpp - AES加密加速#includetypedefap_uint<128>block_t;typedefap_uint<8>byte_t;voidaes_encrypt(  block_t plaintext[1024],  block_t key,  block_t ciphertext[1024],  int num_blocks){#pragmaHLS INTERFACE m_axi port=plaintext offset=slave bundle=gmem0#pragmaHLS INTERFACE m_axi port=ciphertext offset=slave bundle=gmem1#pragmaHLS INTERFACE s_axilite port=key#pragmaHLS INTERFACE s_axilite port=num_blocks#pragmaHLS INTERFACE s_axilite port=return// AES輪密鑰擴展block_tround_keys[11];#pragmaHLS ARRAY_PARTITION variable=round_keys completeexpand_key(key, round_keys);    // 加密多個塊for(inti =0; i < num_blocks; i++) {#pragma?HLS PIPELINE II=1block_t?state = plaintext[i]; ? ? ? ? ? ? ? ??// 初始輪密鑰加? ? ? ? ?state ^= round_keys[0]; ? ? ? ? ? ? ? ??// 9輪加密for?(int?round =?1; round 

加密性能對比

算法 CPU GPU FPGA 吞吐量 延遲
AES-128 2.3 Gbps 45 Gbps 100 Gbps FPGA最高 0.5μs
AES-256 1.8 Gbps 38 Gbps 85 Gbps FPGA最高 0.6μs
RSA-2048 1200 ops/s 25K ops/s 50K ops/s FPGA最高 20μs
SHA-256 850 MB/s 12 GB/s 25 GB/s FPGA最高 0.3μs

網絡加速

FPGA在網絡處理中的應用:

// packet_filter.cpp - 網絡包過濾#include#includetypedefap_uint<512>packet_t; // 64字節包typedefap_uint<32>ip_addr_t;structpacket_header{  ip_addr_tsrc_ip;  ip_addr_tdst_ip;   ap_uint<16> src_port;   ap_uint<16> dst_port;   ap_uint<8> protocol; };voidpacket_filter(  hls::stream &input,  hls::stream &output,  ip_addr_t whitelist[256],  int whitelist_size){#pragmaHLS INTERFACE axis port=input#pragmaHLS INTERFACE axis port=output#pragmaHLS INTERFACE s_axilite port=whitelist#pragmaHLS INTERFACE s_axilite port=whitelist_size#pragmaHLS INTERFACE s_axilite port=return#pragmaHLS PIPELINE II=1while(!input.empty()) {    packet_tpkt = input.read();        // 解析包頭    packet_header hdr;     hdr.src_ip = pkt.range(31,0);     hdr.dst_ip = pkt.range(63,32);     hdr.src_port = pkt.range(79,64);     hdr.dst_port = pkt.range(95,80);     hdr.protocol = pkt.range(103,96);        // 檢查白名單boolpass =false;    for(inti =0; i < whitelist_size; i++) {#pragma?HLS UNROLL factor=16if?(hdr.src_ip == whitelist[i]) { ? ? ? ? ? ? ? ? pass =?true; ? ? ? ? ? ? ? ?break; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? ? ? ? ??// 通過的包轉發if?(pass) { ? ? ? ? ? ? output.write(pkt); ? ? ? ? } ? ? } }

網絡加速性能對比

功能 CPU SmartNIC FPGA 延遲 吞吐量
包過濾 10 Gbps 40 Gbps 100 Gbps 0.5μs FPGA最高
負載均衡 8 Gbps 35 Gbps 80 Gbps 0.8μs FPGA最高
DPI深度檢測 5 Gbps 25 Gbps 60 Gbps 1.2μs FPGA最高
IPsec加密 3 Gbps 20 Gbps 50 Gbps 2.0μs FPGA最高

OpenCL編程

使用OpenCL編寫FPGA程序:

// vector_add.cl - OpenCL向量加法__kernel voidvector_add(  __global constfloat *a,  __global constfloat *b,  __global float *c,  constint n){  intgid =get_global_id(0);    if(gid < n) { ? ? ? ? c[gid] = a[gid] + b[gid]; ? ? } }
// host.cpp - 主機代碼#include#includeintmain(){  constintN =1024;    // 初始化OpenCL  cl_platform_id platform;  clGetPlatformIDs(1, &platform,NULL);     cl_device_id device;  clGetDeviceIDs(platform, CL_DEVICE_TYPE_ACCELERATOR,1, &device,NULL);     cl_context context =clCreateContext(NULL,1, &device,NULL,NULL,NULL);   cl_command_queue queue =clCreateCommandQueue(context, device,0,NULL);    // 加載內核  FILE *fp =fopen("vector_add.xclbin","rb");  fseek(fp,0, SEEK_END);  size_tbinary_size =ftell(fp);  rewind(fp);    unsignedchar*binary =newunsignedchar[binary_size];  fread(binary,1, binary_size, fp);  fclose(fp);     cl_program program =clCreateProgramWithBinary(context,1, &device,                           &binary_size,                           (constunsignedchar**)&binary,                           NULL,NULL);  clBuildProgram(program,1, &device,NULL,NULL,NULL);     cl_kernel kernel =clCreateKernel(program,"vector_add",NULL);    // 分配內存float*h_a =newfloat[N];  float*h_b =newfloat[N];  float*h_c =newfloat[N];    for(inti =0; i < N; i++) { ? ? ? ? h_a[i] = i *?1.0f; ? ? ? ? h_b[i] = i *?2.0f; ? ? } ? ? ? ? ?cl_mem d_a =?clCreateBuffer(context, CL_MEM_READ_ONLY, N *?sizeof(float),?NULL,?NULL); ? ? cl_mem d_b =?clCreateBuffer(context, CL_MEM_READ_ONLY, N *?sizeof(float),?NULL,?NULL); ? ? cl_mem d_c =?clCreateBuffer(context, CL_MEM_WRITE_ONLY, N *?sizeof(float),?NULL,?NULL); ? ? ? ??clEnqueueWriteBuffer(queue, d_a, CL_TRUE,?0, N *?sizeof(float), h_a,?0,?NULL,?NULL); ? ?clEnqueueWriteBuffer(queue, d_b, CL_TRUE,?0, N *?sizeof(float), h_b,?0,?NULL,?NULL); ? ? ? ??// 設置參數并執行clSetKernelArg(kernel,?0,?sizeof(cl_mem), &d_a); ? ?clSetKernelArg(kernel,?1,?sizeof(cl_mem), &d_b); ? ?clSetKernelArg(kernel,?2,?sizeof(cl_mem), &d_c); ? ?clSetKernelArg(kernel,?3,?sizeof(int), &N); ? ? ? ??size_t?global_size = N; ? ?clEnqueueNDRangeKernel(queue, kernel,?1,?NULL, &global_size,?NULL,?0,?NULL,?NULL); ? ? ? ??clEnqueueReadBuffer(queue, d_c, CL_TRUE,?0, N *?sizeof(float), h_c,?0,?NULL,?NULL); ? ? ? ? ?std::cout <

179dca76-2f24-11f1-90a1-92fbcf53809c.png

06總結

openEuler 多算力支持:openEuler 提供從 CPU 多核調度、GPU 加速到 FPGA/AI 加速器的支持,實現異構計算協同。

FPGA 核心優勢:低延遲、低功耗、可重編程,適合圖像處理、加密和網絡加速。

開發便利:Vivado、Vitis、OpenCL 等工具在 openEuler 上均可使用,開發者可以直接上手。

適用場景:金融高頻交易、視頻編解碼、網絡包處理、安全加密、AI 推理等場景都能充分發揮多樣算力優勢。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1662

    文章

    22476

    瀏覽量

    638354
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11313

    瀏覽量

    225652
  • 開源
    +關注

    關注

    3

    文章

    4290

    瀏覽量

    46359
  • 算力
    +關注

    關注

    2

    文章

    1614

    瀏覽量

    16816

原文標題:openEuler 多樣算力支持:CPU、GPU 與 FPGA 異構加速實戰

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    FPGACPUGPU快的原理是什么

    本文首先闡述了FPGA的原理了,其次分析了FPGACPUGPU快的原理,最后闡述了CPUGPU
    的頭像 發表于 05-31 09:00 ?1.8w次閱讀
    <b class='flag-5'>FPGA</b>比<b class='flag-5'>CPU</b>和<b class='flag-5'>GPU</b>快的原理是什么

    FPGA真的能取代CPUGPU嗎?

    最近我們看到一篇文章,說FPGA可能會取代CPUGPU成為將來機器人研發領域的主要芯片。文章列舉了很多表格和實驗數據,證明了在很多領域FPGA的性能會極大優于
    發表于 05-16 10:39 ?1.8w次閱讀

    CPU+FPGA將作為新的異構加速模式

    WebP圖像有損壓縮FPGA異構加速方案,能夠實現JPEG-WebP圖片格式的快速轉換,相比傳統方案轉換效率最高能提升14倍,能夠支撐更高并發密度的圖片實時檢索、傳輸等任務。
    發表于 09-09 20:17 ?3880次閱讀

    HSA----CPU+GPU異構系統架構詳解

    解析HSA----CPU+GPU異構系統架構
    發表于 02-03 07:07

    什么是異構并行計算

    GPU、DSP、ASIC、FPGA等。異構計算用簡單的公式可以表示為“CPU+XXX”。舉例來說,AMD著力發展的APU就屬于異構計算,用
    發表于 07-19 08:27

    異構計算的前世今生

    器Chameleon等等。轉眼進入了新世紀,異構出現的頻率也越來越高,2010年蘋果推出了首個自研的處理器A4,將CPUGPU和其它加速器集成至一起。在超算領域,
    發表于 12-26 08:00

    CPU碰上FPGA 異構計算又會發生什么樣的變化

    傳統異構方案中,CPU將數據一次性發送給FPGA,處理完成后再交給CPU加速設備與主機并不同時參與計算。與傳統方案不同,本設計采用了設備間
    發表于 07-06 09:06 ?3706次閱讀

    FPGA為什么比CPUGPU

    FPGA仿真篇-使用腳本命令來加速仿真二 基于FPGA的HDMI高清顯示借口驅動 基于FPGA灰度圖像高斯濾波算法的實現 FPGA為什么比
    發表于 02-20 20:49 ?1976次閱讀

    基于FPGA異構計算是趨勢

    目前處于AI大爆發時期,異構計算的選擇主要在FPGAGPU之間。盡管目前異構計算使用最多的是利用GPU
    的頭像 發表于 04-25 09:17 ?1.2w次閱讀

    4家OS廠商基于openEuler發布商業發行版,加速多核異構計算產業發展

    麒麟軟件、普華基礎軟件、統信軟件、中科院軟件所4家領先的OS廠家,發布基于openEuler的商業發行版,標志openEuler操作系統已具備規模商用能力,加速多核異構計算產業發展。
    的頭像 發表于 03-31 09:55 ?3351次閱讀

    CPUGPU的區別

    CPUGPU等協處理器、DSP、ASIC、FPGA等。一個異構計算平臺往往包含使用不同指令集架構(ISA)的處理器。
    的頭像 發表于 09-04 15:03 ?8262次閱讀
    <b class='flag-5'>CPU</b>與<b class='flag-5'>GPU</b>的區別

    阿里云震旦異構計算加速平臺基于NVIDIA Tensor Core GPU

    阿里云震旦異構計算加速平臺基于NVIDIA Tensor Core GPU,通過機器學習模型的自動優化技術,大幅提升了算子的執行效率,刷新了NVIDIA A100、A10、T4的
    的頭像 發表于 08-13 10:17 ?4621次閱讀

    CPU+xPU的異構方案解析 cpugpu有啥區別

    CPU+xPU 的異構方案成為大算力場景標配,GPU為應用最廣泛的 AI 芯片。目前業內廣泛認同的AI 芯片類型包括GPUFPGA、NPU
    的頭像 發表于 09-03 11:47 ?3615次閱讀
    <b class='flag-5'>CPU</b>+xPU的<b class='flag-5'>異構</b>方案解析 <b class='flag-5'>cpu</b>和<b class='flag-5'>gpu</b>有啥區別

    FPGA+GPU+CPU國產化人工智能平臺

    平臺采用國產化FPGA+GPU+CPU構建嵌入式多核異構智算終端,可形成FPGA+GPUFPGA+CPU
    的頭像 發表于 01-07 16:42 ?2087次閱讀
    <b class='flag-5'>FPGA+GPU+CPU</b>國產化人工智能<b class='flag-5'>平臺</b>

    GPU加速計算平臺的優勢

    傳統的CPU雖然在日常計算任務中表現出色,但在面對大規模并行計算需求時,其性能往往捉襟見肘。而GPU加速計算平臺憑借其獨特的優勢,吸引了行業內人士的廣泛關注和應用。下面,AI部落小編為
    的頭像 發表于 02-23 16:16 ?1074次閱讀