llvm 中固有 cvta_shared_yes、cvta_shared_yes_64、cvta_to_shared_yes_64 等的目的是什么
What is the purpose of the intrinsic cvta_shared_yes, cvta_shared_yes_64, cvta_to_shared_yes_64 etc in llvm
在 LLVM 源代码文件夹中,我们可以看到内部 cvta_shared_yes、cvta_shared_yes_64、cvta_to_shared_yes_64 类似地用于其他内存类型,如全局、局部、常量等。什么是这样做的目的。它是否定义了内存类型的行为?如果可以,我们可以添加一个新的 intrinsic 吗?
NVPTX 后端使用这些内在函数来发出 PTX 特殊操作,将指向全局、本地、共享或常量内存的指针转换为通用地址 space 并返回。
这是 NVPTX 后端特定的,代表 Nvidia (CUDA) GPU 上的内存层次结构。
如果您想向 LLVM 添加内部函数,请查看 llvm/include/llvm/IR/Intrinsics*.td
TableGen 文件。这些文件用于生成内在函数所需的一切。
例如:
def int_memcpy : Intrinsic<[],
[llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty,
llvm_i32_ty, llvm_i1_ty],
[IntrReadWriteArgMem, NoCapture<0>, NoCapture<1>,
ReadOnly<1>]>;
将生成 llvm.memcpy
内部函数,后端可以使用它来生成对特定系统的 memcpy
函数的调用。
但是,请记住后端必须以某种方式支持您的新内在函数。您可以查看 ./llvm/lib/Target/X86/X86ISelLowering.cpp
X86 后端如何处理 llvm.memcpy 内部函数。
在 LLVM 源代码文件夹中,我们可以看到内部 cvta_shared_yes、cvta_shared_yes_64、cvta_to_shared_yes_64 类似地用于其他内存类型,如全局、局部、常量等。什么是这样做的目的。它是否定义了内存类型的行为?如果可以,我们可以添加一个新的 intrinsic 吗?
NVPTX 后端使用这些内在函数来发出 PTX 特殊操作,将指向全局、本地、共享或常量内存的指针转换为通用地址 space 并返回。 这是 NVPTX 后端特定的,代表 Nvidia (CUDA) GPU 上的内存层次结构。
如果您想向 LLVM 添加内部函数,请查看 llvm/include/llvm/IR/Intrinsics*.td
TableGen 文件。这些文件用于生成内在函数所需的一切。
例如:
def int_memcpy : Intrinsic<[],
[llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty,
llvm_i32_ty, llvm_i1_ty],
[IntrReadWriteArgMem, NoCapture<0>, NoCapture<1>,
ReadOnly<1>]>;
将生成 llvm.memcpy
内部函数,后端可以使用它来生成对特定系统的 memcpy
函数的调用。
但是,请记住后端必须以某种方式支持您的新内在函数。您可以查看 ./llvm/lib/Target/X86/X86ISelLowering.cpp
X86 后端如何处理 llvm.memcpy 内部函数。