Re: A question about "4.3.4.2 A Volatile Solution" of perfbook

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Nov 11, 2024, at 15:45, Nan Xiao <xiaonan830818@xxxxxxxxx> wrote:
> 
> Hello,
> 
> Greetings from me!
> 
> I am reading "4.3.4.2 A Volatile Solution" of perfbook, and come
> across following summary:
> 
>    To summarize, the volatile keyword can prevent load tearing and
> store tearing in cases where the loads and stores are machine-sized
> and properly aligned. It can also prevent load fusing, store fusing,
> invented loads, and invented stores. ...
> 
> At first I thought it means accessing volatile, aligned and
> machine-sized data is atomic operation, so I wrote a small test
> program to test on a "64-bit" Linux server:
> 
> #include <pthread.h>
> #include <stdio.h>
> #include <stdatomic.h>
> #include <stdint.h>
> 
> 
> volatile uint64_t sum;
> atomic_ullong atomic_sum;
> 
> 
> void *thread(void *arg)
> {
> 
>    for (int i = 0; i < 100000; i++)
> 
>    {
> 
>        sum++;
> 
>        atomic_fetch_add(&atomic_sum, 1);
> 
>    }
> 
>    return NULL;
> 
> }
> 
> 
> int main()
> {
> 
>    pthread_t tid[4];
> 
>    for (int i = 0; i < sizeof(tid) / sizeof(tid[0]); i++)
> 
>    {
> 
>        pthread_create(&tid[i], NULL, thread, NULL);
> 
>    }
> 
> 
>    for (int i = 0; i < sizeof(tid) / sizeof(tid[0]); i++)
> 
>    {
> 
>        pthread_join(tid[i], NULL);
> 
>    }
> 
> 
>    printf("sum=%llu,atomic_sum=%llu\n", sum, atomic_sum);
> 
>    return 0;
> 
> }
> 
> But the result seems not:
> 
> $ gcc -pthread -O3 parallel.c -o parallel
> $ ./parallel
> sum=221785,atomic_sum=400000
> $ gcc --version
> gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-22)
> Copyright (C) 2018 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> 
> So my understanding is: volatile doesn't guarantee the atomic
> operation for aligned, machine-sized data, and we can only use
> atomic_xxx data types and related functions to guarantee atomic
> operations. Is my understanding correct? Or I misunderstood volatile?
> Thanks very much in advance!

Atomic doesn’t mean cache coherence.

> 
> Best Regards
> Nan Xiao
> 






[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux