由于“erf”函数使用率较高而导致性能瓶颈

2024-04-22

我使用大型矩阵(100x100 到 3000x3000)进行一些计算(大量求和和矩阵向量乘法),我使用 Eigen 库来处理向量和矩阵。我的代码是简单的类似 C 的代码(只有函数,没有类),并将被编译为 DLL 以在 Excel 上使用。

我发现以下代码中存在瓶颈:

// Q(z) matrix function
Eigen::MatrixXd qzMatrix(const Eigen::MatrixXd& xjk, const float& riskFreeRate, 
                         const float& volatility, const float& rebalancingPeriod)
{
    int j, k, r = xjk.rows(), c = xjk.cols();
    Eigen::MatrixXd matrix(r, c);
    double mu = (riskFreeRate - volatility * volatility / 2) * rebalancingPeriod;
    double s = volatility * rebalancingPeriod;

    for (j = 0; j <= r - 1; ++j)
        for (k = 0; k <= c - 1; ++k)
            matrix(j, k) = (xjk(j, k) > 0) ? 0.5*(1 + erf(((log(xjk(j, k)) - mu) / s) * M_SQRT1_2)) : 0;

    return matrix;
}

还有第二个函数,与此类似,其中 erf 函数采用不同的参数(erf 函数此处用于计算标准法线 cdf)。这两个函数采用大尺寸(通常约为 1000x1000)的矩阵(本例中为 xjk),并循环至少 120 次(1000x1000x2x120 = 2.4 亿次 erf 函数调用)。我已经尝试过使用 GSL 普通 CDF 函数,但它比本机 C++ erf 函数稍慢一些。

在 1000x1000 矩阵上运行该算法 120 次大约需要 45 秒。我正在使用 mingw-w64 4.9.2、CodeBlocks,我有 Windows 7 x64、4Go RAM、i5。

有什么办法可以加快这个算法的速度吗?


None

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

由于“erf”函数使用率较高而导致性能瓶颈 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 在 nHibernate 关系中使用实体的 Lite 版本?

    在某些情况下 出于性能原因 创建一个实体的轻量级版本 指向同一个表 但映射的列较少 这是一个好主意吗 例如 如果我有一个包含 50 列的联系人表 并且在一些相关实体中 我可能对 FirstName 和 LastName 属性感兴趣 那么创建
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 如何在 Hamcrest 中使用(原始)自动装箱/加宽?

    我碰到https code google com p hamcrest issues detail id 130 https code google com p hamcrest issues detail id 130为 Hamcrest
  • 为什么 where 子句中不允许使用聚合函数

    我正在寻求对此的澄清 我在下面写了两个查询 我们有一个员工姓名表 其中包含 ID 姓名 薪水列 1 Select name from employee where sum salary gt 1000 2 Select name from
  • 将开发团队从 FTP 转换为版本控制系统

    我在一家小型 LAMP 开发工作室工作 那里的想法是完成代码并继续处理列表中的下一项 该团队在 Zend Studio 5 5 中工作 通过 FTP 或 SFTP 连接到 Live 服务器 他们喜欢的是代码部署的速度 因为它只是修改实时代码
  • Maven:根据配置文件选择父项目

    我有一个 Maven 项目 它是 jenkins 的插件 它的父级应该是
  • 缩减规模时 EC2 Spot 实例终止通知

    每次安排终止我的现货实例时 我都需要运行清理脚本 我有两个终止的理由 现货实例的价格超出了我的出价 由于自动伸缩组的伸缩策略导致的缩容 基于5分钟集群平均CPU使用率 随机实例终止 我确实喜欢下面的简单脚本this http blog fu
  • 如何停止在从 Google 云端硬盘下载时记住和应用文件扩展名

    我上传了混合负载的文件 图像 文档 pdf 所有文件扩展名为 dc 文件是否根据基础类型进行转换 作为迁移过程的一部分 我使用 Google Apps 脚本重命名这些文件并应用适当的文件扩展名 例如 pdf 选择其中任何文件并将结果下载到扩
  • 遍历数组并以项目符号显示

    我想遍历这个数组并显示 评论 作为要点 Array 1 gt Array id gt 1 comment gt a parent id gt 0 children gt Array 3 gt Array id gt 3 comment gt
  • 在尝试删除文件之前检查文件是否已打开[重复]

    这个问题在这里已经有答案了 在尝试删除文件之前如何检查文件是否已打开 以编程方式 像这样的东西 if file is open close it first delete file 由于某些原因 我认为这不会起作用 没有标准的 Java 机
  • 如何在c#中访问面板中的控件

    我在 c winforms 中使用面板 并使用循环用图片框的编号填充面板 例如面板名称为panal foreach string s in fileNames PictureBox pbox new new PictureBox pBox
  • boto3 copy 与 copy_object 有关 s3 中文件权限 ACL 的比较

    当我使用不同的键和前缀将对象复制到同一存储桶后 我相信这类似于重命名 其公共读取权限被删除 import boto3 s3 boto3 resource s3 copy source Bucket mybucket Key mykey s3
  • 如何使 volatile count++ 操作成为线程安全的

    我一直在经历 JCIP 作者说 线程限制的一个特殊情况适用于易失性变量 只要确保 volatable 变量仅从单个线程写入 对共享 volatile 变量执行读取 修改 写入操作是安全的 例如 count 被认为是一个复合操作 读取值 加一
  • 将 certifi 模块与 urllib2 一起使用?

    我有使用 urllib2 模块下载 https 页面时遇到问题 https stackoverflow com questions 33264502 windowserror error 5 access is denied using u
  • Laravel 外键下拉列表

    我有 2 张桌子 客户 id 全名 公司 ID 公司 id 公司名称 我已经创建了两个表之间的关系 并且工作正常 因为我可以在客户视图中显示公司名称 如下所示 customer gt company gt company name 我现在与
  • 无法在 IntelliJ IDEA 中打开调试器端口

    我有一个问题 无法使用 IntelliJ IDE 在调试模式下设置应用程序 但运行模式可以 我的操作系统是Windows 7 IDE是IntelliJ IDEA Web容器是Tomcat 6 我尝试了很长时间 更改了HTTP端口和JMX端口
  • 如何将数据库备份到 .bak 文件?

    我有一个在 Visual Studio 2008 中创建的网站 我需要将其上线 如何将数据库文件备份到 bak 以便将其交给托管公司放置在服务器上 从 SQL 提示符处 BACKUP DATABASE MyDatabase TO DISK
  • SSRS 2008 R2 到 SSRS 2016 迁移

    我必须将 770 个 SSRS 报告 包括本机模式和 Sharepoint 模式报告 从 2008 R2 版本迁移到 SSRS 2016 版本 哪个是 SSRS 迁移的最佳工具 我见过很少的工具 如 Microsoft Reporting
  • 如何将日期列表转换为字符串列表

    我正在尝试在谷歌电子表格中打印出日期列表 到目前为止我有以下脚本 它可以很好地获取日期列表 但我需要知道如何将此日期列表转换为日期列表字符串 def daterange startdate enddate r enddate datetim
  • 在 Spark 执行器节点上安装 Python 依赖项的最简单方法?

    据我所知 您可以将单个文件作为 Python Spark 程序的依赖项发送 但是成熟的库 例如 numpy 呢 Spark 是否有办法使用提供的包管理器 例如 pip 来安装库依赖项 或者这必须在 Spark 程序执行之前手动完成 如果答案
  • 无法解析包含单引号的json数据

    Problem 我的一些 json 数据出现解析错误 因为它包含单引号 例如 我的一些数据可能如下所示 拉里的数据 我读过以下文章 JSON 响应中的 jQuery 单引号 https stackoverflow com questions
  • 由于“erf”函数使用率较高而导致性能瓶颈

    我使用大型矩阵 100x100 到 3000x3000 进行一些计算 大量求和和矩阵向量乘法 我使用 Eigen 库来处理向量和矩阵 我的代码是简单的类似 C 的代码 只有函数 没有类 并将被编译为 DLL 以在 Excel 上使用 我发现