0 Пользователей и 1 Гость просматривают эту тему.
;D ;D ;DВообще этот пост мне что-то очень напоминает... Давайте будем стараться не быть похожими на этих гуру
-но при универсуме (наиболее распространенный вариант) 7+7 выполнится быстрее чем 7*2. Потому лучше здесь использовать сложение.
собственно достаточно зайти на любой irc-сервер на канал #linux и спросить что лучше ставить слаку, генту или дебиан будет тоже самое
Хм... А я то думал, что современные процы выполняют несколько операций подобных sin(x) за такт....
Продолжаем разговор так сказать Евгений, до меня дошло, вы про аппаратный синус в процах видеокарт говорили. От него уже отказались: много транзисторов - мало толку. Даже попользовать на программном уровне не успели...www.ixbt.com/video2/nv40-part1.shtml
Utils.PerfCounter pc = new Utils.PerfCounter(); pc.Start(); for (int i = 0; i < 1000000; i++) { double d = Math.Sin(i); } float f = pc.Finish(); MessageBox.Show("Прошло " + f.ToString());
double d = Math.Sin(i);
Int32 i1 = i + i;
Класс PerfCounter тутПолучилось на вычисление 1 синуса 3 такта процессора. У меня "устаревший" AMD Athlon 3000+ 1.81 Ггц.А что говорить про новые процы Intel?
xor eax, eax cpuid rdtsc mov dword ptr res, eax mov dword ptr res+4, edx xor eax, eax cpuid
Если конечно участок кода требует интенсивных вычислений. Программа на C# пройдет через 2 оптимизирующих компилятора, последний из которых сгенерирует минимальное количество самых быстрых машинных инструкций для того процессора, на котором исполняется!
for (int i = 0; i < 1000000; i++) { double d = Math.Sin(i); }
{ double d = Math.Sin(i);00000042 nop for (int i = 0; i < 1000000; i++)00000043 inc ebx 00000044 cmp ebx,0F4240h 0000004a jl 00000042
Utils.PerfCounter pc = new Utils.PerfCounter(); double d = 0; pc.Start(); for (int i = 0; i < 1000000; i++) { d = Math.Sin(i); } float f = pc.Finish(); MessageBox.Show("Прошло " + f.ToString()); MessageBox.Show(d.ToString());
{ d = Math.Sin(i);00000051 mov dword ptr [esp+2Ch],ebx 00000055 fild dword ptr [esp+2Ch] 00000059 fsin 0000005b fstp qword ptr [esp+20h] 0000005f fld qword ptr [esp+20h] 00000063 fstp qword ptr [esp+10h] for (int i = 0; i < 1000000; i++)00000067 inc ebx 00000068 cmp ebx,0F4240h 0000006e jl 00000051 }
Итак, время исполнения 0,001690997 сек.
Умножаем на 1810000000(тактовая частота процессора).
2 компиляция(может проходить при инсталяции программы) - компиляция в комманды процессора ситемы. И если есть у меня sse2, то и будет использована она.
Хм... Всетаки я малось лопухнулся!Если объявлять такКод: [Выделить] for (int i = 0; i < 1000000; i++) { double d = Math.Sin(i); }То компилятор видит, что d больше нигде не используется генерит вот такие машинные инструкции.
Код: [Выделить] { d = Math.Sin(i);00000051 mov dword ptr [esp+2Ch],ebx 00000055 fild dword ptr [esp+2Ch] 00000059 fsin 0000005b fstp qword ptr [esp+20h] 0000005f fld qword ptr [esp+20h] 00000063 fstp qword ptr [esp+10h] for (int i = 0; i < 1000000; i++)00000067 inc ebx 00000068 cmp ebx,0F4240h 0000006e jl 00000051 }
Всетаки вызывает fsinИ время исполнения становиться равным 0,06334017 сек.Отсюда 114,6457077 тактов на 1 вычисление синуса в цикле. Всетаки получше 270 и 340....
Думаю вы заметили что время меняется и порой значительно...
Если бы компилятор без спросу использовал инструкции sse2 (у вас есть их поддержка), то на младших моделях процессоров ваша программа перестала бы работать. Как вы думаете должен компилятор принимать подобные решения?
хм... Не думал что сообщение Watson'a про Гуру приведёт к такому.
Судя по http://www.dont.ru/AMD-Athlon-64-3000+-Box.id1494.html есть.Что значит без просу? Программа исполняется на моей машине и с моим процессором. JIT компилятор определит какой у меня проц и сгенерирует инструкции именно для него, на другой машине будут ее инструкции. Мы всегда имеем компилятор на машине, где установлен .NET.
И побочный эффект эксперимента, скорость выполнения программ, написанных на C# вообще больше скорости выполнения программ написанных на ASM.Если конечно участок кода требует интенсивных вычислений. Программа на C# пройдет через 2 оптимизирующих компилятора, последний из которых сгенерирует минимальное количество самых быстрых машинных инструкций для того процессора, на котором исполняется!
В быстром ответе можно использовать BB-теги и смайлы.
Предупреждение: в данной теме не было сообщений более 120 дней.Если не уверены, что хотите ответить, то лучше создайте новую тему.