CUDA图中的节点如何连接?

时间:2018-10-11 16:20:58

标签: c++ cuda

CUDA graphs是从多个æ“作åˆæˆå¤æ‚æ“作的新方法。使用“æµæ•èŽ·â€ï¼Œæ‚¨ä¼¼ä¹Žå¯ä»¥è¿è¡Œå¤šç§æ“作,包括CuBlas和类似的库æ“作,并将它们æ•èŽ·ä¸ºå•ä¸€çš„“元内核â€ã€‚

我ä¸æ¸…楚这些图表的数æ®æµå¦‚何工作。在æ•èŽ·é˜¶æ®µï¼Œæˆ‘为输入分é…内存A,为临时值分é…内存B,为输出分é…内存C。但是,当我在图形中æ•èŽ·å®ƒæ—¶ï¼Œæˆ‘没有æ•èŽ·å†…存分é…。因此,当我实例化这些图的多个副本时,它们无法共享输入内存A,临时工作区B或输出内存C。

然åŽå¦‚何工作?å³å½“我调用cudaGraphLaunch时,看ä¸åˆ°æ供输入å‚数的方法。我æ•èŽ·çš„图形基本上以cudaMemcpyHostToDevice开始,图形如何知é“è¦å¤åˆ¶å“ªä¸ªä¸»æœºå†…存以åŠå°†å…¶æ”¾ç½®åœ¨ä½•å¤„?

背景:我å‘现CUDA在内核å¯åŠ¨æ—¶ä¸¥é‡ç“¶é¢ˆï¼›ç§»æ¤åˆ°CUDA时,我的AVX2代ç æ…¢äº†13å€ã€‚内核本身看起æ¥ä¸é”™ï¼ˆæ ¹æ®NSight),这åªæ˜¯å®‰æŽ’æ•°å万个内核å¯åŠ¨çš„开销。

1 个答案:

答案 0 :(得分:2)

通常在图形定义/实例化或“æ•èŽ·â€ä¹‹å¤–进行内存分é…。

但是,图形æ供了"memory copy" nodes,您通常会在其中进行cudaMemcpy类型的æ“作。

在图形定义时,您为æ¯ä¸ªå›¾å½¢èŠ‚点传递一组å‚数(这å–决于节点类型,例如cudaMemcpyæ“作的å‚数,如果它是内存å¤åˆ¶èŠ‚点或内核)å‚数(如果它是内核节点)。这些å‚数确定执行该图时将使用的实际内存分é…。

如果è¦ä½¿ç”¨ä¸€ç»„ä¸åŒçš„分é…,一ç§æ–¹æ³•æ˜¯ä¸ºå­˜åœ¨æ›´æ”¹çš„节点实例化具有ä¸åŒå‚æ•°çš„å¦ä¸€ä¸ªå›¾ã€‚å¯ä»¥é€šè¿‡é‡å¤æ•´ä¸ªè¿‡ç¨‹ï¼Œæˆ–从现有图形开始,对节点å‚数进行更改,然åŽä½¿ç”¨è¿™äº›æ›´æ”¹å®žä¾‹åŒ–图形æ¥å®Œæˆæ­¤æ“作。

当å‰ï¼Œåœ¨cuda图形中,无法执行将节点å‚数与特定图形/节点的è¿è¡Œæ—¶ç»‘定(å³åœ¨å›¾å½¢â€œå¯åŠ¨â€æ—¶ï¼‰ã€‚当然,将æ¥çš„å‘行版中å¯èƒ½ä¼šå¼•å…¥æ–°åŠŸèƒ½ã€‚

请注æ„,CUDA 10中æ供了一个å为simpleCudaGraphsçš„CUDA示例代ç ï¼Œè¯¥ç¤ºä¾‹ä»£ç æ¼”示了内存å¤åˆ¶èŠ‚点和内核节点的用法,以åŠå¦‚何在节点之间创建ä¾èµ–关系(有效地执行ä¾èµ–关系)。 / p>