I have created a function which does 64-bit * 64-bit to 128-bit using SIMD. Currently I have implemented it using SSE2 (acutally SSE4.1). This means it does two 64b*64b to 128b products at the same time. The same idea could be extended to AVX2 or AVX512 giving four or eight 64b*64 to 128b products at the same time. I based my algorithm on http://www.hackersdelight.org/hdcodetxt/muldws.c.txt
我创建了一个使用SIMD执行64位* 64位到128位的功能。 目前我已经使用SSE2(强大的SSE4.1)来实现它。 这意味着它可以同时执行两个64b * 64b到128b的产品。 同样的想法可以扩展到AVX2或AVX512,同时提供四个或八个64b * 64到128b的产品。 我在http://www.hackersdelight.org/hdcodetxt/muldws.c.txt上基于我的算法 该算法执行一个无符号乘法,一个有符号乘法和两个有符号*无符号乘法。 使用_mm_mul_epi32和_mm_mul_epu32可
I am writing a soft-multiplication function call using shifting and addition. The existing function call goes like this: unsigned long __mulsi3 (unsigned long a, unsigned long b) { unsigned long answer = 0; while(b) { if(b & 1) { answer += a; }; a <<= 1; b >>= 1; } return answer; } Although my hardware does not
我正在写一个使用移位和加法的软乘法函数调用。 现有的函数调用如下所示: unsigned long __mulsi3 (unsigned long a, unsigned long b) { unsigned long answer = 0; while(b) { if(b & 1) { answer += a; }; a <<= 1; b >>= 1; } return answer; } 虽然我的硬件没有倍增器,但我有一个硬件移位器。 移位器一次可以移位至16位。 如
Given the decimal 71744474 in binary it is 0100010001101011101111011010 what I am trying to extract from this decimal is every seven bits starting from the lower bits. Each of the seven bits are to represent a printable ASCII character which can only have 7 bits. In total I am pulling out four characters. The first character is 1011010 which is Z in ASCII. The next character is w and so on.
给定二进制的71744474 ,它是0100010001101011101111011010我试图从这个小数中提取的是从低位开始的每七位。 七位中的每一位都表示可打印的ASCII字符,只能有7位。 总共我拉出四个字符。 第一个字符是1011010 ,它是ASCII中的Z 下一个字符是w等等。 我想有一种方法可以掩盖我关心一些事情的方式。 使用按位运算符: 0100010001101011101111011010 & 0000000000000000000001111111 = 1011010 要获得第二个角色,请执
Possible Duplicate: Best algorithm to count the number of set bits in a 32-bit integer? Using only ! ~ & ^ | + << >> operators, I need to count the number of bits set in a 32 bit integer while only accessing directly 8 bits. So only 0xaa not 0xaaaa Ex. 0x07 = 3 and 0x05 = 2 I also can only use a max of 40 operators. Right now my solution uses 90 and is: int countBit
可能重复: 计算32位整数中设定位数的最佳算法? 只使用! 〜&^ | + << >>运算符,我需要计数在32位整数中设置的位数,而只能直接访问8位。 所以只有0xaa不是0xaaaa 防爆。 0x07 = 3和0x05 = 2 我最多也只能使用40个操作员。 现在我的解决方案使用90并且是: int countBitsSet(int x) { int count = 0; int mask = 0x01 // 00000001 count = (x & mask); count += (x >> 1) & mask; c
This question already has an answer here: How to count the number of set bits in a 32-bit integer? 50 answers 来自Hacker's Delight的算法(书): int count_bits(long long s) { s = (s&0x5555555555555555L) + ((s>>1)&0x5555555555555555L); s = (s&0x3333333333333333L) + ((s>>2)&0x3333333333333333L); s = (s&0x0F0F0F0F0F0F0F0FL) + ((s>>4)&0x0F
这个问题在这里已经有了答案: 如何计算一个32位整数中的设置位数? 50个答案 来自Hacker's Delight的算法(书): int count_bits(long long s) { s = (s&0x5555555555555555L) + ((s>>1)&0x5555555555555555L); s = (s&0x3333333333333333L) + ((s>>2)&0x3333333333333333L); s = (s&0x0F0F0F0F0F0F0F0FL) + ((s>>4)&0x0F0F0F0F0F0F0F0FL); s = (s&0x00
Possible Duplicate: How to count the number of set bits in a 32-bit integer? Give a unsigned char type value,count the total bits in it.What's the fastest way? I wrote three function as below,what's the best way,and can someone come up with a faster one?(I just want the extremely fast one) const int tbl[] = { #define B2(n) n, n+1, n+1, n+2 #define B4(n) B2(n), B2(n+1), B2(n+1), B2
可能重复: 如何计算一个32位整数中的设置位数? 给一个无符号的char类型值,计算其中的总位数。最快的方法是什么? 我写了如下三个函数,最好的方法是什么,可以有人提出一个更快的方法?(我只想要非常快的方法) const int tbl[] = { #define B2(n) n, n+1, n+1, n+2 #define B4(n) B2(n), B2(n+1), B2(n+1), B2(n+2) #define B6(n) B4(n), B4(n+1), B4(n+1), B4(n+2) B6(0), B6(1), B6(1), B6(2) }; char naivec
Possible Duplicate: Best algorithm to count the number of set bits in a 32-bit integer? Hello, Is there a more compact way of counting the number of ones in a byte without using a loop? I don't want to do the following if I don't have to. Thanks. char myValue = 0x0F; int counter = 0; while (myValue > 0) { if (myValue & 0x01) { counter ++; } myValue = myValue >&
可能重复: 计算32位整数中设定位数的最佳算法? 你好, 有没有更简洁的方式来计算一个字节中的数量而不使用循环? 如果我不需要,我不想做以下事情。 谢谢。 char myValue = 0x0F; int counter = 0; while (myValue > 0) { if (myValue & 0x01) { counter ++; } myValue = myValue >> 1; } ((i>>3)&1)+((i>>2)&1)+((i>>1)&1)+(i&1) 或使用组件(SSE / MMX
Possible Duplicate: Best algorithm to count the number of set bits in a 32-bit integer? Finding out the no. bits sets in a variable is easier. But how could we perform the same operation in fastest method ? 关于Bit Twiddling Hacks的这个页面涵盖了几种技术来计算设置的位数,并讨论了每种技术的性能。 有点唠叨的黑客页面有各种各样的建议。 I highly recommend reading Hacker's Delight for all q
可能重复: 计算32位整数中设定位数的最佳算法? 找出没有。 位变量设置更容易。 但是我们怎样才能以最快的方法执行相同的操作? 关于Bit Twiddling Hacks的这个页面涵盖了几种技术来计算设置的位数,并讨论了每种技术的性能。 有点唠叨的黑客页面有各种各样的建议。 我强烈建议您阅读Hacker's Delight,了解关于各种形式的比特币混淆的所有问题。 为了计算位数,特别是根据您可能获得的指令分析几种算法。
Possible Duplicates: Count the number of set bits in an integer Best algorithm to count the number of set bits in a 32-bit integer? That's an exam question and that is all I have - "Count the number of bits that are "on" in a byte" "On" means 1, I assume. Do I need to create a BitArray, randomly populate it and then iterate through it or is there a differe
可能重复: 计数整数中的设定位数 计算32位整数中设定位数的最佳算法? 这是一个考试问题,这就是我所拥有的 - “在一个字节中”开“的位数是”1“,我假设。 我需要创建一个BitArray,随机填充它,然后遍历它,或者有不同的方式吗? 使用BitArray可能是有效的,但你也可以byte b = ... ; int count = Convert.ToString(b,2).ToCharArray().Count(c => c=='1'); 这是面试问题吗? 对于一个字节,最快的方法是预先计算
Duplicate: Best algorithm to count the number of set bits in a 32-bit integer? Suppose you have a number. Is there any way to count the bits which equals to 1 in binary representation of that number, not using iteration? I mean, is there any way to do it in constant time using some bitwise operators and masks. I need solution which will work well for both architectures 32 bit and 64 bit.
重复: 计算32位整数中设定位数的最佳算法? 假设你有一个号码。 有没有什么方法可以在数字的二进制表示中计数等于1的位,而不是使用迭代? 我的意思是,有没有什么办法可以在一段时间内用一些按位运算符和掩码来做到这一点。 我需要的解决方案将适用于32位和64位两种体系结构。 几乎忘了啊,我需要它用于C语言或汇编语言也不错。 在http://graphics.stanford.edu/~seander/bithacks.html有一个没有循环的计数算法。