问题标签 [blitz++]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 从 blitz Array 获取存储类型
我正在使用 Blitz++ 并进行一些精美的包装。Array 的构造函数可以将存储类型作为参数之一。默认情况下,这是GeneralArrayStorage<N>()
. 我一直在查看文档,但没有找到任何方法从已经制作的数组中获取存储类型。所以,我的问题是:有没有一种简单的方法来获取可用于构建另一个阵列的阵列的存储类型?
如果不能直接拉出来,有没有一种简单的方法可以让 odering 和 assinging 的东西用GeneralArrayStorage<N>(ordering, ascending_stuff)
. 谢谢
c++ - 不会链接,除非内联方法
我在链接时遇到了一个奇怪的错误。
标题:
全局.h
动物.h
这是*cpp
文件
主文件
动物.cpp
编译我使用
g++ main.cpp animal.cpp -I/usr/include/boost -I/fs01/ma01/homes/matc/local/blitz/include
这是我得到的错误:
由于某些原因,如果我将AnimalVector
构造函数设置为inline
,则代码将起作用。有人可以解释我为什么吗?
编辑:这里是blitz/tinyvec2.h
https://github.com/syntheticpp/blitz/blob/master/blitz/tinyvec2.h的链接
c++ - 结构中的 Blitz++ 数组
我想要一个包含几个 blitz++ 数组的结构。该程序创建了这样一个结构,但是我无法正确分配对象。是用指向在结构外部分配的 blitz++ 数组的指针来制定结构的唯一替代方法吗?
c++ - 使用“typeid”提供的信息定义参数
我刚开始学习c++。我有一个问题希望你能帮助我。我正在使用 blitz++ 库并想使用这样的命令定义一个数组:
可以看出,数组类型设置为double
;然而,这个数组应该根据另一个变量的类型(我们称之为 A)来定义,它可能是 double、int 等。我搜索了一下,发现我可以使用“typeid”来识别类型:
现在我想根据上述信息(A_type)定义我的数组,像这样
但它没有用。
您能否给我一些建议,如何使用 A_type 提供的信息?
openmp - Blitz++、犰狳和 OpenMP 非常慢
我已经尝试了很长时间来学习如何并行化,并且我一直在阅读很多关于 OpenMP 的笔记。所以,我尝试使用它,我得到的结果是我尝试并行化的所有位置都比串行情况慢 5 倍,我想知道为什么......
我的代码是下一个:
toevaluate
是两列和两行长度的闪电矩阵。storecallj
并且storecallk
只是我用来存储调用并避免额外的函数调用的两个 blitz 向量。matrix
是一个长度为列(cols= rows)的方形犰狳矩阵,行的长度是行(我稍后会用它来做其他事情,将它定义为犰狳矩阵更方便)externfunction1
是一个在此之外定义的函数,它计算 f(a,b) 函数的 (x,y) 值,其中 (a,b) 是输入, (x,y) 是输出。Problem
是一个字符串变量并且normal
是一个布尔值。resultk
并且resultj
是这样的向量 (x,y) 存储这些函数的输出。externfunction2
是在此之外定义的另一个函数,它通过评估 funcci (i=1,2) 来计算双精度,这是一个闪电多项式。该多项式在双精度:innerprod 中进行评估以给出另一个双精度:wvaluei (i=1,2)。
我认为这些都是一般性的。代码如下。
而且速度很慢。我尝试过的另一件事是:
我使用动态是为了避免出现问题,以防要评估的总点数不是 4 的倍数。
有人可以帮我理解为什么这么慢吗?
stl - 通过 gdb 将 c++ 变量传递给 python
我正在开发/调试一个广泛使用 c++ STL 向量和 blitz cpp 数组的 c++ 代码(向量/数组是多维的,最多 4D/5D 数组)我目前正在使用 cout/print 来记录函数的输入/输出的输出,但它变得非常乏味。为了能够在调试时打印向量/数组,您能否提出任何选项。我想到了几个选择
(a) 在 c++ 上编写模板函数来打印和使用 GDB 的“调用”功能。但无法将 GDB 的“调用”功能用于 c++ 模板函数,但适用于普通函数。(b) 是否可以将 c++ 变量传递给 GDB 的 python 接口并打印它们?有什么相同的例子吗?
我在发布这个问题之前用谷歌搜索,但没有找到任何有用的线程。非常感谢任何帮助(即使可以提供一些链接)
非常感谢提前!
c++ - 我们可以让 GDB 在回溯中显示非平凡的参数吗
目前 GDB 仅在回溯中打印微不足道的参数(仅标量);像下面的东西
等等。这里的 x3 可能是一个数组/STL 向量,默认情况下 GDB 不显示它。
我在我的代码中使用了很多 STL 向量和 Blitz 数组。
我在 .gdbinit 文件中有例程来显示 STL 向量,在 C++ 中有子例程,我可以在其中利用 GDB 中的调用功能,它可以显示数组内容。要手动打印向量/数组内容,我会使用
我们如何让 GDB 显示如下函数的重要参数。
我知道使用set print frame-arguments all 可以显示一些重要的参数。但是如何真正打印 GDB 可能不支持打印的参数。目的是在函数开始时自动打印所有参数(至少我们可以)。
我可以编写一个 GDB 脚本并为每个向量/数组单独添加打印,但是为每个函数执行此操作将非常耗时,因为我有大量函数。这将有助于加速我的调试。
任何建议都受到高度赞赏。
非常感谢提前!
c++ - 如何在 Linux 上的特定目录(不需要 sudo 权限的目录)中安装 C++ 库(例如 Blitz++)?
我试着查看这个网站上的一些链接。我发现最接近我的问题的是这个,但我仍然无法用它解决我的问题
我对此有点陌生,但基本上,我打算在 Linux 上为 C++ 安装Blitz++库
现在,我已经按照他们的GitHub 存储库的说明完成了一次,其中以下命令在类 Unix 系统上安装 Blitz++:
我在这里唯一想做的就是避免使用sudo
. 据我所知,该命令将文件和库本身安装在需要 sudo 权限的目录中接受任何修改(如果我错了,请纠正我,我在这里并不精通)。但是说如果我想在我有权限的目录中安装库,以避免不得不使用sudo
?
例如,如何在 Linux 上的主目录中安装所述库,而无需调用sudo
?
我知道对于其他 C++ 库,.configure
在它们各自的目录中有一个文件,并且通过键入一些内容./configure --prefix=<directory_path>
(假设当前工作目录是库目录),它允许将库安装在指定的路径中
但是我一生都无法弄清楚如何用 Blitz++ 做类似的事情,因为它没有任何.configure
文件。也许还有另一种方法,但我完全缺乏这方面的知识。任何帮助表示赞赏。
此外,如果有人有任何链接或资源有助于了解 C++ 库的工作原理以及如何普遍安装它们,以及任何其他推荐的 C++ 资源,如果您让我知道这是否不便,我将不胜感激。为任何错误和我的无知道歉
performance - gfortran 9.3 的 zgetrf 例程非常慢
我有一个 c++ 代码(用 g++ 编译),它创建并填充了一个 blitz++ 矩阵,其中填充了复杂的双精度值(我称之为 lseMatrix)。然后使用 zgetrf fortran 例程将矩阵反转为
zgetrf_(&n, &n, &((*lseMatrix)(0, 0)), &n, &(iPiv(0)), &info)
我的旧机器(在 Ubuntu 16.04 下,单处理器)安装了 g++ 和 gfortran(版本 5.4)和 lapack/blas(v. 3.6.0-2ubuntu2)。代码在那里运行得非常好,使用 zgetrf 反转相对较大的矩阵大约需要 10 分钟。但是,当我用我的新机器(在 Ubuntu 20.04 下,两个配对处理器)运行代码时,具有最新版本的 g++ 和 gfotran(v. 9.3)和最新的 lapack/blas(3.9.0-1build1),反转操作需要5个小时。
已经进行了以下测试:
在没有编译优化标志的新旧机器上运行代码。结果:性能没有改变。
尝试在旧机器上的链接阶段创建一个带有 -static 标志的静态库,并在新机器上运行生成的 .exe 文件。这部分解决了问题。两台机器上的性能速度是一样的,但是程序有时会出乎意料的崩溃。
非常感谢有关可能解决方案的建议。