![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
sergioK1 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
вставка лишней строки long a1,a2,a3,a4,a5,a6,a7,a8; увеличивает скорость работы в 2-3 раза, как это понять ? |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Скорее всего влияет так называемый false sharing.
Без этой строки с1 и c2 попадают в один и тот же cache line в кэше процессора. Если допустить, что потоки работают на двух физических ядрах, то им придется постоянно заниматься загрузкой/выгрузкой одного и того же cache line в/из кэша, ведь оба потока выполняют интенсивную запись туда. Если же добавить long a1,a2,a3,a4,a5,a6,a7,a8 между с1 и с2, то с1 и с2 больше не влезут в границы одного cache line'а. Его размер зависит от железа, но в любом случае весьма небольшой. При таком раскладе оба ядра спокойно будут писать каждый в свой cache line без постоянной необходимости инвалидировать cache line из-за конкурентной записи. ![]() -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
sergioK1 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Я честно говоря об этом тоже подумал, и это обьясняет почему скорость в два раза выше , но Я переписал этот код на С++ таково эффекта нет , хотя процессору должно быть без разницы, т,е, логика с двумя кешами от языка не зависит, есть мысли ?? |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Сильное допущение) Я бы сказал, что от языка и рантайма зависит не меньше, чем от железа: 1. В разных языках по-разному работает аллокатор, выделяющий память. То есть с1 и с2 могут прото не положить рядом 2. В разных языках компилятор и рантайм применяют разные оптимизации. Например можно предвычислить значения переменных на этапе компиляции, сделать inline, etc 3. Стоит также убедиться, что во обоих случаях действительно задействованы оба ядра. В силу особенностей рантайма программа может быть фактически запущена на одном ядре, лишь эмулируя многопоточность быстрыми переключениями 4. Java, в силу особенностей реализации GC, подвержена false sharing гораздо сильнее и чаще, чем этого можно было бы ожидать -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
sergioK1 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
п 2 , как мне самому запустить оптимизацию аналог gcc -O(1/2/3) желательно через эклипс , или наоборот отключить ? (-O0) п,3 как это проверить одно ядро задействовано или нет ?? и как на это можно повлиять ? |
||||
|
|||||
Romper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 7.11.2012 Репутация: нет Всего: 1 |
а где об этом можно почитать? |
|||
|
||||
jk1 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Я не настолько хорошо знаю C++, чтобы указать конкретную оптимизацию, которая исправит картинку в этом случае.
Помониторить загрузку ядер во время выполнения бенчмарка, благо утилит для этого хватает.
тут -------------------- Opinions are like assholes — everybody has one |
||||||
|
|||||||
sergioK1 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Например какие пользовал ?? |
||||
|
|||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
-------------------- Opinions are like assholes — everybody has one |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |