Click here to Skip to main content
15,917,321 members
Home / Discussions / C#
   

C#

 
GeneralRe: MultiThread and File process Pin
Luc Pattyn15-Jan-10 5:13
sitebuilderLuc Pattyn15-Jan-10 5:13 
AnswerRe: MultiThread and File process Pin
Alaric Dailey15-Jan-10 6:00
Alaric Dailey15-Jan-10 6:00 
GeneralRe: MultiThread and File process Pin
AlexB4717-Jan-10 20:45
AlexB4717-Jan-10 20:45 
GeneralRe: MultiThread and File process Pin
Alaric Dailey18-Jan-10 4:37
Alaric Dailey18-Jan-10 4:37 
QuestionSystem.InvalidCastException Query Pin
DwR15-Jan-10 2:45
DwR15-Jan-10 2:45 
AnswerRe: System.InvalidCastException Query Pin
DwR16-Jan-10 2:45
DwR16-Jan-10 2:45 
AnswerRe: System.InvalidCastException Query Pin
Eddy Vluggen17-Jan-10 10:50
professionalEddy Vluggen17-Jan-10 10:50 
GeneralRe: System.InvalidCastException Query Pin
FenixTX10-Feb-10 3:52
FenixTX10-Feb-10 3:52 
GeneralRe: System.InvalidCastException Query Pin
Eddy Vluggen10-Feb-10 4:18
professionalEddy Vluggen10-Feb-10 4:18 
QuestionTrap and Read magnetic tripe card reader [modified] Pin
Kaikus14-Jan-10 23:57
Kaikus14-Jan-10 23:57 
AnswerRe: Trap and Read magnetic tripe card reader Pin
OriginalGriff15-Jan-10 0:24
mveOriginalGriff15-Jan-10 0:24 
AnswerRe: Trap and Read magnetic tripe card reader Pin
Roger Wright15-Jan-10 17:29
professionalRoger Wright15-Jan-10 17:29 
QuestionApplication Domain Pin
dataminers14-Jan-10 23:24
dataminers14-Jan-10 23:24 
AnswerRe: Application Domain Pin
EliottA15-Jan-10 2:44
EliottA15-Jan-10 2:44 
AnswerRe: Application Domain Pin
Eddy Vluggen15-Jan-10 3:11
professionalEddy Vluggen15-Jan-10 3:11 
GeneralRe: Application Domain Pin
dataminers15-Jan-10 9:50
dataminers15-Jan-10 9:50 
GeneralRe: Application Domain Pin
Eddy Vluggen15-Jan-10 11:17
professionalEddy Vluggen15-Jan-10 11:17 
GeneralRe: Application Domain Pin
dataminers16-Jan-10 2:23
dataminers16-Jan-10 2:23 
GeneralRe: Application Domain Pin
Eddy Vluggen16-Jan-10 8:50
professionalEddy Vluggen16-Jan-10 8:50 
GeneralRe: Application Domain Pin
dataminers15-Jan-10 10:31
dataminers15-Jan-10 10:31 
QuestionCaching powers of 2 -- performance consideration Pin
Lutosław14-Jan-10 22:36
Lutosław14-Jan-10 22:36 
AnswerRe: BitVector performance question [modified] Pin
Covean14-Jan-10 23:00
Covean14-Jan-10 23:00 
return (ulong)1 << (i % BITS_IN_WORD);


1. Should not be that slow that you have to do this.
But if you need to access it very often or in "long" loops I would cache it, because 0,5kB aren't that amount of memory. Big Grin | :-D

Edit: After I took a deeper look I would say caching those values would be not faster than your function.
Thats because of the fact, that you have to do the modulo calculation (what consumes the most time in
part of code) also in the cached variant.

Here some pseudo asm that shows what I mean

CreateMask Version:
movzx  rax, bit
xor    rdx, rdx
div    64  // = BITS_IN_WORD
mov    cl, dl
movzx  rax, bit
shl    rax, cl

In this code div is the slowest instruction, all other intructions are very fast!

Cached Version: (I assumed that the cached items are seq. stored in the memory)
movzx  rax, bit
xor    rdx, rdx
div    64     // = BITS_IN_WORD
shl    rdx, 3 // *= 8 (rdx = offset of the entry in mem)
add    rdx, (pointer to the "table" in memory)
mov    rax, [rdx]


As you see there is no real difference between both!


2. You have build an 64 bit indexer to be not so limited but on the other hand you have limited your GetBit function only to be able to access 2147483648 bits!
So I would guess you should use public bool GetBit(long bit) instead of public bool GetBit(int bit).

Greetings
Covean

modified on Friday, January 15, 2010 5:47 AM

GeneralRe: BitVector performance question Pin
Lutosław14-Jan-10 23:55
Lutosław14-Jan-10 23:55 
GeneralRe: BitVector performance question Pin
Covean15-Jan-10 0:09
Covean15-Jan-10 0:09 
GeneralRe: BitVector performance question Pin
Lutosław15-Jan-10 0:33
Lutosław15-Jan-10 0:33 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.