Showing posts with label Microsoft Visual Studio. Show all posts
Showing posts with label Microsoft Visual Studio. Show all posts

Saturday, December 28, 2013

Menjalankan Aplikasi Berbasis Library GMP (GNU Multi Precision) di Windows Menggunakan MPIR

GMP (GNU Multi Precision) adalah library untuk operasi aritmatika dengan kepresisian tak terbatas. Dengan library ini, kita dengan mudah dapat melakukan perkalian bilangan yang sangat besar seperti:

7612058254738945 x 9263591128439081 = 70514995317761165008628990709545

Angka tersebut jelas tidak dapat direpresentasikan dalam tipe data standard, int, long int, double, dan selainnya. GMP memakai tipe data mpz_t sebagai container-nya. Secara teori, tingkat kepresisian operasi tidak terbatas dan dibatasi oleh besar memory (RAM) komputer yang dipakai. Operasi angka besar seperti ini banyak dijumpai pada algoritma cryptography, yang sering menggunakan angkat biner dengan jumlat bit sampai 1024-bit bahkan lebih.

GMP di Windows 

Salah satu kekurangan library GMP adalah tidak adanya solusi yang out-of-the-box untuk Windows. Untuk memakai GMP, harus melakukan porting Makefile terlebih dahulu sehingga dapat dicompile di Visual Studio, dan ini cukup memakan waktu.

Untungnya, sudah ada orang yang membuat fork dari repository GMP dan membuat versi sendiri yaitu: MPIR (Multi Precision Integer and Rationalhttp://www.mpir.org/). Berbeda dengan GMP, library ini sejak awal didesain agar support untuk platform Linux, Windows, MAC OS, dan Solaris.

Membuild Library MPIR di Visual Studio

Untuk mem-build library MPIR di Windows, dibutuhkan berikut:

  • Visual Studio (bisa memakai Visual Studio 10 Express)
  • Windows SDK 7.1

Langkah pertama adalah pastikan Windows SDK v7.1 sudah terinstall, cek folder "C:\Program Files\Microsoft SDKs\Windows\v7.1", jika belum ada maka perlu diinstall terlebih dahulu. Download di http://www.microsoft.com/en-us/download/details.aspx?id=8279 untuk online installer, atau http://www.microsoft.com/en-us/download/details.aspx?id=8442 untuk offline installer. Pilih installer yang cocok dengan platform yang dipakai:
  • GRMSDK_EN_DVD.iso untuk Windows x86 32-bit
  • GRMSDKX_EN_DVD.iso untuk Windows x64 64-bit
  • GRMSDKIAI_EN_DVD.iso untuk Intel Itanium Architecture 64-bit

Setelah Windows SDK v7.1 sudah terinstall, download source code MPIR di http://www.mpir.org/mpir-2.6.0.tar.bz2 (pada contoh ini versi 2.6.0).

Extract source code tersebut, lalu masuk ke folder "mpir-2.6.0\build.vc10". Buka "mpir.sln" menggunakan Visual Studio, lalu build project berikut: dll_mpir_gc, lib_mpir_gc, dan  lib_mpir_cxx. Library hasil build akan muncul di "mpir-2.6.0\lib\Win32\Debug" atau "mpir-2.6.0\lib\Win32\Release" tergantung dibuild dengan target Debug atau Release.


Setelah semua dicompile, dapat ditest apakah MPIR sudah berhasil di-build atau belum. Buka command prompt, masuk ke "mpir-2.6.0/build.vc10/", build semua project di mpir-test.sln. Setelah semua test project dibuild jalankan run-tests.py dari command prompt (harus install Python terlebih dahulu, download di www.python.org/getit/windows/).


Menjalankan aplikasi GMP menggunakan MPIR

Untuk menjalankan aplikasi GMP pada Windows menggunakan GMP, cukup masukkan path "mpir-2.6.0\lib\Win32\Debug" atau "mpir-2.6.0\lib\Win32\Release" pada Additional Library Directories, dan path "mpir-2.6.0\" pada Additional Dependencies.

Ambil contoh penggunaan GMP dari http://en.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library, untuk perkalian bilangan besar.

Berikut hasilnya:


Library GMP banyak dipakai untuk membuat algoritma cryptography, misalnya pada algoritma RSA, untuk melakukan kalkulasi ciphertext = plaintext ^ e mod m, cukup gunakan mpz_powm(ciphertext, plaintext, e, e). Selamat mencoba ;-) (Yayan)

Catatan:
Library GMP termasuk sudah lama dan kemungkinan akan out-dated digantikan dengan library baru seperti MPIR, libgcrypt (untuk cryptography), dan sebagainya.

Wednesday, February 8, 2012

Menjalankan Fungsi Matlab dengan Compiler C

Berikut ini kita akan belajar bagaimana membuat sebuah fungsi matlab (.m) bisa dijalankan di compiler C dengan platform Windows. Dalam hal ini kita menggunakan platform Microsoft Visual Studio. Cara ini akan memudahkan bagi kita apabila sebuah fungsi sudah cukup advance di matlab, dan kita hanya perlu memanfaatkannya (dalam bentuk shared library) tanpa perlu mengconvert code tersebut seluruhnya ke dalam platform C/C++. Kali ini kita akan membuat contoh sederhana sebuah code matlab yang akan dicoba dimanfaatkan dalam platform C (dalam bentuk shared library) kemudian bisa menghasilkan file .exe.

1. Pertama kita membuat fungsi matlab. Sebagai contoh fungsi coffeebreak.m sebagai berikut :

function coffeebreak
% Load the topographical data for the globe
load('topo.mat', 'topo', 'topomap1');

% Create a unit sphere with 50 facets. This sphere is the Earth.
[x,y,z] = sphere(50);

% Establish initial viewing and lighting parameters. Use Phong shading
% and texture mapping to wrap the topo map data around the sphere.

props.FaceColor= 'texture';
props.EdgeColor = 'none';
props.FaceLighting = 'phong';
props.CData = topo;

% Set the viewpoint to look at the Atlantic Ocean.
view(-130, 10);

% Draw the sphere, with the topo data texture mapped to the surface.
s=surface(x,y,z,props);
set(gcf, 'Color', 'white');  % White background
axis square
axis off
axis equal

title('Coffee Break  at Indonesian Chip Engineer.', 'FontSize', 14, 'FontWeight', 'Bold');
end

referensi code : http://blogs.mathworks.com/loren/2010/11/18/deploying-standalone-applications/

2. Kemudian jalankan program coffeebreak.m diatas di platform matlab dengan sintax berikut ini. Ini bertujuan untuk membuat file 'shared library'.
mcc -t -L C -W lib:mylib -T link:lib -h coffeebreak.m libmmfile.mlib

maka pada folder/directory tempat kita menyimpan, akan ada tambahan beberapa file sebagai berikut :
- mccExcludedFiles (text document)
- mylib.c
- mylib.dll
- mylib (export library file)
- mylib.exports
- mylib.h
- mylib (object file library)
- mylib.prj
- mylib_mcc_component_data.c
- readme.txt
3. Buka software Microsoft Visual Studio (MVS) dan membuat code C yang sesuai dengan mylib.dll yang sudah dihasilkan pada poin 2 diatas. Untuk membuat code C, kita membutuhkan software dependency walker untuk membaca fungsi-fungsi apa saja yang ada dalam mylib.dll.
4. Kalau belum memilki dependency walker, silahkan download di internet. Setelah file mylib.dll dibuka di software ini maka akan didapatkan fungsi-fungsi yang bisa kita gunakan sebagai fungsi code C kita. Dan berikut main.c yang bisa kita hasilkan :
#include 
#include < windows>
#include "mylib.h"

int main ()
{
mylibInitialize();       
mlfCoffeeBreak();
mylibTerminate();
/* ketiga sintac diatas diambil dari hasil extraksi mylib.dll dengan menggunakan software dependency walker */
}
5. Pada software Microsoft visual studio, bagian header files, silahkan ambil dari mylib.h yang sudah dihasilkan pada point 2.
6. Pada software Microsoft visual studio , klik pada bagian nama project, kemudian klik kanan. Pilih bagian properties. Pada bagian C/C++pilih bagian ‘general’ dan tambahkan ‘additional include directories’ dengan $MATLABROOT\extern\include\cpp;$MATLAB\extern\include
7. Pada bagian ‘preprocessor’ kita bisa tambahkan _MBCS, MSVC, MSWIND, IBMPC
8. Pada bagian ‘code generation’, pastikan untuk runtime library sudah tersetting : Multi-threaded Debug DLL (/MDd)
9. Pada bagian resource files, masukkan mylib.lib.
10. Pada folder computer kita, pastikan seluruh file pada poin 2 sudah berada satu directory dengan main.c.
11. Balik lagi ke software MVS, kita bisa compile project dengan cara ‘Build’ or ‘Rebuild’.
12. Setelah decompile, nanti pada bagian directory debug di computer kita bisa ditemukan file .exe.
13. Sebelum dijalankan, copy mylib.dll ke folder tempat .exe berada. Dan jalankan code exe-nya !!... maka hasilnya adalah sebagai berikut :


Silahkan mencoba ^_^

(fin / yan)


Referensi :
1. http://www.mathworks.com/support/solutions/en/data/1-18CBI/index.html?solution=1-18CBI
2. http://goffconcepts.com/techarticles/development/cpp/calldll.html