ThaiGameDevX - Thai Game Developers eXchange Forums
21 November 2017, 06:58:57 PM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: หากมาครั้งแรก เชิญอ่าน ประกาศเจตนารมณ์ของ ThaiGameDevX และ กติกา ข้อตกลงในการใช้เว็บบอร์ด ครับ
 
   Home   Help Search Calendar Login Register  
Pages: [1] 2   Go Down
  Print  
Author Topic: มาทดสอบความเร็ว ของ multicore และ single core กันหน่อย  (Read 16287 times)
0 Members and 1 Guest are viewing this topic.
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« on: 11 April 2008, 05:23:12 AM »

วิธีทดสอบ
1. upzip ไฟล์ลง folder
2. double click ที่ 6test.bat แล้วรอซักพัก
3. เปิดไฟล์ test01.txt แล้วจดผลคะแนน

โปรแกรมจะทำการทดสอบ loop จาก 8 threading
คะแนน ยิ่ง น้อย คือ เครื่องยิ่งเร็วนะครับ

เครื่องที่ทำงานผม
CPU p4 3.06 GHz
เป็น Single core แต่ทำงาน แบบ Hyper threading

ผลการทดสอบ
endtest no threading !! 2704.000000 point
endtest x8 threading !! 1952.000000 point

endtest no threading !! 2656.000000 point
endtest x8 threading !! 1986.000000 point

* test06.zip (10.06 KB - downloaded 324 times.)
Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
pit
Jr. Member
**

จำนวน ชม/ไม่พอใจ: +6/-0
Offline Offline

Posts: 85


« Reply #1 on: 11 April 2008, 05:50:39 AM »

Core 2 duo 1.8G
no thread 3472
thread     1748
ก็ 2 เท่าตามปกตินะ

ผมมี graph ให้ด้วยครับ

- windows มันพยายามใช้ทั้ง 2 core ช่วยทำงานให้ด้วยถึงแม้ไม่มี thread
- ช่วงที่เป็น 8 thread มัน utilize ทั้ง 2 core แต่กลายเป็นว่า มันไปสร้างภาระเยอะกว่า ไม่มี thread อันนี้ผมเข้าใจว่า
งานมันมี 8 อันล้นมือเพียง 2 มือ
- ลอง test แค่ 2 thread ดู ผมว่า graph ที่มี 2 thread น่าจะเล็กกว่าไม่มี thread นะ ถ้าคิดไม่ผิด


* graph.jpg (99.16 KB - downloaded 285 times.)
Logged
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #2 on: 11 April 2008, 07:00:11 AM »

ขอบคุณสำหรับข้อมูลครับ


คราวนี้ผมลอง เทส Core 2 ดูมั่ง


เครือ่งที่บ้าน

Core 2 duo 1.8 GHz no over clock


endtest no threading !! 3594.000000 point
endtest x8 threading !! 1844.000000 point

endtest no threading !! 3579.000000 point
endtest x8 threading  !! 1749.000000 point

endtest x2 threading !! 1891.000000 point


แอบไปลองแบบ 2 threading ดูแล้วแต่ ผลที่ได้ไม่ค่อยจะต่างกัน ในเครื่อง Core 2 ซักเท่าไหร่ครับ

ผมได้ข้อสรุปดังนี้
เป็นขอสรุปที่ได้จากการวนลูปง่าย ๆ แบบตรงไปตรงมานะครับ ยังไม่รวมถึงการทำงานที่ซับซ้อนอื่น ๆ

1 Core
ไม่ค่อยต่างกัน ระหว่าง no threading กับ multi-threading

1 Core + Hyper threading
multi-threading เร็วกว่า ถึง 20-30%

Core 2 duo
- no threading ช้ากว่า Single core ที่ Hz สูงกว่า แต่ยังเร็วกว่าถ้าเอา อัตราส่วนของ Hz มาเที่ยบเป็น % โดยที่ windows มันพยายามใช้ทั้ง 2 core ช่วยทำงานให้ด้วยถึงแม้ไม่มี thread ตามที่คุณ pit บอก

- multi-threading  เร็วกว่า no threading เท่าตัว!!


ผิดถูกยังไง ขอความคิดเห็นกันด้วยครับ
« Last Edit: 11 April 2008, 07:52:53 AM by peace » Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #3 on: 11 April 2008, 07:02:06 AM »

ไม่รู้จะมีใครใจดี ช่วยเทสบนเครื่องจตุคอร์ ให้หรือเปล่า  Tongue
Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
Thaina
Approved Member
Hero Member
*

จำนวน ชม/ไม่พอใจ: +29/-83
Offline Offline

Gender: Male
Posts: 810



« Reply #4 on: 13 April 2008, 03:54:19 PM »

..............
ผมอยากพูดว่า

Thread ไม่ใช่สิ่งที่จะทำให้โปรแกรมทำงานเร็วขึ้นนะครับ
มันไม่ใช่ว่า "แยก Thread เพื่อให้ได้ใช้ประสิทธิภาพของการมีหลาย Core" แต่ "การมีหลาย Core เพิ่มประสิทธิภาพของการใช้ Thread" มากกว่านะ

คือจะบอกว่า ผมว่าเราไม่ควรจะต้องมานั่งวัดเลยนะว่า Thread จะทำงานได้ดีบนเครื่องหลาย Core หรือเปล่า จะมีความเร็วแค่ไหน ต่างกันยังไง
พูดจริงๆก็คือ Thread มันออกแบบมาเพื่อ "ทำงานพร้อมกันได้หลายๆงาน ใน CPU ตัวเดียว" นะครับ

Thread ไม่น่าจะเป็นอะไรที่ "เอามาใช้เพื่อให้โปรแกรมทำงานเร็วขึ้น" นะครับ
จะใช้ Thread หรือไม่ใช้ ไม่ควรจะตัดสินว่า "เพราะมันเร็วกว่า" แต่ มันน่าจะอยู่ที่อัลกอริธึมของเรามากกว่า ว่าควรจะใช้หรือไม่ควรจะใช้
ถ้าไม่ต้องใช้ มันก็ไม่ควรจะใช้
แต่ถ้าน่าจะใช้ ต่อให้เล่นเครื่องที่มีคอร์เดียว มันก็ควรจะใช้นะครับ

แล้วพูดก็พูด ในฐานะ เกมโปรแกรมเมอร์ (โดยเฉพาะ โปรแกรมเมอร์เมืองไทย)
ผมว่า เราไม่ควรคาดหวังนะครับว่า คนเล่น จะเล่นเครื่องที่มีกี่คอร์
Logged
pit
Jr. Member
**

จำนวน ชม/ไม่พอใจ: +6/-0
Offline Offline

Posts: 85


« Reply #5 on: 14 April 2008, 07:41:29 PM »

เรื่อง Quad ผมขอฟันธงให้เลย roughly 4 เท่าแน่นอนครับ� Grin

เรื่อง parallel programming แนวคิดผมไม่เหมือนคุณ thaina นะ

งานพวกเรามันงาน realtime คือ algorithm ดี ผมว่ามันยังดีไม่พอครับ

สิ่งที่ผมทำอยู่ตอนนี้ คือทุกระบบ client-server, scene management, animation, physic รวมทั้ง raw file ที่เก็บข้อมูลของผมก็

optimized มาสำหรับ parallel กับ SSE แบบเต็มพิกัด สำหรับเครื่องที่ไม่ multicore มันก็ทำแค่ thread เดียว เครื่องที่ไม่มี SSE ตัว engine ผมก็ emulate ให้ ตัว source code ผมยัง optimize สำหรับ Intel ด้วยซ้ำไปครับ (พวก branch prediction, L2 cache missing)

มีเรื่องเหลือเชื่อแค่ compiler คนละตัว (gcc,vc) make ออกมา ผลลัพธ์ยังได้ fps ห่างกัน 10% เลยครับ 10% ผมก็เอานะ
« Last Edit: 14 April 2008, 08:11:22 PM by pit » Logged
Thaina
Approved Member
Hero Member
*

จำนวน ชม/ไม่พอใจ: +29/-83
Offline Offline

Gender: Male
Posts: 810



« Reply #6 on: 14 April 2008, 09:41:21 PM »

อืม.... ผมสงสัยจังว่า จะเอา FPS ไปทำไมมากมาย???

คือไม่รู้ผมเข้าใจผิดรึเปล่านะ แต่ FPS หมายถึง Frame ของการวาดภาพ per Sec ใช่รึเปล่าครับ?
หรือหมายรวมถึง Loop Game ทั้งหมด???
ผมมักจะทำสองตัวนี้แยก Thread กันตลอดทุกครั้ง เพราะงั้นผมก็เลยมักจะงงกับ fps ที่คนอื่นๆพูดกัน

ถ้าหมายถึงการวาด
ผมว่ายังไงสุดขีดจำกัดก็คือ 75 - 90 และไม่มีความจำเป็นต้องมากไปกว่านั้น
ผมคิดว่า วันที่ฮาร์ดแวร์จะัสุดขีดที่ 100 fps และไม่มีความจำเป็นต้องเพิ่มมากไปกว่านี้ ก็อยู่ไม่ไกล


สำหรับผม ผมเข้าใจว่า Thread มีไว้สำหรับทำทุกอย่างที่ควรจะ Asynchronous
ซึ่งถ้าเป็นไปได้ ผมก็พยายามทำให้ทุกๆระบบทำ Asynchronous แยกกันให้หมดเหมือนกัน เพราะมันจะได้ Ratio ของลูปเกมมากๆ
เพื่อเวลาที่ทำเกมกว้างๆ มีอะไรต้องคำนวนเยอะๆ โดยเฉพาะการทำ Procedural Generate

แล้ว ผมว่ามันไม่น่าจะอย่างนั้นเลยนะครับ ที่ว่า เครื่อง Core เดียว ก็จะออพติไมซ์ให้เป็น Thread เดียว

สำหรับผม ยิ่งเครื่องที่ส่งไป มี Core เดียว ก็ยิ่งสมควรที่จะทำมากกว่า 2 Thread เพื่อให้มีการ Asynchronous ให้มากที่สุด และให้ LoopGame per Sec เพิ่มมากขึ้นมากที่สุด
เพราะไม่ว่า FrameRate จะตกไปแค่ไหน ก็คงไม่น้อยกว่า 24 (ยกเว้นว่าไม่มีการ์ดจอ แบบว่าเครื่องมันเก่ามากจริงๆ)
Rate ของ Loop Game ก็ยังมีค่ามากพอที่จะอัพเดทเกมได้ ไม่เกิดอาการเกมกระตุก ไม่ว่าจะเล่นในเครื่ิองไหน

ผมว่า สิ่งสำคัญน่าจะอยู่ที่ คุณทำให้คนเล่นทุกคนรู้สึกว่าเกมของคุณมีประสิทธิภาพ
มากกว่า ที่ให้เกมของคุณมีประสิทธิภาพอย่างที่ไม่มีใครรู้ได้ บนเครื่องของคนบางคน นะครับ?

ทำได้ความเร็ว 4.5 เท่า บน Intel Quad Core
แต่ถ้าคุณทำ Asynchronous แล้วก็อัพเดทเกมด้วย Event Driven เท่านั้น
โดยเฉพาะอย่างยิ่ง เกมออนไลน์ที่ยังไงๆ ก็ต้องรอข้อมูลจาก Server
ไม่ว่าคนเล่นจะใช้ Intel หรือ Quad Core จะปั่น fps ไปแรงแค่ไหน ก็ไม่มีทางรู้หรอก
Logged
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #7 on: 14 April 2008, 11:47:35 PM »

ขอบคุณสำหรับทุกความเห็นครับ


ผมเห็นด้วยกับคุณ pit ครับ

อย่าพึ่งเข้าใจผมผิดนะครับ ขอออกตัวไว้ก่อนว่าผมไม่ใช่พวกบ้า hardware และขอสนับสนุนการทำงานบน platform ต่าง ๆ ด้วยการใช้ resource อย่างคุ้มค่าที่สุด

เพียงแต่ในมุมมองของผมนะครับ
ผมเห็นว่า โลกแห่งวงการคอมพิวเตอร์โปรแกรมมิ่งของเรากำลังจะเปลี่ยนไปแล้ว เปลี่ยนไปสู่ยุคมัลติเทรดดิ้ง
และแนวโน้มในการเขียนโปรแกรม ก็กำลังจะเปลี่ยนไปในรูปแบบมัลติเทรดดิ้งจริง ๆ

ยกตัวอย่าง เช่น PS3
ตอนนี้เครื่องเล่นเกมชั้นนำของเราเป็น Cell microprocessor ซึ่งมี Synergistic Processing Elements (SPE) อยู่ถึง 8 ตัว (ได้ข่าวว่าทำเอาเหล่าโปรแกรมเมอร์แทบร้องไห้กับการ Optimize เพื่อใช้ Processing Unit แต่ละตัวให้ได้อย่างคุ้มค่าเหมือนกันครับ )

ผมเชื่อว่าบริษัทซอฟแวร์ชั้นนำต่าง ๆ ก็ตระหนักถึงข้อเท็จจริงนี้ดี
และเชื่อว่าโปรแกรมทำ sound, ตัดต่อ Video,3D renderer, ฯลฯ ก็เริ่มปรับเปลี่ยนรับยุคใหม่กันหมดแล้ว
unreal engine 3 ปรับระบบเข้าสู่ multi-thread สาเหตุก็เพื่อให้ทำงานได้เร็วขึ้น
แม้แต่ winrar โปรแกรมสำหรับบีบอัดไฟล์ก็ได้ปรับการทำงานเป็น multi-thread เข้าไปเพื่อให้ทำงานได้เร็วยิ่งขึ้น

เห็นด้วยว่าเราไม่ควรไปมุ่งหวังว่า เครื่อง user จะแรงเทพและโปรแกรมที่ดีก็ควรจะรันบนเครื่องที่ไม่สูงเกินไปได้
แต่ผมมองเห็นว่า อีกไม่นานเครื่องที่ใช้กันทั่วไปจะเริ่มกลาย เป็น multi core กันหมดจนเป็นเรื่องปกติไป
ถึงเราจะไม่ได้เขียนโปรแกรมให้เป็นมัลติเทรดดิ้งก็รันได้สบาย ๆ ครับ แต่จะเป็นการได้ใช้ทรัพยากรณ์อย่างคุ้มค่าหรือเปล่า?

สำหรับเรื่อง Fps ที่สูงขึ้นผมคิดว่าเป็นตัวอย่างที่ดีในการเลีอกใช้ Compiler ครับ
อันที่จริงแล้ว มีเทคนิคในการเขียนภาษา Assembly หลายวิธีเพื่อให้โปรแกรมรันออกมาได้เร็วกว่าที่ควรจะเป็น
ซึ่งทุกวันนี้ก็ยังมีพวก hardcore โปรแกรมเมอร์บางกลุ่มที่นิยมทำเช่นนั้นอยู่ เพียงแต่ว่าทำจริง ๆ ได้ยากมาก ซึ่งในทุกวันนี้คอมไพล์เลอร์หลาย ๆ ตัวก็ฉลาดขึ้นมาก และ ทำหน้าที่นี้ให้เราอยู่
ยกตัวอย่างเช่น คอมไพล์เลอร์ของ VC
ผมเคยเขียนโปรแกรมวนลูปเปล่า ๆ เล่น 10000000 รอบ แต่พอลอง Disassembler ดู ปรากฏว่าโปรแกรมมันไม่ได้รัน 1000000 รอบจริง มันรันคำสั่งแค่ชุดเดียวแต่ให้ได้ผลเท่ากันลูป 1000000 รอบของผมเป็นต้น

และ Fps ที่สูงขึ้น สำหรับผมมันมีค่ามาก มันหมายถึงว่า ผมสามารถรัน Scene ที่ซับซ้อนมาก ๆ ได้โดยที่มันจะไม่ต่ำไปกว่า Limit ซึ่งจะทำให้เกมมันกระตุก
« Last Edit: 15 April 2008, 12:37:49 AM by peace » Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #8 on: 15 April 2008, 12:25:17 AM »

มีของฝากมาตบท้ายครับ
เป็นงานของ hardcore โปรแกรมเมอร์ ที่เขียน 3D application อันงดงามตระการตา ด้วยภาษา Assembly

ด้วยขนาดไฟล์เพียง 64 K!!

* chaostheory.zip (61.06 KB - downloaded 330 times.)
Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
ปวีร์ (PentaX)
Veteran Developer
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +47/-5
Offline Offline

Gender: Male
Posts: 369


Maid Lv.0


« Reply #9 on: 15 April 2008, 01:02:26 AM »



ใครเล่นได้ ช่วยถ่ายภาพมาให้ดูหน่อยนะครับ ผมอยากเห็นจริงๆ
Logged

เกม ProjectNimbus



ติดตามผลงานพวกเราได้ที่นี่

http://www.facebook.com/pages/GameCrafterTeam/1818761
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #10 on: 15 April 2008, 01:09:49 AM »

แหะ ๆ อย่างว่าครับ เขียนด้วย ASM ก็ควบคุมอะไร ๆ ยากขึ้นรวมทั้ง Bug และความเข้ากันกะ Hardware อื่น ๆ
ไม่เป็นไรครับ คุณ PentaX  ลองอันใหม่นี้ดูอีกที

อาจไม่อลังการเท่าไหร่ แต่ ขนาดแค่ 4 K เอง

* parazonantikum.zip (4.05 KB - downloaded 261 times.)
Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
pit
Jr. Member
**

จำนวน ชม/ไม่พอใจ: +6/-0
Offline Offline

Posts: 85


« Reply #11 on: 15 April 2008, 09:12:37 AM »

เรื่อง Thread ของคุณ Thaina ผมว่า ลองเอาโปรแกรมของคุณ peace ไปรันดูบนเครื่องเก่าๆ หน่อย ก็น่าจะเห็นได้เลยครับ ว่า thread เยอะๆ มันได้ผลยังไงบน core เดียว


ไม่ทราบว่าคนอื่นคิดยังไงนะครับเรื่อง optimize แต่อันนี้ขอแลกเปลี่ยน idea คือ ผมคิดว่าอะไรที่มันคุ้มกับหยาดเหงื่อเรา มันก็ควรจะทำ

parallel programming มันเร็วขึ้นประมาณเท่ากับจำนวน core เช่น quad ก็เร็วขึ้น 4 เท่า
ใช้ sse ส่วนที่คำนวณก็จะเร็วขึ้น 4 เท่า
พวกนี้ผมว่าจำเป็นสุดๆ ขาดไม่ได้เลย
เรื่องการ optimize สำหรับ L2 cache อันนี้มันไม่ยากเกินไปนะ แต่ก็ไม่รู้เหมือนกันครับว่ามันเร็วขึ้นเท่าไหร่

แต่อย่าง assembly ผมก็ไม่ได้ทำนะ compiler มันคงน่าจะช่วยเราได้เยอะมั้งครับ แค่เขียน octree เขียน animation ให้มัน parallel ได้ก็ปวดหัวจะแย่แล้วครับ งานมันไม่เสร็จพอดี

Logged
Thaina
Approved Member
Hero Member
*

จำนวน ชม/ไม่พอใจ: +29/-83
Offline Offline

Gender: Male
Posts: 810



« Reply #12 on: 15 April 2008, 01:31:56 PM »

คือพูดจริงๆ มันกลับกันมากกว่านะ ว่า

การมี Thread เยอะๆ มันจำเป็นมากในบางโปรแกรม
และการทำงานบน Core เดียว มันเป็นเรื่องปกติ แต่เมื่อ PC พัฒนาขึ้้นเป็นหลาย Core ก็ทำให้โปรแกรมนั้นมีประสิทธิภาพมากขึ้น
คือน่าจะเรียกว่า การทำงานบนเครื่อง Core เดียว มันไม่น่าจะถือว่า "ทำงานช้า" แต่ถือว่าเป็นการทำงานแบบ "ปกติ" มากกว่านะฮะ
ผมเองเห็นกระทู้นี้แล้วเข้่าใจตั้งแต่ยังไม่เห็น Result

อย่าง Winrar เป็นตัวอย่างที่เห็นได้ชัด มันมีฟังค์ชั่นแยกธรีดทำงาน เพื่อความ Asynchronous คนใช้ไม่ต้องรอ และไม่ทำให้โปรแกรมหลักต้องรออะไร ทำงานต่อไปได้เรื่อยๆ เพียงแต่ถ้าทำมากๆเข้า แต่ละตัวมันจะช้าลง เพราะมันทำงานหนักแล้วมันแย่งกันใช้ CPU
แต่เมื่อ CPU ของ User มีหลาย Core มันก็จะทำให้ความเร็วไม่ตก
ผมเข้าใจว่าจุดประสงค์หลัก มันไม่ใช่ แยก Thread เพื่อความเร็ว เพราะตอนที่ Winrar ทำแบบนี้ได้ ตอนนั้นเครื่องทั่วไปก็ยังไม่ใช่ Dual Core


คือที่ผมอยากพูดคือ ผมว่าการตัดสินใจว่า เราควรจะเขียนแยก Thread รึไม่ มันไม่น่าจะเอาแนวคิดเรื่องที่ว่า "จะใช้ Core ให้คุ้มค่า" มาเป็นตัวตัดสินนะครับ
มันจะทำให้ยุ่งยากมากกว่า ถ้าพยายามแยก Thread เพื่อ Core โดยที่การใช้ Thread ไม่เข้ากับอัลกอริธึ่ม
ผมเชื่อว่าเราควรจะใช้ Thread เท่าที่อัลกอริธึ่มของเราจะใช้ ไม่งั้นมันจะเป็นการฝืนแยก Thread ฝืนคิดอัลกอริธึ่ม อันนี้ผมว่ามันส่งผลเสียมากกว่าผลดี


แต่ฟังที่คุณ Peace พูด ก็ทำให้เข้าใจมากขึ้น ว่าตอนนี้เครื่อง Core เพิ่ม มันพัฒนามากขึ้น เราควรจะศึกษาและออกแบบอัลกอริธึ่มที่รองรับการใช้ Thread มากๆ ได้อย่างสบายใจขึ้น

เรื่องการ Optimize เป็นเรื่องสำคัญ อันนี้ผมเห็นด้วย
แต่ผมไม่เห็นด้วยตรงที่ เรา Optimize ไปเฉพาะทางมากเกินไป เช่น Optimize สำหรับเครื่องหลาย Core หรือ Optimize มาสำหรับชิปแต่ละยี่ห้อ
สำหรับพวกเราที่ทำงานบน PC ของ User ทั่วไป เราไม่น่าจะคำนึงไปถึง Hardware ของ User นะครับ
มันยังไม่ถึงยุคที่ฮาร์ดแวร์ของคนใช้ทั่วไปจะมีมาตรฐานเดียวกัน ไม่งั้นต้องไปนั่งไล่ Optimize ให้ชิปทุกตัวเลยก็ไม่ไหวมั้ง?

แต่อันนี้ก็ไม่รู้นะ เพราะผมกับคุณ pit คนละทางกันเลย ผมชอบอะไรที่ครอบจักรวาล ในขณะที่คุณ pit ชอบแนว performance แรงที่สุดเท่าที่จะทำได้มากกว่า
คงเป็นเรื่องนานาจิตตัง ที่จะใส่ System Recommend บนกล่องเกมของตัวเองว่า CPU : Intel | Quad Core
Logged
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #13 on: 15 April 2008, 03:13:59 PM »

ผมเคยเขียนโปรแกรมวนลูปเปล่า ๆ เล่น 10000000 รอบ แต่พอลอง Disassembler ดู ปรากฏว่าโปรแกรมมันไม่ได้รัน 1000000 รอบจริง มันรันคำสั่งแค่ชุดเดียวแต่ให้ได้ผลเท่ากันลูป 1000000 รอบของผมเป็นต้น

สงสัยว่า คำสั่งอะไรครับ ... repnz  หรือเปล่า ?
ถ้าใช่ มันก็วนรอบจริงนะ
Logged

..
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #14 on: 15 April 2008, 10:27:37 PM »

มัน push ผลลัพท์เข้าไปเลยครับ ไม่มีวน

C code


#include "stdio.h"
void main()
{
      int x=0;
      int i=0;
      for (i;i<=1000000;i++)
      {
         x++;
      }
      printf("x = %d",x);
}

GCC asm

.text:00401328
.text:00401328 loc_401328:                             ; CODE XREF: sub_4012F0+4Bj
.text:00401328                 cmp     [ebp+var_8], 0F4240h
.text:0040132F                 jg      short loc_40133D
.text:00401331                 lea     eax, [ebp+var_4]
.text:00401334                 inc     dword ptr [eax]
.text:00401336                 lea     eax, [ebp+var_8]
.text:00401339                 inc     dword ptr [eax]
.text:0040133B                 jmp     short loc_401328
.text:0040133D ; AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
.text:0040133D
.text:0040133D loc_40133D:                             ; CODE XREF: sub_4012F0+3Fj
.text:0040133D                 mov     eax, [ebp+var_4]
.text:00401340                 mov     [esp+18h+var_14], eax
.text:00401344                 mov     [esp+18h+var_18], offset aXD ; "x = %d"
.text:0040134B                 call    printf
.text:00401350                 leave
.text:00401351                 retn
.text:00401351 sub_4012F0      endp
.text:00401351


VC Asm

.text:00401000
.text:00401000 ; int __cdecl main(int argc,const char **argv,const char *envp)
.text:00401000 _main           proc near               ; CODE XREF: start+AFp
.text:00401000                 push    0F4241h
.text:00401005                 push    offset aXD      ; "x = %d"
.text:0040100A                 call    _printf
.text:0040100F                 add     esp, 8
.text:00401012                 retn
.text:00401012 _main           endp
.text:00401012


Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #15 on: 16 April 2008, 02:47:35 PM »

ขอบคุณคุณ peace

เหอะๆ GCC compiler แปลห่วยกว่าที่ผมคิดไว้เยอะเลยแหะ  Cheesy

ส่วน VC นี่สุดๆ เลยแหะ อึ้ง >_<

เผื่อใครสนใจ ก็เลยลองบ้าง อันนี้โค๊ด delphi7 ซึ่งผมคิดว่าแปลได้ optimize สุดแล้ว แบบไม่โกง(ฮ่าๆ)
Code:
var i,x:integer;
begin
� � �x:=0; for i:=1 to 1000000 do inc(x);
� � �writeln(x);
end.

CPU ASM
Code:
xor ebx,ebx           // <--- ให้ ebx เป็น 0
mov eax, $000f4240� // <---- ให้เป็น 1000000
inc ebx� � � � // <-- เพิ่ม ebx (x) ละ 1
dec eax� � � �// <--- ลดค่า eax (i) ที่ละ 1
jnz -$04� � � �// <--- ทำซ้ำ // ออกจาก loop ถ้าค่า i เป็น 0
ที่เหลือก็ส่ง writeln ( printf )
Logged

..
pit
Jr. Member
**

จำนวน ชม/ไม่พอใจ: +6/-0
Offline Offline

Posts: 85


« Reply #16 on: 16 April 2008, 07:57:50 PM »

ข้อมูลน่าสนใจมากเลยครับ ไม่แน่ใจคุณ peace ใช้ gcc version ล่าสุดหรือเปล่าครับ 4.3

แต่ก่อนผมก็แฟนพันธ์แท้ gcc เหมือนกัน

หลังจากลอง compile code เทียบกับ vc แล้ว เขียนโปรแกรมบน windows นี่เลิกคบไปเลย  Smiley



Logged
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #17 on: 16 April 2008, 10:08:56 PM »

mingw32-gcc-3.4.5 ครับ


เคยเทส Borland c++ เหมือนจะออกมาสวย ๆ ใกล้ ๆ กะโค้ด delphi7 ของคุณ yod ( แต่แพ้ VC อิอิ)
ส่วน VB6 มันมักจะเรียกฟังก์ชั่นที่ไม่เกี่ยวกะการคำนวนนี้โดยตรงระหว่าง Loop เลยทำให้ช้าลง
« Last Edit: 16 April 2008, 10:14:06 PM by peace » Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
นายตาหวาน (Mr.Tawan)
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +61/-36
Offline Offline

Gender: Male
Posts: 1,591


« Reply #18 on: 22 April 2008, 08:48:26 PM »

GCC ตอนนี้ไป 4.3 แล้วนะครับ ตัวนั้นมันเก่าแล้วนะ ^^' แล้วเปิด Optimization Flag หรือยังครับนั่น ? (-O น่ะครับ)

นี่ผลเทสต์ครับ คุณ peace

Speed testing by Peacedeveloper
x1 100000000
x2 200000001
x1 300000002
x2 400000003
x1 500000004
x2 600000005
x1 700000006
x2 800000007
endtest no threading !! 1904.000000 point
Speed testing by Peacedeveloper
x1 100000000
x1 100000000
x2 100000000
x2 100000000
x1 100000000
x2 100000000
x2 100000000
x1 100000000
endtest x8 threading !! 1000.000000 point
Speed testing by Peacedeveloper
x1 100000000
x2 200000001
x1 300000002
x2 400000003
x1 500000004
x2 600000005
x1 700000006
x2 800000007
endtest no threading !! 1944.000000 point
Speed testing by Peacedeveloper
x1 100000000
x1 100000000
x1 100000000
x2 100000000
x1 100000000
x2 100000000
x2 100000000
x2 100000000
endtest x8 threading !! 984.000000 point

เทสต์บน Pentium D 3.4GHz (2 core* 2 thread) เครื่องที่ออฟฟิซน่ะครับ
« Last Edit: 22 April 2008, 08:50:04 PM by นายตาหวาน » Logged

Are you feeling fine?
眠れない夜には君の幻が...
She said, "Loving you made me happy everyday"
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #19 on: 23 April 2008, 07:35:55 AM »

ลืม -O ครับขอโทษที

**ใช้่ mingw32-gcc-3.4.5

.text:00401308                 mov     edx, 0
.text:0040130D                 mov     eax, 0
.text:00401312
.text:00401312 loc_401312:                             ; CODE XREF: sub_4012F0+29j
.text:00401312                 inc     edx
.text:00401313                 inc     eax
.text:00401314                 cmp     eax, 0F4240h
.text:00401319                 jle     short loc_401312
.text:0040131B                 mov     [esp+8+var_4], edx
.text:0040131F                 mov     [esp+8+var_8], offset aXD ; "x = %d"
.text:00401326                 call    printf
.text:0040132B                 leave
.text:0040132C                 retn
.text:0040132C sub_4012F0      endp


ถือว่าดีขึ้นครับ
แต่ยัง inc register ทีละ 2 ตัว
ตัว 1 ใช้ compare อีกตัวไว้ใช้ส่งเข้า printf




ใครใช้ GCC 4.3 รบกวน Compile เป็น Binary ให้หน่อยครับ
Code ก็ตามข้างบนเลยนะครับ
« Last Edit: 23 April 2008, 07:38:35 AM by peace » Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
pit
Jr. Member
**

จำนวน ชม/ไม่พอใจ: +6/-0
Offline Offline

Posts: 85


« Reply #20 on: 24 April 2008, 10:41:59 AM »

GCC 4.3 -O3

มันทำเหมือน VC แล้วครับ� Wink

int main(int argc,char** argv)
{
   int i;
� � int x=0;
� � for (i=0;i<1000000;i++)
� � � x++;
� � printf(x);   
}

0x004013ce <main+14>: sub� �$0x4,%esp
0x004013d1 <main+17>: call� 0x401480 <__main>
0x004013d6 <main+22>: sub� �$0xc,%esp
0x004013d9 <main+25>: push� $0xf4240
0x004013de <main+30>: call� 0x401610 <printf>
0x004013e3 <main+35>: add� �$0x10,%esp
0x004013e6 <main+38>: mov� �-0x4(%ebp),%ecx
0x004013e9 <main+41>: leave
0x004013ea <main+42>: lea� �-0x4(%ecx),%esp
0x004013ed <main+45>: ret

แต่ไม่แน่ใจว่ามีใครใช้ gcc 4.3 อยู่บ้าง
code เก่าสุดเลยผมก็เป็น mingw 3.4.5 เหมือนกันครับ
แต่พอลง 4.3 คืออันนี้ผมก็ลง mingw lib ใหม่ทุกอัน
compile ผ่าน แต่รันไม่ผ่าน debug ดูมันไปตายตรงมันหา file ไม่เจอ!
คือ fopen file ที่มันมีอยู่ ไม่ออกซะงั้น
แต่กลับไป compile ด้วย 3.4.5 ก็ผ่านนิ่งเป็นปกติ

แต่ code ตัวนี้มันต้องใช้ windows api อยู่ ผมเลยเอาไปลองใน linux ไม่ได้
แต่มี code อีกส่วนที่เป็นฝั่ง server ซึ่งไม่มี wins api ลองเอาไป compile บน linux ก็ปกติดีครับเปิด file เจอไม่มีปัญหาอะไรเลย

คือก็เลยไม่รู้จะโทษใคร บางทีอาจจะวางยาตัวเองแต่ 3.4.5 มันโชคดีไป compile มั่วๆ ผ่านก็ได้...� Sad

แต่สุดท้ายแล้ว ถึงแม้ gcc 4.3 จะ compile ออกมาดี แต่ตอน debug, เวลา compile ก็ยังช้าเหมือนเดิม
VC รันก็เร็ว debug ก็เร็ว ถามผม ก็ยังเชียร์ VC อยู่ครับ  Wink
« Last Edit: 24 April 2008, 10:49:57 AM by pit » Logged
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #21 on: 26 June 2008, 08:47:24 PM »

มีเครื่องมาให้ลองแล้ว ฮี่ๆ

Intel(R) Core(TM)2 Quad CPU
Q6600 @ 2.40GHz
2.00 GB of RAM

ผล
Quote
Speed testing by Peacedeveloper
x1 100000000
x2 200000001
x1 300000002
x2 400000003
x1 500000004
x2 600000005
x1 700000006
x2 800000007
endtest no threading !! 2608.000000 point
Speed testing by Peacedeveloper
x2 100000000
x1 100000000
x1 100000000
x2 100000000
x1 100000000
x2 100000000
x1 100000000
x2 100000000
endtest x8 threading !! 688.000000 point
Speed testing by Peacedeveloper
x1 100000000
x2 200000001
x1 300000002
x2 400000003
x1 500000004
x2 600000005
x1 700000006
x2 800000007
endtest no threading !! 2624.000000 point
Speed testing by Peacedeveloper
x2 100000000
x2 100000000
x2 100000000
x1 100000000
x1 100000000
x2 100000000
x1 100000000
x1 100000000
endtest x8 threading !! 688.000000 point

แต่โปรแกรมคุณ peace ใช้เครื่องได้ไม่เต็มประสิทธิภาพนะครับ peak สุด 66% เองนะ  Grin

* 4core.bmp (222.57 KB - downloaded 253 times.)
Logged

..
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #22 on: 26 June 2008, 10:41:09 PM »

ขอบคุณมากครับ Cheesy

ได้ผลเป็นไปตามที่คาดหวังเลยครับ
Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #23 on: 28 June 2008, 04:19:35 AM »

Quote
                                       A           B           A/B
                                       nothrd    x8   
CPU P4 3.06GHz                2704       1952       1.39   <-- 2core
Core 2 duo 1.8G                3472       1748       1.99   <-- 2core
Core 2 duo 1.8G n/o            3594       1844       1.95   <-- 2core
pentium D 3.4Ghz                1904       1000       1.90   <-- 2core
Core 2 Quad Q6600 2.4GHz  2608       688         3.79   <-- 4core

A/B ได้ 1.9x บน 2 core นี่พอเข้าใจ
แต่ดู P4 กับ จตุคอร์ -- performance มันหายไปพอสมควรนะคับ
 Cheesy
Logged

..
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #24 on: 28 June 2008, 04:28:51 AM »

นั่นนะสิคับ  Undecided

ในส่วนของ P4 ที่ผมนำมาทดสอบยังไม่ใช่ multi-core น่ะครับ
เป็นแค่ hyper threading ช่วยให้เร็วขึ้นได้ในระดับนี้ สำหรับผมถือว่าแล้วพอใจแล้ว


ส่วน จตุคอร์ หรือว่าต้องเป็น quad core Extream เท่านั้น!! Tongue

...ล้อเล่นคับ
« Last Edit: 28 June 2008, 01:12:44 PM by peace » Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #25 on: 28 June 2008, 04:36:47 AM »

Quote
                                       A           B           A/B

Core 2 Quad Q6600 2.4GHz  2608       688         3.79   <-- 4core
ขออนุญาติแก้นิดคับ ในส่วนนี้เพื่อจะให้เปรียบเทียบได้ในอัตราส่วนที่เปรียบเทียบได้ชัดหน่อย เป็น

2608/(688*2 ) จะได้ 1.8953488372093024


Performance มันหายไป ประมาณ 5.52% หายไปไหนก็ไม่รุ
« Last Edit: 28 June 2008, 04:48:23 AM by peace » Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #26 on: 01 July 2009, 02:54:33 AM »

Pentium D 3.0 GHz 2.00 GB of Ram

endtest no threading !! 1984.000000 point
endtest x8 threading !! 1078.000000 point
Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
นายตาหวาน (Mr.Tawan)
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +61/-36
Offline Offline

Gender: Male
Posts: 1,591


« Reply #27 on: 01 July 2009, 05:48:45 AM »

รอชม Core i7 นะครับ :-D

ผมโพสต์ตัว Athlon X2 ไปยังหว่า ? (อยู่ที่บ้านอ่ะ)
Logged

Are you feeling fine?
眠れない夜には君の幻が...
She said, "Loving you made me happy everyday"
peace
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +31/-0
Offline Offline

Posts: 479



WWW
« Reply #28 on: 02 July 2009, 08:47:08 PM »

รออยู่นะครับ ทั้ง
Athlon X2
และ Core i7 เลยนะครับ Cheesy
Logged

แจมกันได้ที่นี่ครับ http://peacedev.wordpress.com

รับงานทำเพลงครับ http://soundcloud.com/peace-harmonic-studio

 Gamer's Social Network ,On Cloud http://gamerpagex.appspot.com
นายตาหวาน (Mr.Tawan)
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +61/-36
Offline Offline

Gender: Male
Posts: 1,591


« Reply #29 on: 03 July 2009, 10:08:16 AM »

อ๋อ ผมนึกว่าคุณ peace จะหาได้ ก็เลยว่าจะรอดูครับ ^^

แต่เดี๋ยว X2 ผมจะทำมาให้เร็ว ๆ นี้
Logged

Are you feeling fine?
眠れない夜には君の幻が...
She said, "Loving you made me happy everyday"
Pages: [1] 2   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!