在cuda中是否有更好/更干净/更优雅的malloc和free方式?

2023-12-24

我正在尝试 cudaMalloc 一堆设备指针,如果任何 malloc 不起作用,则优雅地退出。我有功能代码 - 但臃肿,因为如果失败,我必须 cudaFree 我之前 malloc 的所有内容。所以现在我想知道是否有更简洁的方法来实现这一点。显然,我无法释放尚未分配的东西 - 这肯定会导致问题。

下面是我试图使其变得更加优雅的代码片段。

    //define device pointers
    float d_norm, *d_dut, *d_stdt, *d_gamma, *d_zeta;

    //allocate space on the device for the vectors and answer
    if (cudaMalloc(&d_norm, sizeof(float)*vSize) != cudaSuccess) {
            std::cout << "failed malloc";
            return;
    };

    if (cudaMalloc(&d_data, sizeof(float)*vSize) != cudaSuccess) {
            std::cout << "failed malloc";
            cudaFree(d_norm);
            return;
    };

    if (cudaMalloc(&d_stdt, sizeof(float)*wSize) != cudaSuccess) {
            std::cout << "failed malloc";
            cudaFree(d_norm);
            cudaFree(d_data);
            return;
    };

    if (cudaMalloc(&d_gamma, sizeof(float)*vSize) != cudaSuccess) {
            std::cout << "failed malloc";
            cudaFree(d_norm);
            cudaFree(d_dut);
            cudaFree(d_stdt);
            return;
    };

    if (cudaMalloc(&d_zeta, sizeof(float)*w) != cudaSuccess) {
            std::cout << "failed malloc";
            cudaFree(d_norm);
            cudaFree(d_dut);
            cudaFree(d_stdt);
            cudaFree(d_gamma);
            return;
    };

这是一个缩短的版本,但您可以看到它是如何不断构建的。实际上,我正在尝试分配大约 15 个数组。它开始变得丑陋 - 但它工作正常。

想法?


一些可能性:

  1. cudaDeviceReset() http://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__DEVICE.html#group__CUDART__DEVICE_1gef69dd5c6d0206c2b8d099abac61f217将释放所有设备分配,而无需运行指针列表。

  2. 如果您打算退出(应用程序),则无论如何,所有设备分配都会在应用程序终止时自动释放。 cuda 运行时检测与应用程序的设备上下文关联的进程的终止,并在此时擦除该上下文。因此,如果您只是要退出,那么不执行任何操作应该是安全的cudaFree()运营。

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

在cuda中是否有更好/更干净/更优雅的malloc和free方式? 的相关文章

  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框

随机推荐

  • 电路如何再次闭合?

    我正在尝试理解 Hystrix 据我所知 当服务调用第三方服务并且该服务没有响应并且阈值已超过配置时 电路将被打开 并且后续呼叫将被短路 但我无法理解电路如何再次闭合 让我们假设我们的服务正在调用第三方服务 并且该服务无法正常工作 因此电路
  • 在 Mac OS X 中修改窗口按钮颜色

    如何修改 Mac OS X 中用于关闭 最小化 缩放的红色 黄色 绿色窗口按钮 某处必须有可编辑的资源或 plist 以下是我正在谈论的按钮 对于红 绿色色盲的人来说 这些颜色可能会让人抓狂 我希望他们选择交通灯中使用的真正的蓝色阴影 而不
  • 具有自定义 bin 边缘的 ggplot2 密度直方图

    我能够绘制密度直方图 并且能够使用自定义箱绘制常规直方图 但不能同时绘制两者 这是我的尝试 library ggplot2 vals c 2 6 5 2 4 1 6 9 5 7 5 2 4 4 5 5 6 3 6 1 4 7 1 4 myp
  • 包括静态库到./configure

    如何在执行命令时包含两个静态库 configure Ex configure prefix usr LDFLAGS L home lancy dictionary src WordNet 3 0 lib lWN 这里只包含一个静态库 我如何
  • 问题使用 msbuild 构建具有多个配置的单个项目

    Issue 我们在解决方案中使用配置转换 例如 调试 测试 登台 发布 但是 这些配置仅用于我们的 MVC 项目 所有的库只使用调试和发布 这更有意义 因为我们的库只需要在调试模式或发布模式下构建 尝试从命令行构建单个项目时会出现此问题 我
  • 在 Angular 13 中实现 Monaco 编辑器

    在 Angular 13 中实现 Monaco 编辑器的最佳选择是什么 我见过 ngx monaco editor 但上次更新是 9 个月 它已经升级到 Angular 12 Monaco 版本也有 0 20 0 11 02 2020 非常
  • 为什么我需要避免在循环内使用 try-catch-finally

    每次执行 catch 子句 将捕获的异常对象分配给变量 时 try catch finally 构造都会在运行时在当前作用域中创建一个新变量 而不是使用 var object foo bar i for i 0 len object len
  • 是否有针对 ASP.NET MVC 的分页解决方案在数据库中进行分页?

    我通过谷歌搜索发现的大多数 ASP NET MVC 分页解决方案看起来都以 IEnumerable 集合的形式从数据库表中获取所有行 对 IEnumerable 集合执行一些分页转换 然后将结果返回到视图 我希望能够在数据库端进行分页 但仍
  • 使用 Wait() 时 StreamSocket.InputStreamOptions.ReadAsync 挂起

    这是我能够准备的最小可能场景 此代码连接到 imap gmail com 读取初始服务器问候语 使用 Read 方法 发送NOOP命令 NO操作 读取 NOOP 命令响应 再次使用 Read 方法 问题是第二次读取挂起 如果使用 await
  • 无需源代码即可调试/绕过 BSOD

    你好 祝你有美好的一天 这里需要一些帮助 情况 我有一个不起眼的 DirectX 9 应用程序 名称和应用程序详细信息与问题无关 自某些驱动程序版本以来 它会导致所有 nvidia 卡 GeForce 8400GS 及更高版本 出现蓝屏死机
  • 类变量中的类型提示

    对于上面的代码 我收到以下错误 Parse error syntax error unexpected Connectors T STRING expecting variable T VARIABLE 当我删除类型提示并var dump
  • 如何让yield在调试模式下工作?

    我正在使用 ipdb 和 Yield 我注意到与 ipdb 一起使用时 产量并没有达到预期的效果 具体来说 当使用 ipdb 调试此代码时 并按 n 键盘中的字符只是跳过yield命令而不是从函数返回 def cats print 1 yi
  • Android ApplicationRecord 和 Google Analytics

    我正在开发一个可以通过 AndroidApplicationRecord 安装和打开的应用程序 AAR 请参阅http developer android com guide topics nfc nfc html http develop
  • 默认会话过期超时?

    默认情况下JSESSIONID关闭浏览器时cookie就过期了 但是关联的时间是多久HttpSession在服务器端真的有效吗 大多数容器默认为 30 分钟 您可以通过以下方式进行配置
  • 如何继承样式并覆盖某些内容?

    具体问题是如何继承我的自定义样式 Water 并覆盖其 Grid Background 部分 有没有可能 首先 我只想在那里放另一张图片 ButtonStyles1 xaml
  • __USE_FILE_OFFSET64 与 _FILE_OFFSET_BITS=64

    我正在尝试维护在许多不同系统上编译的代码 我见过十几种不同的请求方式lseek这需要 64 位 一些系统使用lseek64 一些使用lseeko 有些要求您定义 FILE OFFSET BITS 64 现在我刚刚找到了一个新的 需要你定义
  • 从命名范围的 Name 对象获取工作表名称

    I have Microsoft Office Interop Excel Workbook wb Microsoft Office Interop Excel Name name 假设我已经获得了命名范围的 Name 对象和 wb 有什么
  • 创建视图还是使用内部联接?

    我有一个规范化的数据库 其中外键 主键提供一对多数据库 我计划使用 PHP 访问该数据库以进行基本的前端 后端显示 现在 我的问题来自这两个示例查询 CREATE VIEW view AS SELECT functiondetails De
  • 在 Visual Studio 2010 中运行的 Windows Phone 8 SDK

    我知道这个 SDK 还没有完成 但是一些幸运的开发人员已经拿到了它 所以我的问题是 当您安装 Windows Phone 8 SDK 时 它是否也在 Visual Studio 2010 中安装了 SDK 或者只是在 Visual Stud
  • 在cuda中是否有更好/更干净/更优雅的malloc和free方式?

    我正在尝试 cudaMalloc 一堆设备指针 如果任何 malloc 不起作用 则优雅地退出 我有功能代码 但臃肿 因为如果失败 我必须 cudaFree 我之前 malloc 的所有内容 所以现在我想知道是否有更简洁的方法来实现这一点