llvm中内在的cvta_shared_yes、cvta_shared_yes_64、cvta_to_shared_yes_64等的目的是啥

Posted

技术标签:

【中文标题】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 llvmllvm中内在的cvta_shared_yes、cvta_shared_yes_64、cvta_to_shared_yes_64等的目的是什么 【发布时间】:2016-01-15 03:32:09 【问题描述】:

在 LLVM 源代码文件夹中,我们可以看到内部 cvta_shared_yes、cvta_shared_yes_64、cvta_to_shared_yes_64 类似地用于其他内存类型,如全局、本地、常量等。这样做的目的是什么。它是否定义了内存类型的行为?如果是这样,我们可以添加一个新的内在函数吗?

【问题讨论】:

【参考方案1】:

NVPTX 后端使用这些内在函数来发出 PTX 特殊操作,将指向全局、本地、共享或常量内存的指针转换为通用地址空间并返回。 这是 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等的目的是啥的主要内容,如果未能解决你的问题,请参考以下文章

LLVM IR:有效地对向量求和

vreinterpret NEON 内在问题

如何在LLVM中检测const修饰符?

英特尔为其C/C++编译器全面采用LLVM

在 Xcode 4 (LLVM GCC) 中使用 _mm_shuffle_ps 时可能出现 OpenMP + SSE 错误

C/C++ 编译器全面采用 LLVM