|
for(int i=0; i<stride/2; ++i){ |
|
dir->_[loc+stride/2+i] = s[1]; |
|
} |
|
#ifdef INPLACE |
|
clflush((char*)&dir->_[loc+stride/2], sizeof(void*)*stride/2); |
|
#else |
|
for(int i=0; i<stride/2; ++i){ |
|
dir->_[loc+i] = s[0]; |
|
} |
|
clflush((char*)&dir->_[loc], sizeof(void*)*stride); |
|
#endif |
Hi, I have a question about Failure-Atomic Segment Split. In your paper, you states that
we update the directory entries from right to left. The ordering of these updates must be enforced by inserting an mfence instruction in between each instruction. Also, we must call clflush when it crosses the boundary of cache- lines.
However, here you just update the directory from the left to right without fence and just call clflush at last. I wonder if there is anything wrong about my understanding of your paper or your codes.
CCEH/src/CCEH_MSB.cpp
Lines 345 to 355 in 46771e3
Hi, I have a question about Failure-Atomic Segment Split. In your paper, you states that
we update the directory entries from right to left. The ordering of these updates must be enforced by inserting an mfence instruction in between each instruction. Also, we must call clflush when it crosses the boundary of cache- lines.
However, here you just update the directory from the left to right without fence and just call clflush at last. I wonder if there is anything wrong about my understanding of your paper or your codes.