如何让Doxygen识别CUDA内核调用?

4

我正在尝试使用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的内部解析器方法,应该如何进行?


1
如果您在doxyfile中添加特定的EXTENSION_MAPPING,例如这里,会发生什么? - Robert Crovella
我相信默认情况下,Doxygen将未知的扩展名视为C语言。但是添加“EXTENSION_MAPPING = cu=c++”或cu=c会产生相同的结果,即函数的正确文档,但调用者图表不正确。 - user2511417
1个回答

1
如果doxygen无法识别CUDA函数,你无能为力:
引用doxygen手册:

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

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

这个怎么实现呢?我想我不是唯一一个尝试制作这种调用图的人。有没有一种方法可以让Doxygen简单地忽略<<< >>>运算符? - user2511417
1
正如我所说,“Doxygen的代码解析器不是很容易扩展”,这意味着您必须通过更改其源代码来更改Doxygen的代码解析器内部工作方式。 - Marcus Müller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接