Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 53 • Страница 3 из 3<  1  2  3
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Цитата:
б) нет, не обязательно. Хотя вроде можно и самому (напр., даже в Task Manager есть функция Set Affinity, т.е. привязать процесс к какому-то определенному процу, ИМХО, такое же можно делать с потоками, но надо читать MSDN)

SetThreadAffinityMask - жесткая привязка к определенному процессору.
SetIdealThreadProcessor - попросить ОС запустить поток на определенном процессоре, т.е. на усмотрение планировщика.

mein
Цитата:
Или по другому: нужно ли непосредственно указывать какому потоку на каком ядре работать?
Создаем поток с флагом Suspended, устанавливаем affinity mask, размараживаем потоки.

_________________
Ку ку



Партнер
 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Посмотрел я на исходник Black_mirror и решил тоже на асме чего-нить накалякать. :)
Вот функция (вставлять в мою предыдущую прогу и заменить вызов placeQueen на placeQueenAsm):
Код:
void placeQueenAsm( unsigned col, unsigned ls, unsigned ns, unsigned rs )
{
    int array[4*64];
    __asm
    {
        push    ebp
        lea     edi, array
        mov     ebx, ls
        mov     edx, rs
        mov     esi, ns
        mov     ebp, 0      // ebp = col
place:
        cmp     ebp, N
        jne     cont0
        inc     count
        jmp     exitrecursion
cont0:
        mov     eax, ebx    // row = ls&ns&rs
        and     eax, esi
        and     eax, edx
        stc
        rcl     ebx, 1
        stc
        rcr     edx, 1
        mov     [edi+4], ebx
        mov     [edi+8], esi
        mov     [edi+12], edx
        and     ebp, ebp
        jne     cont1
        mov     ecx, N
        shr     ecx, 1
        shr     eax, cl     // if (!col) row >>= N/2
cont1:
        and     eax, eax
        jz      exitpoint   // while (row)
        mov     ecx, eax
        dec     eax
        and     eax, ecx    // row &= row-1
        xor     ecx, eax    // current = row_old ^ row
        push    eax
        or      eax, ebp
        jne     cont2
        bt      N, 0
        jnc     cont2
        shl     count, 1    // if (!(col||row)&&(N&1)) count <<= 1
cont2:
        pop     eax
        mov     [edi], eax
        add     edi, 16
        inc     ebp
        mov     eax, ecx
        shl     eax, 1
        not     eax
        and     ebx, eax    // ls & ~(current << 1)
        mov     eax, ecx
        shr     eax, 1
        not     eax
        and     edx, eax    // rs & ~(current >> 1)
        not     ecx
        and     esi, ecx    // ns & ~current
        jmp     place
exitpoint:
        and     ebp, ebp
        je      exitPQ
exitrecursion:
        sub     edi, 16
        mov     eax, [edi]
        mov     ebx, [edi+4]
        mov     esi, [edi+8]
        mov     edx, [edi+12]
        dec     ebp
        jmp     cont1
exitPQ:
        pop     ebp
    }
}

Результат (16 ферзей): 10.405 секунд против 12.048 у Black_mirror. Хе-хе. :hitrost: (Результат placeQueen на С++ 13.068).
exe-шник можно взять здесь.


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
Билли Бонс прикольно, но хочется быстрее. Я вот свой "массивный" метод никак не могу доделать - щас времени нема. Пока он отстаёт от ваших в два раза, но надеюсь что смогу внести коррективы.


 

Member
Статус: Не в сети
Регистрация: 31.01.2004
Откуда: moskow
Билли Бонс http://www.wasm.ru/forum/viewtopic.php?id=15169
загляни сюда, там последний его вариант модифицированный Jakob'ом при F=16
5.992с против твоего 9.875с на селероне-Д 3,6ГГц


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Locki поверь, если собрать сишный код пирата интеловским компайлером с включенной поддержкой OpenMP, то асм вариант будет в пролете.

_________________
Ку ку


 

Locki
Все правильно, программу Билли Бонса нужно сравнивать с программой версии 1.1, так как в версии 1.2 используется другой алгоритм. Но если там заменить BSF на (A and -A), то картина существенно меняется ;)

Версию 1.2 без этого злополучного BSF я назвал версией 1.3 (брать здесь), теперь там можно и интервал обновления менять.


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Black_mirror молодец, хорошо оптимизировал (хотя я тем не менее предпочитаю реализации на С++ - универсальней). Про другой алгоритм, ты что имеешь в виду? Рекурсию раскрыл?


 

Member
Статус: Не в сети
Регистрация: 31.01.2004
Откуда: moskow
Билли Бонс не а... универсальна Java -)
Есть предложение, переписать на Java и тестить телефоны, смартфоны и КПК -)
Добавлено спустя 2 минуты, 47 секунд
Daemon
Цитата:
Locki поверь, если собрать сишный код пирата интеловским компайлером с включенной поддержкой OpenMP, то асм вариант будет в пролете.

С трудом что то как то верится...


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Цитата:
Locki поверь, если собрать сишный код пирата интеловским компайлером с включенной поддержкой OpenMP, то асм вариант будет в пролете.

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

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 16.11.2004
Откуда: Пенза
Сделал свою прогу. В архиве исходник и четыре exe-шника для 15,16,17 и 18 ферзей.
http://cp.people.overclockers.ru/cgi-bin/dl.pl?id=16486&filename=Ferz.zip
Время выполнения на Celeron 2.0@3.0
15 - 1062 мс
16 - 7141 мс
17 - 50156 мс
18 - 371437 мс


 

Advanced member
Статус: Не в сети
Регистрация: 12.06.2004
Откуда: Николаев, UA
mein
Цитата:
Я сделаю . Есть идеи, нужно немного времени, а ведь ещё до ассемблера не дотянулись ... Постараюсь завтра ускорить.

Locki
Цитата:
кстати по мне на асме условия программировать -это [censored], легче застрелиться....

Но тем не менее когда я програмил на паскале его скорость обработки циклов просто ужасала - помогали асмовые вставки.

_________________
Опасайтесь ваших желаний - они могут сбыться... TSC! Russia Member; *Cofradia Intel*; пенсионер оверклокинга.


 

В версии 1.3 были баги с многопоточностью и интервалом обновления, исправленная версия здесь.


 

Member
Статус: Не в сети
Регистрация: 11.04.2004
Откуда: СПБ
Locki писал(а):
Есть предложение, переписать на Java и тестить телефоны, смартфоны и КПК -)

виртуальная машина вещь не такая уж и быстрая :) ...


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 53 • Страница 3 из 3<  1  2  3
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan