gpt4 book ai didi

cuda - 在 Clion 中启用 Cuda 代码索引

转载 作者:行者123 更新时间:2023-12-02 03:37:13 29 4
gpt4 key购买 nike

我正在使用 Clion 开发 cuda 程序。当扩展名是 .h 时,代码突出显示可以正常工作。但是,当它更改为 .cuh 时,Clion 仅将新文件视为纯文本文件,并且我无法启用代码突出显示。我知道完整的 Cuda 工具链是不可能的,所以我不希望 Clion 解析像 mykernel<<<1024, 100>>> 这样的语句。不过,如果它能够像解析普通头文件/cpp 文件一样解析该文件,我会非常满意。

非常感谢

最佳答案

首先,请确保告诉 CLion 治疗 .cu.cuh使用File Types作为C++文件设置菜单。

CLion 无法解析 CUDA 的语言扩展,但它确实提供了一个预处理器宏,该宏仅在 clion 解析代码时定义。您可以使用它自己实现几乎完整的 CUDA 支持。

大部分问题是 CLion 的解析器被像 __host__ 这样的关键字脱轨。或__device__ ,导致它无法执行它原本知道如何执行的操作: Fail

CLion 无法理解 Dtype在这个例子中,因为 CUDA 的东西混淆了它的解析。

解决这个问题的最简单的解决方案是让 clion 预处理器宏忽略新关键字,修复最严重的损坏:

#ifdef __JETBRAINS_IDE__
#define __host__
#define __device__
#define __shared__
#define __constant__
#define __global__
#endif

这修复了上面的示例:

Yay!

但是,CUDA 的功能类似于 __syncthreads , __popc仍然无法索引。 CUDA 内置函数也会如此,如 threadIdx 。一种选择是为它们提供无尽的预处理器宏(甚至结构定义),但这很丑陋并且会牺牲类型安全性。

如果您使用 Clang 的 CUDA 前端,您可以做得更好。 Clang 通过在 header 中定义隐式定义的 CUDA 内置函数来实现它们,然后在编译代码时将其包含在内。这些提供了诸如threadIdx之类的定义。 。通过假装是 CUDA 编译器的预处理器并包含 device_functions.h ,我们可以得到__popc和 friend 一起工作:

#ifdef __JETBRAINS_IDE__
#define __host__
#define __device__
#define __shared__
#define __constant__
#define __global__

// This is slightly mental, but gets it to properly index device function calls like __popc and whatever.
#define __CUDACC__
#include <device_functions.h>

// These headers are all implicitly present when you compile CUDA with clang. Clion doesn't know that, so
// we include them explicitly to make the indexer happy. Doing this when you actually build is, obviously,
// a terrible idea :D
#include <__clang_cuda_builtin_vars.h>
#include <__clang_cuda_intrinsics.h>
#include <__clang_cuda_math_forward_declares.h>
#include <__clang_cuda_complex_builtins.h>
#include <__clang_cuda_cmath.h>
#endif // __JETBRAINS_IDE__

这将为您提供几乎所有 CUDA 代码的完美索引。 CLion 甚至可以优雅地应对 <<<...>>>句法。它在启动 block 每一端的一个字符下放置了一条小红线,但在其他方面将其视为函数调用 - 这完全没问题:

Launch

关于cuda - 在 Clion 中启用 Cuda 代码索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39980645/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com