Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
#1

Длительность обращения к переменным - C++

16.11.2011, 23:54. Просмотров 1486. Ответов 21
Метки нет (Все метки)

Товарищи, есть ли разница между локальными и глобальными переменными в длительности чтения/записи в них?

И еще такой вопрос: у меня несколько потоков работают с одной переменной. Имеет ли смысл для каждого из них создать свою копию этой переменной, чтобы они не обращались к одной и той же области памяти? Будет ли выигрыш в быстродействии?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 23:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Длительность обращения к переменным (C++):

Как замерить длительность выполнения кода? - C++
Нужно замерить длительность выполнения кода. Как?

Структуры: информация о CD-дисках (исполнитель, название, длительность звучания, стоимость) - C++
реализуйте программу для решения следующей задачи: вводится информация о CD(DVD)- дисках: исполнитель,название,длительность...

Как сделать длительность цикла по количеству названий записанных в файл? - C++
Как сделать длительность цикла по количеству названий записанных в файл?

Посчитать длительность в секундах после того как График начинает убывать - C++
Ну вот собственно в чем проблема: По идее программа должна посчитать длительность в секундах после того как График начинает убывать...

обращения к указателям - C++
Написать обращения к указателям в глобальной,локальной и охватывающей сетях.

Уровни косвенного обращения - C++
День добрый, что такое уровни косвенного обращения, как и для чего они используются? Заранее благодарю с:

21
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 20:02  [ТС] #16
Не быстродействием занимайся, а назначением. Почему переменная одна? Если это способ обмена инфой между потоками, то после записи одним потоком, остальные должны получить результат, разделив переменную на копии ты будешь вынужден добавить ещё копирующий поток, который однозначно посадит на себя часть процессорного времени, которое можно было бы полезно использовать, прога тормознётся, если же переменная должна использоваться не для связи, а просто ты захотел использовать совпадающее имя, то разорвать связь, этой переменной создаваемую, можно только разделив переменную на копии.
Если цель - быстродействие, заниматься надо им, нет?))
Переменная это коэффициент, используемый в вычислениях. Задается он один раз, при запуске программы, потоки ее только читают.
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
17.11.2011, 20:23 #17
Цитата Сообщение от Svinina Посмотреть сообщение
Если цель - быстродействие, заниматься надо им, нет?))
Быстрее, но совсем не то = хуже. Сначала надо сделать, что надо, а не что не надо, а потом быстрее/медленнее. Так вот, если тебе нужна одна переменная, то копии будут или тормознее, или не то. А если копии и нужны, то одна будет и не то и не быстрее.
0
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 20:30  [ТС] #18
taras atavin, я не понял, что ты написал.
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
17.11.2011, 20:40 #19
Ну вот представь себе: ты хочешь съесть мороженное, а тебе предлагают пруд, поближе к дому, чем озеро. Барахтаясь в воде ты мороженное если и съешь, то времени уйдет больше. А если хочешь искупаться, то нафига сначала готовить мороженное?
0
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 21:02  [ТС] #20


taras atavin, ладно, еще раз объясню в чем состоял вопрос.
Есть ячейка в памяти. В этой ячейке лежат данные. И есть два параллельных процесса, которые одновременно из этой ячейки пытаются считать данные.
ВНИМАНИЕ, ВОПРОС: как данные из ячейки будут считаны процессами? Параллельно, или последовательно?
Все, больше меня ничего не интересует, ни алгоритм, ни альтернативные способы организации параллельности, ни синхронизация, забудь про все это.
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
18.11.2011, 05:42 #21
Ну вот представь себе: есть ячейка, в ней валяются данные, два потока хотят её читать. Прочитали? Эйси. Пока не важно, последовательно, или параллельено (по очереди, или одновременно оба). А потом один поток хочет записать. Ну так он и запишет. После этого опять оба хотят читать. Должны ли они прочитать разные данные, или одни и те же? Предположим разные. Если переменная одна, то задача не решена вообще, то есть они не прочитают разные данные. Они прочитают одни и те же данные и не имеет значения, быстрее, или медленнее. Если же переменных на самом деле две, то данные прочитаются разные, не смотря на то, что в обеих задачах величина названа одинаково. Теперь предположим, что данные должны прочитаться одни и те же. Если переменная одна, то ничего делать не надо, данные прочитаются одни и те же. А если переменных на самом деле две, то данные надо скопировать, иначе прочитаются разные данные и опять не имеет значения, быстрее, или медленне. Если же ты будешь копировать при каждой записи, то это медленнее. Поэтому занимайся для начала алгоритмом, а потом уже оптимизацией. Число копий должно вытекать из алгоритма. И если у тебя уже есть все решения, то скорость их исполнения можно измерить, а не спрашивать на форуме. Если же измерить разницу во времени не получится из-за слишком малого значения этой разницы, то следует сделать вывод о статистической незначимости различия и полной маскировке эффекта, то есть о том, что время исполнения определяется только другими факторами. Кстати, целевая машина многоядерная, или одноядерная? Если одноядерная, то потоки будут исполяться последовательно, а не параллельно из-за невозможности одновременного обладания ядром процессора. Тогда быстрее при прочих равных более компактное решение, то есть один экземпляр переменной быстрее нескольких. Ели же твоя машина одноядерная, а целевая многоядерная, то выложи сдесь архив с тестовыми софтинами, использующими оба подхода. У меня есть четырёхядрерник, я могу прогнать такой тест, а потом в своём посте выложу его результаты.
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
18.11.2011, 10:03 #22
Svinina, на однопроцессорной машине непосредственное обращение будет произведено последовательно - там по-другому просто не может быть
на многопроцессорной машине за счет процессорного кэша, при условии отсутствия его рассинхронизации между разными ядрами, чтение может быть произведено параллельно - при нахождении переменной в кэше. Как происходит непосредственно обращение к памяти в многопроцессорных системах я уже точно не помню - для чтения возможно шина может поддерживать параллельное считывание
0
18.11.2011, 10:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2011, 10:03
Привет! Вот еще темы с ответами:

формы и обращения к ним - C++
люди как создать 2-ю форму ну хочу чтоб у мя в проге было больше 1-го окна и как к ней над будь обращаться ведь к главной я обращаюсь так...

Отлов обращения по nullptr - C++
Добрый вечер, можно ли в крупной программе организовать систему отлова обращения по указателю nullptr ? Очень интересует вариант...

Ошибка обращения к элементу массива - C++
void sort(int *mas, int len) { int max = mas; int min = mas; for (int i = 1; i<len; ++i) { if (max < mas) max = mas;...

Ошибка обращения к нулевому адресу - C++
int main(int argc, char* argv) { ifstream f ("alphacntr",ios::in|ios::binary); if (!f) { cout<<"File opening...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.