当前位置: 首页 > news >正文

【PoCL】项目源码编译

PoCL 项目链接

本博文主要介绍了源码编译llvm和PoCL的过程

目录

  • 0. 个人简介 && 授权须知
  • 1. 项目介绍
  • 2. 项目依赖
  • 3. 源码编译
    • 3.1 编译 LLVM 工程
    • 3.2 编译PoCL 工程

0. 个人简介 && 授权须知

image-20230911133730620

📋 个人简介

  • 💖 作者简介:大家好,我是喜欢记录零碎知识点的菜鸟打工人。😎
  • 📝 个人主页:欢迎访问我的博客主页🔥…
    • https://blog.csdn.net/qq_39217004?spm=1010.2135.3001.5343
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:嵌入式Linux开发 🍁 🍁
  • 💬格言:写文档啊不是写文章,重要的还是直白!🔥

转载文章,禁止声明原创;不允许直接二次转载,转载请根据原文链接联系作者

若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
但对于未注明转载来源/原文链接的文章,我将保留追述的权利。

https://blog.csdn.net/qq_39217004?spm=1010.2135.3001.5343

作者:积跬步、至千里

image-20230911133724204

1. 项目介绍

PoCL(Portable Computing Language)是一个便携式开源的 OpenCL 实现,旨在为各种硬件平台提供一致的 OpenCL 编程接口。PoCL 的主要目标是提高 OpenCL 程序在不同设备类型之间的性能可移植性,并通过运行时和编译技术来实现这一目标。PoCL 支持多种 CPU 架构(如 x86、ARM、RISC-V)以及 NVIDIA GPU 和 Intel GPU 等设备。

2. 项目依赖

  • LLVM 和 Clang 开发库
  • CMake 3.9 或更高版本
  • GNU Make 或 Ninja
  • pkg-config
  • pthread
  • hwloc(可选)
  1. Clang Clang 是 LLVM 项目的一部分,作为 PoCL 的 OpenCL C 前端,负责将 OpenCL C 代码编译为 LLVM IR。
  2. LLVM LLVM 是 PoCL 的核心组件,负责将 LLVM IR 编译为目标设备的机器代码。
  3. ocl-icd ocl-icd 是一个 OpenCL 安装程序,允许系统上同时存在多个 OpenCL 实现。PoCL 可以与 ocl-icd 一起使用,以提供更好的兼容性和灵活性。
export LLVM_VERSION=<major LLVM version>
sudo apt install -y python3-dev libpython3-dev build-essential ocl-icd-libopencl1 \
cmake git pkg-config libclang-$[LLVM_VERSION]-dev clang-$[LLVM_VERSION] \
llvm-$[LLVM_VERSION] make ninja-build ocl-icd-libopencl1 ocl-icd-dev \
ocl-icd-opencl-dev libhwloc-dev zlib1g zlib1g-dev clinfo dialog apt-utils \
libxml2-dev libclang-cpp$[LLVM_VERSION]-dev libclang-cpp$[LLVM_VERSION] \
llvm-$[LLVM_VERSION]-dev

3. 源码编译

3.1 编译 LLVM 工程

本部分参考资料:LLVM系列第一章:编译LLVM源码
git clone https://github.com/vortexgpgpu/llvm.git

cd /llvm/llvm-prj
mkdir build                         								# 存放编译文件
cd /llvm/llvm-prj && mkdir make_install						# 存放安装文件,不要和工程文件同目录cd /llvm/llvm-prj/buildcmake -G Ninja -DCMAKE_BUILD_TYPE=Debug  \
-DLLVM_TARGETS_TO_BUILD="X86;RISCV" \
-DLLVM_ENABLE_PROJECTS="clang;"  \
-DLLVM_BUILD_LLVM_DYLIB=true \
-DCMAKE_INSTALL_PREFIX="/data/llvm_install" \
-DLLVM_BUILD_LLVM_DYLIB=true \
../llvmninja && ninja install# 添加环境变量
sudo vim ~/.bashrc 
export PATH=$PATH:/home/llvm/llvm-prjx/build/bin   #最后一行添加路径
source ~/.bashrc
  • 通过-DLLVM_ENABLE_PROJECTS 选项指定编译的工程;
  • 通过-DCMAKE_BUILD_TYPE 指定编译Release版本或者是Debug版本;
  • 通过-DLLVM_DEFAULT_TARGET_TRIPLE可以修改默认的 target 的 triple 组合,不指定默认是x86_64-unknown-linux-gnu;比如可以指定目标为 -DLLVM_DEFAULT_TARGET_TRIPLE=“riscv64-unknown-linux-gnu” \
  • 通过-DLLVM_TARGETS_TO_BUILD="RISCV"指定构建的target;
  • 通过-DCMAKE_INSTALL_PREFIX指定编译完成后的安装目录。
  • -DLLVM_BUILD_LLVM_DYLIB=true 表示生成 .so 动态链接库文件

3.2 编译PoCL 工程

  1. 创建构建目录并进入:
mkdir build
cd build
  1. 使用 CMake 配置项目:
cmake ..
  1. 编译并安装:
make
sudo make install

在这里插入图片描述

相关文章:

【PoCL】项目源码编译

PoCL 项目链接 本博文主要介绍了源码编译llvm和PoCL的过程 目录 0. 个人简介 && 授权须知1. 项目介绍2. 项目依赖3. 源码编译3.1 编译 LLVM 工程3.2 编译PoCL 工程 0. 个人简介 && 授权须知 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&…...

【数据分享】1929-2024年全球站点的逐月平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff01;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2024年全球气象站点…...

免费GPU算力,不花钱部署DeepSeek-R1

在人工智能和大模型技术飞速发展的今天&#xff0c;越来越多的开发者和研究者希望能够亲自体验和微调大模型&#xff0c;以便更好地理解和应用这些先进的技术。然而&#xff0c;高昂的GPU算力成本往往成为了阻碍大家探索的瓶颈。幸运的是&#xff0c;腾讯云Cloud Studio提供了免…...

C语言的灵魂——指针(1)

指针是C语言的灵魂&#xff0c;有了指针C语言才能完成一些复杂的程序&#xff1b;没了指针就相当于C语言最精髓的部分被去掉了&#xff0c;可见指针是多么重要。废话不多讲我们直接开始。 指针 一&#xff0c;内存和地址二&#xff0c;编址三&#xff0c;指针变量和地址1&#…...

2000-2020年各省第三产业增加值占GDP比重数据

2000-2020年各省第三产业增加值占GDP比重数据 1、时间&#xff1a;2000-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、第三产业增加值占GDP比重 4、范围&#xff1a;31省 5、指标解释&#xff1a;第三产业增加值占G…...

Linux MySQL离线安装

一、准备工作 1. 下载MySQL安装包 访问MySQL官方网站&#xff0c;选择适合您Linux系统的MySQL版本进行下载。通常推荐下载Generic Linux (glibc 2.12)版本的.tar.gz压缩包&#xff0c;例如mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz。将下载好的安装包拷贝到Linux服务器的某…...

ESP32服务器和PC客户端的Wi-Fi通信

ESP32客户端-服务器Wi-Fi通信 本指南将向您展示如何设置ESP32板作为服务端&#xff0c;PC作为客户端&#xff0c;通过HTTP通信&#xff0c;以通过Wi-Fi&#xff08;无需路由器或互联网连接&#xff09;交换数据。简而言之&#xff0c;您将学习如何使用HTTP请求将一个板的数据发…...

Linux文件权限

目录 1.Linux权限管理 1.1文件访问者的分类 1.2文件的类型和访问权限 1&#xff09;文件类型 2&#xff09;文件访问权限 3&#xff09;chmod指令 4&#xff09;chown指令 ​编辑 5&#xff09;chgrp命令 1.3目录权限 1.4粘滞位 1.5umask&#xff08;权限掩码&…...

UE骨骼模拟物理

此功能可以制作仿动物派对上半身模拟物理效果 Set all bodies below simulate physics 骨骼名称设置为 spine_01 这样上半身所有骨骼都会模拟物理 效果演示...

salesforce中如何获取一个profile的18位id

在 Salesforce 中&#xff0c;要获取一个 Profile 的 18 位 ID&#xff0c;可以通过以下几种方式实现&#xff1a; 方法 1&#xff1a;通过 Developer Console 登录 Salesforce。 点击右上角的 头像 或 设置齿轮&#xff0c;选择 “开发者控制台”&#xff08;Developer Conso…...

为什么机器学习中梯度下降是减去斜率,而不是按照其数学意义减去斜率的倒数

做个简单假设&#xff0c;Loss函数的某一个参数的函数曲线是二次方程&#xff0c;其导数函数为 r 2 ∗ w r 2*w r2∗w 按照斜率意义来看&#xff0c;要减去斜率倒数 降低LOSS需要将w1更新为w2&#xff0c;所以更新公式为 w w − Δ L Δ w w w - \frac{\Delta L}{\Delta w…...

Vue 3 30天精进之旅:Day 04 - 计算属性与侦听器

引言 在前几天的学习中&#xff0c;我们已经了解了Vue实例的基本概念和使用方法。今天&#xff0c;我们将深入探讨两个重要的特性&#xff1a;计算属性&#xff08;computed properties&#xff09;和侦听器&#xff08;watchers&#xff09;。这两个特性使得我们能够更高效地…...

UE学习日志#11GAS--ASC源码简要分析9 AbilitySystemGlobals分析2 初始化相关

1 static UAbilitySystemGlobals& Get() 保证了是单例&#xff0c;IGameplayAbilitiesModule继承了IModuleInterface /** Gets the single instance of the globals object, will create it as necessary */static UAbilitySystemGlobals& Get(){return *IGameplayAbi…...

SQL在DBA手里-改写篇

背景 最近运营需要做月报汇总交易情况&#xff0c;之前一直是他们手工出的数据&#xff0c;他们想做成月初自动发送邮件&#xff0c;从而减轻他们的工作量。于是他们提供SQL我们在邮件服务器配置做定时发送任务。 表介绍&#xff08;表及字段已做脱敏处理&#xff09; trans…...

SQL Server查询计划操作符(7.3)——查询计划相关操作符(5)

7.3. 查询计划相关操作符 38)Flow Distinct:该操作符扫描其输入并对其去重。该操作符从其输入得到每行数据时即将其返回(除非其为重复数据行,此时,该数据行会被抛弃),而Distinct操作符在产生任何输出前将消费所有输入。该操作符为逻辑操作符。该操作符具体如图7.2-38中…...

Autogen_core:Agent and Agent Runtime

目录 1. 代码2. 代码解释第一部分&#xff1a;定义消息类型和代理第二部分&#xff1a;定义助手代理第三部分&#xff1a;注册和运行代理第四部分&#xff1a;发送和停止消息处理总结 3. 类似的例子 1. 代码 from dataclasses import dataclassfrom autogen_core import Agent…...

vue(33) : 安装组件出错解决

1. request to https://registry.npm.taobao.org/semver/download/semver-6.1.1.tgz?cache0&other_urlshttps%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.1.1.tgz failed, reason: certificate has expired 这个错误提示表明你在尝试从https://reg…...

论文阅读(五):乳腺癌中的高斯图模型和扩展网络推理

1.论文链接&#xff1a;Network Inference in Breast Cancer with Gaussian Graphical Models and Extensions 摘要&#xff1a; 具有高相关性的聚类基因将具有接近表达谱的基因分组&#xff0c;确定共表达基因的聚类。然而&#xff0c;这种相关性并没有提供任何关于基因间信息…...

定时器按键tim_key模版

低优先级放在高优先级内势必是程序卡死 把高优先级放到低优先级内&#xff0c;会使程序卡死 可修改 Debuger调试方法 Pwm rcc #include "my_main.h" uint8_t led_sta0x10; char text[30]; void LED_Disp(uint8_t dsLED) {HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPI…...

Effective Objective-C 2.0 读书笔记—— objc_msgSend

Effective Objective-C 2.0 读书笔记—— objc_msgSend 文章目录 Effective Objective-C 2.0 读书笔记—— objc_msgSend引入——静态绑定和动态绑定OC之中动态绑定的实现方法签名方法列表 其他方法objc_msgSend_stretobjc_msgSend_fpretobjc_msgSendSuper 尾调用优化总结参考文…...

机器学习 vs 深度学习

目录 一、机器学习 1、实现原理 2、实施方法 二、深度学习 1、与机器学习的联系与区别 2、神经网络的历史发展 3、神经网络的基本概念 一、机器学习 1、实现原理 训练&#xff08;归纳&#xff09;和预测&#xff08;演绎&#xff09; 归纳: 从具体案例中抽象一般规律…...

Vue中的动态组件是什么?如何动态切换组件?

什么是动态组件&#xff1f; 动态组件是 Vue.js 中的一项强大功能&#xff0c;它允许开发者根据程序的状态或用户的操作&#xff0c;动态地切换组件。动态组件的优势在于&#xff0c;开发者可以根据具体需求灵活地渲染不同的组件&#xff0c;从而提高应用的通用性和可维护性。…...

Spring IoC DI

目录 一. IoC & DI 入门 1. 重谈Spring 2. 容器 3. IoC ① 传统程序开发 ② IoC 程序开发 ③ IoC 的优势 4. DI 3. IoC & DI 使用 二. IoC & DI 详解 1. Bean的存储 2. Bean的重命名 3. 扫描路径 三. DI 详解 1. 属性注入 2. 构造方法注入 3. Se…...

【Linux】线程、线程控制、地址空间布局

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、Linux线程1.1 线程的优缺点1.2 线程异常和用途1.3 线程等待1.3 线程终止1.4 线程分离1.5 线程ID和地址空间布局1.6 线程栈 1、…...

【记录】日常|从零散记录到博客之星Top300的成长之路

文章目录 shandianchengzi 2024 年度盘点概述写作风格简介2024年的创作内容总结 shandianchengzi 2024 年度盘点 概述 2024年及2025年至今我创作了786即84篇文章&#xff0c;加上这篇就是85篇。 很荣幸这次居然能够入选博客之星Top300&#xff0c;这个排名在我之前的所有年份…...

网盘资源查找工具---AI功能

01 软件介绍 这是一款融入了ai技术的网盘搜索神器&#xff0c;可以让你更快&#xff0c;更精准的找到自己需要的文件&#xff0c;不管你是找影视&#xff0c;音乐&#xff0c;还是找软件或者学习资料都可以&#xff0c;欢迎前来使用。 02 功能展示 该软件非常简洁&#xff…...

LWJGL轻量级Java游戏库

LWJGL - Lightweight Java Game Library 基本介绍 LWJGL是一个Java库&#xff0c;它支持跨平台访问流行的本地api&#xff0c;这些api在图形&#xff08;OpenGL, Vulkan&#xff09;、音频&#xff08;OpenAL&#xff09;和并行计算&#xff08;OpenCL&#xff09;应用程序的…...

AI智能日志分析系统

文章目录 1.combinations-intelligent-analysis-starter1.目录结构2.pom.xml3.自动配置1.IntelligentAnalysisAutoConfiguration.java2.spring.factories 2.combinations-intelligent-analysis-starter-demo1.目录结构2.pom.xml3.application.yml4.IntelligentAnalysisApplicat…...

详解三种常用标准化:Batch Norm、Layer Norm和RMSNorm

在深度学习中&#xff0c;标准化技术是提升模型训练速度、稳定性和性能的重要手段。本文将详细介绍三种常用的标准化方法&#xff1a;Batch Normalization&#xff08;批量标准化&#xff09;、Layer Normalization&#xff08;层标准化&#xff09;和 RMS Normalization&#…...

数据压缩算法-差分编码(Delta Encoding)

Delta Encoding&#xff08;差分编码&#xff09;是一种数据压缩技术&#xff0c;其核心思想是存储数据之间的差异&#xff08;delta&#xff09;&#xff0c;而不是原始数据本身。这种方法特别适用于数据序列中相邻元素之间变化较小的情况&#xff0c;可以显著减少存储空间或传…...

Nginx中部署多个前端项目

1&#xff0c;准备前端项目 tlias系统的前端资源 外卖项目的前端资源 2&#xff0c;nginx里面的html文件夹中新建&#xff0c;tlias和sky两个文件夹。 切记这是在nginx/html下创建的 mkdir sky mkdir tlias 把tlias和sky的资源都放到对应的文件夹中 3&#xff0c;编辑配置ngi…...

Level DB --- TableBuilder

TableBuilder是Level DB里面重要的类和模块&#xff0c;它描述了数据如何序列化到文件中&#xff0c;以及数据里面的格式逻辑。它里面包含了之前介绍的多个模块和类。 data block、filter block和index block block格式&#xff0c;之前已经介绍过Level DB --- BlockBuilder-…...

JVM堆空间

一、堆空间的核心概述 一个JVM实例只存在一个堆内存&#xff0c;堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建&#xff0c;其空间大小也就确定了。是JVM管理的最大一块内存空间。 堆内存的大小是可以调节的。堆可以处于物理上不连续的内存空间中&#xff…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.13 降维打击:扁平化操作的六种武器

1.13 降维打击&#xff1a;扁平化操作的六种武器 目录 #mermaid-svg-bbLxDryjxBbXe3tu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bbLxDryjxBbXe3tu .error-icon{fill:#552222;}#mermaid-svg-bbLxDryjxBbXe3tu…...

Doris Schema Change 常见问题分析

1. 什么是 Schema Change Schema Change 是在数据库中修改表结构的一种操作&#xff0c;例如添加列、删除列、更改列类型等。 ⚠️Schema Change 限制⚠️ 一张表在同一时间只能有一个 Schema Change 作业在运行。分区列和分桶列不能修改。如果聚合表中有 REPLACE 方式聚合的…...

数据结构之堆排序

文章目录 堆排序版本一图文理解 版本二向下调整建堆向上调整建堆 排升/降序升序 堆排序 版本一 基于已有数组建堆取堆顶元素并删除堆顶元素重新建大根堆&#xff0c;完成排序版本。 图文理解 版本二 前提&#xff1a;必须提供有现成的数据结构堆 数组建堆&#xff0c;首尾…...

实现桌面动态壁纸(三)—— 视频播放的策略

关于动态壁纸这边&#xff0c;其实已经不需要再谈什么东西了&#xff0c;现有的各种文章都在介绍相关的技术。可以说现如今要去制作一个桌面动态壁纸应该不是什么难事。我考虑了很久&#xff0c;决定还是开一篇单独谈谈。可能我说的也不全部正确&#xff0c;您有什么建议随时可…...

C语言程序设计十大排序—希尔排序

文章目录 1.概念✅2.希尔排序&#x1f388;3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅ 1.概念✅ 排序是数据处理的基本操作之一&#xff0c;每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法&#xff0c;排序后的数据更易于处理和查找。在计算机发展…...

2023年版本IDEA复制项目并修改端口号和运行内存

2023年版本IDEA复制项目并修改端口号和运行内存 1 在idea中打开server面板&#xff0c;在server面板中选择需要复制的项目右键&#xff0c;点击弹出来的”复制配置…&#xff08;Edit Configuration…&#xff09;“。如果idea上没有server面板或者有server面板但没有springbo…...

Ubuntu 安装 QGIS LTR 3.34

QGIS官方提供了安装指南&#xff1a;https://qgis.org/resources/installation-guide/#linux。大多数linux发行版将QGIS拆分为几个包&#xff1a;qgis、qgis-python、qgis-grass、qgis-plugin-grass、qgis-server&#xff0c;有的包最初安装时被跳过&#xff0c;可以在需要使用…...

win32汇编环境,对话框程序中使用进度条控件

;运行效果 ;win32汇编环境,对话框程序中使用进度条控件 ;进度条控件主要涉及的是长度单位,每步步长,推进的时间。 ;比如你的长度是1000,步长是100,每秒走1次,则10秒走完全程 ;比如你的长度是1000,步长是10,每秒走1次,则100秒走完全程,但每格格子的长度与上面一样 ;以下…...

从ChatGPT热潮看智算崛起

2025年1月7日&#xff0c;科智咨询发布《2025年IDC产业七大发展趋势》&#xff0c;其中提到“ChatGPT开启生成式AI热潮&#xff0c;智能算力需求暴涨&#xff0c;算力供给结构发生转变”。 【图片来源于网络&#xff0c;侵删】 为何会以ChatGPT发布为节点呢&#xff1f;咱们一起…...

APISIX-API服务网关

一、简介 apisix是一款云原生微服务API网关&#xff0c;可以为API提供终极性能、安全性、开源和可扩展的平台。apisix基于Nginx和etcd实现&#xff0c;与传统API网关相比&#xff0c;apisix具有动态路由和插件热加载&#xff0c;特别适合微服务系统下的API管理。 Apisix 的诞生…...

NR_shell运行流程简析

nr_shell 是一套开源 shell 框架&#xff0c;基于框架可创建终端交互功能。 为了记录终端输入指令&#xff0c;以及进行解析处理&#xff0c;nr_shell 提供了一套 cmd 结构体&#xff0c;具体如下&#xff1a;typedef struct static_cmd_function_struct {char cmd[NR_SHELL_CM…...

leetcode_链表 876.链表的中间节点

876.链表的中间节点 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。如果有两个中间结点&#xff0c;则返回第二个中间结点。思路&#xff1a;快慢指针&#xff0c;创建两个指针fast和slow&#xff0c;fast指针每次移动两步&#xff0c;slow指针每次移动…...

idea实用设置

一.View 1.配置工具包方便按 二.File->Settings 点开设置然后进行后面的配置 1.这个看个人习惯 2.更新 3.更改菜单字体大小 4.鼠标控制字体大小 5.文件默认字体大小 6. 代码的智能提示功能 7.自动导包 8.编码 9.取消双击shift搜索...

ui-automator定位官网文档下载及使用

一、ui-automator定位官网文档简介及下载 AndroidUiAutomator&#xff1a;移动端特有的定位方式&#xff0c;uiautomator是java实现的&#xff0c;定位类型必须写成java类型 官方地址&#xff1a;https://developer.android.com/training/testing/ui-automator.html#ui-autom…...

Java数据结构方面的面试试题以及答案解析

Java数据结构是在计算机中存储和组织数据的方式&#xff0c;用于高效地处理和管理数据。 以下是一些常见的Java数据结构&#xff1a; 数组&#xff08;Array&#xff09;&#xff1a;一种线性数据结构&#xff0c;允许通过索引快速访问元素。它存储固定大小的相同类型的元素集…...

微信小程序-点餐(美食屋)02开发实践

目录 概要 整体架构流程 &#xff08;一&#xff09;用户注册与登录 &#xff08;二&#xff09;菜品浏览与点餐 &#xff08;三&#xff09;订单管理 &#xff08;四&#xff09;后台管理 部分代码展示 1.index.wxml 2.list.wxml 3.checkout.wxml 4.detail.wxml 小结优点 概要…...

Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)

redis实现查询缓存的业务逻辑 service层实现 Overridepublic Result queryById(Long id) {String key CACHE_SHOP_KEY id;// 现查询redis内有没有数据String shopJson (String) redisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopJson)){ // 如果redis的数…...