1 Reply Latest reply on Aug 4, 2010 10:54 PM by alexeypa

    Reading the local memory buffer continuously hangs the core.

    alexeypa

      Here is a test case that misteriously hangs when we run it:

       

      // BasePtr points to local memory buffer of this core
      CHAR* BasePtr = ((CHAR**)(BlPlatform->RcLocalMemory))[BlGetBeb()->RcCoreId];

       

      // data is in the main memory
      CACHE_ALIGNED OptionData data[NUM_BASE_OPTIONS];

       

      for (i=0; i<(10000000); i++) {
          if (i % 1000 == 0) {
              printf("In Iteration: %d\n", i);
          }

       

          // BlRcMpbCopyCacheLines is a memcpy (rep movsd) protected by cli/sti
          BlRcMpbCopyCacheLines(
                  data,
                  BasePtr,
                  sizeof(OptionData));
      }

       

      It continuously copies the same 96 bytes from local memory buffer (located on the same tile as the core running the code) to the man memory. BasePtr is mapped as CACHEDISABLE. data is mapped as WRITEBACK. Bypass is disabled in the LUT entry that corresponds to BasePtr.

       

      We consistently see that the core hangs after about 55132 iterations. We don't see any exceptions thrown by this code. Do you have any good ideas how to explain it?