考虑以下代码:
int main() {
int a = 0;
int b = 1;
for (int i = 0; i < 3; i++) {
a = 2;
int c = 1;
int d = 3;
d = a + c;
}
a = b+2;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码段中,三个变量的生命周期包含在循环体(i
,c
和d
)中.我希望能够使用LLVM计算任何给定循环体中存在寿命的变量(即对于此循环,我的代码应该返回3).
我找到了实时变量分析,但是我无法使用它来查找我上面描述的内容.
我正在尝试生成随机频谱,然后用于ifft
查找相应的时域向量.
我正在使用以下代码:
for i = 1:64
randNum = (rand() + 1i * rand())/sqrt(2); % Needs to be normalized by sqrt(2)
randFreq(i) = randNum;
end
randVec = ifft(randFreq);
Run Code Online (Sandbox Code Playgroud)
请注意,我知道mvnrnd
,但由于技术原因,我需要使用for
循环并单独生成每个元素.我还需要生成随机频谱然后使用逆变换,我不能在时域中直接生成随机向量.
如果我绘制随机向量(plot(abs(randVec))
)的大小,我总是得到这种形式的图形.
总是有一个尖峰,n=0
所有其他元素的数量都要小得多.我希望能够深入了解为什么会这样.
我的问题不是在向量Matlab中创建随机值的重复,它们是恰好在同一主题上的完全不同的问题.我特别询问我的行为ifft
.它也不是我的逆傅立叶变换中的尖峰的重复.在那个问题中,峰值可能是由数据的某些特性引起的,但在我的情况下,数据是完全随机的.
我有一段代码,我正试图变成LLVM bitcode:
int main() {
volatile double n = 0.45;
for (int j = 0; j < 32; j++) {
n *= j;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我对它运行以下命令:
clang -O0 -S -emit-llvm TrainingCode/trainingCode.cpp -o TrainingCode/trainingCode.ll
Run Code Online (Sandbox Code Playgroud)
生成以下LLVM bitcode(注意第6行,带有"Function Attrs"的行):
; ModuleID = 'TrainingCode/trainingCode.cpp'
source_filename = "TrainingCode/trainingCode.cpp"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: noinline norecurse nounwind optnone uwtable
define i32 @main() #0 {
entry:
%retval = alloca i32, align 4
%n = alloca double, align 8
%j …
Run Code Online (Sandbox Code Playgroud) 我需要计算一部分(C++)代码的运行时间,并希望通过查找代码执行过程中经过的时钟滴答数来实现这一点。
我想找到代码开头的处理器时间和结尾处的处理器时间,然后减去它们以找到经过的滴答数。
这可以通过时钟功能来完成。然而,我测量的时间需要非常精确,并且使用函数调用被证明是非常具有侵入性的,因为调用者保存的寄存器分配器在每次调用时都会溢出许多变量。
因此,我不能使用任何函数调用,需要自己检索处理器时间。汇编代码没问题。
我正在使用 Debian 和 i7 Intel 处理器。我不能使用分析器,因为它太具有侵入性。