Hi, Srikanth,

The code you have here only sets three bits to 1 for each bitmap,
however the two bitmaps you showed in earlier message has 25 ones and
7 ones respectively.  What are the operations you performed on these
bitmaps with only 3 ones each to generate the ones with 25 ones?

Which java wrapper are you using?

John


On 5/7/13 12:44 AM, Srikanth Sundarrajan wrote:
> Test it is a test code. Test is in Java, so sending you the relevant
> pieces that will allow you to stitch them together. Should you need
> further information, please do let me know.
> 
> Test Code:
> 
> @Test
>     public void testBitmapThreadSafety() throws Exception {
>         PrintStream debug;
>         if (new File("target").exists()) {
>             debug = new PrintStream("target/debug.txt");
>         } else {
>             debug = new PrintStream("store/target/debug.txt");
>         }
>         try {
>             FastbitWrapper.debug(debug);
>             final int rows = 1000;
>             final int threads = 6;
>             final int bitMapMaxSize = 4096;
>             final ConcurrentMap<Integer, Pair<AtomicInteger, Bitmap>>
> map =
>                     new ConcurrentHashMap<Integer, Pair<AtomicInteger,
> Bitmap>>();
>             ScheduledThreadPoolExecutor executor = new
> ScheduledThreadPoolExecutor(threads);
>             for (int index = 0; index < rows; index++) {
>                 Random random = new Random();
>                 Bitmap bitmap = getBitmap(random, bitMapMaxSize);
>                 map.put(index, Pair.of(new AtomicInteger(0), bitmap));
>             }
> 
>             Runnable bitmapManipulator = new Runnable() {
>                 @Override
>                 public void run() {
>                     for (int counter = 0; counter < 5000; counter++) {
>                         Random random = new Random();
>                         int key = random.nextInt(rows);
>                         Bitmap bitmap = map.get(key).second;
>                         map.get(key).first.incrementAndGet();
>                         Bitmap tmp = getBitmap(random, bitMapMaxSize);
>                         int op = random.nextInt(8);
>                         switch (op) {
>                             case 0:
>                                 bitmap.and(tmp);
>                                 break;
>                             case 1:
>                                 bitmap.xor(tmp);
>                                 break;
>                             case 2:
>                                 bitmap.or(tmp);
>                                 break;
>                             case 3:
>                                 bitmap.flip();
>                                 break;
>                             case 4:
>                                 long pos = random.nextInt(bitMapMaxSize);
>                                 bitmap.setBit(pos);
>                                 break;
>                             case 5:
>                                 long unsetpos =
> random.nextInt(bitMapMaxSize);
>                                 bitmap.unsetBit(unsetpos);
>                                 break;
>                             case 6:
>                                 long getPos =
> random.nextInt(bitMapMaxSize);
>                                 bitmap.get(getPos);
>                                 break;
>                             case 7:
>                                 bitmap.cardinality();
>                                 break;
>                             default:
>                         }
>                         BitmapUtils.closeBitmap(tmp);
>                     }
>                 }
>             };
> 
>             for (int counter = 0; counter < threads; counter++) {
>                 executor.schedule(bitmapManipulator, 0,
> TimeUnit.MILLISECONDS);
>             }
>             while (executor.getCompletedTaskCount() < threads) {
>                 Thread.sleep(500);
>             }
> 
>             for (Pair<AtomicInteger, Bitmap> pair : map.values()) {
>                 BitmapUtils.closeBitmap(pair.second);
>             }
>         } finally {
>             debug.close();
>         }
>     } 
> 
>     private Bitmap getBitmap(Random random, long bitMapMaxSize) {
>         Bitmap bitmap =
> BitmapFactory.getInstance().newBitmap(bitMapMaxSize);
>         int quarter = (int) bitMapMaxSize / 4;
>         int bits[] = new int[] {random.nextInt(quarter), quarter +
> random.nextInt(quarter),
>                                 quarter * 2 + random.nextInt(quarter)};
>         bitmap.setBit(bits[0]);
>         bitmap.setBit(bits[1]);
>         bitmap.setBit(bits[2]);
>         return bitmap;
>     }
> 
> public final class BitmapFactory {
> 
>     private static final BitmapFactory INSTANCE = new BitmapFactory();
> 
>     private BitmapFactory() {
>     }
> 
>     public static BitmapFactory getInstance() {
>         return INSTANCE;
>     }
>     public Bitmap newBitmap(long bits) {
>         return new FastbitWrapper(bits);
>     }
> }
> 
> 
> 
> 
> On Tue, May 7, 2013 at 12:45 PM, K. John Wu <[email protected]
> <mailto:[email protected]>> wrote:
> 
>     Hi, Srikanth,
> 
>     Thanks for the information.  I suspect that the problem is
>     ibis::bitvector64::setBit, but can not spot the problem with a code
>     review.  So it looks like I will have to dig a little deeper.
> 
>     Sounds you are using a test program, not involving any sensitive data.
>      Would you mind share that the test code with me?
> 
>     John
> 
> 
>     On 5/6/13 11:48 PM, Srikanth Sundarrajan wrote:
>     > Thanks much for looking into this so quickly.
>     >
>     > This is part of a unit test to verify the thread safety of the
>     > bitvector class in java. The unit test essentially creates a fixed
>     > number of bitvector 64 objects each of size 4096 bits through the
>     > function below.
>     >
>     > JNIEXPORT jlong JNICALL
>     > Java_com_inmobi_shadowfax_FastbitWrapper_IcreateBitset
>     >   (JNIEnv *env, jobject obj, jlong numbits) {
>     >
>     > ibis::bitvector64* bitsetptr = new ibis::bitvector64();
>     > bitsetptr->setBit((long)numbits, 0);
>     >
>     > return (long)bitsetptr;
>     > }
>     >
>     > and 3 random bits are set using the following set method
>     >
>     > JNIEXPORT void JNICALL
>     Java_com_inmobi_shadowfax_FastbitWrapper_IsetBit
>     > (JNIEnv *env, jobject obj, jlong bitsetptr, jlong pos) {
>     >
>     > ((ibis::bitvector64*)bitsetptr)->setBit(pos, 1);
>     >
>     > }
>     >
>     > on this bit map a series of bit operations are performed from
>     parallel
>     > threads in java
>     >
>     > Implementations of and/or/xor are given below
>     >
>     > JNIEXPORT void JNICALL Java_com_inmobi_shadowfax_FastbitWrapper_Iand
>     > (JNIEnv *env, jobject obj, jlong targetbitsetptr, jlong
>     sourcebitsetptr) {
>     >
>     
> ((ibis::bitvector64*)targetbitsetptr)->operator&=(*(ibis::bitvector64*)sourcebitsetptr);
>     > }
>     >
>     > JNIEXPORT void JNICALL Java_com_inmobi_shadowfax_FastbitWrapper_Ior
>     > (JNIEnv *env, jobject obj, jlong targetbitsetptr, jlong
>     sourcebitsetptr) {
>     >
>     
> ((ibis::bitvector64*)targetbitsetptr)->operator|=(*(ibis::bitvector64*)sourcebitsetptr);
>     > }
>     >
>     >
>     > JNIEXPORT void JNICALL Java_com_inmobi_shadowfax_FastbitWrapper_Ixor
>     > (JNIEnv *env, jobject obj, jlong targetbitsetptr, jlong
>     sourcebitsetptr) {
>     >
>     
> ((ibis::bitvector64*)targetbitsetptr)->operator^=(*(ibis::bitvector64*)sourcebitsetptr);
>     > }
>     >
>     >
>     > Regards
>     > Srikanth Sundarrajan
>     >
>     >
>     > On Tue, May 7, 2013 at 12:13 PM, K. John Wu <[email protected]
>     <mailto:[email protected]>
>     > <mailto:[email protected] <mailto:[email protected]>>> wrote:
>     >
>     >     Hi, Srikanth,
>     >
>     >     I can verify that the problem was caused by those two unexpected
>     >     words.  This appears to be a flaw in the design of the
>     compression
>     >     scheme that left some special cases unhandled.  Since it would
>     >     introduce extra cost to handle this special case, it might be
>     >     worthwhile to figure out how to prevent it being generated
>     in the
>     >     first place.  Would you be willing to explain how you
>     generate those
>     >     bitvector64 objects?
>     >
>     >     Thanks.
>     >
>     >     John
>     >
>     >
>     >
>     >     On 5/6/13 10:22 PM, Srikanth Sundarrajan wrote:
>     >     > Hi,
>     >     >     I am fairly new to fasbit and have been using it for
>     around a
>     >     > month. Have been running into  an issue with or_c2 &
>     xor_c2 when run
>     >     > at scale from parallel threads (am using fastbit lib via jni
>     >     from java).
>     >     >
>     >     > The error looks something like
>     >     >
>     >     > ERROR bitvector64::or_c2 -- serious problem here ...
>     >     > terminate called throwing an exception
>     >     > Error -- bitvector64::or_c2 expects to exhaust i0 but
>     there are -159
>     >     > word(s) left
>     >     >
>     >     > I tried adding print statement to print the copy (deep) of the
>     >     > original lhs & rhs value of the bitmaps and looks like the
>     bitmaps
>     >     > weren't mutated while the function was running.
>     >     >
>     >     > lhs - copy of original
>     >     >
>     >     > This bitvector64 stores 4095 bits of a 4097-bit (25 set)
>     >     sequence in a
>     >     > 36-word array and 2 bits in the active word
>     >     > 0    0    1    1    2    2    3    3    4    4    5    5    6
>     >     >
>     012345678901234567890123456789012345678901234567890123456789012
>     >     >
>     ---------------------------------------------------------------
>     >     >
>     >    
>     
> 00000000000000000000000000000000000000000000000000000000000000000000000000000000
>     >     >
>     >    
>     
> 14000000000000000100000000000000000000000000000000000000000000000000000000000000
>     >     > 28000000000000002126*0
>     >     >
>     >    
>     
> 30000000000000040000000000000000000000000000000000000000000000000000000001000000
>     >     > 4800000000000000163*0
>     >     >
>     >    
>     
> 50020000000000000000000000100000000000000000000000000000000000000000000000000000
>     >     >
>     >    
>     
> 60004000000000000000000000000100000000000000000000000000000000000000000000000000
>     >     >
>     >    
>     
> 70000001000000000000000000000000000000000001000000000000000000000000000000000000
>     >     >
>     >    
>     
> 80000002000000044000000000000000000000000010000000000000000000000000000001000100
>     >     > 980000000000000000*0
>     >     >
>     >    
>     
> 100000001000000000000000000000000000000000001000000000000000000000000000000000000
>     >     > 118000000000000004252*0
>     >     >
>     >    
>     
> 120000400000000000000000000000000010000000000000000000000000000000000000000000000
>     >     > 138000000000000002126*0
>     >     >
>     >    
>     
> 140000008000000000000000000000000000000001000000000000000000000000000000000000000
>     >     >
>     >    
>     
> 150040000000000020000000001000000000000000000000000000000000000000000000000100000
>     >     > 1680000000000000000*0
>     >     >
>     >    
>     
> 170000000000080000000000000000000000000000000000000000000000010000000000000000000
>     >     > 18800000000000000163*0
>     >     >
>     >    
>     
> 190000000000102000000000000000000000000000000000000000000000100000010000000000000
>     >     >
>     >    
>     
> 200000000000000000000000000000000000000000000000000000000000000000000000000000000
>     >     >
>     >    
>     
> 210000000000800000000000000000000000000000000000000000000100000000000000000000000
>     >     > 228000000000000002126*0
>     >     >
>     >    
>     
> 230000000002000000000000000000000000000000000000000000010000000000000000000000000
>     >     > 248000000000000004252*0
>     >     >
>     >    
>     
> 250000000100000000000000000000000000000000000000100000000000000000000000000000000
>     >     > 268000000000000002126*0
>     >     >
>     >    
>     
> 270000000000020000000000000000000000000000000000000000000000000100000000000000000
>     >     > 28800000000000000163*0
>     >     >
>     >    
>     
> 290000000000001800000000000000000000000000000000000000000000000000001100000000000
>     >     >
>     >    
>     
> 300000000004000000000000000000000000000000000000000000100000000000000000000000000
>     >     > 31800000000000000163*0
>     >     >
>     >    
>     
> 320000000080000000000000000000000000000000000000010000000000000000000000000000000
>     >     > 338000000000000006378*0
>     >     >
>     >    
>     
> 340000010000000000000000000000000000000010000000000000000000000000000000000000000
>     >     > 3580000000000000111071*0
>     >     > 000000000000000000
>     >     >
>     >     > lhs - original
>     >     >
>     >     > This bitvector64 stores 4095 bits of a 4097-bit (25 set)
>     >     sequence in a
>     >     > 36-word array and 2 bits in the active word
>     >     > 0    0    1    1    2    2    3    3    4    4    5    5    6
>     >     >
>     012345678901234567890123456789012345678901234567890123456789012
>     >     >
>     ---------------------------------------------------------------
>     >     >
>     >    
>     
> 00000000000000000000000000000000000000000000000000000000000000000000000000000000
>     >     >
>     >    
>     
> 14000000000000000100000000000000000000000000000000000000000000000000000000000000
>     >     > 28000000000000002126*0
>     >     >
>     >    
>     
> 30000000000000040000000000000000000000000000000000000000000000000000000001000000
>     >     > 4800000000000000163*0
>     >     >
>     >    
>     
> 50020000000000000000000000100000000000000000000000000000000000000000000000000000
>     >     >
>     >    
>     
> 60004000000000000000000000000100000000000000000000000000000000000000000000000000
>     >     >
>     >    
>     
> 70000001000000000000000000000000000000000001000000000000000000000000000000000000
>     >     >
>     >    
>     
> 80000002000000044000000000000000000000000010000000000000000000000000000001000100
>     >     > 980000000000000000*0
>     >     >
>     >    
>     
> 100000001000000000000000000000000000000000001000000000000000000000000000000000000
>     >     > 118000000000000004252*0
>     >     >
>     >    
>     
> 120000400000000000000000000000000010000000000000000000000000000000000000000000000
>     >     > 138000000000000002126*0
>     >     >
>     >    
>     
> 140000008000000000000000000000000000000001000000000000000000000000000000000000000
>     >     >
>     >    
>     
> 150040000000000020000000001000000000000000000000000000000000000000000000000100000
>     >     > 1680000000000000000*0
>     >     >
>     >    
>     
> 170000000000080000000000000000000000000000000000000000000000010000000000000000000
>     >     > 18800000000000000163*0
>     >     >
>     >    
>     
> 190000000000102000000000000000000000000000000000000000000000100000010000000000000
>     >     >
>     >    
>     
> 200000000000000000000000000000000000000000000000000000000000000000000000000000000
>     >     >
>     >    
>     
> 210000000000800000000000000000000000000000000000000000000100000000000000000000000
>     >     > 228000000000000002126*0
>     >     >
>     >    
>     
> 230000000002000000000000000000000000000000000000000000010000000000000000000000000
>     >     > 248000000000000004252*0
>     >     >
>     >    
>     
> 250000000100000000000000000000000000000000000000100000000000000000000000000000000
>     >     > 268000000000000002126*0
>     >     >
>     >    
>     
> 270000000000020000000000000000000000000000000000000000000000000100000000000000000
>     >     > 28800000000000000163*0
>     >     >
>     >    
>     
> 290000000000001800000000000000000000000000000000000000000000000000001100000000000
>     >     >
>     >    
>     
> 300000000004000000000000000000000000000000000000000000100000000000000000000000000
>     >     > 31800000000000000163*0
>     >     >
>     >    
>     
> 320000000080000000000000000000000000000000000000010000000000000000000000000000000
>     >     > 338000000000000006378*0
>     >     >
>     >    
>     
> 340000010000000000000000000000000000000010000000000000000000000000000000000000000
>     >     > 3580000000000000111071*0
>     >     > 000000000000000000
>     >     >
>     >     > rhs - copy of original
>     >     >
>     >     > This bitvector64 stores 4095 bits of a 4097-bit (3 set)
>     sequence
>     >     in a
>     >     > 7-word array and 2 bits in the active word
>     >     > 0    0    1    1    2    2    3    3    4    4    5    5    6
>     >     >
>     012345678901234567890123456789012345678901234567890123456789012
>     >     >
>     ---------------------------------------------------------------
>     >     > 0800000000000000e882*0
>     >     >
>     >    
>     
> 10000000000040000000000000000000000000000000000000000000000001000000000000000000
>     >     > 28000000000000005315*0
>     >     >
>     >    
>     
> 30000010000000000000000000000000000000010000000000000000000000000000000000000000
>     >     > 4800000000000001a1638*0
>     >     >
>     >    
>     
> 50000080000000000000000000000000000010000000000000000000000000000000000000000000
>     >     > 680000000000000111071*0
>     >     > 000000000000000000
>     >     >
>     >     > rhs - original
>     >     >
>     >     > This bitvector64 stores 4095 bits of a 4097-bit (3 set)
>     sequence
>     >     in a
>     >     > 7-word array and 2 bits in the active word
>     >     > 0    0    1    1    2    2    3    3    4    4    5    5    6
>     >     >
>     012345678901234567890123456789012345678901234567890123456789012
>     >     >
>     ---------------------------------------------------------------
>     >     > 0800000000000000e882*0
>     >     >
>     >    
>     
> 10000000000040000000000000000000000000000000000000000000000001000000000000000000
>     >     > 28000000000000005315*0
>     >     >
>     >    
>     
> 30000010000000000000000000000000000000010000000000000000000000000000000000000000
>     >     > 4800000000000001a1638*0
>     >     >
>     >    
>     
> 50000080000000000000000000000000000010000000000000000000000000000000000000000000
>     >     > 680000000000000111071*0
>     >     > 000000000000000000
>     >     >
>     >     > Any guiding pointers are appreciated.
>     >     >
>     >     > Regards
>     >     > Srikanth Sundarrajan
>     >     >
>     >     >
>     >     >
>     >     > _____________________________________________________________
>     >     > The information contained in this communication is intended
>     >     solely for
>     >     > the use of the individual or entity to whom it is
>     addressed and
>     >     others
>     >     > authorized to receive it. It may contain confidential or
>     legally
>     >     > privileged information. If you are not the intended recipient
>     >     you are
>     >     > hereby notified that any disclosure, copying, distribution
>     or taking
>     >     > any action in reliance on the contents of this information is
>     >     strictly
>     >     > prohibited and may be unlawful. If you have received this
>     >     > communication in error, please notify us immediately by
>     >     responding to
>     >     > this email and then delete it from your system. The firm
>     is neither
>     >     > liable for the proper and complete transmission of the
>     information
>     >     > contained in this communication nor for any delay in its
>     receipt.
>     >     >
>     >     >
>     >     > _______________________________________________
>     >     > FastBit-users mailing list
>     >     > [email protected]
>     <mailto:[email protected]>
>     <mailto:[email protected]
>     <mailto:[email protected]>>
>     >     > https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>     >     >
>     >
>     >
>     >
>     > _____________________________________________________________
>     > The information contained in this communication is intended
>     solely for
>     > the use of the individual or entity to whom it is addressed and
>     others
>     > authorized to receive it. It may contain confidential or legally
>     > privileged information. If you are not the intended recipient
>     you are
>     > hereby notified that any disclosure, copying, distribution or taking
>     > any action in reliance on the contents of this information is
>     strictly
>     > prohibited and may be unlawful. If you have received this
>     > communication in error, please notify us immediately by
>     responding to
>     > this email and then delete it from your system. The firm is neither
>     > liable for the proper and complete transmission of the information
>     > contained in this communication nor for any delay in its receipt.
> 
> 
> 
> _____________________________________________________________
> The information contained in this communication is intended solely for
> the use of the individual or entity to whom it is addressed and others
> authorized to receive it. It may contain confidential or legally
> privileged information. If you are not the intended recipient you are
> hereby notified that any disclosure, copying, distribution or taking
> any action in reliance on the contents of this information is strictly
> prohibited and may be unlawful. If you have received this
> communication in error, please notify us immediately by responding to
> this email and then delete it from your system. The firm is neither
> liable for the proper and complete transmission of the information
> contained in this communication nor for any delay in its receipt.
_______________________________________________
FastBit-users mailing list
[email protected]
https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users

Reply via email to