powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / VS2012: Как посмотреть реализацию функции sin(x)?
68 сообщений из 68, показаны все 3 страниц
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092634
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если написать код:

Код: plaintext
1.
double a = std::sin(0.2);



и с помощью F11 попытаться "провалиться" в функцию sin, то получаем страничку "Нет доступных исходных файлов". Можно только дизассемблированный код посмотреть на этой страничке...

В целом я хочу понять как стандартные библиотеки CRT (на примере sin(x)) реализуют поддержку многопоточности. Читал на каком-то форуме, что эти библиотеки даже у Микрософта открыты.

Вспоможите!
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092665
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVМожно только дизассемблированный код посмотреть на этой страничке...

А его недостаточно? Вычисление синуса - одна ассемблерная команда.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092691
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovGermanVМожно только дизассемблированный код посмотреть на этой страничке...

А его недостаточно? Вычисление синуса - одна ассемблерная команда.



Интересен вопрос: какой ценой собственно достигается многопоточность? А насчет одна команда- не согласен: даже в этом случае приведенный мной код не является атомарной операцией, и при многопоточности значение может вычисляться не корректно.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092704
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVдаже в этом случае приведенный мной код не является атомарной операцией, и
при многопоточности значение может вычисляться не корректно.
Не может. С чего бы ему выполняться некорректно-то?.. Каждый поток имеет свой собственный
стэк и набор регистров.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092707
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVDimitry Sibiryakovпропущено...

А его недостаточно? Вычисление синуса - одна ассемблерная команда.



Интересен вопрос: какой ценой собственно достигается многопоточность? А насчет одна команда- не согласен: даже в этом случае приведенный мной код не является атомарной операцией, и при многопоточности значение может вычисляться не корректно.
Каждый поток имеет свой стек операций. Стеки не пересекаются.
Для вычисления FSIN процессор переключается в режим FPU
и очень быстро за несколько тактов вычисляет значение синуса.
Никакой особой синхронизации здесь не нужно так же как и не нужно
синхронизировать АЛУ процессора для сложений и вычитаний.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092732
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovНе может. С чего бы ему выполняться некорректно-то?.. Каждый поток имеет свой собственный
стэк и набор регистров.


Тогда зачем компилятор призывает использовать "безопасные" функции CRT с окончанием _s? Ведь они и так разделены!
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092733
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVТогда зачем компилятор призывает использовать "безопасные" функции CRT с
окончанием _s?
Кроме стэка и регистров есть ещё куча прочей памяти.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092762
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovКроме стэка и регистров есть ещё куча прочей памяти.


Вот и я про тоже! А вдруг эти товарищи видоизменяют реализацию наших любимых функций для придания им многопоточности. Причем нам ничего не говорят и окончание _s не добавляют (из разряда "А мужики-то не знают!").

Хочется понять как они свою многопоточность реализовали для всех библиотек CRT.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092764
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКроме стэка и регистров есть ещё куча прочей памяти.
есть ещё TLS, но зачем это всё для вычисления синуса?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092766
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVА вдруг эти товарищи видоизменяют реализацию наших любимых функций

Откуда у человека, изучающего С всего неделю вдруг завелись "любимые функции"?..
И, кстати, какой это компилятор предлагает потокобезопасный синус?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092772
GermanVDimitry SibiryakovКроме стэка и регистров есть ещё куча прочей памяти.


Вот и я про тоже! А вдруг эти товарищи видоизменяют реализацию наших любимых функций для придания им многопоточности. Причем нам ничего не говорят и окончание _s не добавляют (из разряда "А мужики-то не знают!").

Хочется понять как они свою многопоточность реализовали для всех библиотек CRT.
Синхронизация нужна при обращении по одному и тому же адресу памяти. Зачем это в синусе?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092775
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVТогда зачем компилятор призывает использовать "безопасные" функции CRT с окончанием _s?
Для защиты от различных атак. Например buffer overflow. Никакой связи с многопоточностью здесь нет.

Repel Attacks on Your Code with the Visual Studio 2005 Safe C and C++ Libraries
Security Features in the CRT
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092806
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVЕсли написать код:
Код: plaintext
1.
double a = std::sin(0.2);


и с помощью F11 попытаться "провалиться" в функцию sin, то получаем страничку "Нет доступных исходных файлов". Можно только дизассемблированный код посмотреть на этой страничке...
В целом я хочу понять как стандартные библиотеки CRT (на примере sin(x)) реализуют поддержку многопоточности. Читал на каком-то форуме, что эти библиотеки даже у Микрософта открыты.
Вспоможите! sin(0.2) - это константа, компилятор его может смело заменить на
Код: plaintext
1.
double a = 0,1986693;


и функции синуса ты вообще не найдешь.
Можно попробовать с переменной. Или выложи дизассемблированный код посмотреть.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092811
Надо так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m_SlaGermanVЕсли написать код:
Код: plaintext
1.
double a = std::sin(0.2);


и с помощью F11 попытаться "провалиться" в функцию sin, то получаем страничку "Нет доступных исходных файлов". Можно только дизассемблированный код посмотреть на этой страничке...
В целом я хочу понять как стандартные библиотеки CRT (на примере sin(x)) реализуют поддержку многопоточности. Читал на каком-то форуме, что эти библиотеки даже у Микрософта открыты.
Вспоможите! sin(0.2) - это константа, компилятор его может смело заменить на
Код: plaintext
1.
double a = 0,1986693;


и функции синуса ты вообще не найдешь.
Можно попробовать с переменной. Или выложи дизассемблированный код посмотреть.
Надо так:
Код: plaintext
1.
2.
volatile doulbe b = 0.2;
double a = std::sin(b);
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092957
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Slasin(0.2) - это константа, компилятор его может смело заменить на
Код: plaintext
1.
double a = 0,1986693;



sin(0.2) - это НЕ константа.
Вообще никто не гаратирует что вызовется именно библиотечная функция sin.
Если предоставить свою реализацию, то линкер выкинет библиотечную и свяжет с пользовательской, и вызовется именно она, и далеко не факт что она не имеет какого-то глобального состояния в рантайме.
А значит компилятор не имеет права вычислять это выражение в момент компиляции.

Вот в С++11 сделали возможность объявить функцию constexpr (не любую правда) и вот вызов такой функции от константных аргументов компилятор уже обязан вычислить при компиляции.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38092990
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по одному и тому же адресуСинхронизация нужна при обращении по одному и тому же адресу памяти. Зачем это в синусе?

Ну что вы к этому синусу привязались? Функций в стандартных библиотеках много, и все они не реализованы аппаратно на ЦП. Однако все они многопоточные.

Вы можете ответить на простой вопрос: какой основной принцип переделки функций CRT в многопоточный вариант?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093011
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVкакой основной принцип переделки функций CRT в многопоточный вариант?\
переделке подлежат функции, использующие общие данные процесса.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093105
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanV,

Можно поставить исходники CRT, когда ставишь студию. Правда я сам последние студии не ставил, но традиционно такая возможность всегда была.


А многопоточность - все просто, для этого не надо читать что-то. Функции в CRT либо повторновходовые, либо нет. Для последних либо делаются мьютексы для сериализации вызовов, либо контекст хранится в thread local storage.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093112
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanV

Интересен вопрос: какой ценой собственно достигается многопоточность? А насчет одна команда- не согласен: даже в этом случае приведенный мной код не является атомарной операцией, и при многопоточности значение может вычисляться не корректно.

Синус — повторновходовая функция. Проблем вообще никаких не должно быть.
Сравни например с strtok.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093120
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVDimitry SibiryakovНе может. С чего бы ему выполняться некорректно-то?.. Каждый поток имеет свой собственный
стэк и набор регистров.


Тогда зачем компилятор призывает использовать "безопасные" функции CRT с окончанием _s? Ведь они и так разделены!

_s — это совсем из другой оперы, это не про многопоточность.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093187
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скачать исходники libc и libstdc++, и там эти функции должны быть. Например так http://lmgtfy.com/?q=libstdc%2B%2B+src

если хочется посмотреть не то, как оно было в исхрдниках, а то. во что оно превратилось после компиляции, то статически линкуетесь с либами и утилитой objdump дизасеемблируете.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093190
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazileДля защиты от различных атак. Например buffer overflow. Никакой связи с многопоточностью здесь нет.

Repel Attacks on Your Code with the Visual Studio 2005 Safe C and C++ Libraries
Security Features in the CRT



А можно какую- нибудь книжку посоветовать о методах программирования, позволяющих защитить свой код от уязвимостей? Я вот в кучах создаю огромные массивы и боюсь переполнений (эти ошибки очень трудно отследить). Может создать какие-то дополнительные проверочные процедуры анализа стека на входе/выходе из функций кода и тд.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093200
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chabapokскачать исходники libc и libstdc++, и там эти функции должны быть. Например так http://lmgtfy.com/?q=libstdc%2B%2B+src

если хочется посмотреть не то, как оно было в исхрдниках, а то. во что оно превратилось после компиляции, то статически линкуетесь с либами и утилитой objdump дизасеемблируете.

Я не использую Линукс из-за низкого качества поддержки. По сути вся поддержка этих систем сводится к древним форумам, где пара троллей глумится над новичками, воображая себя отцами учителями.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093211
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилпеределке подлежат функции, использующие общие данные процесса.

Можно подробнее? Вводится ли новая функция или заменяется старая? Как это отражается на производительности? Какой-нибудь пример есть?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093216
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVchabapokскачать исходники libc и libstdc++, и там эти функции должны быть. Например так http://lmgtfy.com/?q=libstdc%2B%2B+src

если хочется посмотреть не то, как оно было в исхрдниках, а то. во что оно превратилось после компиляции, то статически линкуетесь с либами и утилитой objdump дизасеемблируете.

Я не использую Линукс из-за низкого качества поддержки. По сути вся поддержка этих систем сводится к древним форумам, где пара троллей глумится над новичками, воображая себя отцами учителями.
Я-бы себе прикупил хороший коммерческий линукс для десктопа при условии
что будет телефонная линия поддержки и нормальная служба говорящая
на местном языке. Но где в нашей стране (Украине) найти подобное?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093266
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanV,

Writing Secure Code неплохая книга.

GermanVЯ вот в кучах создаю огромные массивы и боюсь переполнений (эти ошибки очень трудно отследить). Может создать какие-то дополнительные проверочные процедуры анализа стека на входе/выходе из функций кода и тд.
Не вижу связи между ошибками в работе с кучей и проверкой стека. Атаки направленные на кучу (heap corruption, например) не затрагивают стек. Атаки на стек (buffer overrun, например) в свою очередь не затрагивают кучу. Соответственно защита нужная разная. Конкретно защиту массивов в куче делаем путем проверок размеров и индексов чтобы не выходить за их пределы. Компилятор и c-runtime в VS 2012 уже реализуют ряд механизмов защиты программы. Смотри, например, опции компиляции "Basic Runtime Checks" и "Security Check" (C/C++ \ Code Generation).
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093272
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVИзопропилпеределке подлежат функции, использующие общие данные процесса.

Можно подробнее? Вводится ли новая функция или заменяется старая? Как это отражается на производительности? Какой-нибудь пример есть?
Заменяются не отдельные функции, а просто проект собирается с другими ключами и другой библиотекой (где все те же функции написаны с учетом многопоточности).

Многопоточность стандартной библиотеки, по сравнению с однопоточными вариантами заключается лишь в том, что создание/удаление из нескольких потоков в куче безопасно, и там где стандартные функции использовали глобальные переменные для хранения состояния (rand, strtok...) теперь для этого используются переменные размещенные в TLS(thread local storage), т.е. своя копия у каждого потока, и соответственно потоки не влияют друг на друга, хотя состояние у функций по-прежнему есть.

Естественно что доступ к TLS вносит накладные расходы. А в зависимости от криворукости разработчиков библиотеки производительность может упасть в разы. Но часто никакого выбора нет.
Во всех современных компиляторах под win/lin используются многопоточные версии стандартных библиотек. В некоторых можно переключаться между одно- и многопоточными. Но например в VS2008 уже нет однопоточной стандартной библиотеки С/С++.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093300
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot bazile]GermanV,

Writing Secure Code неплохая книга.

Спасибо.

bazileНе вижу связи между ошибками в работе с кучей и проверкой стека. Атаки направленные на кучу (heap corruption, например) не затрагивают стек. Атаки на стек (buffer overrun, например) в свою очередь не затрагивают кучу. Соответственно защита нужная разная. Конкретно защиту массивов в куче делаем путем проверок размеров и индексов чтобы не выходить за их пределы. Компилятор и c-runtime в VS 2012 уже реализуют ряд механизмов защиты программы. Смотри, например, опции компиляции "Basic Runtime Checks" и "Security Check" (C/C++ \ Code Generation).

Я просто написал все вместе, чтобы было понятно общее направление поиска: корректная работа кода / отлавливание ошибок, которые не ловит компилятор и сборщик.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093319
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVЯ просто написал все вместе, чтобы было понятно общее направление поиска: корректная работа кода / отлавливание ошибок, которые не ловит компилятор и сборщик.
Есть одна стратегия для минимизации таких ошибок (особенно у новичков без опыта) - не использовать низкоуровневые инструменты, там где доступны высокоуровневые.
Язык С++ дает достаточно возможностей для этого.
Векторы вместо массивов, смарт-указатели вместо голых указателей и т.д.
На 99% программ это никак не скажется на производительности.
А оставшийся 1% - сначала отладить, а потом профайлером выявить узкие места и оптимизировать их.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093320
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVчтобы было понятно общее направление поиска: корректная работа кода /
отлавливание ошибок, которые не ловит компилятор и сборщик.
Это приходит с опытом само. Как в RPG: чем больше багов поймал и убил, тем выше твой уровень.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093348
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyМногопоточность стандартной библиотеки, по сравнению с однопоточными вариантами заключается лишь в том, что создание/удаление из нескольких потоков в куче безопасно, и там где стандартные функции использовали глобальные переменные для хранения состояния (rand, strtok...) теперь для этого используются переменные размещенные в TLS(thread local storage), т.е. своя копия у каждого потока, и соответственно потоки не влияют друг на друга, хотя состояние у функций по-прежнему есть.

Естественно что доступ к TLS вносит накладные расходы. А в зависимости от криворукости разработчиков библиотеки производительность может упасть в разы. Но часто никакого выбора нет.
Во всех современных компиляторах под win/lin используются многопоточные версии стандартных библиотек. В некоторых можно переключаться между одно- и многопоточными. Но например в VS2008 уже нет однопоточной стандартной библиотеки С/С++.

А свободно распространяемые однопоточные библиотеки есть? Ведь я могу подцепить любую библиотеку и использовать ее функции вместо поставляемых со средой. Хочется повысить производительность.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093362
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVВедь я могу подцепить любую библиотеку и использовать ее функции вместо
поставляемых со средой.
Не можешь. И производительность этим ты повысишь на пару процентов и то только если
повезёт. Анализ и оптимизация алгоритма может дать ускорение в разы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093373
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyЕсть одна стратегия для минимизации таких ошибок (особенно у новичков без опыта) - не использовать низкоуровневые инструменты, там где доступны высокоуровневые.
Язык С++ дает достаточно возможностей для этого.
Векторы вместо массивов, смарт-указатели вместо голых указателей и т.д.
На 99% программ это никак не скажется на производительности.
А оставшийся 1% - сначала отладить, а потом профайлером выявить узкие места и оптимизировать их.

У меня как раз задача с расчетами на несколько суток (а может и недель). Так что STL с его серьезным падением производительности явно не подходит.

Да и я спрашиваю не столько про мелкие хитрушки, сколько про структуру программы. Возможно это будет дополнительная обертка вызовов функций или какая-то сигнальная система глобальных переменных, разбиение на отдельные модули.... Не знаю, пока. И хочу узнать.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093380
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVА свободно распространяемые однопоточные библиотеки есть? Ведь я могу подцепить любую библиотеку и использовать ее функции вместо поставляемых со средой. Хочется повысить производительность.
Я надеюсь вы не собрались использовать однопоточный рантайм в многопоточной программе?
Это возможно только для однопоточных программ.

Вообще, на современных процах несколько ядер. Вам надо наоборот увеличивать число потоков, а не делать однопоточной программу :)
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093389
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVТак что STL с его серьезным падением производительности явно не подходит
А пример можно? Чтобы было что обсудить на конкретном решении.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093391
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВам надо наоборот увеличивать число потоков, а не делать однопоточной программу :)
А он несколько программ запустит, каждой по своему куску данных ))
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093406
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVУ меня как раз задача с расчетами на несколько суток (а может и недель). Так что STL с его серьезным падением производительности явно не подходит.

STL никак не мешает писать максимально быстрые программы.
Тормозит не STL, а алгоритм.
Например выделение вектора размером с несколько гигов ну пусть секунды займет в худшем случае.
А алгоритм ваш работает неделями.
Как это может сказаться на скорости алгоритма? Никак, если не выделять память на каждый чих.

Да и никто не мешает обращаться с тем же вектором как с массивом через указатель, а самому вектору оставить управление памятью.

Вы для начала прогоните профайлером и посмотрите что реально тормозит (и это на 99% будет ваш код, а не станд.библиотека).
А замена стандартных библиотек не поможет в любом случае.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093486
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskySTL никак не мешает писать максимально быстрые программы.
Тормозит не STL, а алгоритм.
Например выделение вектора размером с несколько гигов ну пусть секунды займет в худшем случае.
А алгоритм ваш работает неделями.
Как это может сказаться на скорости алгоритма? Никак, если не выделять память на каждый чих.

Да и никто не мешает обращаться с тем же вектором как с массивом через указатель, а самому вектору оставить управление памятью.

Вы для начала прогоните профайлером и посмотрите что реально тормозит (и это на 99% будет ваш код, а не станд.библиотека).
А замена стандартных библиотек не поможет в любом случае.

А вы попробуйте этот вектор потом заполнить данными и поймете, что обычный массив работает примерно в 5-6 раз быстрее. И алгоритмы тут не при чем.

Дело в том, что разработчики STL делают проверки под каждый "чих", а я, например, исходя из структуры кода могу сделать проверку на выход за границы по завершении цикла. STL- в принципе мертвяк. Уж лучше тогда на C# начать писать. Производительность та же (даже наверное будет лучше), а защищенность выше.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093512
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVДело в том, что разработчики STL делают проверки под каждый "чих"
Пример покажете или нет?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093551
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVА вы попробуйте этот вектор потом заполнить данными и поймете, что обычный массив работает примерно в 5-6 раз быстрее. И алгоритмы тут не при чем.
Anatoly MoskovskyДа и никто не мешает обращаться с тем же вектором как с массивом через указатель, а самому вектору оставить управление памятью.

GermanV,

читайте внимательно
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093575
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVУ меня как раз задача с расчетами на несколько суток (а может и недель). Так что STL с его серьезным падением производительности явно не подходит.

Да и я спрашиваю не столько про мелкие хитрушки, сколько про структуру программы. Возможно это будет дополнительная обертка вызовов функций или какая-то сигнальная система глобальных переменных, разбиение на отдельные модули.... Не знаю, пока. И хочу узнать.
GermanV, мон шер. В этом форуме собрались отпетые любители пооптимизировать С++ исходники.
Выкладывай самодостаточный кусок кода и мы посмотрим. Я тоже делаю ставку на то
что ты оптимизируешь не то и не там. Синус не является узким местом в расчётах.
Он на 99% хардварный. А вот твой алгоритм - это другое дело. Если это численный
метод то в нём всегда есть место для компромиссов. По точности там... по методу.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093602
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVAnatoly MoskovskySTL никак не мешает писать максимально быстрые программы.
...А вы попробуйте этот вектор потом заполнить данными и поймете, что обычный массив работает примерно в 5-6 раз быстрее. И алгоритмы тут не при чем.

Дело в том, что разработчики STL делают проверки под каждый "чих", а я, например, исходя из структуры кода могу сделать проверку на выход за границы по завершении цикла. STL- в принципе мертвяк. Уж лучше тогда на C# начать писать. Производительность та же (даже наверное будет лучше), а защищенность выше. Можно пример кода, с замерами желательно? Или из пальца высосали?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093622
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sherzod_[Можно пример кода, с замерами желательно? Или из пальца высосали?

Это уже 100 раз обсуждалось на этом форуме с кучей реальных примеров. Я не собираюсь повторяться.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093626
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилAnatoly MoskovskyДа и никто не мешает обращаться с тем же вектором как с массивом через указатель, а самому вектору оставить управление памятью.

GermanV,

читайте внимательно

Тогда в чем смысл? Ведь беда не столько в выделениях памяти, сколько в "писании" по невыделенным участкам.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093630
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVЭто уже 100 раз обсуждалось на этом форуме с кучей реальных примеров. Я не собираюсь повторяться.
Еще дальше отфутболили )))

Все понятно
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093635
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonGermanV, мон шер. В этом форуме собрались отпетые любители пооптимизировать С++ исходники.
Выкладывай самодостаточный кусок кода и мы посмотрим. Я тоже делаю ставку на то
что ты оптимизируешь не то и не там. Синус не является узким местом в расчётах.
Он на 99% хардварный. А вот твой алгоритм - это другое дело. Если это численный
метод то в нём всегда есть место для компромиссов. По точности там... по методу.

Господи, опять к синусу прицепились. Ну почему не беседовать по сути вопроса, не отвлекаясь на мелкие недочеты, свойственные людям в живой беседе?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093645
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVГосподи, опять к синусу прицепились.
А нефиг было его выносить в стартовый пост.

Повторяю ещё раз, медленно: даже вынос инвариантов за цикл ускоряет алгоритм больше чем
самая оптимизированная библиотека. Не говоря уже о раннем отсечении тупиковых ветвей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093652
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVГосподи, опять к синусу прицепились. Ну почниему не беседовать по сути вопроса, не отвлекаясь на мелкие недочеты, свойственные людям в живой беседе?
Извини. А где суть вопроса? Накладные на STL ?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093654
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVsherzod_[Можно пример кода, с замерами желательно? Или из пальца высосали?
Это уже 100 раз обсуждалось на этом форуме с кучей реальных примеров. Я не собираюсь повторяться. Так и надо говорить: "Я мало что понимаю, но буду нести безосновательную чушь и троллить про stl и linux". Если я ошибаюсь, приведите пример кода и мы посмеемся.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093656
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Edd.DragonЕще дальше отфутболили )))

Все понятно

Ну, например, здесь: /topic/945804&pg=2&hl=stl
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093657
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вводится ли новая функция или заменяется старая?

Естественно, заменяется реализация старой.

Как это отражается на производительности?

Либо никак, либо ухудшается.
На самом деле наверное иногда может и увеличиваться, за счет большей локальности обращения к памяти.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093723
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно. Ты даёшь ссылку на ветку где тебя нет в качестве участника.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093743
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanV
Ну, например, здесь: /topic/945804&pg=2&hl=stl

Вообще-то конкретно в этой теме было разобрано, что задержка в векторе возникает из-за двух факторов:
1) Медленная реализация дебаг режима в VS.
2) в момент выделения памяти для вектора она всегда инициализируется.

Т.е. если отделить выделение памяти от алгоритма и запускать все в релиз сборке, никаких тормозов нет.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093747
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНепонятно. Ты даёшь ссылку на ветку где тебя нет в качестве участника.
Так может это Poslushnik.
Ну по крайней мере религия у них одна и та же.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093750
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskymaytonНепонятно. Ты даёшь ссылку на ветку где тебя нет в качестве участника.
Так может это Poslushnik.
Ну по крайней мере религия у них одна и та же.
Ну конечно-же мы тут все - психоаналитики...
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093753
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyТ.е. если отделить выделение памяти от алгоритма и запускать все в релиз сборке, никаких тормозов нет.
А вот пример когда STL даже круче по скорости С-шного стиля.
http://www.sql.ru/forum/actualthread.aspx?tid=791634
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093772
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА вот пример когда STL даже круче по скорости С-шного стиля.
http://www.sql.ru/forum/actualthread.aspx?tid=791634
А, не, это не то - там задержка в С из-за float.

Ну ничего, зато std::sort точно быстрее С-шного qsort :)
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093819
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

std::generate_n тоже быстрее С-стиля, если сишник будет заполнять через цикл с индексом :). Например
Код: plaintext
1.
for (std::size_t i = 0; i < size; ++i) arr[i] = i;


будет медленнее (у меня в 2 раза, i7, vs2012, x64)
Код: plaintext
1.
2.
class inc { std::size_t m_i; public: inc(): m_i(static_cast<std::size_t>(0)) {} inline std::size_t operator()() { return m_i++; } } i;
std::generate_n(v.begin(), size, i);

из-за использования инкрементирования указателя что более предсказуемо, а если сишник тоже применит ++ указателей, то по крайней мере будет ничья :).
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093889
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sherzod_,

Я боюсь только что это все не аргумент для человека, который впервые видит С/С++ (судя по этой теме ), но уже уверен что STL тормозит :)
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093975
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyВообще-то конкретно в этой теме было разобрано, что задержка в векторе возникает из-за двух факторов:
1) Медленная реализация дебаг режима в VS.
2) в момент выделения памяти для вектора она всегда инициализируется.

Т.е. если отделить выделение памяти от алгоритма и запускать все в релиз сборке, никаких тормозов нет.

Не понимаю, зачем врать? Там и для релиз приведены данные замеров: падение в 2,5 раза. А что бывает заполнение памяти без ее выделения?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38093978
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyА, не, это не то - там задержка в С из-за float.

Ну ничего, зато std::sort точно быстрее С-шного qsort :)

qsort быстрее. Сам ставил эксперименты на реальных данных, и любой может тоже их проделать. Зачем врать? Во имя религии STL?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38094022
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanV,

Никто не говорил что безопасность контейнеров STL дается бесплатно.
Цена - придется слегка подумать как сделать скорость не хуже.

Я выше написал из чего состоит замедление и как его избежать.
В том коде где разница 2.5, не выполнена одна из рекомендаций - отделить выделение памяти от алгоритма который ее использует. Да и методика подсчета не очень точная, там время работы алгоритма достаточно мало, что может давать погрешности измерения.

Заполнение памяти без выделения не бывает. Но никто этого и не требует.

Про qsort, когда у меня будет время - померяемся :)
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38094029
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVAnatoly MoskovskyА, не, это не то - там задержка в С из-за float.

Ну ничего, зато std::sort точно быстрее С-шного qsort :)

qsort быстрее. Сам ставил эксперименты на реальных данных, и любой может тоже их проделать. Зачем врать? Во имя религии STL?
Давайте вместе тестить. Я тоже слышал такую тему что std::sort быстрее но
очевидно что есть нюансы в самом тесте. Как вы его реализовали?
Какой тип данных в шаблоне? Каков объём выборки? Какие начальные
условия? Большинство gap-ов в таймингах образуются оттого что
новички не учитывают время бутстрапа самой процедуры, статических
конструкторов в main() и прочих инициализаций. Компилляторы, ключи
компилляции тоже важны наверное.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38094077
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky Но например в VS2008 уже нет однопоточной стандартной библиотеки С/С++.

Есть, но только статическая.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38094088
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonGermanVпропущено...
qsort быстрее. Сам ставил эксперименты на реальных данных, и любой может тоже их проделать. Зачем врать? Во имя религии STL? Давайте вместе тестить. Я тоже слышал такую тему что std::sort быстрее но
очевидно что есть нюансы в самом тесте. Как вы его реализовали?
Какой тип данных в шаблоне? Каков объём выборки? Какие начальные
условия? Большинство gap-ов в таймингах образуются оттого что
новички не учитывают время бутстрапа самой процедуры, статических
конструкторов в main() и прочих инициализаций. Компилляторы, ключи
компилляции тоже важны наверное. Ну дак а что там тестить :). Очевидно же что встроенное сравнение занимающее одну инструкцию (для простых типов), выполнится быстрее целого вызова функции которой в qsort ну никак не избежать (ибо уже скомпилен), при прочих равных условиях.
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38094142
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему собственно вопрос возник: тут вот ( http://msdn.microsoft.com/en-us/library/ms682516%28v=vs.85%29.aspx) сразу после кода есть такие строки:

"The MyThreadFunction function avoids the use of the C run-time library (CRT), as many of its functions are not thread-safe, particularly if you are not using the multithreaded CRT. If you would like to use the CRT in a ThreadProc function, use the _beginthreadex function instead."

Вот я и заволновался почему же это функции CRT "are not thread-safe", особенно те, что "are not using the multithreaded CRT". Может кто-нить пояснит, что они имеют ввиду?
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38094150
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanVМожет кто-нить пояснит, что они имеют ввиду?
Чтобы понять что они имеют ввиду, тебе надо изучить что такое потоки, как они работают и
какие создают опасности. Читай Рихтера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012: Как посмотреть реализацию функции sin(x)?
    #38094167
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Модератор: Заканчиваем огрызаться и провоцировать на грубость.
...
Рейтинг: 0 / 0
68 сообщений из 68, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / VS2012: Как посмотреть реализацию функции sin(x)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]