The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Разработчики DragonFly BSD выявили ошибку в процессорах AMD"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Для слежения за появлением новых сообщений в нити, нажмите "Проследить за развитием треда".
. "Разработчики DragonFly BSD выявили ошибку в процессорах AMD" –2 +/
Сообщение от pavlinux (ok), 06-Мрт-12, 13:56 
Я конешн понимаю, ускорение и всё такое... но юзать рекурсию в ядре это перебор...

843 static void
844 fill_sons_in_loop (const struct loop *loop, basic_block bb,
845                    basic_block *tovisit, int *tv)
846 {
847   basic_block son, postpone = NULL;
848
849   tovisit[(*tv)++] = bb;
850   for (son = first_dom_son (CDI_DOMINATORS, bb);
851        son;
852        son = next_dom_son (CDI_DOMINATORS, son))
853     {
854       if (!flow_bb_inside_loop_p (loop, son))
855         continue;
856
857       if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
858         {
859           postpone = son;
860           continue;
861         }
862       fill_sons_in_loop (loop, son, tovisit, tv);
863     }
864
865   if (postpone)
866     fill_sons_in_loop (loop, postpone, tovisit, tv);
867 #ifdef __AMDCPUBUG_DFLY01_AVAILABLE__
868   cpu_amdcpubug_dfly01();
869 #endif
870 }

cpu_amdcpubug_dfly01() - это вот это

static __inline void cpu_amdcpubug(void) {

    __asm __volatile("nop" : : : "memory");
}

Драгонфлайщеги изобрели виласипед с названием memory_barrier !!! :)

http://lxr.linux.no/#linux+v3.2.9/include/linux/compiler-gcc...


#if defined(__i386__) || defined(__x86_64__)
#define barrier() asm volatile("" ::: "memory")
#define mb() __sync_synchronize()

#define smp_mb()        mb()
# define smp_rmb()      barrier()
# define smp_wmb()      barrier()
...

Кстати, из того же AMD CPU Programming Guide,
в особых случаях, и в частности на SMP, рекомендуют не забывать про:  

#define mb()    asm volatile("mfence":::"memory")
#define rmb()   asm volatile("lfence":::"memory")
#define wmb()   asm volatile("sfence" ::: "memory")

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Разработчики DragonFly BSD выявили ошибку в процессорах AMD, opennews, 06-Мрт-12, 13:49  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру