32 Bit vs 64 Bit iPhone

เมื่อวันก่อนๆที่ผ่านมา Apple ได้เปิดตัว iPhone 5S พร้อมกับประกาศว่าเป็นมือถือที่ใช้ CPU 64 bit ตัวแรกของโลก หลายคนคงจะสงสัยกันว่า ทำไมต้องเปลี่ยน และการเปลี่ยนแปลงจาก 32 ไป  64 บิท นี้ได้ประโยชน์อะไร

เชื่อว่าคำตอบที่คนส่วนใหญ่คิดก็คือ การเปลี่ยนจาก 64 bit มันต้องดีกว่า เร็วกว่า เพราะคิดแบบง่ายๆเลยว่า 64 bit มากกว่า 32 bit ถึง 2 เท่า มันก็ต้องเร็วกว่า 2 เท่าเลยนะสิ

… ผิดครับ ..

การเปลี่ยนจาก 32 bit ไปยัง 64 bit ความเร็วมันไม่ได้เพิ่มขึ้นสองเท่าเหมือนที่เปลี่ยนจาก 1 GHz ไปเป็น 2 GHz นะครับ ทีนี้เรามาทำความเข้าใจกันใหม่กันก่อนว่าอะไรคือ cpu 32 bit และ 64 bit เอาให้แบบลึกซึ้ง เข้าใจแจ่มแจ้งกันไปเลย เนื้อหาที่จะพูดต่อไปนี้อาจจะมีศัพท์เทคนิคเยอะ ก็ต้องขออภัยนะครับ และหากผมเขียนอะไรผิดพลาด ก็แย้งมาได้นะครับ

อะไรคือ cpu 32 bit และ 64 bit ?

การแบ่ง cpu อาจจะแบ่งได้ตามสถาปัตยกรรม เช่น ARM , X86 , PowerPC หรืออาจจะแบ่งตาม bit ของ register ใน cpu เช่น 32 bit และ 64 bit เป็นต้น. โปรแกรมทุกๆโปรแกรมจะทำงานด้วยรหัสของเครื่องหรือ  instruction (machine code) โดยในแต่ละ cpu ก็จะมีจำนวนของ instruction รวมถึง instruction พิเศษที่ต่างกันไป และเรียกชุดคำสั่งเหล่านี้ว่า instruction set ซึ่งก็แล้วแต่ว่าบริษัทจะผลิต cpu ที่มีชุดคำสั่งอะไรบ้าง เช่น ถ้าย้อนอดีตไปสักสิบปี อาจจะเคยได้ยิน ชุดคำสั่งพิเศษ MMX ของ intel เป็นต้น

KL_Intel_Pentium_MMX

wiki: intel mmx

อย่างที่ได้อธิบายไปว่าเมื่อโปรแกรมทำงานก็จะเรียกใช้  instruction เช่น บวกเลขระหว่าง 1 กับ 4 ก็จะเรียกใช้ชุดคำสั่ง ADD จากนั้นค่าทั้งสองจะถูกโหลดเข้ามาใน register ซึ่งเป็นหน่วยความจำแบบพิเศษ ที่บอกว่าพิเศษก็เพราะว่า register ทำงานได้เร็วเท่ากับ cpu เนื่องจากเป็นหน่วยความจำที่อยู่ภายในแกนของ cpu ไม่เหมือน ram ที่เป็นหน่วยความจำนอก cpu

cpu แต่ละรุ่นที่ผลิตขึ้นมาจะขนาดของ register ที่แตกต่างกัน ตามจุดประสงค์การใช้งาน เช่น register 16 bit เป็นต้น เพื่อให้ง่ายต่อการเรียก cpu ที่มี register XX bit ก็พูดให้สั้นลงได้ว่า cpu XX bit  ดังนั้นที่บอกว่า cpu 32 bit นั่นหมายความว่า cpu รุ่นนี้มี register 32 bit นั่นเอง

ณ จุดนี้เข้าใจตรงกันแล้วนะครับ ว่า cpu 64 bit และ cpu 32 bit คืออะไร ?
มันก็คือ CPU ที่มีขนาด bit ของ register (หน่วยความจำภายใน cpu) ที่กว้างขึ้น

เปลี่ยนจาก 32 เป็น 64 bit แล้วโปรแกรมมันจะทำงานเร็วขึ้นหรือเปล่า ?

อย่างที่เราได้รู้กันโดยทั่วๆไปว่า จำนวนของ bit มีผลต่อค่าที่สามารถเป็นไปได้ เช่น 4 bit ก็จะมีค่าที่สามารถเป็นไปได้ที่แตกต่างกันทั้งหมดแค่ 16 ค่า หากเอามาใช้เก็บค่าจำนวนเต็มก็จะได้ตั้งแต่ 0 จนถึง 15 ดังนั้นการเปลี่ยนจาก 32 bit ไปเป็น 64 ก็ทำให้ register มีช่วงของค่าที่เป็นไปได้มากขึ้น ทีนี้ลองมาพิจารณากันว่า ถ้าโปรแกรมต้องการบวกเลข ตั้งแต่ 1 ไปจนถึง 4 การเปลี่ยนไปใช้ register ขนาด 64 bit โปรแกรมจะทำงานเร็วขึ้นหรือเปล่า ? อย่างที่ได้บอกไปว่าการเพิ่มบิทคือการเพิ่มความกว้างของค่าที่เป็นไปได้ ในกรณีนี้จะเห็นว่าขนาดของ register ที่เพิ่มขึ้นไม่ได้ช่วยให้บวกเลข 1 ไปจน 4 เร็วขึ้นเลย เพราะชุดคำสั่งก็ยังทำงานด้วยความเร็วเท่าเดิม .. ลองคิดง่ายๆว่า บ่อน้ำมีน้ำไหล 2 ลิตร ต่อนาที ..  การเปลี่ยนถังรองน้ำจาก 4 ลิตร เป็น 8 ลิตร ก็ไม่ได้ช่วยให้ ตักน้ำเต็มโอ่งเร็วขึ้นเลย เพราะน้ำก็ยังไหล 2 ลิตรต่อนาที อยู่ดี  ( ความเร็วของ instruction set ก็คือเลข clock ของ CPU นั่นเหละครับ เช่น 1 GHz หมายถึงว่า 1 วินาทีสามารถประมวลผล  1,000,000,000 instruction )

ทีนี้ลองเปลี่ยนโปรแกรมใหม่ สมมติว่าต้องการจะสลับค่าระหว่าง 1 กับ 0 ในแต่ละ bit โดยที่ข้อมูลมีทั้งหมด 32 bytes หรือ 256 bits ระหว่าง cpu 32 bit กับ 64 bit อะไรจะเร็วกว่ากัน ? แน่นอนว่า cpu 64 bit ย่อมทำงานได้เร็วกว่า ไม่ใช่เป็นเพราะว่าชุดคำสั่งทำงานได้เร็วขึ้น แต่นั่นก็เพราะว่า สามารถประมวลผลได้ถึง 64 bit ใน 1 ครั้ง ทำให้การใช้ instruction นั้นน้อยกว่า cpu 32 bit ครึ่งหนึ่งเลยทีเดียว

เมื่อเป็นอย่างนี้แล้วจะเห็นว่า การเปลี่ยนจาก 32 bit ไปเป็น 64 bit นั้นไม่ใช่ว่าทุกโปรแกรมจะเร็วขึ้นตามไปด้วย ที่จะมีผลชัดเจนมากๆ ก็คือคำนวนขั้นสูง หรือการใช้ปริมาณข้อมูลแบบลักษณะเป็นอาเรย์ต่อกัน เช่นการ encode/decode ที่เป็นส่วนสำคัญของการโปรแกรมเกี่ยวกับ audio , video ทั้งหลาย

ถึงแม้ว่า 64 bit กับ 32 bit จะส่งผลดีแค่บางอย่าง แต่ถ้าให้เทียบกันระหว่าง cpu 32 bit กับ 64 bit ก็อาจจะพออนุโลมพูดได้ว่า 64 bit นั้นเร็วกว่า เนื่องจากการเปลี่ยนไปเป็น 64 bit นี้ไม่ใช่แค่ จำนวนบิทของ register ที่มากขึ้น แต่โดยปกติทั่วๆไปแล้วจำนวนของ register ทั้งหมดใน cpu 64 bit จะมากกว่า cpu 32 bit ซึ่งเป็นผลดีต่อทุกๆโปรแกรม เพราะว่า cpu สามาถโหลดค่าที่จำเป็นต้องใช้งานมาไว้ใน register ได้มากขึ้น ทำให้โปรแกรมโดยรวมทำงานได้เร็วขึ้นนั่นเอง

แม้ว่าความเร็วจะไม่ใช่สิ่งที่ได้รับโดยตรงจากการเปลี่ยนมาใช้ 64 bit แต่สิ่งที่ส่งผลดีโดยตรงคือ ระบบรองรับหน่วยความจำได้มากขึ้น เพราะใน cpu แบบ 32 bit นั้นจะรองรับหน่วยความจำเพียงแค่ 4 GB (2 ^32)  แต่ในขณะที่ 64 bit นั้นจะรองรับถึง 16 exabytes (2 ^64) หรือประมาณ 17.2 ล้านล้าน gigabytes ( ในทางทฤษฎี )

แล้ว iPhone ได้ประโยชน์อะไรจาก 64 bit ?

อย่างที่ได้อธิบายไป ข้อจำกัดอย่างหนึ่งของ 32 bit คือ มีหน่วยความจำได้เพียงแค่ 4GB การเปลี่ยนมาเป็น 64 ทำให้สามารถเพิ่มหน่วยความจำได้มากขึ้น มันก็เกิดคำถามต่อมาว่า แล้ว Apple จะเพิ่มแรมเกิน 4GB ใน iPhone รุ่นใหม่นี้เหรอ ? คำตอบที่ผมเดาไว้คือ “ไม่” (ขณะที่เขียน iPhone 5S ยังไม่ออกสู่ตลาด) ถ้าพิจารณาจาก product อื่นๆของ apple เช่น macbook air รุ่นต่ำที่สุดก็มีแรมเพียงแต่ 4 GB. เท่านั้น ซึ่งนั่นก็แทบจะเป็นไปไม่ได้เลยที่ Apple จะเพิ่มแรมให้ iPhone เกิน 4 GB.  ที่ผมพอจะมองเห็นสิ่งที่เป็นประโยชน์มากที่สุดจากการที่ iphone เปลี่ยนมาใช้ cpu 64 bit ก็คือ การเขียนโปรแกรมเพื่อให้รองรับทั้ง iPhone และ Mac จะทำได้ง่ายขึ้น เนื่องจากใช้ cpu 64 bit เหมือนกัน

ผลกระทบกับการเขียนโปรแกรม

แน่นอนว่าการเปลี่ยนจาก 32 bit ไปยัง 64 bit นั้นต้องได้รับผลกระทบ เพราะโค้ดของโปรแกรมบางส่วนจะทำงานไม่ได้  หากไม่แก้ไขให้เป็นแบบ 64 bit อย่างไรก็ตามโดยทั่วๆไป เราแทบจะไม่ต้องเปลี่ยนโค้ดอะไรมากเพราะ compiler จัดการให้เรา แต่อาจจะมีโปรแกรมบางประเภทที่ได้รับผลกระทบมากเช่น เกมส์ หรือ โปรแกรมกราฟฟิก เป็นต้น สำหรับผู้ที่ต้องการศึกษาเพิ่มเติม การเปลี่ยนโค้ดจาก 32 bit ไปเป็น 64 bit อ่านเพิ่มได้ที่

https://developer.apple.com/library/mac/documentation/cocoa/conceptual/Cocoa64BitGuide/Introduction/Introduction.html

นี่ไม่ใช่ครั้งแรกของการเปลี่ยนแปลง

เมื่อเปลี่ยนเป็น 64 bit ก็ต้องปรับโค้ดให้เข้ากันกับ cpu ใหม่ แล้วมันจะไม่เกิดปัญหาอะไรเลยหรือ ? ถ้ามองย้อนกลับในอดีตที่่ผ่านมาอย่างระบบปฎิบัติการของ Microsoft Windows เมื่อต้องเปลี่ยนจาก 32 bit เป็น 64 bit ก็เกิดปัญหา นั่นก็เพราะปัญหาของโค้ดบางส่วนที่เข้ากันไม่ได้ระหว่าง 32 bit และ 64 bit ดังที่ได้อธิบายไป โดยเฉพาะโปรแกรมที่เขียนด้วยภาษา C/C++

อันที่จริงแล้ว Apple เคยมีประสบการณ์และเจอปัญหาการเปลี่ยนจาก 32 bit เป็น 64 bit มาแล้วใน Mac OS เช่นเดียวกับ microsoft แต่สิ่งที่แอปเปิ้ลได้ลงมือแก้ไขปัญหานี้ก็คือได้ออกโครงสร้างของโปรแกรมใหม่ที่เรียกว่า universal bundle ให้โปรแกรมสามารถทำงานได้ทั้ง 32/64 พร้อมกับการบีบบังคับให้เปลี่ยนมาเป็น 64 bit โดยการหยุดการพัฒนา Carbon Framework (ภาษา c/c++) ไว้ที่ 32 bit ทำให้โปรแกรมที่เขียนด้วยภาษา C/C++ ทั้งหลาย ต้องเปลี่ยนมาเขียนด้วย Cocoa Framework ( Objective-C ) ที่รองรับ 64 bit ถ้ายังจำกันได้  Apple เคยมีข้อขัดแย้งกับ Adobe ก็เพราะ Apple อ้างว่า Adobe ไม่ยอมเปลี่ยนมาใช้ Cocoa

แต่การเปลี่ยนครั้งนี้จะไม่เกิดปัญหาแบบนั้น นั่นก็เพราะว่าครั้งนี้ Apple คุมตลาด application ไว้ที่ app store ที่เดียว นั่นก็หมายความว่า ถ้าหากอยากขายโปรแกรมใน app store ก็ต้องเขียนโปรแกรมให้รองรับ 64 bit นั่นเอง

ปัจจุบันและอนาคต

ประโยชน์ในปัจจุบัน นอกจากความเร็วโดยรวมที่เพิ่มขึ้นแล้ว (ถึงมันจะไม่ได้เพิ่มแบบ 2 เท่า) ก็ยังได้ประโยชน์จากการตลาดเพราะ iPhone เป็นมือถือเครื่องแรกที่ใช้ cpu 64 bit แน่นอนว่าหุ่นเขียวอย่าง Android ก็ต้องลอกแบบตามมาแน่นอน โดยเฉพาะอย่าง ซัมซุง .. แต่ถ้าจะให้มองไปถึงอนาคต คงปฎิเสธไม่ได้ว่าในอีกไม่กี่ปีมือถือต้องมีแรมเกิน 4 GB ออกมาอย่างแน่นอน  ผมมองว่าการที่ Apple เปลี่ยนมาใช้ 64 bit นี้เลย ก็เพราะต้องการจะเร่งปฎิกริยาของวงการ cpu มากกว่า โดยเฉพาะการพัฒนา cpu ด้วยตัวเอง และลดการเพิ่งพา intel ( ตอนนี้ Mac ใช้ intel ส่วน iPhone ใช้ CPU ที่ออกแบบเองโดยใช้สถาปัตยกรรมแบบ Arm ) นอกจากนี้ อาจจะเป็นเป็นไปได้ว่า Apple วางแผนให้ application ทำงานข้ามกันได้ระหว่าง iOS และ Mac OS X ( แกนหลักของของ iOS นั้นพัฒนามาจาก Mac OS X )

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

สำหรับผู้ที่สนใจสถาปัตยกรรม cpu ของ apple เพิ่มเติมลองอ่าน

Apple (system on chip)

 

Leave a Reply