Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Если написать код: Код: plaintext 1. и с помощью F11 попытаться "провалиться" в функцию sin, то получаем страничку "Нет доступных исходных файлов". Можно только дизассемблированный код посмотреть на этой страничке... В целом я хочу понять как стандартные библиотеки CRT (на примере sin(x)) реализуют поддержку многопоточности. Читал на каком-то форуме, что эти библиотеки даже у Микрософта открыты. Вспоможите! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2012, 22:20 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVМожно только дизассемблированный код посмотреть на этой страничке... А его недостаточно? Вычисление синуса - одна ассемблерная команда. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2012, 22:51 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovGermanVМожно только дизассемблированный код посмотреть на этой страничке... А его недостаточно? Вычисление синуса - одна ассемблерная команда. Интересен вопрос: какой ценой собственно достигается многопоточность? А насчет одна команда- не согласен: даже в этом случае приведенный мной код не является атомарной операцией, и при многопоточности значение может вычисляться не корректно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2012, 23:11 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVдаже в этом случае приведенный мной код не является атомарной операцией, и при многопоточности значение может вычисляться не корректно. Не может. С чего бы ему выполняться некорректно-то?.. Каждый поток имеет свой собственный стэк и набор регистров. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2012, 23:27 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVDimitry Sibiryakovпропущено... А его недостаточно? Вычисление синуса - одна ассемблерная команда. Интересен вопрос: какой ценой собственно достигается многопоточность? А насчет одна команда- не согласен: даже в этом случае приведенный мной код не является атомарной операцией, и при многопоточности значение может вычисляться не корректно. Каждый поток имеет свой стек операций. Стеки не пересекаются. Для вычисления FSIN процессор переключается в режим FPU и очень быстро за несколько тактов вычисляет значение синуса. Никакой особой синхронизации здесь не нужно так же как и не нужно синхронизировать АЛУ процессора для сложений и вычитаний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2012, 23:29 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНе может. С чего бы ему выполняться некорректно-то?.. Каждый поток имеет свой собственный стэк и набор регистров. Тогда зачем компилятор призывает использовать "безопасные" функции CRT с окончанием _s? Ведь они и так разделены! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 00:06 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVТогда зачем компилятор призывает использовать "безопасные" функции CRT с окончанием _s? Кроме стэка и регистров есть ещё куча прочей памяти. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 00:16 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovКроме стэка и регистров есть ещё куча прочей памяти. Вот и я про тоже! А вдруг эти товарищи видоизменяют реализацию наших любимых функций для придания им многопоточности. Причем нам ничего не говорят и окончание _s не добавляют (из разряда "А мужики-то не знают!"). Хочется понять как они свою многопоточность реализовали для всех библиотек CRT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 00:45 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovКроме стэка и регистров есть ещё куча прочей памяти. есть ещё TLS, но зачем это всё для вычисления синуса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 00:47 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVА вдруг эти товарищи видоизменяют реализацию наших любимых функций Откуда у человека, изучающего С всего неделю вдруг завелись "любимые функции"?.. И, кстати, какой это компилятор предлагает потокобезопасный синус? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 00:49 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVDimitry SibiryakovКроме стэка и регистров есть ещё куча прочей памяти. Вот и я про тоже! А вдруг эти товарищи видоизменяют реализацию наших любимых функций для придания им многопоточности. Причем нам ничего не говорят и окончание _s не добавляют (из разряда "А мужики-то не знают!"). Хочется понять как они свою многопоточность реализовали для всех библиотек CRT. Синхронизация нужна при обращении по одному и тому же адресу памяти. Зачем это в синусе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 01:01 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 01:04 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVЕсли написать код: Код: plaintext 1. и с помощью F11 попытаться "провалиться" в функцию sin, то получаем страничку "Нет доступных исходных файлов". Можно только дизассемблированный код посмотреть на этой страничке... В целом я хочу понять как стандартные библиотеки CRT (на примере sin(x)) реализуют поддержку многопоточности. Читал на каком-то форуме, что эти библиотеки даже у Микрософта открыты. Вспоможите! sin(0.2) - это константа, компилятор его может смело заменить на Код: plaintext 1. и функции синуса ты вообще не найдешь. Можно попробовать с переменной. Или выложи дизассемблированный код посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 02:50 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
m_SlaGermanVЕсли написать код: Код: plaintext 1. и с помощью F11 попытаться "провалиться" в функцию sin, то получаем страничку "Нет доступных исходных файлов". Можно только дизассемблированный код посмотреть на этой страничке... В целом я хочу понять как стандартные библиотеки CRT (на примере sin(x)) реализуют поддержку многопоточности. Читал на каком-то форуме, что эти библиотеки даже у Микрософта открыты. Вспоможите! sin(0.2) - это константа, компилятор его может смело заменить на Код: plaintext 1. и функции синуса ты вообще не найдешь. Можно попробовать с переменной. Или выложи дизассемблированный код посмотреть. Надо так: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 03:13 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
m_Slasin(0.2) - это константа, компилятор его может смело заменить на Код: plaintext 1. sin(0.2) - это НЕ константа. Вообще никто не гаратирует что вызовется именно библиотечная функция sin. Если предоставить свою реализацию, то линкер выкинет библиотечную и свяжет с пользовательской, и вызовется именно она, и далеко не факт что она не имеет какого-то глобального состояния в рантайме. А значит компилятор не имеет права вычислять это выражение в момент компиляции. Вот в С++11 сделали возможность объявить функцию constexpr (не любую правда) и вот вызов такой функции от константных аргументов компилятор уже обязан вычислить при компиляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 10:18 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
по одному и тому же адресуСинхронизация нужна при обращении по одному и тому же адресу памяти. Зачем это в синусе? Ну что вы к этому синусу привязались? Функций в стандартных библиотеках много, и все они не реализованы аппаратно на ЦП. Однако все они многопоточные. Вы можете ответить на простой вопрос: какой основной принцип переделки функций CRT в многопоточный вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 10:39 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVкакой основной принцип переделки функций CRT в многопоточный вариант?\ переделке подлежат функции, использующие общие данные процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 10:50 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanV, Можно поставить исходники CRT, когда ставишь студию. Правда я сам последние студии не ставил, но традиционно такая возможность всегда была. А многопоточность - все просто, для этого не надо читать что-то. Функции в CRT либо повторновходовые, либо нет. Для последних либо делаются мьютексы для сериализации вызовов, либо контекст хранится в thread local storage. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 11:43 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanV Интересен вопрос: какой ценой собственно достигается многопоточность? А насчет одна команда- не согласен: даже в этом случае приведенный мной код не является атомарной операцией, и при многопоточности значение может вычисляться не корректно. Синус — повторновходовая функция. Проблем вообще никаких не должно быть. Сравни например с strtok. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 11:47 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVDimitry SibiryakovНе может. С чего бы ему выполняться некорректно-то?.. Каждый поток имеет свой собственный стэк и набор регистров. Тогда зачем компилятор призывает использовать "безопасные" функции CRT с окончанием _s? Ведь они и так разделены! _s — это совсем из другой оперы, это не про многопоточность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 11:49 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
скачать исходники libc и libstdc++, и там эти функции должны быть. Например так http://lmgtfy.com/?q=libstdc%2B%2B+src если хочется посмотреть не то, как оно было в исхрдниках, а то. во что оно превратилось после компиляции, то статически линкуетесь с либами и утилитой objdump дизасеемблируете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 12:21 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
bazileДля защиты от различных атак. Например buffer overflow. Никакой связи с многопоточностью здесь нет. Repel Attacks on Your Code with the Visual Studio 2005 Safe C and C++ Libraries Security Features in the CRT А можно какую- нибудь книжку посоветовать о методах программирования, позволяющих защитить свой код от уязвимостей? Я вот в кучах создаю огромные массивы и боюсь переполнений (эти ошибки очень трудно отследить). Может создать какие-то дополнительные проверочные процедуры анализа стека на входе/выходе из функций кода и тд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 12:22 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
chabapokскачать исходники libc и libstdc++, и там эти функции должны быть. Например так http://lmgtfy.com/?q=libstdc%2B%2B+src если хочется посмотреть не то, как оно было в исхрдниках, а то. во что оно превратилось после компиляции, то статически линкуетесь с либами и утилитой objdump дизасеемблируете. Я не использую Линукс из-за низкого качества поддержки. По сути вся поддержка этих систем сводится к древним форумам, где пара троллей глумится над новичками, воображая себя отцами учителями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 12:30 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Изопропилпеределке подлежат функции, использующие общие данные процесса. Можно подробнее? Вводится ли новая функция или заменяется старая? Как это отражается на производительности? Какой-нибудь пример есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 12:33 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVchabapokскачать исходники libc и libstdc++, и там эти функции должны быть. Например так http://lmgtfy.com/?q=libstdc%2B%2B+src если хочется посмотреть не то, как оно было в исхрдниках, а то. во что оно превратилось после компиляции, то статически линкуетесь с либами и утилитой objdump дизасеемблируете. Я не использую Линукс из-за низкого качества поддержки. По сути вся поддержка этих систем сводится к древним форумам, где пара троллей глумится над новичками, воображая себя отцами учителями. Я-бы себе прикупил хороший коммерческий линукс для десктопа при условии что будет телефонная линия поддержки и нормальная служба говорящая на местном языке. Но где в нашей стране (Украине) найти подобное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 12:36 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanV, Writing Secure Code неплохая книга. GermanVЯ вот в кучах создаю огромные массивы и боюсь переполнений (эти ошибки очень трудно отследить). Может создать какие-то дополнительные проверочные процедуры анализа стека на входе/выходе из функций кода и тд. Не вижу связи между ошибками в работе с кучей и проверкой стека. Атаки направленные на кучу (heap corruption, например) не затрагивают стек. Атаки на стек (buffer overrun, например) в свою очередь не затрагивают кучу. Соответственно защита нужная разная. Конкретно защиту массивов в куче делаем путем проверок размеров и индексов чтобы не выходить за их пределы. Компилятор и c-runtime в VS 2012 уже реализуют ряд механизмов защиты программы. Смотри, например, опции компиляции "Basic Runtime Checks" и "Security Check" (C/C++ \ Code Generation). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 13:06 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVИзопропилпеределке подлежат функции, использующие общие данные процесса. Можно подробнее? Вводится ли новая функция или заменяется старая? Как это отражается на производительности? Какой-нибудь пример есть? Заменяются не отдельные функции, а просто проект собирается с другими ключами и другой библиотекой (где все те же функции написаны с учетом многопоточности). Многопоточность стандартной библиотеки, по сравнению с однопоточными вариантами заключается лишь в том, что создание/удаление из нескольких потоков в куче безопасно, и там где стандартные функции использовали глобальные переменные для хранения состояния (rand, strtok...) теперь для этого используются переменные размещенные в TLS(thread local storage), т.е. своя копия у каждого потока, и соответственно потоки не влияют друг на друга, хотя состояние у функций по-прежнему есть. Естественно что доступ к TLS вносит накладные расходы. А в зависимости от криворукости разработчиков библиотеки производительность может упасть в разы. Но часто никакого выбора нет. Во всех современных компиляторах под win/lin используются многопоточные версии стандартных библиотек. В некоторых можно переключаться между одно- и многопоточными. Но например в VS2008 уже нет однопоточной стандартной библиотеки С/С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 13:09 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
[quot bazile]GermanV, Writing Secure Code неплохая книга. Спасибо. bazileНе вижу связи между ошибками в работе с кучей и проверкой стека. Атаки направленные на кучу (heap corruption, например) не затрагивают стек. Атаки на стек (buffer overrun, например) в свою очередь не затрагивают кучу. Соответственно защита нужная разная. Конкретно защиту массивов в куче делаем путем проверок размеров и индексов чтобы не выходить за их пределы. Компилятор и c-runtime в VS 2012 уже реализуют ряд механизмов защиты программы. Смотри, например, опции компиляции "Basic Runtime Checks" и "Security Check" (C/C++ \ Code Generation). Я просто написал все вместе, чтобы было понятно общее направление поиска: корректная работа кода / отлавливание ошибок, которые не ловит компилятор и сборщик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 13:26 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVЯ просто написал все вместе, чтобы было понятно общее направление поиска: корректная работа кода / отлавливание ошибок, которые не ловит компилятор и сборщик. Есть одна стратегия для минимизации таких ошибок (особенно у новичков без опыта) - не использовать низкоуровневые инструменты, там где доступны высокоуровневые. Язык С++ дает достаточно возможностей для этого. Векторы вместо массивов, смарт-указатели вместо голых указателей и т.д. На 99% программ это никак не скажется на производительности. А оставшийся 1% - сначала отладить, а потом профайлером выявить узкие места и оптимизировать их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 13:36 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVчтобы было понятно общее направление поиска: корректная работа кода / отлавливание ошибок, которые не ловит компилятор и сборщик. Это приходит с опытом само. Как в RPG: чем больше багов поймал и убил, тем выше твой уровень. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 13:36 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyМногопоточность стандартной библиотеки, по сравнению с однопоточными вариантами заключается лишь в том, что создание/удаление из нескольких потоков в куче безопасно, и там где стандартные функции использовали глобальные переменные для хранения состояния (rand, strtok...) теперь для этого используются переменные размещенные в TLS(thread local storage), т.е. своя копия у каждого потока, и соответственно потоки не влияют друг на друга, хотя состояние у функций по-прежнему есть. Естественно что доступ к TLS вносит накладные расходы. А в зависимости от криворукости разработчиков библиотеки производительность может упасть в разы. Но часто никакого выбора нет. Во всех современных компиляторах под win/lin используются многопоточные версии стандартных библиотек. В некоторых можно переключаться между одно- и многопоточными. Но например в VS2008 уже нет однопоточной стандартной библиотеки С/С++. А свободно распространяемые однопоточные библиотеки есть? Ведь я могу подцепить любую библиотеку и использовать ее функции вместо поставляемых со средой. Хочется повысить производительность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 13:48 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVВедь я могу подцепить любую библиотеку и использовать ее функции вместо поставляемых со средой. Не можешь. И производительность этим ты повысишь на пару процентов и то только если повезёт. Анализ и оптимизация алгоритма может дать ускорение в разы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 13:54 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЕсть одна стратегия для минимизации таких ошибок (особенно у новичков без опыта) - не использовать низкоуровневые инструменты, там где доступны высокоуровневые. Язык С++ дает достаточно возможностей для этого. Векторы вместо массивов, смарт-указатели вместо голых указателей и т.д. На 99% программ это никак не скажется на производительности. А оставшийся 1% - сначала отладить, а потом профайлером выявить узкие места и оптимизировать их. У меня как раз задача с расчетами на несколько суток (а может и недель). Так что STL с его серьезным падением производительности явно не подходит. Да и я спрашиваю не столько про мелкие хитрушки, сколько про структуру программы. Возможно это будет дополнительная обертка вызовов функций или какая-то сигнальная система глобальных переменных, разбиение на отдельные модули.... Не знаю, пока. И хочу узнать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 13:58 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVА свободно распространяемые однопоточные библиотеки есть? Ведь я могу подцепить любую библиотеку и использовать ее функции вместо поставляемых со средой. Хочется повысить производительность. Я надеюсь вы не собрались использовать однопоточный рантайм в многопоточной программе? Это возможно только для однопоточных программ. Вообще, на современных процах несколько ядер. Вам надо наоборот увеличивать число потоков, а не делать однопоточной программу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 14:01 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVТак что STL с его серьезным падением производительности явно не подходит А пример можно? Чтобы было что обсудить на конкретном решении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 14:07 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВам надо наоборот увеличивать число потоков, а не делать однопоточной программу :) А он несколько программ запустит, каждой по своему куску данных )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 14:07 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVУ меня как раз задача с расчетами на несколько суток (а может и недель). Так что STL с его серьезным падением производительности явно не подходит. STL никак не мешает писать максимально быстрые программы. Тормозит не STL, а алгоритм. Например выделение вектора размером с несколько гигов ну пусть секунды займет в худшем случае. А алгоритм ваш работает неделями. Как это может сказаться на скорости алгоритма? Никак, если не выделять память на каждый чих. Да и никто не мешает обращаться с тем же вектором как с массивом через указатель, а самому вектору оставить управление памятью. Вы для начала прогоните профайлером и посмотрите что реально тормозит (и это на 99% будет ваш код, а не станд.библиотека). А замена стандартных библиотек не поможет в любом случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 14:13 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySTL никак не мешает писать максимально быстрые программы. Тормозит не STL, а алгоритм. Например выделение вектора размером с несколько гигов ну пусть секунды займет в худшем случае. А алгоритм ваш работает неделями. Как это может сказаться на скорости алгоритма? Никак, если не выделять память на каждый чих. Да и никто не мешает обращаться с тем же вектором как с массивом через указатель, а самому вектору оставить управление памятью. Вы для начала прогоните профайлером и посмотрите что реально тормозит (и это на 99% будет ваш код, а не станд.библиотека). А замена стандартных библиотек не поможет в любом случае. А вы попробуйте этот вектор потом заполнить данными и поймете, что обычный массив работает примерно в 5-6 раз быстрее. И алгоритмы тут не при чем. Дело в том, что разработчики STL делают проверки под каждый "чих", а я, например, исходя из структуры кода могу сделать проверку на выход за границы по завершении цикла. STL- в принципе мертвяк. Уж лучше тогда на C# начать писать. Производительность та же (даже наверное будет лучше), а защищенность выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 14:45 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVДело в том, что разработчики STL делают проверки под каждый "чих" Пример покажете или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 14:52 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVА вы попробуйте этот вектор потом заполнить данными и поймете, что обычный массив работает примерно в 5-6 раз быстрее. И алгоритмы тут не при чем. Anatoly MoskovskyДа и никто не мешает обращаться с тем же вектором как с массивом через указатель, а самому вектору оставить управление памятью. GermanV, читайте внимательно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:04 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVУ меня как раз задача с расчетами на несколько суток (а может и недель). Так что STL с его серьезным падением производительности явно не подходит. Да и я спрашиваю не столько про мелкие хитрушки, сколько про структуру программы. Возможно это будет дополнительная обертка вызовов функций или какая-то сигнальная система глобальных переменных, разбиение на отдельные модули.... Не знаю, пока. И хочу узнать. GermanV, мон шер. В этом форуме собрались отпетые любители пооптимизировать С++ исходники. Выкладывай самодостаточный кусок кода и мы посмотрим. Я тоже делаю ставку на то что ты оптимизируешь не то и не там. Синус не является узким местом в расчётах. Он на 99% хардварный. А вот твой алгоритм - это другое дело. Если это численный метод то в нём всегда есть место для компромиссов. По точности там... по методу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:16 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVAnatoly MoskovskySTL никак не мешает писать максимально быстрые программы. ...А вы попробуйте этот вектор потом заполнить данными и поймете, что обычный массив работает примерно в 5-6 раз быстрее. И алгоритмы тут не при чем. Дело в том, что разработчики STL делают проверки под каждый "чих", а я, например, исходя из структуры кода могу сделать проверку на выход за границы по завершении цикла. STL- в принципе мертвяк. Уж лучше тогда на C# начать писать. Производительность та же (даже наверное будет лучше), а защищенность выше. Можно пример кода, с замерами желательно? Или из пальца высосали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:28 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
sherzod_[Можно пример кода, с замерами желательно? Или из пальца высосали? Это уже 100 раз обсуждалось на этом форуме с кучей реальных примеров. Я не собираюсь повторяться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:38 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
ИзопропилAnatoly MoskovskyДа и никто не мешает обращаться с тем же вектором как с массивом через указатель, а самому вектору оставить управление памятью. GermanV, читайте внимательно Тогда в чем смысл? Ведь беда не столько в выделениях памяти, сколько в "писании" по невыделенным участкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:40 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVЭто уже 100 раз обсуждалось на этом форуме с кучей реальных примеров. Я не собираюсь повторяться. Еще дальше отфутболили ))) Все понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:41 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
maytonGermanV, мон шер. В этом форуме собрались отпетые любители пооптимизировать С++ исходники. Выкладывай самодостаточный кусок кода и мы посмотрим. Я тоже делаю ставку на то что ты оптимизируешь не то и не там. Синус не является узким местом в расчётах. Он на 99% хардварный. А вот твой алгоритм - это другое дело. Если это численный метод то в нём всегда есть место для компромиссов. По точности там... по методу. Господи, опять к синусу прицепились. Ну почему не беседовать по сути вопроса, не отвлекаясь на мелкие недочеты, свойственные людям в живой беседе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:42 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVГосподи, опять к синусу прицепились. А нефиг было его выносить в стартовый пост. Повторяю ещё раз, медленно: даже вынос инвариантов за цикл ускоряет алгоритм больше чем самая оптимизированная библиотека. Не говоря уже о раннем отсечении тупиковых ветвей. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:46 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVГосподи, опять к синусу прицепились. Ну почниему не беседовать по сути вопроса, не отвлекаясь на мелкие недочеты, свойственные людям в живой беседе? Извини. А где суть вопроса? Накладные на STL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:48 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVsherzod_[Можно пример кода, с замерами желательно? Или из пальца высосали? Это уже 100 раз обсуждалось на этом форуме с кучей реальных примеров. Я не собираюсь повторяться. Так и надо говорить: "Я мало что понимаю, но буду нести безосновательную чушь и троллить про stl и linux". Если я ошибаюсь, приведите пример кода и мы посмеемся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:48 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Edd.DragonЕще дальше отфутболили ))) Все понятно Ну, например, здесь: /topic/945804&pg=2&hl=stl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:48 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Вводится ли новая функция или заменяется старая? Естественно, заменяется реализация старой. Как это отражается на производительности? Либо никак, либо ухудшается. На самом деле наверное иногда может и увеличиваться, за счет большей локальности обращения к памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:48 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Непонятно. Ты даёшь ссылку на ветку где тебя нет в качестве участника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:13 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanV Ну, например, здесь: /topic/945804&pg=2&hl=stl Вообще-то конкретно в этой теме было разобрано, что задержка в векторе возникает из-за двух факторов: 1) Медленная реализация дебаг режима в VS. 2) в момент выделения памяти для вектора она всегда инициализируется. Т.е. если отделить выделение памяти от алгоритма и запускать все в релиз сборке, никаких тормозов нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:24 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
maytonНепонятно. Ты даёшь ссылку на ветку где тебя нет в качестве участника. Так может это Poslushnik. Ну по крайней мере религия у них одна и та же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:26 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskymaytonНепонятно. Ты даёшь ссылку на ветку где тебя нет в качестве участника. Так может это Poslushnik. Ну по крайней мере религия у них одна и та же. Ну конечно-же мы тут все - психоаналитики... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:28 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyТ.е. если отделить выделение памяти от алгоритма и запускать все в релиз сборке, никаких тормозов нет. А вот пример когда STL даже круче по скорости С-шного стиля. http://www.sql.ru/forum/actualthread.aspx?tid=791634 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:28 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА вот пример когда STL даже круче по скорости С-шного стиля. http://www.sql.ru/forum/actualthread.aspx?tid=791634 А, не, это не то - там задержка в С из-за float. Ну ничего, зато std::sort точно быстрее С-шного qsort :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:36 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, std::generate_n тоже быстрее С-стиля, если сишник будет заполнять через цикл с индексом :). Например Код: plaintext 1. будет медленнее (у меня в 2 раза, i7, vs2012, x64) Код: plaintext 1. 2. из-за использования инкрементирования указателя что более предсказуемо, а если сишник тоже применит ++ указателей, то по крайней мере будет ничья :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:56 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
sherzod_, Я боюсь только что это все не аргумент для человека, который впервые видит С/С++ (судя по этой теме ), но уже уверен что STL тормозит :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 17:39 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВообще-то конкретно в этой теме было разобрано, что задержка в векторе возникает из-за двух факторов: 1) Медленная реализация дебаг режима в VS. 2) в момент выделения памяти для вектора она всегда инициализируется. Т.е. если отделить выделение памяти от алгоритма и запускать все в релиз сборке, никаких тормозов нет. Не понимаю, зачем врать? Там и для релиз приведены данные замеров: падение в 2,5 раза. А что бывает заполнение памяти без ее выделения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 18:39 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА, не, это не то - там задержка в С из-за float. Ну ничего, зато std::sort точно быстрее С-шного qsort :) qsort быстрее. Сам ставил эксперименты на реальных данных, и любой может тоже их проделать. Зачем врать? Во имя религии STL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 18:41 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanV, Никто не говорил что безопасность контейнеров STL дается бесплатно. Цена - придется слегка подумать как сделать скорость не хуже. Я выше написал из чего состоит замедление и как его избежать. В том коде где разница 2.5, не выполнена одна из рекомендаций - отделить выделение памяти от алгоритма который ее использует. Да и методика подсчета не очень точная, там время работы алгоритма достаточно мало, что может давать погрешности измерения. Заполнение памяти без выделения не бывает. Но никто этого и не требует. Про qsort, когда у меня будет время - померяемся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 19:17 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVAnatoly MoskovskyА, не, это не то - там задержка в С из-за float. Ну ничего, зато std::sort точно быстрее С-шного qsort :) qsort быстрее. Сам ставил эксперименты на реальных данных, и любой может тоже их проделать. Зачем врать? Во имя религии STL? Давайте вместе тестить. Я тоже слышал такую тему что std::sort быстрее но очевидно что есть нюансы в самом тесте. Как вы его реализовали? Какой тип данных в шаблоне? Каков объём выборки? Какие начальные условия? Большинство gap-ов в таймингах образуются оттого что новички не учитывают время бутстрапа самой процедуры, статических конструкторов в main() и прочих инициализаций. Компилляторы, ключи компилляции тоже важны наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 19:21 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Но например в VS2008 уже нет однопоточной стандартной библиотеки С/С++. Есть, но только статическая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 20:07 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
maytonGermanVпропущено... qsort быстрее. Сам ставил эксперименты на реальных данных, и любой может тоже их проделать. Зачем врать? Во имя религии STL? Давайте вместе тестить. Я тоже слышал такую тему что std::sort быстрее но очевидно что есть нюансы в самом тесте. Как вы его реализовали? Какой тип данных в шаблоне? Каков объём выборки? Какие начальные условия? Большинство gap-ов в таймингах образуются оттого что новички не учитывают время бутстрапа самой процедуры, статических конструкторов в main() и прочих инициализаций. Компилляторы, ключи компилляции тоже важны наверное. Ну дак а что там тестить :). Очевидно же что встроенное сравнение занимающее одну инструкцию (для простых типов), выполнится быстрее целого вызова функции которой в qsort ну никак не избежать (ибо уже скомпилен), при прочих равных условиях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 20:22 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
Почему собственно вопрос возник: тут вот ( 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". Может кто-нить пояснит, что они имеют ввиду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 21:23 |
|
||
|
VS2012: Как посмотреть реализацию функции sin(x)?
|
|||
|---|---|---|---|
|
#18+
GermanVМожет кто-нить пояснит, что они имеют ввиду? Чтобы понять что они имеют ввиду, тебе надо изучить что такое потоки, как они работают и какие создают опасности. Читай Рихтера. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 21:31 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2020560]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 163ms |

| 0 / 0 |
