|
Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | (покажи всички)
Тема
|
Скорост на ассемблер срещу Ц
|
|
Автор |
grg (минаващ) |
Публикувано | 10.12.11 22:38 |
|
Моето мнение е че асемблера е значително по бырз
Компилирах с "gcc -o3 -S" следния C код:
double f(double m[3][3])
{
int i,j;
double r=0.0,a;
for(i=0; i<3; i++)
{
a=1.0;
for(j=0; j<3; j++)
a=a*m[j]*m[j];
r=r+a;
}
return r;
}
Кодът, който GCC генерира, на максимална оптимизация, е такъв, че лесно мога да го напиша на ассемблер да е 5-6 пъти по бърз. И да отбележа, въпреки че вътрешния цикъл има само 3 итерации, не го е "унролнал". Прави адресни изчисления със четене на i, j и адреса на м от памет (без да ги държи в регистри). А някои усилено спорят, че е свръх сложно за човек да бие C компилaтор по производителност.
Редактирано от grg на 11.12.11 01:39.
| |
Тема
|
Re: Скорост на ассемблер срещу Ц - грыматика
[re: grg]
|
|
Автор |
Naki (Company PC Guy) |
Публикувано | 10.12.11 22:53 |
|
Интересно, отде извади тази буква? На моята клавиатурна подредба (фонетик) я няма. "Бырз" не е, такава буква в българския няма - пише се със Ъ.
Иначе може би си прав - Dev C++ какво дава? Microsoft C++?
Майка ми е асемблер програмист, пише за Пик-ове.
Редактирано от Naki на 10.12.11 22:54.
| |
Тема
|
аз на асемблер бих го написал така: NOP
[re: grg]
|
|
Автор |
~@!$^%*amp;()_+ (целия горен ред) |
Публикувано | 10.12.11 23:08 |
|
e може би трябва да върна 0 за r
--------------------------------
for(i=0; i++; i<=3)
това чудо изскача още преди първата итерация
Редактирано от ~@!$^%*amp;()_+ на 10.12.11 23:51.
| |
Тема
|
Re: Скорост на ассемблер срещу Ц
[re: grg]
|
|
Автор |
BlGBUGEX (нерегистриран) |
Публикувано | 10.12.11 23:31 |
|
Не можеш! Първо мериш, после се изрязваш. Тва е правилото на успешния трол.
| |
Тема
|
Re: Скорост на ассемблер срещу Ц
[re: grg]
|
|
Автор |
grg (минаващ) |
Публикувано | 11.12.11 00:26 |
|
Вярно имам грешка. Ще я изправя и ще видя пак.
Ето новия код:
double f(double m[3][3])
{
int i,j;
double r=0.0,a;
for(i=0; i<3; i++)
{
a=1.0;
for(j=0; j<3; j++)
a=a*m[j]*m[j];
r=r+a;
}
return r;
}
Коментара за скоростта пак е в сила за коректния код.
Други компилатори няма да инсталирам само за да пробвам това.Редактирано от grg на 11.12.11 00:31.
| |
Тема
|
Re: Скорост на ассемблер срещу Ц
[re: grg]
|
|
Автор |
Naki (Company PC Guy) |
Публикувано | 11.12.11 01:01 |
|
Редактирай си началния постинг, Дира ти дава право до 6 часа...
| |
Тема
|
Re: Скорост на ассемблер срещу Ц
[re: grg]
|
|
Автор |
BlGBUGEX (нерегистриран) |
Публикувано | 11.12.11 02:18 |
|
Истинските програмисти дето владеят силата (асемблера) могат да пишат перфектно на С. При тебе всичко приключи с първия ти пост. Като падащ руснак за който руското посолство твърди че е извънземен космически кораб. Обаче всички виждат че е падащ руснак. Тука идва момента, руснака да изкара огън или нещо по-впечатляващо ( в твоя случай код ) от задника си за да посее съмнения в публиката.
| |
Тема
|
Re: Скорост на ассемблер срещу Ц
[re: grg]
|
|
Автор |
muletar (член) |
Публикувано | 11.12.11 03:35 |
|
По-бърз е. Направи един UI на асемблер да видиш каква е бързина.
| |
Тема
|
Re: Скорост на ассемблер срещу Ц
[re: grg]
|
|
Автор |
| (>[2] /dev/null) |
Публикувано | 11.12.11 05:42 |
|
Нещо си оплескал. Gcc напълно unroll-ва и двата цикъла.
f:
.LFB0:
.cfi_startproc
movsd (%rdi), %xmm1
movsd 8(%rdi), %xmm0
mulsd %xmm1, %xmm1
movsd 32(%rdi), %xmm2
mulsd %xmm0, %xmm1
mulsd %xmm0, %xmm1
movsd 16(%rdi), %xmm0
mulsd %xmm0, %xmm1
mulsd %xmm0, %xmm1
movsd 24(%rdi), %xmm0
mulsd %xmm0, %xmm0
addsd .LC0(%rip), %xmm1
mulsd %xmm2, %xmm0
mulsd %xmm2, %xmm0
movsd 40(%rdi), %xmm2
mulsd %xmm2, %xmm0
mulsd %xmm2, %xmm0
movsd 56(%rdi), %xmm2
addsd %xmm0, %xmm1
movsd 48(%rdi), %xmm0
mulsd %xmm0, %xmm0
mulsd %xmm2, %xmm0
mulsd %xmm2, %xmm0
movsd 64(%rdi), %xmm2
mulsd %xmm2, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
ret
.cfi_endproc
The last good thing written in C was Franz Schubert's Symphony No. 9.
| |
|
изглежда добре
--------------------------------------------------------------------------------
program t;
#include("switch.hhf")
begin t;
switch( eax );
case( 1 )
switch( ebx );
case( 100 )
mov( 100, ebx );
case( 101 )
mov( 101, ebx );
default
mov( 0, ebx );
endswitch;
case( 2 )
mov( 2, eax );
case( 3 )
mov( 3, eax );
default
mov( 0, eax );
endswitch;
end t;
| |
|
Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | (покажи всички)
|
|
|