Tüm Platformlar için Hızlı Uygulama Geliştirme Kitap Yayın Süreci
Kitap gözden geçirilmek üzere BTG (Bilgi ve Teknoloji Grubu) 'na gönderildi. 05.10.2018-14:10
BTG (Bilgi ve Teknoloji Grubu) tarafından iki sayfalık bir reklam tasarımı bekleniyor. 08.10.2018 - 15:30
Kitap basım talebi değerlendirilmek üzere matbaaya bildirildi. Matbaadan basım süreci hakkında bilgi bekleniyor. 15.10.2018 - 15:34
Kitap 1.000 adet basım talebi ile matbaaya gönderildi. 16.10.2018 - 16:50

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". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
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ı..
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
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.
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.
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
  [ ÇÖZÜLDÜ ] RAD Studio Community Edition ? Mr.Developer 3 206 11-09-2018, Saat: 10:20
Son Yorum: Mr.Developer
  Visual Studio Code for Delphi gjamesbond 1 145 11-09-2018, Saat: 10:19
Son Yorum: Fesih ARSLAN
  TCustomControl neden TRANSPARENT olmuyor? uparlayan 7 502 03-04-2018, Saat: 15:06
Son Yorum: uparlayan
  RAD Studio Tokyo 10.2.3 yeni güncelleme gjamesbond 10 1.276 15-03-2018, Saat: 10:42
Son Yorum: nguzeller
  Media player hızlı ileri alma Lord_Ares 2 356 29-11-2017, Saat: 01:26
Son Yorum: Lord_Ares



Konuyu Okuyanlar: 1 Ziyaretçi