คอมไพล์ HyperSim บน Visual Studio 2008
Posted by: javaboom on: September 24, 2008
ผมต้องเริ่มพัฒนางาน simulation งานหนึ่งเพื่อทดสอบ optimization model ของ server farm แน่นอนการทดลองจริงๆโดยการใช้ฮาร์ดแวร์จริงๆมาทดลองก็สามารถทำได้ แต่การใช้ simulation นั้นลดเวลาและสามารถควบคุมตัวแปรหลายๆอย่างได้มากกว่า แต่การเขียนโปรแกรมตั้งแต่ต้นเพื่อทำ simulation มันไม่ใช่เรื่องสนุกๆเลยครับ กินเวลามากด้วย
ดังนั้น เราต้องพึ่งพา library หรือเครื่องมือสำหรับทำ simulation และแล้วผมก็เลือก HyperSim ของพี่สุกรีสุดยอดอัจฉริยะแห่งวงการหมัดมวย เอ้ย ไอทีนี่เอง ซึ่ง HyperSim เองถือว่าเป็น opensource ของ simulation library ที่ใช้ง่ายและมีประสิทธิภาพมาก ได้รับการยอมรับระดับนานาชาติ เคยผ่านเวทีงาน Winter Simulation Conference 2003
ผมจึงขอเสนอการวิธีการคอมไพล์ source ของ HyperSim บน Windows ผ่านเครื่องมืออย่าง Microsoft Visual Studio 2008 แล้วกันนะครับ วัตถุประสงค์ของบทความนี้เพื่อประโยชน์ส่วนตัวของผมเอง และมีประโยชน์สำหรับบุคคลอื่นที่กำลังหา simulation library สำหรับพัฒนาโปรแกรมบน Windows
เครื่องมือที่ต้องมี
- Windows (ผมใช้ Windows XP Service Pack 3)
- Visual Studio .NET เวอร์ชัน 2002 ขึ้นไป (ผมใช้ 2008) *
* Visual Studio แต่ละตัวอาจจะมีเมนูต่างกัน (อาจจะนะ) ของผมใช้ 2008 แต่โดยรวมก็มีอะไรคล้ายๆกันแหละ
ดาวน์โหลด
- HyperSim ที่ High Performance Computing and Networking Center ให้ดาวน์โหลดตัว sourcecode ที่ชื่อ Hypersim 1.9.5 หรือตัวไหนก็ได้ที่ใหม่กว่านี้ (ถ้ามี) โหลดมาเสร็จก็ unzip วางไว้ไหนก็ได้ (เช่น C:\) เมื่อแตกไฟล์ออกมาก็ได้ c:\hypersim-1.9.5
- GNU Scienctific Library (GSL) ของ David Geldreich ล่าสุดเขาออกเวอร์ชัน GSL1.11 เขามีให้ทั้ง source และ binary ผมลองเอา binary เขามาใช้แต่ไม่เวิร์ค อาจจะเพราะว่าเขาคอมไพล์บน Visual Studio .NET 2003 (ของผม 2008) ไม่รู้ว่าเกี่ยวเปล่า แต่เอาเหอะ เกี่ยวไม่เกี่ยวมันก็ใช้ไม่ได้แล้ว … งั้นโหลด source มาคอมไพล์ดีกว่า เลือก GSL 1.11 sources for Windows โหลดมาเสร็จก็ unzip วางไว้ไหนก็ได้ (เช่น C:\) เมื่อแตกไฟล์ออกมาก็ได้ c:\gsl
Building GSL
เนื่องจาก HyperSim ต้องการใช้งานฟังก์ชันจาก GSL เราเลยต้อง build ไฟล์ของ GSL ก่อน
- เปิด Visual Studio ขึ้นมา (ถ้าก่อนหน้านี้ยังไม่เปิด)
- เมนู File -> Open Project/Solution จากนั้น หาไฟล์ชื่อ gsl.sln ใน C:\gsl แล้วก็เปิดมาซะ
- ตรงซ้ายมือหรือ Solution Explore จะเห็น tree รายงานชื่อ project กับ solution ก็คลิ้กขวาตรงชื่อ Solution ‘gsl’ แล้วเลือก Properties จากนั้นไปที่หน้า Configuration Properties ตรงช่อง Configuration ให้เปลี่ยนจาก Debug เป็น Release ทั้ง Project ชื่อ cblas และ gsl แล้วกด OK
- ต่อมาคลิ้กขวา แล้วเลือก Properties ตรง cblas (ตรง Solution Explore) ไปที่ Configuration Properties -> C/C++ -> Code Generation จากนั้น ปรับ Runtime Library ให้เป็น Multi-threaded DLL (/MD) แล้วก็กด OK
- ทำเหมือนกับข้อ 4. แต่เปลี่ยนเป็น project ชื่อ gsl
- เลือกเมนู Build -> Build Solution (หรือกด F7 ครั้งเดียว) ตอน build ใช้เวลานานประมาณ 2 นาทีหรืออาจมากกว่านั้น (ขึ้นกับสมรรถนะเครื่อง)
ถ้า Build สำเร็จ ผลลัพธ์ข้างล่างสุดตรงช่องข้างล่าง (Output) ควรขึ้นประมาณนี้
2>bsearch.obj : warning LNK4221: no public symbols found; archive member will be inaccessible
2>factorize.obj : warning LNK4221: no public symbols found; archive member will be inaccessible
2>Build log was saved at “file://d:\gsl\win32\obj\Release\BuildLog.htm”
2>gsl – 0 error(s), 250 warning(s)
========== Build: 2 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
เรื่อง warning ขึ้นมาถึง 250 warning ก็อย่าไปสนใจมาก แต่ถ้า Build ไม่ผ่าน ก็แก้เอาเองครับ
โชคดีล่วงหน้า
ถ้า Build ผ่านจะได้ไฟล์จากการ build GSL เป็น library อยู่ D:\gsl\win32\lib มี 2 ไฟล์ชื่อ gsl.lib กับ cblas.lilb
Building HyperSim
- เปิด Visual Studio ขึ้นมา (ถ้าก่อนหน้านี้ยังไม่เปิด)
- เมนู File -> Open Project/Solution จากนั้น หาไฟล์ชื่อ HyperSim.sln ใน c:\hypersim-1.9.5 แล้วก็เปิดมาซะ
- ตรงซ้ายมือหรือ Solution Explore จะเห็น tree รายงานชื่อ project ให้คลิ้กขวาตรงชื่อ project ชื่อ HyperSim (ย้ำนะชื่อ project ไม่ใช่ solution) แล้วเลือก Properties จากนั้นไปที่หน้า Configuration Properties -> Librarian -> General แล้วแก้ไขค่าในช่อง Additional Dependencies ให้เป็นค่า gsl.lib cblas.lib และแก้ไขค่าในช่อง Additional Library Directories ให้เป็น “c:\gsl\win32\lib” แล้วกด OK (ถ้า directory ของคุณต่างจากผม ก็ปรับแต่งเอาเอง)
- คลิ้กตรงชื่อ project raid และไปที่ Configuration Properties -> Linker -> General แล้วลบค่าใน Additional Library Directories ให้ว่างเปล่า จากนั้นไปที่ Configuration Properties -> Linker -> Input ให้ลบค่าของ Additional Dependencies ให้ว่างเปล่า จากนั้น กด OK
- ทำเช่นเดียวกับข้อ 4 แต่เปลี่ยนเป็น project ชื่อ mmq1
- ให้แก้ไขค่าต่อไปนี้ในทุกๆ project นั่นคือ Configuration Properties -> C/C++ -> General -> Additional Include Directories ให้มีค่า c:\gsl\win32\include;”c:\hypersim-1.9.5\include” (อย่าลืมเปลี่ยนที่อยู่ directory หากท่านใช้ต่างจากผม)
- เลือกเมนู Build -> Build Solution (หรือกด F7 ครั้งเดียว) ตอน build ใช้เวลานานประมาณ 30 วินาทีหรืออาจมากกว่านั้น (ขึ้นกับสมรรถนะเครื่อง)
ถ้า Build สำเร็จ ผลลัพธ์ข้างล่างสุดตรงช่องข้างล่าง (Output) ควรขึ้นประมาณนี้
3>Build log was saved at “file://d:\hypersim-1.9.5\models\cache\Debug\BuildLog.htm”
3>Cache – 0 error(s), 9 warning(s)
5>Build log was saved at “file://d:\hypersim-1.9.5\models\raid\Debug\BuildLog.htm”
5>raid – 0 error(s), 30 warning(s)
========== Build: 5 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
ถ้า Build ผ่าน เท่านี้ก็เป็นอันเรียบร้อยโรงเรียนจีน ทีนี้เราก็สามารถเรียกฟังก์ชันต่างๆของ HyperSim ได้แล้วครับ แต่เรียกใช้งานยังไง อันนี้ไปศึกษาเอาเองครับ
อิอิ … ดูตัวอย่าง Simulation ของ HyperSim ได้จาก Project ชื่อ Cache, raid กับ mm1q ก็ได้ว่าเขาพัฒนายังไงครับ … ขอใหโชคดี