背景:
在使用嵌入式汇编语言优化某些Pascal代码时,我注意到了一条不必要的MOV指令,并将其删除.
令我惊讶的是,删除不必要的指令会导致我的程序变慢.
我发现添加任意无用的MOV指令可以进一步提高性能.
效果不稳定,并且基于执行顺序进行更改:相同的垃圾指令向上或向下移动一行会产生减速.
我知道CPU会进行各种优化和精简,但这看起来更像是黑魔法.
数据:
我的代码版本有条件地在运行时间的循环中编译三个垃圾操作2**20==1048576.(周围的程序只计算SHA-256哈希值).
在我相当老的机器(英特尔(R)Core(TM)2 CPU 6400 @ 2.13 GHz)上的结果:
avg time (ms) with -dJUNKOPS: 1822.84 ms
avg time (ms) without: 1836.44 ms
Run Code Online (Sandbox Code Playgroud)
程序在循环中运行25次,每次运行顺序随机变化.
摘抄:
{$asmmode intel}
procedure example_junkop_in_sha256;
var s1, t2 : uint32;
begin
// Here are parts of the SHA-256 algorithm, in Pascal:
// s0 {r10d} := ror(a, 2) xor ror(a, 13) xor …Run Code Online (Sandbox Code Playgroud) 我目前正在使用python 2.6,我想使用win32 mysqldb模块.不幸的是,它似乎需要2.5版本的Python.有没有办法摆脱版本号中的这种不匹配,并使用python 2.6安装mysqldb?
是否可以在GHCi提示符下以增量方式与任意Monad实例进行交互?
您可以以交互方式输入"do"命令:
Prelude> x <- return 5
Run Code Online (Sandbox Code Playgroud)
但据我所知,一切都被迫进入IO()Monad.如果我想与任意Monad交互,该怎么办?
我是否被迫在巨人内部编写完整的命令序列do { ... }和/或直接使用中缀运算符?没关系,但我更喜欢"输入"一个任意的monad并一次与它进行交互.
可能?
我正在 Flutter 中开发一个应用程序并将其部署到 Firebase 托管。
Firebase 托管和firebase serve本地开发命令让您可以从一个特殊的自动生成的相对 URL ( /__/firebase/init.js)初始化 Firebase 。
这很好,因为它允许我在不包含 Firebase 配置的情况下共享我的项目(例如在 github 上)。
可悲的是,这似乎不太适合flutter run——如果我使用flutter run,我会丢失特殊的 URL,如果我使用firebase serve,我会失去 flutter 的热重载功能。
我目前的解决方法是在我的app/web/目录下有以下本地文件:
__/firebase/init.js # containing firebase.initializeApp(myFirebaseConfig);
__/firebase/7.1.44/firebase-app.js # manually downloaded from the gstatic cdn
__/firebase/7.1.44/firebase-auth.js
# ... (etc)
Run Code Online (Sandbox Code Playgroud)
这有效,但是:
__目录实际上已部署到 Firebase。(实际上不是问题,但似乎是错误的)理想情况下,应该能够firebase login、firebase init、 然后flutter serve、 然后自动访问该/__/目录。
是否已经有某种方法可以实现这一点,如果没有,我们如何实施?
(例如,有没有办法扩展flutter的本地http服务器以利用firebase-toolsnpm模块中已有的逻辑?)
以下表达式显示了16个基本布尔运算中的每一个的真值表:
(0 b./; 1 b./; 2 b./; 3 b./; 4 b./; 5 b./; 6 b./; 7 b./; 8 b./; 9 b./; 10 b./; 11 b./; 12 b./; 13 b./; 14 b./; 15 b./) ~ i.2
?????????????????????????????????????????????????????????????????
?0 0?0 0?0 0?0 0?0 1?0 1?0 1?0 1?1 0?1 0?1 0?1 0?1 1?1 1?1 1?1 1?
?0 0?0 1?1 0?1 1?0 0?0 1?1 0?1 1?0 0?0 1?1 0?1 1?0 0?0 1?1 0?1 1?
?????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
如何在括号中重构该部分以删除重复?
澄清:
这里的目标不是生成表,而是学习如何动态生成新动词.为了减少括号的表情,我想以分解出的符号;,/和b. …
在J中,我可以根据某个谓词更新数组的子集,如下所示:
y (k}~) |. y {~ k =. I. '123' e.~ y =. '[1.2.3]'
[3.2.1]
Run Code Online (Sandbox Code Playgroud)
我意识到我可以在这里考虑一个连词,但是首先有更优雅的方法吗?这123只是一个例子.具体来说,我想做的是:
k)此外,重要的是动词作为一个整体在数组上运行,因为我主要想做的是置换和转换子数组.(因此|.在示例中.)
有更简单的方法吗?
在J中,我们可以"_用来产生一个常数函数:
k100 =. 100"_
k200 =. 200"_
Run Code Online (Sandbox Code Playgroud)
这些可用于与其他动词的动名词:
(+:`k100`k200`-:)`:0 [ 256
512 100 200 128
Run Code Online (Sandbox Code Playgroud)
如何直接从数组创建动名词?
也就是说,我想定义k它以产生一个常量动词的动名词,如下所示:
gk =: k 100 200 NB. (or '100 200 k' if it needs to be an adverb.)
gk@.(0)''
100
gk@.(1)''
200
Run Code Online (Sandbox Code Playgroud) j ×4
assembly ×1
flutter-web ×1
freepascal ×1
ghci ×1
haskell ×1
isabelle ×1
isar ×1
mysql ×1
optimization ×1
performance ×1
python ×1
x86-64 ×1