我需要编写一个应用程序来根据其他矩阵计算一些矩阵。 通常,它对初始矩阵E的行的外积求和,并将其乘以从给定范围内的每个t的v和t计算的一些数字。 我是CUDA的新手,所以在实现中可能会有一些非常错误的想法。 所以,有我的代码和评论中的一些解释:#include <cupy/complex.cuh ...
我需要编写一个应用程序来根据其他矩阵计算一些矩阵。 通常,它对初始矩阵E的行的外积求和,并将其乘以从给定范围内的每个t的v和t计算的一些数字。 我是CUDA的新手,所以在实现中可能会有一些非常错误的想法。 所以,有我的代码和评论中的一些解释:#include <cupy/complex.cuh ...
所以我需要 runParatron 子级在 for 循环的下一次迭代发生之前完全完成。 根据我得到的结果,我很确定这不会发生。 例如,我在 runParatron 中有一个打印语句,它在第一个“[”打印到 for 循环之外后执行。 我尝试运行 cudaDeviceSynchronize,但它不会编 ...
我正在构建一个管道以将文件从 Sharepoint 复制到工作中的 Azule Blob 存储。 在阅读了一些文档之后,我能够创建一个只复制某些文件的管道。 但是,我想通过使用动态文件路径在 Sharepoint 中指定源文件来自动化此管道。 换句话说,当我在 2022/07/14 运行管道时,我想 ...
我目前正在 CUDA 中尝试我的第一个动态并行代码。它非常简单。 在父母 kernel 中,我正在做这样的事情: 假设我到目前为止做的事情是正确的,在aGlobalPayloads执行后访问 aGlobalPayloads 中的结果的最快方法是什么? (我尝试使用cudaMemcpy()将aGl ...
我正在尝试创建最基本的 CUDA 应用程序来演示动态并行、单独编译和链接、静态库中的 CUDA 内核,并且我正在尝试使用 CMake 生成 Visual Studio 解决方案。 我使用的是 CMake 3.21.3、CUDA 11.4 和 Visual Studio 2019 (16.11.5)。 ...
我正在尝试学习如何使用 CUDA 动态并行。 我有一个简单的 CUDA kernel 创建一些工作,然后启动新内核来执行该工作。 假设我启动父 kernel 只有 1 个线程块,如下所示: 现在,在我的父 kernel 中,我创建了作品,然后启动了一个子内核,如下所示: 请注意,子 kernel ...
所以我使用的是 GTX 1050,计算能力为 6.1,CUDA 11.0。 我需要在我的程序中使用网格同步,因此需要cudaLaunchCooperativeKernel() 。 我已经检查了我的设备查询,所以 GPU 确实支持协作组。 我无法执行以下 function 打电话后, 收到错误“不允 ...
我想通过在设备内核中调用它来使thrust::scatter异步(我也可以通过在另一个主机线程中调用它来实现)。 thrust::cuda::par.on(stream)是无法从设备 kernel 调用的主机 function。 以下代码在图灵架构上使用 CUDA 10.1 进行了尝试。 我知道 ...
我正在尝试编写一个几乎完全在GPU上运行的程序(与主机的交互很少)。 initKernel是从主机启动的第一个内核。 我使用动态并行从initKernel启动后续内核,其中两个是thrust::sort(thrust::device,...) 。 在启动initKernel之前, ...
让我们在有父子内核的地方采用以下代码。 我们希望从所述父内核中以不同的流启动threadIdx.x子内核,以最大程度地提高并行吞吐量。 然后,我们等待带有cudaDeviceSynchronize()子级,因为父内核需要查看对global内存所做的更改。 现在让我们说我们还希望使用流启 ...
我有一堆使用动态并行性的.cu文件(a.cu,b.cu,c.cu ..,e.cu,f.cu),还有一个主文件,该文件使用MPI从a调用函数.cu在多个节点上。 我正在尝试编写一个make文件来编译可执行文件,但我一直面临以下错误: 这是我的makefile: ...
我正在使用以下内核测试动态并行性,该内核使用分而治之的动态并行性获取整数数组的最大值: 一个被称为: getMax<<<1,1>>>(d_arr, 0, N, d_max) ,其中d_arr是数组,N是其大小,d_max是其最大值。 尽管有时我得到正 ...
我正在尝试GTX 980 ti卡上的动态并行性。 所有运行代码的尝试都会返回“未知错误”。 简单代码如下所示,带有编译选项。 我可以在depth=0处执行内核而没有任何问题。 第一次调用孩子时,会给出错误。 在查看其他问题之后包含了cudaDeviceSynchronize() , ...
使用CUDA Dynamic Parallelism时,我们遇到了性能问题。 目前,CDP的表现比传统方法慢至少3倍。 我们制作了最简单的可重现代码来显示这个问题,即将数组的所有元素的值增加+1。 即 这个简单示例的目的只是为了查看CDP是否可以像其他CDP一样执行,或者是否存在严 ...
我正在使用OpenCL 2.0动态并行功能,并且每个工作项都通过单个工作项排队到另一个内核中。 当子内核的工作完成时间很高时,父内核会先完成,然后子代和内存一致性将不会保留,并且会返回损坏的数据(随机更新的数据项)。 由于clFinish()和clEnqueueMarkerWithWai ...
产生错误的内核代码: 我测试了以下代码,以确保OpenCL 2.0编译器正常工作。 扫描功能提供0、1、3、6作为输出,因此OpenCL 2.0还原功能可以正常工作。 动态并行是OpenCL 2.0的扩展吗? 如果删除enqueue_kernel命令,结果将等于预期值(省 ...
我试图从内核调用cudaMemsetAsync (所谓的“动态并行”)。 但无论我使用什么值,它总是将内存设置为0。 这是我的测试代码: 如果我运行它,我得到这样的输出: 当我调用内存集时,我使用值0x7FFFFFFF 。 我期待非零数字,但它总是显示为零。 这是 ...
问题1:如果共享内存仅由子内核使用,我是否必须指定要在父内核启动时分配的动态共享内存的数量。 问题2:以下是我的子内核和父内核 父核 子内核 在这里,单独使用子内核可以正常工作。 但是,当它从另一个内核启动时,在父内核通过cudaDeviceSynchronize( ...
当您在GPU上的主要内核中启动辅助内核时,会产生一些开销。 导致或影响此开销数量的因素有哪些? 例如,内核代码的大小,正在启动内核的SM的占用,内核参数的大小等。 为了这个问题,让我们包容,并将“开销”定义为以下时间间隔的总和: 开始:SM看到启动指令 结束:SM开始执行子内 ...
虽然我已经写了一段时间的CUDA内核,但我还没有使用动态并行(DP)。 我遇到了我认为可能适合的任务; 但是,我希望能够使用DP的方式是: 如果block发现需要更多线程来完成工作,则会生成它们。 它向其产生的线程赋予“所知”-本质上是其共享内存的内容, 每个产生线程的块都在其自己的 ...