Добрый день!
Подскажите, что делать в такой ситуации:
Есть цикл, который распараллелен с помощью OpenMP
Например:
#pragma omp parallel for
for( int indexW = 0; indexW < w; indexW ++ )
{
BYTE &dst = img.at( indexW );
dst /= 2;
}
Вокруг него поставлены маркеры VMProtectBeginUltra.
для разработки использую visual studio 2008 + intel C++ composer XE 2011 Update 7.
Программа падает на этом цикле, если используется следующее сочетание:
- платформа - x64
- компилятор - intel
- конфигурация - release
- openmp включен
Во всех остальных вариантах - работает, то есть например, если исопльзовать компилятор из visual studio - все в порядке
архив с проектом, исходником и бинарниками.
На самом деле проблема была в реальном проекте, начал копать и оказалось, что даже в таком простом месте воспроизводится бага. В исходном проекте было немного по-другому. Там было два цикла, оба распараллелены через openmp. У одного именованный маркер сохранялся и был виден в GUI VMprotect, а у другого - маркер почему-то отображался неименованным. Ну и программа падала.
Подобные штуки у меня периодически всплывают и решать приходится перестановкой маркера или инструкций местами. Что я делаю не так? Или это бага компилятора/vmprotect?