小编Sud*_*shu的帖子

找到最少3个数字的最快方法?

在我写的一个程序中,在这个例程中,20%的时间用于在内循环中找出最少3个数字:

static inline unsigned int
min(unsigned int a, unsigned int b, unsigned int c)
{
    unsigned int m = a;
    if (m > b) m = b;
    if (m > c) m = c;
    return m;
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以加快速度吗?对于x86/x86_64,我也可以使用汇编代码.

编辑:回复一些评论:
*正在使用的编译器是gcc 4.3.3
*就汇编而言,我只是一个初学者.我在这里要求组装,学习如何做到这一点.:)
*我有四核Intel 64运行,所以支持MMX/SSE等.
*这里很难发布循环,但我可以告诉你它是levenshtein算法的一个高度优化的实现.

这是编译器给我的非内联版本的min:

.globl min
    .type   min, @function
min:
    pushl   %ebp
    movl    %esp, %ebp
    movl    8(%ebp), %edx
    movl    12(%ebp), %eax
    movl    16(%ebp), %ecx
    cmpl    %edx, %eax
    jbe .L2
    movl    %edx, %eax
.L2:
    cmpl    %ecx, %eax
    jbe .L3 …
Run Code Online (Sandbox Code Playgroud)

c performance x86 assembly

20
推荐指数
5
解决办法
2万
查看次数

复杂的多线程代码中的安全网?

作为一名开发人员刚刚在一个项目中编写了数千行复杂的多线程"C"代码,并且将来会被其他几个不熟悉此代码的开发人员进行增强,修改等等,我想找出你们试图在这些代码中添加什么样的安全网?作为一个例子,我可以这样做:

  1. 为锁定保护的结构成员定义访问器宏,该成员声明保持相应的锁定.这清楚地表明,对于不熟悉此代码的任何人,这些成员都受到锁定保护.
  2. 应该使用一些自旋锁调用的函数,断言螺旋锁被保持.

您在已编写的多线程代码中添加了哪些安全网?
当其他开发人员修改此类代码时,您遇到了哪些问题?
你在这些代码中加入了什么样的调试工具?

感谢您的意见.

c debugging multithreading assert kernel

4
推荐指数
1
解决办法
159
查看次数

标签 统计

c ×2

assembly ×1

assert ×1

debugging ×1

kernel ×1

multithreading ×1

performance ×1

x86 ×1