James Reinders ของ Intel เกี่ยวกับการขนาน: ตอนที่ 1



  • 2019-08-15
  • แหล่ง:เว็บไซต์การจัดอันดับเครือข่ายการพนันในประเทศไทย

โปรเซสเซอร์แบบมัลติคอร์มาถึงแล้วและจำนวนแกนประมวลผลที่เราจะเห็นบรรจุลงในชิปตัวเดียวจะเพิ่มขึ้นเท่านั้น นั่นเป็นเพราะกฎของมัวร์เป็นเพียงทางอ้อมเกี่ยวกับประสิทธิภาพ มันเกี่ยวกับการเพิ่มจำนวนทรานซิสเตอร์โดยตรง และด้วยเหตุผลหลายประการการเปลี่ยนทรานซิสเตอร์เหล่านี้ให้เป็นประสิทธิภาพในปัจจุบันส่วนใหญ่ขึ้นอยู่กับการเพิ่มจำนวนแกนหลัก

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

ภาวะแทรกซ้อนและวิธีการที่จะเอาชนะพวกเขาได้คือหัวข้อการสนทนาของฉันกับ ที่ Intel Developers Forum ในเดือนกันยายน Reinders เป็นผู้อำนวยการฝ่ายการตลาดและธุรกิจสำหรับผลิตภัณฑ์พัฒนาซอฟต์แวร์ของ Intel เขาเป็นผู้เชี่ยวชาญด้านการขนานและหนังสือเล่มล่าสุดของเขาครอบคลุมส่วนขยาย C ++ สำหรับการขนานที่จัดทำโดยหน่วยประมวลผล Intel เธรด

ในส่วนที่ 1 ของการสนทนานี้เราได้พูดคุยเกี่ยวกับวิธีคิดเกี่ยวกับประสิทธิภาพในสภาพแวดล้อมการเขียนโปรแกรมแบบขนานสาเหตุที่สภาพแวดล้อมดังกล่าวทำให้ผู้พัฒนาปวดหัวและสิ่งที่สามารถทำได้เกี่ยวกับเรื่องนี้

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

ความท้าทายคือการเข้าใจในสิ่งที่เรากำลังพยายามที่จะแนะนำวิธีการใช้คู่ขนาน แต่มีประสิทธิภาพของโปรแกรมเมอร์ เพราะโปรแกรมเมอร์ไม่ต้องการอีกสิ่งที่ต้องกังวล มีคนมากมายที่นั่น

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

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

หากคุณเก็บหมายเลข "1" ในตัวแปร A จากนั้นเก็บหมายเลข "2" ในตัวแปร B แล้วเพิ่มเข้าด้วยกันในคำสั่งที่สามคุณสามารถมั่นใจได้ว่าคำตอบจะเป็น "3. " มันจะไม่ขึ้นอยู่กับช่วงเวลาที่อาจเกิดขึ้นก่อนที่จะเกิดขึ้น คนส่วนใหญ่เริ่มเขียนโปรแกรมตามลำดับโดยใช้ภาษาที่ออกแบบมาเพื่อจุดประสงค์นั้น

ในทางกลับกันการเขียนโปรแกรมแบบขนานจะนำเสนอแนวคิดเช่นการ (คำตอบนั้นขึ้นอยู่กับช่วงเวลาของเหตุการณ์อื่น ๆ ) และการ (ซึ่งทั้งสองเธรดแต่ละเธรดจะรอให้อีกฝ่ายดำเนินการจนเสร็จ) นี่คือการแจ้งเตือน:

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

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

ความหวังของเราคือ Cilk สามารถทำชุดย่อยของ Building Blocked [TBB] ได้ แต่สามารถรักษาซีแมนติกตามลำดับได้ เราคิดว่าเราสามารถทำซีแมนทิกส์ต่อเนื่องทำเซตย่อยของสิ่งที่ TBB ทำเพราะเราแนะนำคีย์เวิร์ดให้กับคอมไพเลอร์ - ซึ่งมีข้อเสียบางอย่างเพราะมันไม่ได้พกพาได้ ความหมายและไม่ยอมแพ้ประสิทธิภาพ นั่นเป็นเรื่องใหญ่ถ้า

ตอนนี้ทำไมเราจะลงทุนในสิ่งนั้น

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

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

และไม่มีใครวิพากษ์วิจารณ์แอปของคุณบน Quad Core เพราะมีประสิทธิภาพเพียง 70 เปอร์เซ็นต์

จากนั้นเราย้ายไปยัง ซึ่งมุ่งเน้นไปที่การกระจายข้อมูลข้ามองค์ประกอบการประมวลผล มันตรงกันข้ามกับภาระงานที่เรามักจะเชื่อมโยงกับการเขียนโปรแกรมขนานคำ เป็นผลิตภัณฑ์เชิงพาณิชย์หนึ่งตัวที่อิงกับโมเดลข้อมูลแบบขนาน ภาษาที่มีสัญลักษณ์แปลก ๆ (สำหรับผู้ที่มีความจำยาว) มักถูกพิจารณาว่า มีคนอื่น ๆ ที่หลากหลายมักจะขยายไปสู่ภาษาทั่วไปเช่น C และ FORTRAN แต่ไม่มีการใช้กันอย่างแพร่หลาย

สิ่งอื่น ๆ ที่เรากำลังดูคือการขนานของข้อมูล และนั่นคือสิ่งที่เราได้รับทีม และรวมเข้ากับทีม [C for Throughput Computing]

การขนานของข้อมูลใช้เวลาเพียงก้าวเดียวไปอีกขั้น Data parallelism เป็นข้อมูลเกี่ยวกับความเท่าเทียมในข้อมูล ดังนั้นคุณกำลังพูดถึงข้อมูลเมื่อคุณตั้งโปรแกรม

และเมื่อคุณเริ่มพูดคุยเกี่ยวกับข้อมูลเครื่องมือที่อยู่ด้านล่างสามารถย้ายข้อมูลได้ ออกจากการจัดการข้อมูลจนถึงโปรแกรมเมอร์ [เช่นเดียวกับ Cilk และ TBB] กลายเป็นปวดหัวที่ยอดเยี่ยม สิ่งนี้ใช้ได้กับคลัสเตอร์ที่พวกเขาไม่แชร์หน่วยความจำหรือ GPU และ CPU ในระบบเดียวกัน

แต่ภาษาอย่าง RapidMind หรือ Ct สามารถแก้ไขปัญหานั้นได้ และ CUDA และ ก็สามารถ [กรอบหลักที่มุ่งเน้นไปที่การประมวลผลที่แตกต่างกันซึ่งใช้คอร์กราฟิกสำหรับงานคอมพิวเตอร์] แต่ RapidMind และ Ct อยู่ในระดับที่สูงกว่ามากของนามธรรมซึ่งหมายความว่า ยอมแพ้อย่างมีประสิทธิภาพ

ส่วนที่ 2 ของการสนทนาของเราจะครอบคลุมคลาวด์คอมพิวติ้งภาษาที่ใช้งานได้และแบบไดนามิกและสิ่งที่ต้องเกิดขึ้นเกี่ยวกับการศึกษาของโปรแกรมเมอร์

แบ่งปันเสียงของคุณ

แท็ก




    • การจัดอันดับความบันเทิง
    • บทความแบบสุ่ม