问题标签 [gperf]

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.

0 投票
1 回答
279 浏览

optimization - 使用 gperf 找到最小完美哈希函数

我发现 gperf 适合我的项目,现在正在寻找一种优化生成表大小的方法。由于开关 -i 和 -j 确定性地影响表的长度,我编写了一个小脚本迭代这些值,找到最小的表长度。该脚本存储 -i 和 -j 值以在脚本终止时检索当前最小表以及当前尝试的值,以便稍后继续搜索。

现在我看到存在一个开关 -m,它表明它与我对我的小脚本所做的完全一样。我想使用这个开关比只调用 gperf 进行一次迭代要快得多。但是我需要知道两件事来替换 gperf 调用,我在 gperf 帮助中找不到:

  1. 如果我使用 -m 开关,如果 -i 和 -j 会尝试哪些值?
  2. 我怎么知道实际使用了 -i 和 -j 的哪些值,即哪些值导致当前 gperf 调用的最小找到表长度?
0 投票
2 回答
2059 浏览

c - Profile C 代码执行百分比(逐行注释)

我需要分析几个 C 代码并获得一个带注释的文件,其中包含每行或至少每个块(while/if-else/for-functions)等所花费的执行时间百分比。

到目前为止,我已经研究了 valgrind(callgrind) 和 gperf 以及其他一些工具。到目前为止我得到的是

  • 每个函数或源代码行的计数,例如执行次数。
  • 或计数百分比。
  • 或每个函数调用所花费的执行时间。

但是,如果执行时间的百分比不是计数,那么我需要的是每行源代码或至少所有块(while/if-else/for-functions)。

有人可以让我知道我可以做到的方法吗?

谢谢,

0 投票
1 回答
442 浏览

python - 尝试安装python库snudown,得到gperf错误

您会注意到在 gperf 选项打印输出中,“输出”拼写错误。我已经尝试修改 snudown 的 setup.py 以使用我能想到的所有可能的组合,--output、--ouput、-o,但它仍然只是给了我使用信息。

我已经尝试了很多东西,但似乎无法让它发挥作用。

此外,如果有帮助,我正在使用的 gperf 副本位于

0 投票
1 回答
840 浏览

c++ - 为什么我在这个 C++ 代码中得到一个未定义的引用?

我正在尝试学习如何在 Ubuntu 14.04 计算机上使用 gperf 库进行完美散列。我收到编译器错误。有人可以帮我解决这个问题吗?

gperf 是一个库,当提供一组静态键来散列时,例如英语词典中的单词,将生成包含完美散列函数和散列表本身的 C 或 C++ 代码。

这是代码。产生的in_word_set函数是我(用户)将用来查询哈希表的hash函数和用于in_word_set将关键字映射到哈希表中的函数。

我用于生成哈希表的键是 SOWPODS 拼字游戏词典的前 10 个单词,您可以在下面的单词列表数组中看到。

我用 g++ 编译时得到的错误是这样的。

这是我正在使用的代码。main功能在最后。

0 投票
0 回答
166 浏览

aix - 错误:无法确定 gperf 哈希/查找函数的 len 参数的类型

我想在 AIX os 64 位下构建 fontconfig 库。所以我下载了 fontconfig 源代码并执行了配置命令: ./configure --prefix=/home/stephv/libraries/sharedlib 配置返回以下错误:检查 gperf 哈希/查找函数的 len 参数类型...配置:错误:无法确定 gperf 哈希/查找函数的 len 参数的类型

那么,我该如何解决这个错误呢?

谢谢

0 投票
0 回答
34 浏览

c - gperf 在具有相互依赖的外键的结构上

我可能有很多静态数据,包括需要解析的其他静态数据的外键。我希望将数据文件作为常量编译到我的程序中。我编写了一个简单的C代码生成器,将类型信息作为输入,

而数据,

并根据类型信息生成一个.h文件,

.c来自组合类型信息和数据。例如,这会将外键解析为Aliceas &auto_animal[0]which is a Bear

输出已排序,以便我可以bsearch在其上运行。如果我将程序与自动生成的源链接,

它给,

但是,我不必搜索。我想gperf在整个“数据库”上运行并在O(1). gperf和我的加载器都输出完成C的代码,但我无法在不知道另一个表中的位置的情况下解析外键。有什么方法可以自动化外键闭包和完美的哈希表,而不涉及为 编写完整的解析器C

0 投票
1 回答
230 浏览

c - 初学者:我如何实际使用 gperf?每次我运行它时它都会挂起

我对编码非常陌生,目前正在在线学习哈佛的 CS50x 课程。到目前为止,我对代码、语言和环境的熟悉程度是他们在 C 中教给我的。在这个网站上其他问题的模糊指导下,我花了大约 4 天的时间来安装 gperf,从发现 Cygwin 是什么安装它的所有库并对安装进行错误检查,直到找出它最终将安装的程序放在哪里。当我刚刚真正找到应用程序“gperf.exe”时,我非常高兴。我以为我终于要获得我已经尝试了将近一周的哈希函数了。

现在,该程序在我每次尝试运行时都会挂起,没有任何错误消息。不提供输入文件会导致它挂起。执行手册中指定的任何数量和选择的选项,它只是挂起。甚至调试说它正在进入调试,然后就挂起。我能够让程序完全响应的唯一方法是向它提供一个无效的输入文件,它说它是无效的。别的什么都不做;没有输出文件,没有命令行响应,什么都没有。我沮丧到流泪,gperf 提供的文档假设你是一个专业的编码员,没完没了地谈论数百个高级定制选项来修改程序,但对如何让它运行只字未提在基本层面上。我已经广泛搜索了谷歌和这个网站,

谁能告诉我如何使这个程序工作?我确定这是我缺少的一些愚蠢的小东西,但我想做的就是获取我的字符串输入文件并在 C 中给我一个哈希函数。感谢任何和所有帮助,我完全不知道我正在做的甚至安装 gperf 是一个多天的过程,远远超出了我迄今为止所做的范围。

谢谢你。

编辑:我尝试过的执行:gperf ./gperf

我尝试过的参数:-a -c -d --output-file 'FILE'

我已经尝试了所有这些,无论是否包含我的输入文件,名为“keys”和“keys.txt”。唯一从程序产生任何响应的是给它一个不正确的输入文件名,给出结果“无法加载输入文件'keys'”。

0 投票
1 回答
58 浏览

hash - 如何在 gperf 中使用空字节?

gperf 信息页面声称,如果您指定,-l

输入文件中的关键字可能包含 NUL 字节,以字符串语法写成 \000 或 \x00,而 gperf 生成的代码会将 NUL 视为任何其他字节

但是,当我通过以下方式运行此输入文件时gperf -L C++ -l

我得到:

看起来它将\000and\x00视为文字值而不是空字节。

如何在我的 gperf 字符串中正确使用指定空字节?

0 投票
1 回答
176 浏览

c++ - 使用 brew 安装后 gperftools 未在 Mac 上安装 -lprofiler

最近我想分析我的 cpp 代码并遇到了 gperftool,但是关于如何在 Mac 上使用它并没有真正明确的说明。到目前为止,我已经运行brew install gperftools并想编译我的简单 cpp 文件,它只输出“Hello world!”。我运行g++ main.cpp -lprofiler -o main但得到错误ld: library not found for -lprofiler。如果你能指导我或者应该给我一个易于遵循的教程,我真的很感激。谢谢 :)

编辑:目前我正在使用带有新 M1 芯片的 MacOS(不确定这是否会导致任何问题)

0 投票
1 回答
137 浏览

c++ - 有没有办法使用详细的缓存/CPU 效率信息来分析 MPI 程序?

操作系统:Ubuntu 18.04 问题:如何分析多进程程序?

我通常使用 GNU perf 工具对程序进行如下分析: perf stat -d ./main [args],该命令将返回详细的性能计数器,如下所示:

我关注的是 CPU 效率(第 1 行)、IPC(第 6 行)、L1 和 LLC 带宽(第 9 和 11 行)。

但是现在,我需要分析一个 MPI 程序的每个进程,假设我们有 3 个进程通过执行mpiexec -np 3 ./main [args]我怎样才能分别获得每个进程的 CPU 效率、IPC、L1 和 LLC 信息?(通过使用 perf stat -d,我只能得到包含 3 个进程的整体信息,这对我来说目前还不够)

我想要的输出是这样的:

我怎样才能做到这一点?(我想知道 GNU 能gperf做到这一点吗?或者有一些 C++ 方法可以做到这一点吗?)