Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> msvc2008 bug??? 
:(
    Опции темы
Kallikanzarid
Дата 10.12.2008, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



GoldFinch, нет уж - назвался груздем - полезай в кузов. Либо чисто на ассемблере - ты ведь его сторонник - либо чисто на С++. Во втором случае, ясное дело, будут беспристрастные судьи, которые будут получать исходники и батники, запускающие компилятор, и выдавать результаты; исходники друг от друга будем хранить в тайне. В любом случае, я уже сутки жду от тебя задачу.
PM MAIL   Вверх
GoldFinch
Дата 10.12.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Kallikanzarid, так мы что тестировать будем? "С++ vs асм" или "Kallikanzarid vs GoldFinch"?
PM MAIL ICQ   Вверх
Kallikanzarid
Дата 10.12.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



Давай второе.
PM MAIL   Вверх
GoldFinch
Дата 10.12.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



я тоже суп както не очень.

вобщем я завтра вечером те тестовый алгоритм и методику измерения напишу

десятая страничка однако....
PM MAIL ICQ   Вверх
J0ker
Дата 10.12.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(GoldFinch @  10.12.2008,  20:10 Найти цитируемый пост)
J0ker, береш справочник Агнера Фога, и пишешь код не хуже того что генерит компилятор.

yуууу
"береш справочник по шахматам и обыгрываеш Каспарова"  smile 

Цитата(GoldFinch @  10.12.2008,  20:10 Найти цитируемый пост)
Компилятор хорош тем что избавляет от рутины за счет неидеальной кодогенерации и отсутствия средств управления кодогенерацией

я вам уже показал, что "неидеальность" обычно вызвана непониманием - вы упорно игнорируете этот факт  smile 

Цитата(GoldFinch @  10.12.2008,  20:10 Найти цитируемый пост)
Может там и будет офигенное распараллеливание, но вот идиотские неоптимальности типа 
push reg32 / fld dword [m32real] / fstp dword [esp]
вместо
push dword [m32real]
всеравно останутся 

упрямство - достоинство сами знаете кого  smile 
я вам знаете что советую
напишите-ка на ассемблере вычислительный модуль BIONIC'а и запустите - а мы посмотрим, примет ли сервер ваши "оптимизированные" вычисления  smile 


--------------------
user posted image
PM MAIL   Вверх
GoldFinch
Дата 11.12.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Kallikanzarid, вобщем я подумал-подумал, даже на форуме поспрашивал на каком алгоритме может загнуться С++ в отличие от асма, да только подходящего ответа не получил, да и сам ничего толкового не придумал... Что попроще и 100% сработает - неинтересно, а то что сложно  - самому долго писать. Пришлось придумать нормальную задачу, близкую к реальной.

Нужно написать функцию bool __stdcall Tick(float x);
Функция принимает на вход некореллированную последовательность равномерно распределенных вещественных чисел Xi, 0<=Xi<A<=1
Для i от 0 до N-1 параметр распределения A равен 1, для чисел с i от N до 2*N-1 параметр распределения A равен 0.5
Функция должна возвращать 1 при i<N+D и 0 при i>=N+D, где D - задержка срабатывания функции.
Производительность функции оценивается произведением времени работы функции T за одну итерацию на задержку срабатывания функции D, либо суммой времени выполнения D итераций, это значение должно быть минимально.
Допускается не более 5% ложных срабатываний (возврата 0 при i<N), причем N>100, первые 100 тактов ложные срабатывания не считаются.

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

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

Примерный код программы тестирования:
Код

int main()
{
//переменные
bool (__stdcall *Tick)(float x); //указатель на функцию

unsigned int RandSeed = GetTickCount(); //ядро ГПСЧ
float x; //входное данное функции
bool y; //выходное данное функции
int i; //переменная цикла
int N=10000; //длительность этапов измерения

__int64 /*long long*/ Start; //счетчик тактов до вызова
__int64 /*long long*/ Fin; //счетчик тактов после вызова
int Latency=0; //искомая задержка срабатывания, в тактах

(FARPROC &) Tick = GetProcAddressA(
    LoadLibraryA("showdown.dll"), //имя длл можно брать и из командной строки
    0x80000001 //функция с ординалом 1
    );
//меняем приоритет процесса
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);

//начинаем 1й этап измерений - разгон функции
for (i=0;i<100;i++) //первые 100 итераций
{
    RandSeed = 134775813 * RandSeed + 1; //получаем новое число ГПСЧ
    x=RandSeed/4294967295.0; //случайное число от 0<=x<1
    (*Tick)(x);
};
//начинаем 2й этап измерений - отлов ложных срабатываний
for (i=0;i<N-100;i++) //итерации от 100 до N
{
    RandSeed = 134775813 * RandSeed + 1; //получаем новое число ГПСЧ
    x=RandSeed/4294967295.0; //случайное число от 0<=x<1
    y=(*Tick)(x);
    if(0==y)return -1; //возврат ошибки - ложное срабатывание
};
//начинаем 3й этап измерений - замер производительности
for (i=0;i<N;i++) //итерации от N до 2*N, или пока функция не сработает (вернет 0)
{
    RandSeed = 134775813 * RandSeed + 1; //получаем новое число ГПСЧ
    x=(RandSeed/2)/4294967295.0; //случайное число от 0<=x<0.5
    Sleep(1); //ждем следующего кванта времени
    __asm {
        cpuid //"чистим трубы" (U&V pipes ;))
        rdtsc //читаем счетчик тактов ЦПУ
        mov dword ptr [Start],eax //сохраняем в переменную младший dword
        mov dword ptr [Start+4],edx //сохраняем в переменную старший dword
    };
    y=(*Tick)(x);
    __asm {
        cpuid //"чистим трубы" (U&V pipes ;))
        rdtsc //читаем счетчик тактов ЦПУ
        mov dword ptr [Fin],eax //сохраняем в переменную младший dword
        mov dword ptr [Fin+4],edx //сохраняем в переменную старший dword
    };
    Latency = Latency + (Fin-Start);
    if(0==y)
    { //функция сработала
        return Latency; //возврат времени задержки
    };
};
return -2; //возврат ошибки - пропуск срабатывания
};
//Программа возвращает результат в системной переменной ERRORLEVEL (в тактах ЦПУ)

Размер бинарника, используемой виртуальной памяти неограничен, но будем считать что прога будет работать на компе с 512-1Гб ОЗУ


Что-то может следует откорректировать, чтото уточнить, в целом думаю задача получилась неплохая =)
PM MAIL ICQ   Вверх
Kallikanzarid
Дата 11.12.2008, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



Уточни парочку моментов:
1) Речь идет о нормальном распределении случайных чисел?
2) Что именно должна делать функция? Как я понимаю, ее выходное значение зависит от того, какой по счету раз ее вызвали и совершенно не зависит от передаваемого аргумента? Или я неправильно понял?
3) Как функция получит значение N?
PM MAIL   Вверх
GoldFinch
Дата 11.12.2008, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



1) о равномерном, но можно сделать и нормальным. 
Цитата(GoldFinch @  11.12.2008,  21:13 Найти цитируемый пост)
некореллированную последовательность равномерно распределенных вещественных чисел Xi

2) функция должна определить что параметры входной последовательности изменились и вместо 1 вернуть 0
например она должна вычислять матожидание или дисперсию
фактически ее выходное значение должно както зависеть от предидущих значений
Как именно зависеть - решать тебе. Чтобы хранить эти значения можно использовать глобальные переменные, массивы, буферы, что захочешь.
3) N и i ей знать не надо, только принимать входные числа Xi, както накапливать их и возвращать

Выглядит это так
Код

i   N-5  N-4  N-3  N-2  N-1  N    N+1  N+2  N+3  N+4  N+5
A   1    1    1    1    1    0.5  0.5  0.5  0.5  0.5  0.5
Xi  0.9  0.2  0.6  0.7  0.1  0.3  0.4  0.1  0.2  0    0.1
y   1    1    1    1    1    1    ?    ?    ?    0    0
                                  <--- D --->


PM MAIL ICQ   Вверх
J0ker
Дата 11.12.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



что-то мне мнится, что производительность в данной задаче будет упираться в алгоритм, а не в то, на чем он написан  smile 


--------------------
user posted image
PM MAIL   Вверх
GoldFinch
Дата 11.12.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



J0ker, ну Kallikanzarid же сказал что ему интереснее "Kallikanzarid vs GoldFinch" чем "С++ vs асм"...
PM MAIL ICQ   Вверх
J0ker
Дата 11.12.2008, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



ну в таком случае мне не ясно, зачем вы нивелировали задачу 5-ю процентами - ИМХО скорость и качество определения параметра распределения должны входить в оценку результата умственного онанизма оппонентов  smile 



--------------------
user posted image
PM MAIL   Вверх
GoldFinch
Дата 11.12.2008, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



J0ker, а как тогда оценку рассчитывать? тем более что если не задавать Pлс, то возможно будут решения с максимальным быстродействием и принципом "угадал\неугадал"
PM MAIL ICQ   Вверх
J0ker
Дата 11.12.2008, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(GoldFinch @  11.12.2008,  23:00 Найти цитируемый пост)
J0ker, а как тогда оценку рассчитывать?

ну так об этом надо и договариваться

Цитата(GoldFinch @  11.12.2008,  23:00 Найти цитируемый пост)
тем более что если не задавать Pлс, то возможно будут решения с максимальным быстродействием и принципом "угадал\неугадал" 

да, но качество тогда снизится вдвое, при этом в формуле должна участвовать задержка D - в этом случае такой алгоритм станет заведомо проигрышным

Это сообщение отредактировал(а) J0ker - 11.12.2008, 23:06


--------------------
user posted image
PM MAIL   Вверх
GoldFinch
Дата 11.12.2008, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



J0ker, проще задать вероятность не менее 95% чем выдумывать сомнительные интегральные критерии
PM MAIL ICQ   Вверх
Kallikanzarid
Дата 12.12.2008, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



GoldFinch, лучше взять нормальное распределение. И использовать не самодельную эвристику, а boost::random.

А вообще задача очень интересная  smile 
PM MAIL   Вверх
Страницы: (11) Все « Первая ... 8 9 [10] 11 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.