This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Software Transactional Memory Example

Hi,

I have some Problems withe the Example of the Software Transactional Memory form http://processors.wiki.ti.com/images/4/43/SW_TransMem_demo.zip

The first round works fine, but the second round gets somehow mixed up. All cores tell me that each core counts mor than 60 times, but the final counter value seems to be correct.

This is what I get as console output:

[C66xx_6] Core 6 -> done  num counts: 14 time: 66679
[C66xx_1] Core 1 -> done  num counts: 15 time: 66803
[C66xx_2] Core 2 -> done  num counts: 15 time: 66653
[C66xx_4] Core 4 -> done  num counts: 14 time: 66647
[C66xx_3] Core 3 -> done  num counts: 14 time: 66627
[C66xx_5] Core 5 -> done  num counts: 14 time: 66665
[C66xx_7] Core 7 -> done  num counts: 14 time: 66701
[C66xx_0] Final gcount : 100 Total time: 67353
[C66xx_0] Start over
[C66xx_0]  
[C66xx_0]  
[C66xx_1] Core 1 -> done  num counts: 71 time: 55932
[C66xx_2] Core 2 -> done  num counts: 71 time: 56455
[C66xx_3] Core 3 -> done  num counts: 69 time: 56163
[C66xx_4] Core 4 -> done  num counts: 69 time: 56070
[C66xx_5] Core 5 -> done  num counts: 70 time: 55947
[C66xx_6] Core 6 -> done  num counts: 69 time: 55812
[C66xx_7] Core 7 -> done  num counts: 71 time: 55830
[C66xx_0] Final gcount : 100 Total time: 538
[C66xx_0] Start over

The Problem with the different time values for Core0 and the other Cores is due to the last printf-statements for Core0 after the last barrier

The problem could be solved when a third barrier is entered after last printf-statement of core0:

    if (coreNum == 0){
           //time2 = TSCL;
           printf ("Final gcount : %d Total time: %d\n", gcount, time2-time1);
           //printf("time2=%d, time1=%d\n", time2, time1);

        printf ("Start over \n \n \n");
    }
    Sync_barrier(BARRIER3, (unsigned int)&monolithicDesc[0x200+(coreNum*0x10)]);

Now the time values are correct and also the num count values are correct:

[C66xx_6] Core 6 -> done  num counts: 14 time: 66679
[C66xx_1] Core 1 -> done  num counts: 15 time: 66803
[C66xx_2] Core 2 -> done  num counts: 15 time: 66653
[C66xx_3] Core 3 -> done  num counts: 14 time: 66627
[C66xx_4] Core 4 -> done  num counts: 14 time: 66647
[C66xx_5] Core 5 -> done  num counts: 14 time: 66665
[C66xx_7] Core 7 -> done  num counts: 14 time: 66701
[C66xx_0] Final gcount : 100 Total time: 67353
[C66xx_0] Start over
[C66xx_0]  
[C66xx_0]  
[C66xx_6] Core 6 -> done  num counts: 14 time: 66673
[C66xx_1] Core 1 -> done  num counts: 15 time: 66799
[C66xx_2] Core 2 -> done  num counts: 15 time: 66649
[C66xx_3] Core 3 -> done  num counts: 14 time: 66623
[C66xx_4] Core 4 -> done  num counts: 14 time: 66643
[C66xx_5] Core 5 -> done  num counts: 14 time: 66661
[C66xx_7] Core 7 -> done  num counts: 14 time: 66691
[C66xx_0] Final gcount : 100 Total time: 67349
[C66xx_0] Start over

Even though I do not understand why the num count values of each core are so messed up in the original example.

Regards Fabian