CUDA graphs是从多个æ“作åˆæˆå¤æ‚æ“作的新方法。使用“æµæ•èŽ·â€ï¼Œæ‚¨ä¼¼ä¹Žå¯ä»¥è¿è¡Œå¤šç§æ“作,包括CuBlas和类似的库æ“作,并将它们æ•èŽ·ä¸ºå•ä¸€çš„â€œå…ƒå†…æ ¸â€ã€‚
我ä¸æ¸…楚这些图表的数æ®æµå¦‚何工作。在æ•èŽ·é˜¶æ®µï¼Œæˆ‘为输入分é…内å˜A,为临时值分é…内å˜B,为输出分é…内å˜C。但是,当我在图形ä¸æ•èŽ·å®ƒæ—¶ï¼Œæˆ‘没有æ•èŽ·å†…å˜åˆ†é…ã€‚å› æ¤ï¼Œå½“æˆ‘å®žä¾‹åŒ–è¿™äº›å›¾çš„å¤šä¸ªå‰¯æœ¬æ—¶ï¼Œå®ƒä»¬æ— æ³•å…±äº«è¾“å…¥å†…å˜A,临时工作区B或输出内å˜C。
然åŽå¦‚何工作?å³å½“我调用cudaGraphLaunch
时,看ä¸åˆ°æ供输入å‚数的方法。我æ•èŽ·çš„图形基本上以cudaMemcpyHostToDevice
开始,图形如何知é“è¦å¤åˆ¶å“ªä¸ªä¸»æœºå†…å˜ä»¥åŠå°†å…¶æ”¾ç½®åœ¨ä½•å¤„?
背景:我å‘现CUDAåœ¨å†…æ ¸å¯åŠ¨æ—¶ä¸¥é‡ç“¶é¢ˆï¼›ç§»æ¤åˆ°CUDA时,我的AVX2代ç 慢了13å€ã€‚å†…æ ¸æœ¬èº«çœ‹èµ·æ¥ä¸é”™ï¼ˆæ ¹æ®NSight),这åªæ˜¯å®‰æŽ’æ•°åä¸‡ä¸ªå†…æ ¸å¯åŠ¨çš„开销。
ç”案 0 :(得分:2)
通常在图形定义/实例化或“æ•èŽ·â€ä¹‹å¤–进行内å˜åˆ†é…。
但是,图形æ供了"memory copy" nodes,您通常会在其ä¸è¿›è¡ŒcudaMemcpy
类型的æ“作。
在图形定义时,您为æ¯ä¸ªå›¾å½¢èŠ‚ç‚¹ä¼ é€’ä¸€ç»„å‚数(这å–决于节点类型,例如cudaMemcpy
æ“作的å‚数,如果它是内å˜å¤åˆ¶èŠ‚ç‚¹æˆ–å†…æ ¸ï¼‰å‚æ•°ï¼ˆå¦‚æžœå®ƒæ˜¯å†…æ ¸èŠ‚ç‚¹ï¼‰ã€‚è¿™äº›å‚数确定执行该图时将使用的实际内å˜åˆ†é…。
如果è¦ä½¿ç”¨ä¸€ç»„ä¸åŒçš„分é…,一ç§æ–¹æ³•æ˜¯ä¸ºå˜åœ¨æ›´æ”¹çš„节点实例化具有ä¸åŒå‚æ•°çš„å¦ä¸€ä¸ªå›¾ã€‚å¯ä»¥é€šè¿‡é‡å¤æ•´ä¸ªè¿‡ç¨‹ï¼Œæˆ–从现有图形开始,对节点å‚数进行更改,然åŽä½¿ç”¨è¿™äº›æ›´æ”¹å®žä¾‹åŒ–图形æ¥å®Œæˆæ¤æ“作。
当å‰ï¼Œåœ¨cuda图形ä¸ï¼Œæ— 法执行将节点å‚数与特定图形/节点的è¿è¡Œæ—¶ç»‘定(å³åœ¨å›¾å½¢â€œå¯åŠ¨â€æ—¶ï¼‰ã€‚当然,将æ¥çš„å‘行版ä¸å¯èƒ½ä¼šå¼•å…¥æ–°åŠŸèƒ½ã€‚
请注æ„,CUDA 10ä¸æ供了一个å为simpleCudaGraphs
çš„CUDA示例代ç ,该示例代ç 演示了内å˜å¤åˆ¶èŠ‚ç‚¹å’Œå†…æ ¸èŠ‚ç‚¹çš„ç”¨æ³•ï¼Œä»¥åŠå¦‚何在节点之间创建ä¾èµ–关系(有效地执行ä¾èµ–关系)。 / p>