Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ioctl和执行时间_C_Linux_Multithreading_Embedded_Linux Kernel - Fatal编程技术网

ioctl和执行时间

ioctl和执行时间,c,linux,multithreading,embedded,linux-kernel,C,Linux,Multithreading,Embedded,Linux Kernel,我有一个运行两个线程的程序——它们使用消息队列进行通信 在一个线程中,我调用ioctl()来访问硬件解密程序。代码如下所示: void Decrypt { ... .. ... if(<condition 1>) {. ... ... retVal = ioctl(...); comesInHere1++; } if(<condition 2>) { ... ... retVal = ioctl(...); comesInHere2++; } void解密 { .

我有一个运行两个线程的程序——它们使用消息队列进行通信

在一个线程中,我调用ioctl()来访问硬件解密程序。代码如下所示:

void Decrypt
{

...
..
...

if(<condition 1>)
{.
...
...
retVal = ioctl(...);
comesInHere1++;
}

if(<condition 2>)
{
...
...
retVal = ioctl(...);
comesInHere2++;
}
void解密
{
...
..
...
if()
{.
...
...
retVal=ioctl(…);
comesInHere1++;
}
if()
{
...
...
retVal=ioctl(…);
comesInHere2++;
}
comesInHere1和comesInHere2用于计算它在特定if循环中经过的次数

整个程序需要80毫秒来执行。但是如果我注释掉测试变量(在if循环中comesInHere1,comesInHere2),执行时间将增加8毫秒到88毫秒

这怎么可能?我现在不能注释掉变量,因为它会增加所需的时间,也不能保留它们-将在代码审阅中被杀死:)

请让我知道


感谢缓存?通过添加更多的数据,您可能会将代码移动到不同的缓存线,这些缓存线以某种方式放置在一起,从而导致抖动。您可以在不同的系统上运行,并在每个线程中专门使用的变量之间添加填充数据


如果将处理序列化到单个内核上会发生什么情况?

您执行了多少次测试运行?这可能是一个观察错误。如果不是,您必须查看编译器生成的汇编代码以找出错误所在。在任何情况下,这里不需要后增量,请使用前增量以避免复制。我大约运行了20次mes确保观察结果是正确的。是否“延迟”在执行额外一行代码的过程中添加了一些帮助ioctl调用的代码?听起来不太符合逻辑…但计时测量令人费解。顺便说一句,我使用硬件注册表读取调用来计算时间。我尝试将变量设置为易失性-仍然没有Luckar您使用优化编译了吗?我想您没有…打开它并再次测量。我尝试了氧气和臭氧-没有运气,需要更多时间