จากมุมมองการประมวลผลที่ดีกว่าไม่ควรคิดในการโหลด CPU / GPU เป็นเปอร์เซ็นต์ แต่ควรพิจารณาจำนวนการดำเนินการที่ปัญหาของคุณในมือแล้วเปรียบเทียบกับประสิทธิภาพสูงสุดของระบบ
หากคุณได้รับประโยชน์จากการใช้ CPU 100% ไม่ได้หมายความว่าคุณจะได้รับประสิทธิภาพทั้งหมดจากระบบ ซีพียูมักจะสามารถทำสิ่งต่าง ๆ ได้หลายอย่างในเวลาเดียวกันการแบ่งและการเพิ่ม หากคุณสามารถเริ่มต้นการแบ่งก่อนเวลานั้นอาจมีการทับซ้อนกับการเพิ่ม เดสก์ท็อปซีพียูของคุณน่าจะมีหน่วยที่ไม่ตรงกับคำสั่งซึ่งจะเรียงลำดับคำสั่งใหม่เพื่อให้ได้รับประโยชน์จากการทับซ้อนดังกล่าว หรือถ้าคุณมีโปรแกรมต่อไปนี้:
if (expr1)
expr2;
else
expr3;
CPU ที่สั่งใหม่จะพยายามคำนวณนิพจน์ทั้งสามในเวลาเดียวกันจากนั้นจึงทิ้งผลลัพธ์ของหนึ่งในนั้น ทำให้ภาพรวมเร็วขึ้น หากคุณมีตัวบล็อกบางตัวในโปรแกรมของคุณและคุณไม่สามารถเรียงลำดับใหม่ได้แสดงว่าคุณใช้ช่องทางที่น้อยลงในซีพียู แต่มันอาจจะยังคงแสดง 100%
จากนั้นคุณมีคุณสมบัติ SIMD ในซีพียูซึ่งเป็นการทำงานแบบเวกเตอร์ มันเหมือนกับ GPGPU-light ในแง่ที่ว่าคุณมักจะมีเพียงสี่หรือแปดการทำงานในเวลาเดียวกัน, GPU ทำเช่น 32 หรือ 64 แต่คุณยังต้องใช้มันเพื่อเหวี่ยง FLOPS
สิ่งต่าง ๆ เช่นการแบ่งปันที่ผิดสามารถนำไปสู่ค่าใช้จ่ายในการซิงโครไนซ์สูงซึ่งมักจะแสดงเป็นโหลดเคอร์เนลใน Linux CPU ถูกใช้อย่างสมบูรณ์ แต่คุณไม่มีปริมาณงานที่มีประโยชน์มาก
ฉันได้เขียนโปรแกรมบนเครื่อง IBM Blue Gene / Q มีระดับลำดับขั้นมากมาย ( แผนผังของ Blue Gene / L ) ที่ล้าสมัยและดังนั้นจึงยากที่จะตั้งโปรแกรมได้อย่างมีประสิทธิภาพ คุณจะต้องใช้ลำดับชั้นแบบเต็มลงไปที่ SIMD และ SMT (Intel เรียก HyperThreading นี้) เพื่อรับประสิทธิภาพ
จากนั้นเครือข่ายมักจะ จำกัด คุณ ดังนั้นปรากฎว่ามันเร็วขึ้นในเวลา (นาฬิกาแขวนผนัง) ในการคำนวณสิ่งต่าง ๆ ที่หลาย ๆ ซีพียูในเวลาเดียวกันแทนที่จะสื่อสารผ่านเครือข่าย นี่จะทำให้โหลดบน CPU มากขึ้นและทำให้โปรแกรมทำงานได้เร็วขึ้น แต่ปริมาณงานที่แท้จริงของโปรแกรมนั้นไม่ดีเท่าที่ควรจากตัวเลขดิบ
หากคุณเพิ่ม GPUs ลงในส่วนผสมมันจะยากยิ่งขึ้นในการปรับแต่งสิ่งทั้งหมดนี้เพื่อให้ได้ประสิทธิภาพ นั่นจะเป็นหนึ่งในสิ่งที่ฉันจะเริ่มทำในวิทยานิพนธ์ของ Lattice QCD ในอีกไม่กี่เดือนข้างหน้า
NO-OP
ในเวลาเดียวกันซึ่งจะนำไปสู่การโหลดทั้ง 100%