Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2010, 21:20   #11
Morkonwen
Пользователь
 
Регистрация: 27.06.2010
Сообщений: 44
По умолчанию

паралелятся в смысле для выполнения кластером?

и просто принципиально стало интересно почему не работает тот способ создания связанного списка из моего сообщения выше. В ассемблер лезть не буду конечно=),

матрица разряженная то есть ненулевых элементов всего 1-2%. нули не то что не обрабатываются, но даже и не хрянятся.

и по поводу кеша вопрос еще открыт.
int i; объявляет переменную в быстрой области памяти, а callock в медленной куче?
Morkonwen вне форума Ответить с цитированием
Старый 27.06.2010, 21:40   #12
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Morkonwen Посмотреть сообщение
паралелятся в смысле для выполнения кластером?

и просто принципиально стало интересно почему не работает тот способ создания связанного списка из моего сообщения выше. В ассемблер лезть не буду конечно=),

матрица разряженная то есть ненулевых элементов всего 1-2%. нули не то что не обрабатываются, но даже и не хрянятся.

и по поводу кеша вопрос еще открыт.
int i; объявляет переменную в быстрой области памяти, а callock в медленной куче?
1) Вовсе необязательно кластером, просто множеством потоков, а уж на каком кол-ве процессоров/ядер эти потоки будут выполнятся другой вопрос.
2) нужно так:
Код:
firstelem->value=23.4;
// или
(*firstelem).value=23.4;
память в стеке и в куче по большому счёту одна и та же, потому скорость работы с ней одинакова, разница лишь в скорости выделения. Более того, за счёт того, что calloc обнуляет все элементы выделяемой памяти, то он ещё больше проигрывает по скорости выделения памяти. Если нет необходимости обнулять полученную память, то можно использовать malloc. А вообще, если выделение происходит лишь один раз, ну или в крайнем случае редко, то особой роли это вообще не играет
netrino вне форума Ответить с цитированием
Старый 27.06.2010, 21:57   #13
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

почему бы и не полезть в ассемблер и не использовать MMX_SSE технологии - очень хорошая вещь, особенно для матриц
как раз создавалось для оптимизации вот таких вот задач, когда идет работа с массами однотипных данных
правильно тут подсказали - OpenMP, и лучше, если у вас многопроцессорная система, тогда результат вас может удивить (меня удивил, когда я работал с OpenMP). Конечно, он может помочь и с одним процессором в многозадачной системе, однако это редкостное явление, это зависит от самой структуры цикла
причем, много всяких вкусностей - разворачивание циклов, общие и локальные переменные для циклов, выполнение параллельно независимых участков кода и мн. другое
а что насчет регистров процессора - да, это несомненно не обращение к ОЗУ, которое происходит в несколько тактов в отличие от регистров, обращение к которым происходит за такт, но большинство компиляторов С/С++ сами оптимизируют код и стараются где возможно использовать регистры процессора, если они не заняты
capta1n вне форума Ответить с цитированием
Старый 27.06.2010, 22:32   #14
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от capta1n Посмотреть сообщение
почему бы и не полезть в ассемблер и не использовать MMX_SSE технологии - очень хорошая вещь, особенно для матриц
как раз создавалось для оптимизации вот таких вот задач, когда идет работа с массами однотипных данных
правильно тут подсказали - OpenMP, и лучше, если у вас многопроцессорная система, тогда результат вас может удивить (меня удивил, когда я работал с OpenMP). Конечно, он может помочь и с одним процессором в многозадачной системе, однако это редкостное явление, это зависит от самой структуры цикла
причем, много всяких вкусностей - разворачивание циклов, общие и локальные переменные для циклов, выполнение параллельно независимых участков кода и мн. другое
а что насчет регистров процессора - да, это несомненно не обращение к ОЗУ, которое происходит в несколько тактов в отличие от регистров, обращение к которым происходит за такт, но большинство компиляторов С/С++ сами оптимизируют код и стараются где возможно использовать регистры процессора, если они не заняты
Ассемблер - это крайняя мера, нет смысла писать всю программу на ассемблере, безусловно, впоследствии когда программа будет готова и будет ясно видно где можно выиграть за счёт ассемблера, можно будет переписать эти участки на нём. А пока можно доверится компилятору, современные оптимизаторы очень хороши, и в том числе умеют делать оптимизацию за счёт MMX и SSE. Тем более ТС не знает ассемблер. В остальном согласен.
netrino вне форума Ответить с цитированием
Старый 28.06.2010, 02:58   #15
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Код:
современные оптимизаторы очень хороши, и в том числе умеют делать оптимизацию за счёт MMX и SSE
откуда эта информация)

никто и не просит писать всю программу на ассеблере, а только части, где происходят наиболее тяжелые вычисления
причем использование MMX_SSE - Это уже под тегом __asm
capta1n вне форума Ответить с цитированием
Старый 28.06.2010, 03:13   #16
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от capta1n Посмотреть сообщение
Код:
современные оптимизаторы очень хороши, и в том числе умеют делать оптимизацию за счёт MMX и SSE
откуда эта информация)
хотя бы из настроек студии )
Изображения
Тип файла: jpg sse.jpg (41.4 Кб, 98 просмотров)
netrino вне форума Ответить с цитированием
Старый 28.06.2010, 09:15   #17
Morkonwen
Пользователь
 
Регистрация: 27.06.2010
Сообщений: 44
По умолчанию

Спасибо за ответы. это последний аргумент в пользу купить новый комп. денег не особо жалко, но очень интересен опыт работы с мультипроцессорными системами. Вообще про них ничего не знаю, так что прошу советов... Насколько, например, обычные, собранные на однопроцессорном компиляторе программы совместимы с распаралелливанием и не будут ли они работать в 4 раза медленнее чем могли бы(для 4-х процессорных систем). И openMP это набор директив... то есть что то вроде патча для компилятора? Можно ли мне вмешиватся в распаралеливание, например чтобы совсем очевидно независимые части задачи считать независимо?
Morkonwen вне форума Ответить с цитированием
Старый 01.07.2010, 19:44   #18
Darknes
Пользователь
 
Аватар для Darknes
 
Регистрация: 28.06.2010
Сообщений: 40
По умолчанию

купи мего эвм и не парся=)))
Darknes вне форума Ответить с цитированием
Старый 01.07.2010, 23:36   #19
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

А я бы вам книжки умные почитать бы посоветовал, к примеру, "Совершенный код", там много чего есть на эту тему.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 05.07.2010, 16:31   #20
Morkonwen
Пользователь
 
Регистрация: 27.06.2010
Сообщений: 44
По умолчанию

а как пользоваться профайлером и что это такое?
Morkonwen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос быстродействия _Денис C++ Builder 1 14.11.2009 17:00
Создание логических разделов на основном Kreadlling Операционные системы общие вопросы 3 12.09.2009 14:39
Кто что в основном программирует Rekky Свободное общение 24 05.05.2009 16:25
Вопросы о оптимизации работы с СУБД Stilet БД в Delphi 8 21.07.2008 11:29
Вопросы по оптимизации скорости Иллидан Общие вопросы Delphi 9 11.07.2008 23:46