热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

OpenCL:更好地使用宏或函数?

如何解决《OpenCL:更好地使用宏或函数?》经验,为你挑选了1个好方法。

在OpenCL中,这是C-99,我们有两个选项来创建类似于函数的东西:

功能

[编辑:好吧,或使用模板语言,新选项3 :-)]

我听说过某处(在任何地方找不到任何官方引用,只是在stackoverflow上的某个地方看到它,一次),这些函数几乎总是在实践中内联,因此使用函数在性能方面是否正常?

但宏基本上保证内联宏.但容易受到错误的影响,例如,如果不在所有内容周围添加括号,而不是类型安全.

在实践中,哪有效?什么是最标准的?什么是最便携的?

我想我的要求是以下几种组合:

尽可能快地

注册压力尽可能小

当与编译时常量一起使用时,理想情况下应保证优化 - 远离另一个常量

易于维护......

标准,不是太奇怪,因为我正在考虑将其用于开源项目,我希望其他人会为此做出贡献

user703016.. 5

但宏基本上保证内联宏.

至少在GPU上,除了递归函数(OpenCL 2.0)之外,OpenCL编译器积极地内联几乎所有东西.这是出于硬件限制和性能原因.

虽然这确实依赖于实现,但我还没有看到没有积极内联的GPU二进制文件.我对CPU OpenCL不起作用,但我相信优化器策略可能类似,尽管硬件限制不一样.

但就标准而言,没有任何保证.

让我们来看看你的要求:

尽可能快地

注册压力尽可能小

当与编译时常量一起使用时,理想情况下应保证优化 - 远离另一个常量

内联函数与宏一样快,不使用更多寄存器,并在可能的情况下进行优化.

易于维护......

功能容易维护宏.它们是类型安全的,它们可以很容易地重构,等等,这个列表永远存在.

标准,不是太奇怪,因为我正在考虑将其用于开源项目,我希望其他人会为此做出贡献

我认为这是非常主观的.我个人非常讨厌宏,并像瘟疫一样避开它们.但我知道一些非常成功的项目,它们广泛使用它们(例如Boost.Compute).由你决定.



1> user703016..:

但宏基本上保证内联宏.

至少在GPU上,除了递归函数(OpenCL 2.0)之外,OpenCL编译器积极地内联几乎所有东西.这是出于硬件限制和性能原因.

虽然这确实依赖于实现,但我还没有看到没有积极内联的GPU二进制文件.我对CPU OpenCL不起作用,但我相信优化器策略可能类似,尽管硬件限制不一样.

但就标准而言,没有任何保证.

让我们来看看你的要求:

尽可能快地

注册压力尽可能小

当与编译时常量一起使用时,理想情况下应保证优化 - 远离另一个常量

内联函数与宏一样快,不使用更多寄存器,并在可能的情况下进行优化.

易于维护......

功能容易维护宏.它们是类型安全的,它们可以很容易地重构,等等,这个列表永远存在.

标准,不是太奇怪,因为我正在考虑将其用于开源项目,我希望其他人会为此做出贡献

我认为这是非常主观的.我个人非常讨厌宏,并像瘟疫一样避开它们.但我知道一些非常成功的项目,它们广泛使用它们(例如Boost.Compute).由你决定.


推荐阅读
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • Valve 发布 Steam Deck 的新版 Windows 驱动程序
    Valve 最新发布了针对 Steam Deck 掌机的 Windows 驱动程序,旨在提升其在 Windows 环境下的兼容性、安全性和性能表现。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • vivo发布iQOO 11系列:搭载骁龙8 Gen2与多项创新技术
    vivo正式推出iQOO 11系列智能手机,该系列搭载最新的高通骁龙8 Gen2处理器,并引入多项创新技术,致力于为用户提供卓越的性能和游戏体验。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文探讨了如何在发布 XenApp 应用时,通过命令行参数实现启动时的参数传递。特别介绍了静态和动态参数传递的方法,并详细解释了 ICA 文件中两种参数传递方式的区别及安全检查机制。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文详细介绍了MicroATX(也称Mini ATX)和MATX主板规格,探讨了它们的结构特点、应用场景及对电脑系统成本和性能的影响。同时,文章还涵盖了相关操作系统的实用技巧,如蓝牙设备图标删除、磁盘管理等。 ... [详细]
author-avatar
llliu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有