計畫網頁
Sample programs for the LLVM PTX back-end
$ ssh tesla $ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm $ cd llvm/tools $ svn co http://llvm.org/svn/llvm-project/clang/trunk clang $ mkdir build; cd build $ ../llvm/configure --prefix=$INSTALL --enable-targets=host,ptx $ make
$ git clone git://github.com/jholewinski/llvm-ptx-samples.git $ cd llvm-ptx-samples # 抓下 libclc $ git submodule init && git submodule update $ mkdir build $ cd build $ cmake .. $ make
$ cd build/bin $ ./ocl-blur2d ------------------------------ * Source Kernel ------------------------------ Number of Iterations: 16 Total Time: 7.05218 sec Average Time: 0.440761 sec ------------------------------ * Binary Kernel ------------------------------ Number of Iterations: 16 Total Time: 7.05264 sec Average Time: 0.44079 sec
詳細請見 LLVM Testing Infrastructure Guide。
$ cd build $ ./Debug+Asserts/bin/llvm-lit ${LLVM_SOURCE}/test/test/CodeGen/PTX/xxx.ll
$ cd llvm/lib/Target/PTX $ svn log
SM 1.0 ~ G80 SM 1.3 ~ G200 SM 2.0 ~ GF100 SM 2.1 ~ GF10x
include/llvm/Target/TargetMachine.h
中 LLVMTargetMachine 的子類。請參考 Tutorial: Building a backend in 24 hours 21 頁。
def ii64 : InstPTX<(outs RC:$d), (ins MEMii64:$a), !strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")), [(set RC:$d, (pat_load ADDRii64:$a))]>, Requires<[Use64BitAddresses]>;
詳細格式請見 TableGen Fundamentals。outs
代表該指令的結果要存到哪,ins
代表該指令的運算元。strconcat
用來將後面字串連結起來 (TableGen values and expressions)。
如果要新增指令,請參考 include/llvm/Target/TargetSelectionDAG.td
。該檔定義指令是使用 SDNode 或是 PatFrag1)。
不同版本硬體提供不同特性是使用 Subtarget Support 描述。SubtargetFeature
定義在 include/llvm/Target/Target.td
。
def FeaturePTX23 : SubtargetFeature<"ptx23", "PTXVersion", "PTX_VERSION_2_3", "Use PTX Language Version 2.3", [FeaturePTX22]>;
FMA (Fused-Multiply Add) 會有 ulp rounding error (Unit in the last place)。
def FeatureFMA : SubtargetFeature<"fma","SupportsFMA", "true", "Support Fused-Multiply Add">;
LLVM 不直接支援 not %x
,改用 xor %x, 1
。為避免把 xor %x, 1
對應到 xor
,需要 custom lowering,參考 X86ISelLowering.cpp。