Cuda 模块中的变量而不是公共语句
我正在尝试使用cuda fortran加速一段代码。此代码在变量定义中使用了common语句,该语句在cuda设备代码中无效 我所做的是在模块中定义变量,而不是使用common语句,但这给了我一个错误的答案。我在普通代码上执行所有这些操作是为了找到通用语句的替代品Cuda 模块中的变量而不是公共语句,cuda,fortran,openacc,Cuda,Fortran,Openacc,我正在尝试使用cuda fortran加速一段代码。此代码在变量定义中使用了common语句,该语句在cuda设备代码中无效 我所做的是在模块中定义变量,而不是使用common语句,但这给了我一个错误的答案。我在普通代码上执行所有这些操作是为了找到通用语句的替代品 我认为应该是这样的,因为这些变量只被这些函数使用,但它不是。为什么呢?我能做些什么来解决这个问题呢?查看您的文件后,我发现您正在使用OpenACC for Fortran,这不是我所说的CUDA Fortran。我将假设这是您的意
我认为应该是这样的,因为这些变量只被这些函数使用,但它不是。为什么呢?我能做些什么来解决这个问题呢?查看您的文件后,我发现您正在使用OpenACC for Fortran,这不是我所说的CUDA Fortran。我将假设这是您的意图,并且您实际上并不打算使用CUDA fortran,而是试图使OpenACC代码正常工作 我有两个建议
有一些想法!acc内核
指令。我快速浏览了一下您的代码,您所封装的循环看起来并不复杂。我的建议是,确定这些循环所需(输入)和从这些循环生成(输出)的所有数据,并包括附加的!acc data
指令,将输入数据指定为copyin
,输出数据指定为copyout
。给出了一个具体的示例/教程。话虽如此,只要编译器试图在中使用数据时数据在范围内!acc内核
region,我认为您不应该得到错误的结果。但为了进一步探讨这一点,我认为一个具体的例子是合适的。通常,请使用!acc data
指令将帮助您将注意力集中在所需的数据上,并确保编译器了解如何将数据传输到设备或何时从设备传输数据正如我已经提到的,请粘贴您希望其他人在实际问题中看到的代码示例,而不是包含链接。最好将代码放在问题中,而不是外部链接。一旦这些链接断开,你的问题对未来的读者将毫无用处。不要使用common语句,而是将参数列表中的变量传递给任何需要它们的cuda函数。@RobertCrovella您的建议可以作为答案吗?