Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

oneTBB: assert isMallocInitialized() #1

Open
phprus opened this issue Jan 6, 2022 · 1 comment
Open

oneTBB: assert isMallocInitialized() #1

phprus opened this issue Jan 6, 2022 · 1 comment

Comments

@phprus
Copy link

phprus commented Jan 6, 2022

Добрый день!

Первоначально я написал это в комментарии к коммиту, но чтобы там не затерялось, выношу в issue.

Проблема

+#ifdef __e2k__
+ // FIXME: many tests failing, first one is "conformance_join_node"
+ // internalPoolFree -> assert isMallocInitialized()
+ bool success = false;
+#else
bool success = dynamic_link(MALLOCLIB_NAME, MallocLinkTable, 4);
+#endif

может быть связана связана с инициализацией переменной mallocInitialized:
https://github.com/oneapi-src/oneTBB/blob/0815661e4c08e4fcaf772d31c1313c63d629a32e/src/tbbmalloc/frontend.cpp#L1944

Багрепорт: oneapi-src/oneTBB#558

Инициализация std::atomic<> с помощью {0} не потокобезопасна в C++11 и новее. Если инициализация и первое использование окажутся в разных потоках, то значение может быть перезаписано и будет ошибка.

Для Visual Studio помогает удаление {0}, но это тоже не совсем согласуется со стандартом (код с удаленным {0} проходит все тесты на GCC-7,8,9,10, Clang 10,11,12 и в соответствующих AppleClang).
В C++20 есть std::atomic_ref, но он поддерживается очень не всеми компиляторами.

@ilyakurdyukov
Copy link
Owner

Я видел. Но как-бы это патч не для GCC или Clang, а для EDG фронтенда, где много проблем с компиляцией С++. А патч этот не используется, потому что в Альте до сих пор TBB-2020.3 и до oneTBB не обновлялись. Если вам нужен этот патч для Эльбрусов, то можете проверить эту идею сами.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants