如何在CUDA中使用多态性

2023-11-24

我正在将一些物理模拟代码从 C++ 移植到 CUDA。

基本算法可以理解为:对向量的每个元素应用一个运算符。在伪代码中,模拟可能包括以下内核调用:

apply(Operator o, Vector v){
    ...
}

例如:

apply(add_three_operator, some_vector)

将为向量中的每个元素添加三个。

在我的 C++ 代码中,我有一个抽象基类 Operator,具有许多不同的具体实现。重要的方法是 类运算符{ 虚拟双操作(double x) =0; 运算符 compose(运算符 lo, 运算符 ro); ... }

AddOperator 的实现可能如下所示:

class AddOperator : public Operator{
    private:
        double to_add;
    public:
        AddOperator(double to_add): to_add(to_add){}
        double operator(double x){
            return x + to_add;
        }
};

运算符类具有用于扩展和组合运算符具体实现的方法。这种抽象允许我简单地将“叶”运算符组合成更通用的转换。

例如:

apply(compose(add_three_operator, square_operator), some_vector);

将向量的每个元素相加三个然后平方。

问题是 CUDA 不支持内核中的虚拟方法调用。我目前的想法是使用模板。然后内核调用将类似于:

apply<Composition<AddOperator,SquareOperator>>
    (compose(add_three_operator, square_operator), some_vector);

有什么建议么?


也许是这样的事情...

template <class Op1, class Op2>
class Composition {...}

template <class Op1, class Op2>
Composition<Op1, Op2> compose(Op1& op1, Op2& op2) {...}

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

如何在CUDA中使用多态性 的相关文章

  • 约束包如何工作?

    背后的想法数据 约束 Forall http hackage haskell org packages archive constraints 0 3 2 doc html src Data Constraint Forall html据我
  • 如何考虑子类型的多态性

    里氏替换原则指出 超类型的不变量必须保留在子类型中 我对这个原理和多态性的交叉特别感兴趣 事实上 特别是子类型多态性 参数多态性和 Haskell 类型类似乎就是这种情况 因此 我知道当函数的参数是逆变且返回类型是协变时 函数是子类型 我们
  • RankN多态性和令人发指的克莱斯利之箭

    我不明白为什么 demobind1 的定义会产生一些编译器错误 它看起来像一个愚蠢的翻转 但不知何故 LANGUAGE GADTs LANGUAGE RankNTypes ScopedTypeVariables TypeOperators
  • CUDA 5.0错误LNK2001:cuda方法无法解析的外部符号

    我的链接器有错误 1 gt ManifestResourceCompile 1 gt All outputs are up to date 1 gt kernel cu obj error LNK2001 unresolved extern
  • 有条件减少 CUDA

    我需要总结一下100000值存储在数组中 但带有条件 有没有办法在 CUDA 中做到这一点以快速产生结果 任何人都可以发布一个小代码来做到这一点吗 我认为 要执行条件约简 您可以直接将条件引入为乘法0 假 或1 真 加数 换句话说 假设您希
  • C#/.NET 3.5:转换扩展通用列表的对象

    我通过带有返回接口类型的方法的外观公开 API 并且在 C NET 3 5 中遇到了通用列表和继承的问题 我有两个接口 IMyList 实现 IList IMyItem 和三个类 MyList 实现 IMyList 扩展 List MyOt
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • 用于计算邻居列表的最佳 GPU 算法

    给定 3D 中数千个点的集合 我需要获取落在某个截止值 以欧几里得距离而言 内的每个粒子的邻居列表 并且如果可能的话 从最近到最远排序 在 CUDA 或 OpenCL 语言中 哪种 GPU 算法最快 我所知道的最快的 GPU MD 代码之一
  • 如何在CUDA应用程序中正确应用线程同步?

    一般来说 我在应用程序中偶尔会使用线程同步 因为我并不经常需要此功能 我并不是真正的高级 C C 程序员 但我也不是初学者 我开始学习 CUDA C 对当今 GPU 与 CPU 的能力相比感到兴奋 我意识到 CUDA 编程主要是关于并行线程
  • NVCC 警告级别

    我希望 NVCC 将以下警告视为错误 warning calling a host function foo from a host device function bar NVCC 文档 NVIDIA CUDA 编译器驱动程序 NVCC
  • Swift 中的协议与多态性

    我对面向对象编程相当陌生 我正在尝试了解协议 委托和多态性 我最近观看了一个培训视频 其中宣传当您有两个相似且具有相似方法实现的类时 协议是优雅地实现此目的的最佳解决方案 这就说得通了 然而 一些额外的研究让我发现了多态性 听起来这也是一种
  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • 将内核链接到 PTX 函数

    我可以使用 PTX 文件中包含的 PTX 函数作为外部设备函数 将其链接到另一个应调用该函数的 cu 文件吗 这是另一个问题CUDA 将内核链接在一起 https stackoverflow com questions 20636800 c
  • 使用 Cuda 并行读取多个文本文件

    我想使用 CUDA 在多个文件中并行搜索给定字符串 我计划使用 pfac 库来搜索给定的字符串 问题是如何并行访问多个文件 示例 我们有一个包含 1000 个文件的文件夹 需要搜索 这里的问题是我应该如何访问给定文件夹中的多个文件 应该动态
  • 如何安装libcusolver.so.11

    我正在尝试安装 Tensorflow 但它要求 libcusolver so 11 而我只有 libcusolver so 10 有人可以告诉我我做错了什么吗 这是我的 Ubuntu nvidia 和 CUDA 版本 uname a Lin
  • 如何在 Django 中定义模型之间的多态关系?

    我正在开发一个 Django 应用程序 其中包含Offer模型 一个Offer实例包含定价条件并指向产品定义 产品模型实际上是一个层次结构 我有一个Television模型 一个Camcorder模型等 所以我想要Offer模型包含指向任何
  • 对 CUDA 操作进行计时

    我需要计算 CUDA 内核执行的时间 最佳实践指南说我们可以使用事件或标准计时函数 例如clock 在Windows中 我的问题是使用这两个函数给出了完全不同的结果 事实上 与实践中的实际速度相比 事件给出的结果似乎是巨大的 我实际上需要这
  • 如何从C++头文件调用CUDA文件?

    我知道从 c 文件调用 cu 文件的方法 但现在我想从 C 头文件调用 cu 文件 有可能做到吗 如果是这样 我应该如何设置我的项目 请帮忙 这是一个有效的例子 file1 h int hello file2 h include
  • 如何降级cuda版本

    我目前使用的是 cuda 版本 4 2 但我需要将其更改为 3 1 是否可以卸载当前版本 4 2 版 然后安装以前的版本 3 1 版 编辑 请参阅我的操作系统是linux ubuntu 10 04 64位 编辑 我找到了如何获取 3 1 版
  • 将数据从 GPU 复制到 CPU - CUDA

    我在将数据从 GPU 复制到 CPU 时遇到问题 一开始我在 GPU 空间中创建变量 device float gpu array 在此 GPU 函数中 我想将数据从 od fS gi 值 0 43 复制到 gpu array global

随机推荐

  • 熊猫数据框条件 .mean() 取决于特定列中的值

    我正在尝试创建一个新列 它返回同一 df 中现有列的值的平均值 但是 平均值应根据其他三列中的分组来计算 Out 184 YEAR daytype hourtype scenario option value 0 2015 SAT of h
  • 将 Java Mission Control 连接到 Wildfly 16

    我尝试将 Java Mission Control JMC 连接到Wildfly16 应用服务器位于Docker上 我通过 jconsole 成功连接到 Wildfly 为了管理它 我按照描述的步骤操作here 不幸的是 我没有运气通过 J
  • 如何在选择文件后自动上传文件

    我有以下用于在我的网站上上传文件的代码 using Html BeginForm UploadProfileImage Member FormMethod Post new encType multipart form data Micro
  • 左移 浮点型

    尝试执行时出现编译器错误 float val float val lt lt 1 它给出一个错误 指出 错误 C2296 v 不能左移浮点变量吗 为什么会这样呢 你不能左移float变量 因为 a 你的 FPU 通常不会有一个桶形移位器暴露
  • java.lang.IllegalAccessError:方法“void android.support.v4.content.ContextCompat”。无法访问类“com.google.android.gms.iid.zzd”

    当我将目标 sdk 级别从 23 0 2 更改为 25 0 1 时 我的应用程序在以下行崩溃 我应该怎么做才能避免这次崩溃 请提出更改建议 InstanceID instanceID InstanceID getInstance getCo
  • 如何在 Python 中用零初始化整数 array.array 对象

    具有类似标题的问题是关于 Python 列表或 NumPy 的 这是关于标准 Python 库的 array array 类部分 请参阅https docs python org 2 library array html 我想出的快速方法
  • Mysql:如何获取点后具有超过一定小数位数的每一行

    我有一个包含浮点值的表 table id value 1 19 22 2 32 333 3 1 2332 4 0 22334 5 4 55 我想提取点后包含超过 3 位小数的每一行 我期望的结果是 id value 2 32 333 3 1
  • 使用 jQuery 动态向表添加行和列

    我有以下 JavaScript 代码 function addRowToTable var tbl document getElementById tblSample var lastRow tbl rows length if there
  • Delphi - Windows Aero 资源

    有人有关于 7 或 Vista 上的 Delphi 和 Windows Aero 的好资源吗 我们即将将 Windows 7 添加到我们的公司 并希望确保我们的内部应用程序尽可能适应 使用 Delphi 2010 我可以添加玻璃框架 菜单栏
  • 如何在雪豹上安装 iPython

    iPython 可以在 Mac OS X 10 6 1 Snow Leopard 上运行吗 我是 python 菜鸟 如何在 Mac 上安装 iPython 链接 建议 Thanks 要在 10 6 中使用 Apple 提供的 Python
  • 加载和显示大文本文件

    在 Swing 应用程序中 我有时需要支持对加载缓慢的大型 面向行的文本文件的只读访问 日志 转储 跟踪等 对于少量数据 suitable Document and JTextComponent都很好 如图所示here 我理解浏览大量数据的
  • 如何在此正则表达式中允许空格?

    我是正则表达式的业余爱好者 如何在这个正则表达式中允许空格 不管有多少 if preg match A Za z0 9 str return FALSE if preg match A Za z0 9 str return FALSE 请注
  • int 除以 unsigned int 导致翻转

    我尝试将 int 除以 unsigned int 得到了意想不到的结果 int b unsigned int c int res float res f b 25 c 5 res b c res 858993454 res f b c re
  • 为什么我的 ttk.Treeview 单击处理程序在 tree.focus() 上返回错误的项目?

    我有一个简单的脚本 使用ttk Treeview我正在用文件系统树的内容填充的实例 我想在单击 叶 项目时执行特定操作 因此我配置了一个处理程序 如下所示 self tree tag bind entry lt 1 gt self onCl
  • 如何滚动两个 JTextPane?

    我是一个使用 NetBeans 的 Swing 新手 我想垂直滚动两个并排的 JTextPane 滚动应该同步并通过单个滚动条完成 如果我从 NetBean 设计器添加 JTextPanes 它们会自动放入 JScrollPane 中 以便
  • 带 spring 的瓷砖:出现错误 - java.lang.ClassNotFoundException:org.apache.tiles.TilesApplicationContext

    我是 Spring 新手 尝试在 Spring 中使用瓷砖 但出现以上错误 我在我的项目中使用maven 我也尝试过更改版本 但没有用 项目内容如下 pom xml
  • 配置安全 SSL Apache 反向代理

    我正在尝试使用 apache 建立一个反向代理设置 该设置始终安全地支持 SSL Client lt gt Proxy somehostname com lt gt Server 123 45 67 89 请注意 我的代理服务器有主机名 但
  • IOS取消本地通知

    我不喜欢问模糊的问题 但我无法准确说出问题是什么 在我的应用程序中 我设置了一些每日本地通知 每天下午200点拍摄 后来我删除了设置本地通知的代码 并添加了推送通知功能 我测试了推送并且它有效 只要我愿意 但我仍然收到旧的通知 可能是因为我
  • 从本地文本文件读取到 C# 中? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我已经搜索并只找到了控制台的此信息 但我想知道是否可以将本地计算机上的文件中的文本读取到代码中 格式化它并显示在屏幕上 我们有一个包含一些法律术语的文本文件 可以定期更新 而不是让用
  • 如何在CUDA中使用多态性

    我正在将一些物理模拟代码从 C 移植到 CUDA 基本算法可以理解为 对向量的每个元素应用一个运算符 在伪代码中 模拟可能包括以下内核调用 apply Operator o Vector v 例如 apply add three opera