Re[9]: Где НЕТ места .Net
От: Слоноежик  
Дата: 15.01.05 02:40
Оценка: 18 (1) +1
Здравствуйте, FR, Вы писали:


FR>>Все ведь зависит от того, как Microsoft Реализовала JIT. Ведь, например, компилятор может решить, что на данном процессоре данную IL команду можно транслировать в код, использующий MMX, SSE и т.д. Обычный же компилятор без указания этого делать не будет, поскольку полученный код может не работать на всех процессорах.

Эта фраза звучит от человека ни разу не видевшего ММХ и SSE, и не понимающего специализированность этих расширений команд. Они слишком спецефичны для использования и потому не могут использоваться компиляторами без напоминания

Пример:
Есть массив


BYTE a[0x4000];
BYTE b[0x4000];
BYTE c[0x4000];


и функция суммирует элементы массивов a и b и записывает результат в c. если переполнение, то записывается максимально возможное число(т.е 255)

Реализация без MMX

void nommx()
{
  int i;
  unsigned short t;

  for (i = 0; i < 0x4000; i++)
  {
    t = a[i] + b[i]; //
    if (t > 255)     //Ðåàëèçàöèÿ îïåðàöèè ñ íàñûùåíèåì  
    t = 255;       // 
    c[i] = t;        
  }
}



Реализация с использованием MMX


void withmmx()
{
  BYTE *pa, *pb, *pc;
  int i;
    
  pa = &a[0];
  pb = &b[0];
  pc = &c[0];
  for (i = 0; i < 0x800; i++)
  {
    _asm{
    movq mm0, [pa];
    paddusb mm0, [pb];
    movq [pc], mm0;
  };
   pa+=8;
   pb+=8;
   pc+=8;
  }
  _asm
  {
  emms;
  }
}
для забивания гвоздя надо выбирать правильный микроскоп.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.