【问题标题】:How can I make Doxygen aware of CUDA kernel calls?如何让 Doxygen 知道 CUDA 内核调用?
【发布时间】:2015-06-25 12:06:49
【问题描述】:

我正在尝试使用 Doxygen 记录一个用 CUDA C 编写的项目。该文档工作正常。但是调用者图表不包括内核调用,如GPU_foo<<<1,1>>>()

例如,在这个简单的例子中:

#include<stdio.h>

/*!
 * @brief global hello foo
 */
__global__ void global_hello(void){

printf("Hello\n");

}


/*!
 * @brief CPU hello foo
 */
void hello(void){

printf("Hello\n");
}

/*!
 * @brief main
 */
int main(){

 hello();

 global_hello<<<1,1>>>();

return 0;
}

对应的 Doxyfile:

PROJECT_NAME = TEST
PROJECT_NUMER = 2.1

OUTPUT_LANGUAGE = English
EXTRACT_ALL = YES
FILE_PATTERNS = *.cpp *.h *.c *.cu
RECURSIVE = NO 
PDF_HYPERLINKS = YES
USE_PDFLATEX   = YES
HAVE_DOT = YES
CALL_GRAPH = YES
CALLER_GRAPH = YES

查看生成的文档时,调用图如下所示:

main -----> hello

而不是想要的:

      ------> global_hello
    /
main
    \
      ------> hello

如何让 Doxygen 了解 CUDA 内核调用?

问题是 Doxygen 不知道包含“>>”的行是一个函数调用。我不需要调用图来区分函数调用和内核调用。如果解析器将内核视为普通函数调用就足够了。

总结。有没有办法告诉 Doxygen 将带有 >> 的行解释为函数调用? 有人建议更改 Doxygen 的内部解析器方法,该怎么做?

【问题讨论】:

  • 如果在 doxyfile 中添加特定的EXTENSION_MAPPING 会怎样,例如here
  • 我相信默认情况下 Doxygen 将未知扩展视为 C。但是添加 "EXTENSION_MAPPING = cu=c++" 或 cu=c 会产生相同的结果,函数的正确文档但调用者图不正确。

标签: c++ c cuda doxygen


【解决方案1】:

如果 doxygen 无法识别 CUDA 函数,那么您无能为力:

引用doxygen manual

注意 调用图的完整性(和正确性)取决于不完美的 doxygen 代码解析器。

而且doxygen的代码解析器不易扩展。

【讨论】:

  • 制作这个的路径是什么?我想我不是唯一一个试图制作这种调用图的人。有没有办法简单地告诉 Doxygen 以某种方式忽略 >> 运算符?
  • @user2511417:正如我所说,“doxygen 的代码解析器不容易扩展”,这意味着您必须通过更改其源代码来改变 doxygens 代码解析器的内部工作方式。跨度>
猜你喜欢
  • 2021-02-07
  • 2013-03-17
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 2016-05-25
  • 2012-02-12
相关资源
最近更新 更多