CUDA 内核可以是虚拟函数吗?

2024-01-10

这个问题非常简单,但让我概述一下我的框架。我有一个抽象类AbstractScheme表示一种计算类型(方程的一种离散化,但这并不重要)。 每个实现都必须提供一个方法来返回方案名称,并且必须实现一个受保护的函数,即 CUDA 内核。基本抽象类提供了一个公共方法,该方法调用 CUDA 内核并返回内核完成所需的时间。

class AbstractScheme
{
public:
    /**
     * @return The name of the scheme is returned
     */
    virtual std::string name() const =0;

    /**
     * Copies the input to the device,
     * computes the number of blocks and threads,
     * launches the kernel,
     * copies the output to the host,
     * and measures the time to do all of this.
     *
     * @return The number of milliseconds to perform the whole operation
     *         is returned
     */
    double doComputation(const float* input, float* output, int nElements)
    {
        // Does a lot of things and calls this->kernel().
    }

protected:
    /**
     * CUDA kernel which does the computation.
     * Must be implemented.
     */
    virtual __global__ void kernel(const float*, float*, int) =0;
};

我还有这个基类的几个实现。但是当我尝试使用 nvcc 7.0 进行编译时,我收到此错误消息,指的是我定义函数的行kernel in AbstractScheme(上面清单中的最后一行):

myfile.cu(60): error: illegal combination of memory qualifiers

I could not find any resource saying the kernels cannot be virtual functions, but I have the feeling this is the problem. Can you explain the rationale behind this? I clearly understand how and why __device__ functions cannot be virtual functions (virtual functions are pointers to actual [host] functions stored in the object, and you cannot call such a function from within device code), but I'm not sure about __global__ functions.

编辑:我删除的问题部分是错误的。请查看评论以了解原因。


内核不能是 CUDA 对象模型中类的成员,无论是否是虚拟的。这就是编译错误的原因,即使从编译器发出的错误消息来看并不是特别明显。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CUDA 内核可以是虚拟函数吗? 的相关文章

  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 如果 JSON.NET 中的值为 null 或空格,则防止序列化

    我有一个对象需要以这样的方式序列化 即 null 和 空白 空或只是空格 值都不会序列化 我不控制对象本身 因此无法设置属性 但我知道所有属性都是字符串 环境NullValueHandling显然 忽略 只能让我找到解决方案的一部分 它 似
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • 如何在win32中使用GetSaveFileName保存文件?

    我编写此代码是为了获取 fileName 来保存我的文件 include stdafx h include
  • 使用 C# 中的 Google 地图 API 和 SSIS 包获取行驶距离

    更新 找到了谷歌距离矩阵并尝试相应地修改我的代码 我在这里收到无效参数错误 return new GeoLocation dstnc uri ToString catch return new GeoLocation 0 0 https 基
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • 时间:2019-03-17 标签:c++fstream并发访问

    如果从不同的进程 线程同时访问文件会发生什么 据我所知 没有锁定文件的标准方法 只有操作系统特定的功能 就我而言 文件将被经常读取而很少写入 现在如果A打开一个文件进行读取 ifstream 并开始读取块 和B打开相同的文件进行写入 ofs
  • 无法为 wsdl 文件创建服务引用

    I have wsdl文件和xsd我本地机器上的文件 我想在项目中添加服务引用 我没有网络服务 我只有wsdl file 我收到以下错误 The document was understood but it could not be pro
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • 有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

    我有一个接受字符串 字符数组 作为参数的函数 void enterString char my string 当使用这个函数时 我经常发现自己想要输入格式化的字符串 我使用 sprintf 来做到这一点 然而 我每次都必须创建一个临时字符串
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • “必须声明标量变量”错误[重复]

    这个问题在这里已经有答案了 必须声明标量变量 Id SqlConnection con new SqlConnection connectionstring con Open SqlCommand cmd new SqlCommand cm
  • 如何提高环复杂度?

    对于具有大量决策语句 包括 if while for 语句 的方法 循环复杂度会很高 那么我们该如何改进呢 我正在处理一个大项目 我应该减少 CC gt 10 的方法的 CC 并且有很多方法都存在这个问题 下面我将列出一些例如我遇到的问题的

随机推荐

  • Python-3 和字符串编码中的 \x Vs \u Vs \U 以及原因

    为什么 Python 3 中有不同的面向字节的字符串表示形式 使用单一表示而不是多个表示还不够吗 对于打印字符串的 ASCII 范围编号 显示以以下开头的序列 x In 56 chr 128 Out 56 x80 在不同的数字范围内 Pyt
  • 阻止 EBS Linux 2 (Node.js) 尝试执行 npm install?

    我正在尝试在 Elastic Beanstalk 上的 AWS Linux 2 上运行节点应用程序 并且需要使用纱线安装依赖项 如果您尝试使用 npm 而不是纱线来安装依赖项 我的 Node 应用程序会导致错误 我已经想通了如何在 plat
  • 通过XPath获取tr中特定td的索引

    我的表中有 thead 和 tbody Thead 包含几个 s 每个都有一个 id 我需要通过 id 在 thead 中查找 td 的索引 然后在 tbody 中通过索引查找 table thead tr td td td td find
  • 如何决定spring kafka设置的并发数?

    我正在使用 KafkaListener 注释编写一个 kafka 消费者 我知道有一种方法可以使用 ConcurrentKafkaListenerContainerFactory 中的方法增加来自不同分区的并发 kafka 消费者的数量 e
  • 如何更改TWebBrowser中的字体?

    这个问题与 在 TWebBrowser 中加载字符串 HTML 代码 的最佳方法是什么 https stackoverflow com questions 39773033 which is the best way to load a s
  • Angular2:如何绑定以选择多个

    我可以使用绑定ngModel对于单个选择 但我想将一个数组绑定到多个选定的选项 当我尝试这样做时 我收到错误 在 myModelProperty 中找不到不同的支持对象 xxx My Code
  • 删除“.”之后的部分字符串

    我正在使用 NCBI 参考序列登录号 例如变量a a lt c NM 020506 1 NM 020519 1 NM 001030297 2 NM 010281 2 NM 011419 3 NM 053155 2 要从 biomart 包中
  • 如何修改请求的http header; C# 中的网络参考

    我正在创建一个使用 Web 服务的 NET 应用程序 我需要在对该 Web 服务的请求中将连接 http 标头设置为 关闭 我已经在谷歌上搜索了一天 但没有找到任何有用的东西 我最大的努力是下面的代码 它尝试重写 GetWebRequest
  • 开关与切换

    我正在尝试决定是否使用开关或切换来设置闹钟 我是我的 Android 应用程序 对 android 相当陌生 不知道或不太理解框架工作的所有来龙去脉 选择通过切换开关触发警报 反之亦然 会有什么缺点 android框架中有可用的滑动切换吗
  • Visual Studio 命令栏“名称”

    在 Visual Studio 2010 中 您可以创建的唯一选项是 菜单栏 上 工具 下的命令栏 在某些情况下 我想知道如何将命令栏放置在标准栏上 或者在右键单击项目文件时找到 Example Microsoft VisualStudio
  • 如何递归调用 WriteJson?

    我使用 Json Net 当我序列化一个Department2对象和WriteJson 被调用我希望它被递归地调用每个Telephone2像我一样的物体ReadJson 我怎么做 using System using Newtonsoft
  • 使用完全外连接连接 pandas 中的两个数据帧

    我在 pandas 中有两个数据框 如下所示 EmpID 是两个数据帧中的主键 df first pd DataFrame 1 A 1000 2 B np NaN 3 np NaN 3000 4 D 8000 5 E 6000 column
  • 限制直接 API 网关调用,除非来自 CloudFront

    我们在 API 前面创建了一个 CloudFront 是否可以限制来自 CloudFront 之外的 API 调用 当前设置 调用者 gt API 网关端点 gt Lambda 调用者 gt CloudFront 端点 gt API 网关端
  • Android GCM 消息发送时间过长

    我在我的应用程序中使用 GCM 但遇到了问题 大多数时候我会立即收到消息 但有时消息会在 5 分钟后收到 一条接着一条 就像它们被困在路上一样 这是正常的吗 客户端手机上的GCM框架部分使用TCP连接在端口 5228 上 此连接用于推送通知
  • 检查一个数组是否是另一个数组的子集

    关于如何检查该列表是否是另一个列表的子集有什么想法吗 具体来说 我有 List
  • 这总是GDB调试程序的地址吗?

    我将缩小我的问题范围 对于同一程序 GDB 中的入口地址保持不变 即使在重新启动后 以及在重写源代码后 这是为什么 例如0x80483f4是起始地址 0x80483f4
  • 为什么纯Python不能完全编译? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 为什么纯Python不能完全编译 编译或解释是实现的特征 而不是语言的特征 那么 难道不应该存在一些完全预先编译为本机代码的 Pyth
  • PHP:从未调用过 __autoload 函数

    所以 我有xampp 我在 ZendServer 上测试了这段代码 结果相同 在 php exe a index php 之后我有这个 Interactive mode enabled Fatal error Class Main not
  • 如何连接到第一行

    我将使用一个具体但假设的例子 Each Order通常只有一个行项目 Orders OrderGUID OrderNumber FFB2 STL 7442 1 3EC6 MPT 9931 8A 行项目 LineItemGUID Order
  • CUDA 内核可以是虚拟函数吗?

    这个问题非常简单 但让我概述一下我的框架 我有一个抽象类AbstractScheme表示一种计算类型 方程的一种离散化 但这并不重要 每个实现都必须提供一个方法来返回方案名称 并且必须实现一个受保护的函数 即 CUDA 内核 基本抽象类提供