2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Является ли вызов функций барьером памяти в С++?
Сообщение02.12.2018, 17:50 


28/07/13
165
Является ли вызов функций барьером памяти в С++? Другими словами, есть ли разница между
Код:
f();

и
Код:
asm volatile ("" ::: "memory");
f();
asm volatile ("" ::: "memory");

В особенности интересует, если f() будет инлайн, а так же включена link-time оптимизация. Я пытался читать стандарт по ключевым словам "sequence point", но там написано слишком замудрённо для моего уровня английского.

 Профиль  
                  
 
 Re: Является ли вызов функций барьером памяти в С++?
Сообщение02.12.2018, 19:18 
Заслуженный участник


27/04/09
28128
А тут описание подойдёт?: https://en.wikipedia.org/wiki/Sequence_point#Sequence_points_in_C_and_C++. Части 3, 4, 5. Тут достаточно 3, потому что у вас вызов — отдельная инструкция, так что в конце предыдущей и в конце этой должны быть sequence points, но 4 и 5 в общем случае тоже в кассу.

Правда, про заинлайненные функции всё равно не написано. Но хоть ссылки на стандарт в самом начале раздела указаны — может, там точнее.

user14284 в сообщении #1358198 писал(а):
Я пытался читать стандарт по ключевым словам "sequence point", но там написано слишком замудрённо для моего уровня английского.
Скопируйте сюда куски, которые, вам кажется, связаны — может кто-нибудь переведёт. :-)

 Профиль  
                  
 
 Re: Является ли вызов функций барьером памяти в С++?
Сообщение02.12.2018, 19:30 


28/07/13
165
Как я понял, sequence point это более слабое понятие, чем барьер памяти. Потому что законченное выражение с точкой запятой это sequence point, но оптимизатор спокойно может их мешать, объединять и выкидывать.

Нашел вот это. Если я правильно понял, барьером являюся только вызовы внешних функций, о реализации которых компилятор не знает. А статические функции (и даже внешние функции со статической линковкой, если включена link-time оптимизация) компилятор вправе оптимизировать как хочет.

 Профиль  
                  
 
 Re: Является ли вызов функций барьером памяти в С++?
Сообщение02.12.2018, 20:34 
Аватара пользователя


10/10/18
754
At Home
volatile, memory barrier, sequence point -- это три совершенно разные вещи.

Вот немного про барьеры:
http://rsdn.org/forum/cpp/3734032.1
http://www.1024cores.net/home/in-russia ... m-eee-edat

На английском:
https://stackoverflow.com/questions/178 ... d-volatile

 Профиль  
                  
 
 Re: Является ли вызов функций барьером памяти в С++?
Сообщение02.12.2018, 21:14 
Заслуженный участник


27/04/09
28128
user14284 в сообщении #1358220 писал(а):
Как я понял, sequence point это более слабое понятие, чем барьер памяти. Потому что законченное выражение с точкой запятой это sequence point, но оптимизатор спокойно может их мешать, объединять и выкидывать.
Понятно. Я плохо вчитался. :|

 Профиль  
                  
 
 Re: Является ли вызов функций барьером памяти в С++?
Сообщение08.03.2019, 03:24 
Аватара пользователя


07/02/12
1433
Питер
Вероятно, было бы продуктивнее обсудить конкретную задачу (с кодом) и проблемы с ней связанные, нежели упражняться в терминологии :D А вообще говоря - нет, никакой синхронизации общей памяти (в мультипроцессорном смысле) вызов функции давать не обязан.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group