Здравствуйте, remark, Вы писали:
R>>>Буду рад услышать любые отзывы, замечания и предложения. А>>Андронный коллайдер? R>Хм... Это замечание или предложение?
ИМХО звучит также устрошающе
Здравствуйте, Alxndr, Вы писали:
R>>Буду рад услышать любые отзывы, замечания и предложения.
A>Мелкая придирка: сабж в исходном коде повсеместно. A>Неудобно читать редакторами, в которых табуляция не равна 4м пробелам.
Здравствуйте, remark, Вы писали:
R>Готов ответить на любые вопросы, связанные с инструментом, в этом топике или здесь:
Прошу прощение за дурацкий вопрос , но на скорую руку никак не найду, c++ 98 — Win32 Api код с помощью этой библиотеки можно проверять ?
Здравствуйте, dip_2000, Вы писали:
R>>Готов ответить на любые вопросы, связанные с инструментом, в этом топике или здесь: _>Прошу прощение за дурацкий вопрос , но на скорую руку никак не найду, c++ 98 — Win32 Api код с помощью этой библиотеки можно проверять ?
В целом — можно. Зависит от того, какие именно функции из Win32 Api используются. В данный момент поддерживаются не все. Но некоторые модификации в код надо внести в любом случае.
Вот здесь можно посмотреть пример тестирования алгоритма под Win32 Api, который использует Event'ы и Semaphore'ы: http://groups.google.ru/group/comp.programming.threads/msg/30c2ec41c4d498a2
Здравствуйте, remark, Вы писали:
R>В целом — можно. Зависит от того, какие именно функции из Win32 Api используются. В данный момент поддерживаются не все. Но некоторые модификации в код надо внести в любом случае.
в код тестируемый или в код библиотеки ?
Планируется ли развитие библиотеки в этом направлении ?
Здравствуйте, dip_2000, Вы писали:
R>>В целом — можно. Зависит от того, какие именно функции из Win32 Api используются. В данный момент поддерживаются не все. Но некоторые модификации в код надо внести в любом случае.
_>в код тестируемый или в код библиотеки ?
В тестируемый.
_>Планируется ли развитие библиотеки в этом направлении ?
Да, планируется. В смысле поддержки WaitForMultipleObjects, SignalObjectAndWait и т.д.
R>>std::atomic<int> x;
R>>x($).fetch_add(1);
R>>// или просто
R>>x($) += 1;
R>>
LD>Извините за дурацкий вопрос. LD>Что значает символ $ в этом коде?
Это вспомогательная конструкция для сбора отладочной информации (имя файла, номер строки, имя функции). $ — это макрос. () — это вызов operator() у объекта.
Здравствуйте, remark, Вы писали:
R>Это вспомогательная конструкция для сбора отладочной информации (имя файла, номер строки, имя функции). $ — это макрос. () — это вызов operator() у объекта.
Я просто сначала подумал, что $ это что-то из следующего стандарта C++, или что это имеет какое-то отношение к многопочности.
Спасибо за ответ.
Здравствуйте, remark, Вы писали:
R>Хочу анонсировать инструмент, который я разработал. Инструмент называется Relacy Race Detector. Это — верификатор алгоритмов синхронизации для расслабленных моделей памяти (в особенности C++0x). Инструмент предназначен для тестирования как традиционных mutex-based алгоритмов (основанных на mutex, condition_variable, semaphore, event), так и lock-free алгоритмов (основанных на С++0х std::atomic<> и std::atomic_thread_fence), а так же для смешанных алгоритмов. Relacy точно моделирует расслабленную ISO C++0x модель памяти (relaxed, acquire, release, acq_rel, seq_cst атомарные операции и барьеры памяти), но может так же использовться и для верификации алгоритмов для других моделей памяти (x86, PPC, Java, CLI).
Основная доработка релиза — это поддержка верификации Java/CLI (aka .NET) алгоритмов (но это всё ещё С++ библиотека).
Поддержка заключается в слудущем.
— Поддержка GC. Т.е. просто выделяем память и забываем. GC решает некоторые проблемы, связанные с lock-free алгоритмами, — безопасное освобождение памяти и ABA-проблема. Режим GC можно использовать и при верификации С++ алгоритмов — просто определите макрос RL_GC.
— Поддержка Java и CLI моделей памяти. Т.е. более сильный барьер памяти и более сильные атомарные операции. Так же для Java происходит автоматичесий эмит барьера памяти между volatile сохранением и volatile загрузкой.
— Поддержка основных Java и CLI API, связанных с синхронизацией.
Для CLI это — rl::nvolatile<> эмулирует volatile переменные, rl::nvar<> эмулирует обычные переменные. Interlocked операции доступны в пространстве имён rl::Interlocked (например, rl::Interlocked::CompareExchange()). Так же доступны rl::Thread::MemoryBarrier(), rl::Thread::VolatileRead(), rl::Thread::VolatileWrite() and rl::Thread::SpinWait().
Для Java доступны соотв. rl::jvolatile<>, rl::jvar<>, rl::AtomicInteger and rl::AtomicLong.
Однако богатые библиотеки поддержки Java/CLI (такие как ConcurrentQueue и т.д.) не эмулируются. Тем не менее можно использовать мьютексы, переменные условной синхронизации, семафоры и события из API С++, POSIX или Windows.
Так же надо отметить следующий момент. В Java/CLI фактически нет таких вещей как гонки (data races) и неинициализированные переменные. Это вынуждает просто отключить некоторые типы автоматически детектируемых ошибок (гонки и достпы к неинициализированным переменным). С т.з. верификации алгоритмов — это плохо. Однако в Java/CLI режимах по-прежнему можно использовать rl::var<>, по-сути это вновь позволит автоматически детектировать упомянутые типы ошибок. Т.е. если Вы уверены, что доступ к какой-то переменной должен быть только в "однопоточном стиле" (например, все доступы защищены мьютексом), то для такой переменной можно использовать rl::var<>.
По-прежнему R>Буду рад услышать любые отзывы, замечания и предложения.
Здравствуйте, remark, Вы писали:
R>Я выложил версию 1.2 Relacy Race Detector. Можно скачать здесь: R>http://groups.google.com/group/relacy/files
R>Основная доработка релиза — это поддержка верификации Java/CLI (aka .NET) алгоритмов (но это всё ещё С++ библиотека).
Здравствуйте, Кодт, Вы писали:
R>>Хочу анонсировать инструмент, который я разработал. Инструмент называется Relacy Race Detector. Это — верификатор алгоритмов синхронизации для расслабленных моделей памяти (в особенности C++0x).
К>Статью для журнала не хочешь написать?
Когда придёт время, возможно, напишу. Сейчас — нет. По нескольким причинам.
Во-первых, библиотека сейчас в очень активном развитии. Плюс часть старых интерфейсов пока меняется.
Во-вторых, сама модель памяти C++0x пока не до конца зафиксирована. Ещё возможно что-то измениться по отношению к барьерам памяти. Плюс я сам же практически убедил Hans Boehm и Peter Dimov внести некоторые изменения в правила но отношению к взаимодействию барьеров памяти и атомарных операций: http://groups.google.com/group/comp.programming.threads/msg/d2cb5e1f98bf0afa
И возможно удастся убедить внести ещё изменения по отношению к барьерам памяти: http://groups.google.com/group/comp.programming.threads/msg/07c810b38be80bbb
Это всё придётся отражать и в Relacy. Ну и там всякие мелочи, типа за последний месяц, например, переименовали все упоминания 'swap' в атомарной библиотеки на 'exchange'
В-третьих, у библиотеки такого плана не предполагается очень большого числа пользователей. Т.е. это не ширпотреб, в некотором смысле. Хотя, конечно, по-моему мнению, библиотекой могло бы пользоваться значительно больше разработчиков, чем будет. Тем не менее, как видишь, пока за неделю никто активного интереса тут не проявил, и со мной тоже никто с rsdn не связывался касательно библиотеки.
remark пишет: > > К>Статью для журнала не хочешь написать? > > > Когда придёт время, возможно, напишу. Сейчас — нет.
И зря. А потом обновишь статью. (и реклама и объяснения на пальцах и ...)
> В-третьих, у библиотеки такого плана не предполагается очень большого > числа пользователей. Т.е. это не ширпотреб, в некотором смысле. Хотя, > конечно, по-моему мнению, библиотекой могло бы пользоваться значительно > больше разработчиков, чем будет. Тем не менее, как видишь, пока за > неделю никто активного интереса тут не проявил, и со мной тоже никто с > rsdn не связывался касательно библиотеки.
Ну необязательно же всем писать, особенно если по сути нечего сказать.
Библиотека интересна. Например, я, будет время, попробую. Думаю многие
также.
В nondigit символа нет, но MSVC зараза переваривает
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Известно что любой измерительный инструмент вносит собственные возмущения в измерямый процесс.
Вопрос состоит в следующем: возможны ли такого рода возмущения и какие?
Ну т.е. false positives нет — это как я понимаю методологически, но что-то мне говорит что они в принципе
возможны самим фактом добаления инструмента в процесс. Или я ошибаюсь?
Здравствуйте, c-smile, Вы писали:
CS>Известно что любой измерительный инструмент вносит собственные возмущения в измерямый процесс. CS>Вопрос состоит в следующем: возможны ли такого рода возмущения и какие?
CS>Ну т.е. false positives нет — это как я понимаю методологически, но что-то мне говорит что они в принципе CS>возможны самим фактом добаления инструмента в процесс. Или я ошибаюсь?
false positives (т.е. когда библиотека выдаёт ошибку, которой на самом деле нет) в данном контексте не сильно страшны, т.к. после ручного анализа будет видно, что это false positive, и ошибку в библиотеке можно будет исправить. Теоретически, и до сего момента практически, все false positives можно исправить, т.е. у библиотеки достаточно информации, что точно сказать, есть тут, например, data race или нет.
false negatives (т.е. когда библиотека не выдаёт ошибку, которая на самом деле есть) тут, конечно, очень неприятны. Основной их источник может быть или ошибка в библиотеке, либо что я пока намеренно не реализовывал поддержку детектирования каких-то ситуаций. Ну тут я могу только посоветовать, для обеспечения собственной уверенности, вначале сделать ряд тестов, что бы убедиться "собственными глазами", что библиотека находит ошибку в тесте с ошибкой, и не находит ошибок в тесте без ошибок (кстати нетривиальные тесты можно отправить мне, что бы я их включил в набор юнит-тестов).
Что касается именно каких-то принципиальных "возмущений", которые не связаны с ошибками в библиотеке... сложно сказать... на данный момент я ничего такого не вижу. Можно так, ты говоришь какую-то гипотезу относительно того какое "возмущение" возможно, тогда я точно говорю, возможно оно или нет.
Здравствуйте, c-smile, Вы писали:
CS>false positives нет — это как я понимаю методологически, но что-то мне говорит что они в принципе CS>возможны самим фактом добаления инструмента в процесс. Или я ошибаюсь?
Измеряемого процесса как такового и нет, это же симулятор. Ошибки могут быть только методологические, за счёт неверной эмуляции объектов синхронизации, но это исправимо.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
GN>Здравствуйте, c-smile, Вы писали:
CS>>false positives нет — это как я понимаю методологически, но что-то мне говорит что они в принципе CS>>возможны самим фактом добаления инструмента в процесс. Или я ошибаюсь?
GN>Измеряемого процесса как такового и нет, это же симулятор. Ошибки могут быть только методологические, за счёт неверной эмуляции объектов синхронизации, но это исправимо.
Ну в принципе, да. Ничего не выполняется, и я ничего не измеряю. Работа программы проактивно симулируется.