<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Soul Of Free Loop &#187; LLVM</title>
	<atom:link href="https://zohead.com/archives/tag/llvm/feed/" rel="self" type="application/rss+xml" />
	<link>https://zohead.com</link>
	<description>Uranus Zhou&#039;s Blog</description>
	<lastBuildDate>Sat, 19 Jul 2025 15:42:46 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8</generator>
	<item>
		<title>CentOS 6编译Intel Beignet OpenCL</title>
		<link>https://zohead.com/archives/centos6-beignet/</link>
		<comments>https://zohead.com/archives/centos6-beignet/#comments</comments>
		<pubDate>Mon, 23 Jul 2018 16:26:43 +0000</pubDate>
		<dc:creator><![CDATA[Uranus Zhou]]></dc:creator>
				<category><![CDATA[OpenCL]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Beignet]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[LLVM]]></category>
		<category><![CDATA[显卡]]></category>

		<guid isPermaLink="false">https://zohead.com/?p=1545</guid>
		<description><![CDATA[关于 Intel Beignet OpenCL 之前在 Linux 上为了测试 Intel 核显安装了 Intel 官方闭源的 OpenCL Drivers 库，也解决了 CentOS 6 系统下 C++ 程序的问题，不过换了一台设备之后发现该 OpenCL 库却与 i3-3220 CPU 自带的 HD Graphics 2500 核显不兼容，OpenCL 不能正确加载核显设备。 由于 Intel 闭源的 OpenCL Drivers 现在基本上不再更新了，因此我想着可以试试 Intel 官方的开源 Beignet OpenCL 实现，其 GitHub 项目主页： https://github [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2 id="about-beignet-opencl">关于 Intel Beignet OpenCL</h2>
<p>之前在 Linux 上为了测试 Intel 核显安装了 Intel 官方闭源的 <a href="https://zohead.com/archives/cplus-intel-opencl/">OpenCL Drivers</a> 库，也解决了 CentOS 6 系统下 C++ 程序的问题，不过换了一台设备之后发现该 OpenCL 库却与 i3-3220 CPU 自带的 HD Graphics 2500 核显不兼容，OpenCL 不能正确加载核显设备。</p>
<p>由于 Intel 闭源的 OpenCL Drivers 现在基本上不再更新了，因此我想着可以试试 Intel 官方的开源 Beignet OpenCL 实现，其 GitHub 项目主页：</p>
<p><a href="https://github.com/intel/beignet/" target="_blank">https://github.com/intel/beignet/</a></p>
<p>当然如果你用的是 Intel Gen8、Gen9 等比较新的核显，大可以试试最新开源的 <a href="https://github.com/intel/compute-runtime" target="_blank">Intel NEO Compute Driver</a>。</p>
<p>Beignet OpenCL 主页介绍编译该项目需要安装 libdrm、libdrm_intel 以及最低 3.6 版本的 LLVM，在 CentOS 6 系统下前面两个倒好解决，直接从 Freedesktop 网站上下载最新版本 <a href="https://dri.freedesktop.org/libdrm/" target="_blank">libdrm</a> 源代码编译安装即可；LLVM 略显麻烦，本文主要记录 CentOS 6 下 LLVM 升级方法。</p>
<h2 id="fedora-copr-llvm">Fedora Copr 升级 LLVM</h2>
<p>虽然 CentOS 6 这种老系统 EPEL 自带的 LLVM 也只是 3.4.2 版本无法编译 Beignet OpenCL，不过还好 Fedora Copr 库里有人提供了编译好了的新版本 LLVM 包。</p>
<p>例如我找到的一个用的人比较多而且符合 Beignet OpenCL 需求的 LLVM 5.0.0 版本：</p>
<p><a href="https://copr.fedorainfracloud.org/coprs/alonid/llvm-5.0.0/" target="_blank">https://copr.fedorainfracloud.org/coprs/alonid/llvm-5.0.0/</a></p>
<p>作者提供了 CentOS 6、CentOS 7 及 Fedora 26 系统下的安装包，我们可以在 CentOS 6 下通过 yum 安装，依赖的包也会自动安装：</p>
<pre class="brush: bash; title: ; notranslate">
[root@cenntos ~]# curl -o /etc/yum.repos.d/alonid-llvm-5.0.0-epel-6.repo https://copr.fedorainfracloud.org/coprs/alonid/llvm-5.0.0/repo/epel-6/alonid-llvm-5.0.0-epel-6.repo
[root@cenntos ~]# yum makecache
[root@cenntos ~]# yum install llvm-5.0.0-devel llvm-5.0.0-static clang-5.0.0-devel
</pre>
<p>安装完成之后最好修改对应用户的 <code>.bash_profile</code> 文件将 <code>/opt/llvm-5.0.0/bin</code> 目录附加到 <code>PATH</code> 系统环境变量中。</p>
<p>不过可惜的是通过 Copr 安装的 LLVM 5.0.0 版本在 Beignet OpenCL 的链接阶段会报错退出，无法正常编译。</p>
<h2 id="compile-llvm">手工编译新版本 LLVM</h2>
<p>看来对于 CentOS 6 这种老系统只能手工编译新版本的 LLVM 了，安装官网介绍的步骤来编译的话比较繁琐，不过还好 Linux 下相当流行的 <a href="https://www.mesa3d.org/" target="_blank">Mesa</a> 3D 图形库默认就是用 CentOS 6 容器来编译的，可以参考 mesa-builds 的提交记录：</p>
<p><a href="https://gitlab.kitware.com/paraview/mesa-builds/commit/718d0911ba0405287610d73ef8f450ab791cce63" target="_blank">Move to using a CentOS6 container</a></p>
<p>为了省事我就根据 mesa-builds 的 Dockerfile 改了一个自动编译 LLVM 3.9.1 版本的脚本，此脚本会安装 <a href="https://zohead.com/archives/scl-linux-kernel/">Software Collections</a> 并使用新版本 gcc、g++ 和 Python 编译 LLVM：</p>
<pre class="brush: bash; title: ; notranslate">
yum install -y tar xz bzip2 wget git libtool automake libX11-devel libXext-devel libxcb-devel bison flex centos-release-scl
yum install -y devtoolset-4-gcc devtoolset-4-gcc-c++ python27

mkdir -p /opt

cd /opt &amp;&amp; \
  wget https://cmake.org/files/v3.5/cmake-3.5.2-Linux-x86_64.tar.gz &amp;&amp; \
  tar -xvf cmake-3.5.2-Linux-x86_64.tar.gz &amp;&amp; \
  rm -f cmake-3.5.2-Linux-x86_64.tar.gz

cd /opt &amp;&amp; \
  wget http://llvm.org/releases/3.9.1/llvm-3.9.1.src.tar.xz &amp;&amp; \
  tar -xvf llvm-3.9.1.src.tar.xz &amp;&amp; \
  mkdir llvm-3.9.1.bld &amp;&amp; \
  cd llvm-3.9.1.bld &amp;&amp; \
  /usr/bin/scl enable devtoolset-4 python27 -- \
    /opt/cmake-3.5.2-Linux-x86_64/bin/cmake \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_INSTALL_PREFIX=/opt/llvm-3.9.1 \
      -DLLVM_BUILD_LLVM_DYLIB=ON \
      -DLLVM_ENABLE_RTTI=ON \
      -DLLVM_TARGETS_TO_BUILD=X86 \
      -DLLVM_INSTALL_UTILS=ON \
      /opt/llvm-3.9.1.src &amp;&amp; \
  /usr/bin/scl enable devtoolset-4 python27 -- make -j16 install
</pre>
<p>需要注意最后一行的 make 命令的线程数请根据实际硬件配置指定，我用的编译服务器配了 16GB 内存才敢指定 16 个线程。</p>
<p>新版本 LLVM 默认安装在 <code>/opt</code> 目录下，为了方便使用我先修改当前用户的 <code>.bash_profile</code> 文件中的 <code>PATH</code> 环境变量：</p>
<pre class="brush: bash; title: ; notranslate">
[root@cenntos ~]# PATH=$PATH:$HOME/bin:/opt/llvm-3.9.1/bin
[root@cenntos ~]# export PATH
</pre>
<p>同时增加 LLVM 库文件目录，然后运行 <code>ldconfig</code> 刷新：</p>
<pre class="brush: bash; title: ; notranslate">
[root@cenntos ~]# cat /etc/ld.so.conf.d/llvm-3.9.1.conf
/opt/llvm-3.9.1/lib
</pre>
<h2 id="compile-beignet-opencl">编译 Beignet OpenCL</h2>
<p>安装并配置好新版本 LLVM 之后，我们就可以按照 GitHub 项目主页上的说明编译 Beignet OpenCL 了，首先安装需要的开发包：</p>
<pre class="brush: bash; title: ; notranslate">
[root@cenntos ~]# yum -y install epel-release
[root@cenntos ~]# yum install -y libdrm-devel libXfixes-devel opencl-headers ocl-icd-devel
[root@cenntos ~]# yum install -y zlib-devel elfutils-libelf-devel gettext ncurses-devel
</pre>
<p>检出 Beignet 源代码并使用 cmake3 编译：</p>
<pre class="brush: bash; title: ; notranslate">
[root@cenntos ~]# git clone https://github.com/intel/beignet.git
[root@cenntos ~]# cd beignet &amp;&amp; mkdir build &amp;&amp; cd build
[root@cenntos build]# /opt/cmake-3.5.2-Linux-x86_64/bin/cmake ..
[root@cenntos build]# make -j8
</pre>
<p>编译成功之后，按照 Beignet 项目说明将库文件和 ICD 等相关文件安装到目标 CentOS 6 系统，然后再运行 clinfo 命令应该就能看到 i3-3220 自带核显设备了。</p>
]]></content:encoded>
			<wfw:commentRss>https://zohead.com/archives/centos6-beignet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
