Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 3/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Rad Studio Neden Bu Kadar Hızlı?
#1
Visual Studio dosyaları:
main.cpp
#include "stdafx.h"
extern "C" int __cdecl asmTopla(int a, int b);
extern   "C"   int  __fastcall fastasmTopla(int a, int b);
int __stdcall stdcallTopla(int a, int b) 
     {


return a + b ;
 }


int __fastcall fastasminlineTopla(int a, int b) {

_asm
{
mov eax,edx
       add eax,ecx

   }
}
int _tmain(int argc, _TCHAR* argv[])
{
clock_t  start = clock();


for (size_t i = 0; i < 1000000000; i++)
{
stdcallTopla(i,i);    //25 -30 saniye
}

printf( " stdcallTopla Time: %f\n", ((float)(clock()) - start )/ CLOCKS_PER_SEC);

     start = clock();


for (size_t i = 0; i < 1000000000; i++)
{
int a=asmTopla(i, i);      // 3 saniye civarında 
int b = a;
}

printf("asmTopla Time: %f\n", ((float)(clock()) - start) / CLOCKS_PER_SEC);

start = clock();


for (size_t i = 0; i < 1000000000; i++)
{
fastasmTopla(i, i);      // 3 saniye civarında 
}

printf("fastasmTopla Time: %f\n", ((float)(clock()) - start) / CLOCKS_PER_SEC);


start = clock();


for (size_t i = 0; i < 1000000000; i++)
{
fastasminlineTopla(i, i); //30 -35saniye 
}

printf("fastasminlineTopla Time: %f\n", ((float)(clock()) - start) / CLOCKS_PER_SEC);
system("pause");
   return 0;
}


FTopla.asm

 
 .model flat
   .code

@fastasmTopla@8 proc

mov eax,edx
       add eax,ecx
       ret
@fastasmTopla@8 endp
       end


Topla.asm

    .model flat,c
   .code


asmTopla proc

       push ebp
       mov ebp,esp
       mov eax,[ebp+8]                   
       mov ecx,[ebp+12]                            
       add eax,ecx                      
       pop ebp
       ret
asmTopla endp
end


Rad Studio Dosyaları:
Delphi:
program Project14;

{$APPTYPE CONSOLE}

{$R *.res}

uses
 System.SysUtils,DateUtils;


function Topla(a,b:integer):integer;
begin
 result:=a+b;
end;
function asminlineTopla(a,b:integer):integer;
begin
asm

//;add eax,edx
//;mov @Result, eax
mov @Result,eax
add @Result,edx

end;

end;
 var
 start:TDateTime;
 i:integer;
begin

 start:=Now();
   for I := 0 to 1000000000-1 do
   begin
       Topla(i,i);  //3 saniye civarında
   end;

 ;
 Writeln('Time: ' +FloatTostr(SecondSpan(start,Now)));
      start:=Now();
     for I := 0 to 1000000000-1 do
   begin
       asminlineTopla(i,i);    //3 saniye civarında
   end;
     Writeln('Time: ' +FloatTostr(SecondSpan(start,Now)));

     Readln;
end.

C++ Builder

pragma hdrstop
#pragma argsused

#ifdef _WIN32
#include <tchar.h>
#else
  typedef char _TCHAR;
  #define _tmain main
#endif

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
  int __cdecl cdeclTopla(int a, int b)
 {


return a + b ;
 }

  int __stdcall stdcallTopla(int a, int b)
 {


return a + b ;
 }

   int __fastcall fastTopla(int a, int b)
 {


return a + b ;
 }
int __fastcall fastasminlineTopla(int a, int b) {

_asm
{
        add eax,edx

    }
}
 int _tmain(int argc, _TCHAR* argv[]) 
{

clock_t  start = clock();


for (size_t i = 0; i < 1000000000; i++)
{
stdcallTopla(i,i);      //3-4 saniye
}

printf( " stdcallTopla Time: %f\n", ((float)(clock()) - start )/ CLOCKS_PER_SEC);


 start = clock();


for (size_t i = 0; i < 1000000000; i++)
{
cdeclTopla(i,i);      //3-4 saniye
}

printf( " cdeclTopla Time: %f\n", ((float)(clock()) - start )/ CLOCKS_PER_SEC);

 start = clock();


for (size_t i = 0; i < 1000000000; i++)
{
fastTopla(i,i);    //3-4 saniye
}

printf( " fastTopla Time: %f\n", ((float)(clock()) - start )/ CLOCKS_PER_SEC);


start = clock();


for (size_t i = 0; i < 1000000000; i++)
{
fastasminlineTopla(i, i);   //3-4 saniye
}

printf("fastasminlineTopla Time: %f\n", ((float)(clock()) - start) / CLOCKS_PER_SEC);
 system("pause");
return 0;
}




Süreler yanlarında yazıyor. Rad Studio'nun üzerindeki kodlar Visual Studio'da .asm  uzantılı dosyalardan çağrılan kodlar kadar hızlı çalışıyor .İnline asm kodları ciiddi bir fark oluşturmuyor her  iki idede de.Rad Studio'nun hızlı olduğunu hep okumuşumdur,yer yer de fark etmişimdir ama bu kadar hız farkı olmasının sebebi nedir acaba?


Not:Assembly dosyalarını visual Studio'da çalıştırmak için projeye sağ tıklayın Build Dependencies > Build Customizations masm'ı seçin.Ayrıca .asm uzantılı dosyaya sağ tıklayp properties'den Item Type'ı Microsoft Macro Assembler olarak değiştirin.
Bizi Toprağa Gömdüler Fakat Tohum Olduğumuzu Bilmiyorlardı.
Cevapla
#2
Bunun sebebi
  • Visual Studio'da derlenen kodun native olmamasından kaynaklanıyor, yani arada ekstradan bir tercüman var.
  • Ayrıca RAD Studio'nun, derleyicisi kodu iyi optimize ediyor.

IDE ve dili tanıma sürecindesiniz sanırım, inline direktifini pek kullanmamanızı tavsiye ederim, zira kodunuzun optimize edilmesine mani olmuş olursunuz.
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Cevapla
#3
Zaten Visual Studio'dan ayıran özelliği hızlı olması hocam Rad Studio'nun Smile)

Nedenleri, native olması başta olmak üzere; daha güzel optimize edilmiş olması..
May the force be with you!
Cevapla
#4
(24-09-2017, Saat: 21:25)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBunun sebebi
  • Visual Studio'da derlenen kodun native olmamasından kaynaklanıyor, yani arada ekstradan bir tercüman var.
  • Ayrıca RAD Studio'nun, derleyicisi kodu iyi optimize ediyor.

IDE ve dili tanıma sürecindesiniz sanırım, inline direktifini pek kullanmamanızı tavsiye ederim, zira kodunuzun optimize edilmesine mani olmuş olursunuz.

Yıllardır bu süreçteyim ve sanırım uzun zaman da öyle olacağım bu ideler sürekli kendini yeniledikçe.Ayrıca c/c++ kodları visual studio'da native diye biliyorum,bildiğim kadarıyla c# ve c++/cli için geçerli dediğiniz yanılmıyorsam.İnline asm yi kullanma amacım bir fark oluşturacak mı denemekti bu arada.
Bizi Toprağa Gömdüler Fakat Tohum Olduğumuzu Bilmiyorlardı.
Cevapla
#5
(24-09-2017, Saat: 21:30)savasabd Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(24-09-2017, Saat: 21:25)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBunun sebebi
  • Visual Studio'da derlenen kodun native olmamasından kaynaklanıyor, yani arada ekstradan bir tercüman var.
  • Ayrıca RAD Studio'nun, derleyicisi kodu iyi optimize ediyor.

IDE ve dili tanıma sürecindesiniz sanırım, inline direktifini pek kullanmamanızı tavsiye ederim, zira kodunuzun optimize edilmesine mani olmuş olursunuz.

Yıllardır bu süreçteyim ve sanırım uzun zaman da öyle olacağım bu ideler sürekli kendini yeniledikçe.Ayrıca c/c++ kodları visual studio'da native diye biliyorum,bildiğim kadarıyla c# ve c++/cli için geçerli dediğiniz yanılmıyorsam.İnline asm yi kullanma amacım bir fark oluşturacak mı denemekti bu arada.

Inline konusunda çok pardon, yanlış okuduğumu fark ettim, prosedür veya fonksiyon tanımı sırasında bir inline bildirimi yapılıyor, onu kullandığınızı zannettim fakat kodu okuduğumda öyle yapmadığınızı gördüm, benim kastettiğim bu idi...
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Cevapla
#6
(24-09-2017, Saat: 21:30)savasabd Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(24-09-2017, Saat: 21:25)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBunun sebebi
  • Visual Studio'da derlenen kodun native olmamasından kaynaklanıyor, yani arada ekstradan bir tercüman var.
  • Ayrıca RAD Studio'nun, derleyicisi kodu iyi optimize ediyor.

IDE ve dili tanıma sürecindesiniz sanırım, inline direktifini pek kullanmamanızı tavsiye ederim, zira kodunuzun optimize edilmesine mani olmuş olursunuz.

Yıllardır bu süreçteyim ve sanırım uzun zaman da öyle olacağım bu ideler sürekli kendini yeniledikçe.Ayrıca c/c++ kodları visual studio'da native diye biliyorum,bildiğim kadarıyla c# ve c++/cli için geçerli dediğiniz yanılmıyorsam.İnline asm yi kullanma amacım bir fark oluşturacak mı denemekti bu arada.
Doğrudur hocam yanılmıyorsunuz. Visual C++ ile geliştirilen uygulamalarda Delphi gibi native uygulamalardır.
My name is nobody.
WWW
Cevapla
#7
(24-09-2017, Saat: 22:41)ismailkocacan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(24-09-2017, Saat: 21:30)savasabd Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlYıllardır bu süreçteyim ve sanırım uzun zaman da öyle olacağım bu ideler sürekli kendini yeniledikçe.Ayrıca c/c++ kodları visual studio'da native diye biliyorum,bildiğim kadarıyla c# ve c++/cli için geçerli dediğiniz yanılmıyorsam.İnline asm yi kullanma amacım bir fark oluşturacak mı denemekti bu arada.
Doğrudur hocam yanılmıyorsunuz. Visual C++ ile geliştirilen uygulamalarda Delphi gibi native uygulamalardır.

Ben bunu test etmek için visual studyoda isprime sayının asal olup olmadığını döndüren bir fonksiyon yazım çıkan exe dosyasını windows xp üzerinde çalıştırmayı denedim ve xx.exe geçerli bir windows uygulaması değil hatasını gördüm dotnet yükleyince çalıştı hız konusunda da birazdan bir konu açacağım c kodu ile delphi kodu arasında ciddi bir hız farkı olduğunu gördüm nedense delphi kodu daha hızlı çalışıyordu aynı c programını c++ builder ile de test etim delphi açık ara öndeydi.

“Do. Or do not. There is no try.”
Cevapla
#8
(24-09-2017, Saat: 22:47)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(24-09-2017, Saat: 22:41)ismailkocacan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlDoğrudur hocam yanılmıyorsunuz. Visual C++ ile geliştirilen uygulamalarda Delphi gibi native uygulamalardır.

Ben bunu test etmek için visual studyoda isprime sayının asal olup olmadığını döndüren bir fonksiyon yazım çıkan exe dosyasını windows xp üzerinde çalıştırmayı denedim ve xx.exe geçerli bir windows uygulaması değil hatasını gördüm dotnet yükleyince çalıştı hız konusunda da birazdan bir konu açacağım c kodu ile delphi kodu arasında ciddi bir hız farkı olduğunu gördüm nedense delphi kodu daha hızlı çalışıyordu aynı c programını c++ builder ile de test etim delphi açık ara öndeydi.

Static library ile derlerseniz çalışacağını düşünüyorum.Ayrıca derlerken Windows(CR LF) uyarısını da reddetmelisiniz.
Bizi Toprağa Gömdüler Fakat Tohum Olduğumuzu Bilmiyorlardı.
Cevapla
#9
(24-09-2017, Saat: 22:47)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(24-09-2017, Saat: 22:41)ismailkocacan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlDoğrudur hocam yanılmıyorsunuz. Visual C++ ile geliştirilen uygulamalarda Delphi gibi native uygulamalardır.

Ben bunu test etmek için visual studyoda isprime sayının asal olup olmadığını döndüren bir fonksiyon yazım çıkan exe dosyasını windows xp üzerinde çalıştırmayı denedim ve xx.exe geçerli bir windows uygulaması değil hatasını gördüm dotnet yükleyince çalıştı hız konusunda da birazdan bir konu açacağım c kodu ile delphi kodu arasında ciddi bir hız farkı olduğunu gördüm nedense delphi kodu daha hızlı çalışıyordu aynı c programını c++ builder ile de test etim delphi açık ara öndeydi.
Oluşturulan exe'nin çalışması için bağımlı dll dosyalarını incelediniz mi ?
dependency walker gibi araçlar yardımı ile inceleyebilirsiniz.
Visual C++ ile oluşturulan PE yapısı ile  .net dillerinden herhangi biri (C#,Vb.net) ile oluşturulan PE yapısı tamamen aynı değildir.
.net PE dosyalarında mscoree.dll import edilmiştir.Varsayılan olarak Visual C++ ile oluşturulan PE dosyasında bu dll import edilmiyor.Ama savaş bey'in dediği gibi açtığınız Visual C++ projesinde CLI(Common Language Runtime Support) desteği açıksa eğer, mscoree.dll dosyası import ediliyor.Exe çalışması için bu dll dosyasına ihtiyaç duyacaktır.Durum bununla ilgili olabilir.
My name is nobody.
WWW
Cevapla
#10
Yukarıda yorumlarda bahşedilmiş zaten, uygulamanın native olup olmaması ve derleyici optimizasyonlarının başarılı olup olmaması olarak dile gelmiş RAD ve VS hız karşılaştırması. Editör olarak değerlendirdim ilk başta. Her iki editörü de aktif ve yoğun bir şekilde kullanan biri olarak RAD Studio’nun daha çoook yol katetmesi gerektiğini düşünüyorum VS’le kapışabilmesi için.

Not: RAD her ortamda favorimdir, o ayrı Smile
Me on the move..
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  TCustomControl neden TRANSPARENT olmuyor? uparlayan 7 373 03-04-2018, Saat: 15:06
Son Yorum: uparlayan
  RAD Studio Tokyo 10.2.3 yeni güncelleme gjamesbond 10 846 15-03-2018, Saat: 10:42
Son Yorum: nguzeller
  Media player hızlı ileri alma Lord_Ares 2 234 29-11-2017, Saat: 01:26
Son Yorum: Lord_Ares
  Hızlı satır okuma bu fonksiyonu çalıştıramadım satır okuma fonksiyonu Delphiseven 21 1.187 10-07-2017, Saat: 17:16
Son Yorum: ismailkocacan
  İzin verilen adet kadar Dostk 16 1.159 06-06-2017, Saat: 20:49
Son Yorum: Dostk



Konuyu Okuyanlar: 1 Ziyaretçi