Announcement

Collapse
No announcement yet.

สองอย่างนี้ต่างกันไหม ( Thread )

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • สองอย่างนี้ต่างกันไหม ( Thread )

    Process ที่เป็น Multi Thread บน CPU core เดียว ที่ไม่มี Hyper Thread
    กับ Process Thread เดียว บน CPU core เดียว ที่ไม่มี Hyper Thread อันไหนเร็วกว่ากัน
    เพราะตามหลักแล้ว CPU core เดียว ที่ไม่มี Hyper Thread ก็ทำได้ทีละคำสั่งอยู่ดี แถมต้องมาทำ Context SW ละหว่าง Process อีก มันน่าจะช้ากว่า และถ้ามันช้ากว่าจริงเราจะเขียน Multi Thread อีกทำไม ผมงงมากๆ เลย
    ใครก็ได้ช่วยแนะนำหน่อยนะคราบ

  • #2
    งงครับ -*-

    Multi Thread(multiมานหมายถึงตั่งแต่3ขึ้นไปนะ) บนCPU coreเดียว คืออะไรครับ ขอคำแปลหน่อย ปกติCPU coreเดียวมานก็มีแค่ 1threadหนิครับ

    Comment


    • #3
      1.Multi Thread บน CPU core เดียว ที่ไม่มี Hyper Thread
      --------------------------------------
      2.Process Thread เดียว บน CPU core เดียว ที่ไม่มี Hyper Thread
      --------------------------------------
      ซีพียูทั้ง 2 หัวข้อที่เอามาเปรียบเทียบเป็นตัวเดียวกัน เป็นซีพียูคอร์เดียว ไม่มี hyper thead
      --------------------------------------
      ซึ่งซีพียูแบบเดียวกัน ประมวลผลได้เหมือนกัน คำตอบก็มีอยู่แล้วคือ เท่ากันครับ(คำถามค่อนข้างจะ งง นะครับ)
      Last edited by guru; 13 Jul 2007, 17:21:37.

      Comment


      • #4
        Process แบบ multi thread บน CPU แบบ multi core เร็วสุด


        อิอิ นอกนั้น มั่ว

        Comment


        • #5
          Originally posted by nutdiablo View Post
          เพราะตามหลักแล้ว CPU core เดียว ที่ไม่มี Hyper Thread ก็ทำได้ทีละคำสั่งอยู่ดี แถมต้องมาทำ Context SW ละหว่าง Process อีก มันน่าจะช้ากว่า และถ้ามันช้ากว่าจริงเราจะเขียน Multi Thread อีกทำไม ผมงงมากๆ เลย
          ใครก็ได้ช่วยแนะนำหน่อยนะคราบ
          ข้อดีอีกข้อของ multithread programming คือ parallel execution ครับ ก็คือความสามารถที่แต่ละ thread จะทำงานไปได้พร้อมๆกัน

          ผมเข้าใจว่าบางโปรแกรมถึงแม้จะเป็นโปรแกรมเดี่ยว แต่มันต้องเขียนโปรแกรมเป็น multithread ก็เพราะว่าต้องการข้อดีข้อนี้ ก็คือต้องการให้แต่ละ module ในโปรแกรมทำงานไปได้พร้อมๆกัน

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

          Comment


          • #6
            แต่ CPU core เดียว ก็ทำได้ที่ละ Modul ไม่ใช่หรอคราบ

            แต่ CPU core เดียว ก็ทำได้ที่ละ Modul ไม่ใช่หรอคราบ
            งั้นก็น่าจะใช้เวลาเท่าๆกัน

            และถ้ามันเท่ากันจะทำ Multi thread ทำไมกัน(หมายถึงจะทำ Multi thread CPU core เดียว ที่ไม่มี Hyper Thread ไปทำไม)

            Comment


            • #7
              CPU core เดียวธรรมดาๆ ก็ทำ multithread ได้ครับ
              multitasking ยังทำได้เลย ทำไม multithread จะทำไม่ได้

              มันใช้หลักการ time-dividing (แบ่งเวลาของ CPU) ทำให้เสมือนว่าทำงานไปพร้อมๆกัน

              แต่ผมเข้าใจคำถามของคุณ nutdiablo ละ คือคุณ nutdiablo อยากทราบว่าในสภาวะแวดล้อมแบบ single core cpu ธรรมดาๆ เนี่ย
              multithread programming มันจะมีข้อดีอะไรมากกว่า singlethread programming ในแง่ของความเร็วอย่างเดียว (อย่างอื่นไม่สนใจ)

              ผมไปหาข้อมูลมาละ มันมีตัวแปรนึงที่น่าสนใจ คือเจ้าสิ่งที่เรียกว่า memory letency ในการ run program
              ก็คือมันช่วงระยะเวลา (cycle) ที่เสียไปใน Program ที่จะต้องรอ การทำงานของ memory อาจจะเนื่องมากจากพวก cache miss

              ซึ่งโปรแกรมที่เป็น single thread นั้นก็จะหมายความว่า thread ที่ 2 จะเริ่มทำงานไม่ได้จนกว่า thread แรกจะทำงานเสร็จ
              ซึ่งระยะเวลาในการทำงานชอง thread แรก นั้น ก็รวมพวกเวลาของ memory letency เข้าไปด้วย

              แต่ถ้าเป็น multi thread ขณะที่ thread แรกเข้าสู่ช่วง memory latency นั้น
              CPU ไม่จำเป็นจะต้องเสีย cycle รอไปเฉยๆ เพราะว่า CPU สามารถเริ่มทำงาน thread ที่สองได้เลย
              นั่นจะเป็นตัวแปรสำคัญที่ทำให้ multi thread จะทำงานเร็วกว่า single thread บน single core cpu

              ตัวอย่าง ถ้าเรามี thread ที่ทำงานง่ายๆ โดยใช้ 6 CPU cycle
              โดยจะใช้งานจริงๆอยู่แค่ 2 cycle คือหัวกับท้าย แต่จะมี memory latency อยู่ 4 cycle ตรงกลาง

              ถ้าเราต้อง run thread นี้ทั้งหมด 4 ตัว จะเกิดอะไรขึ้น

              ในสภาวะแวดล้อมแบบ Single thread ก็คิดง่ายมาก ก็คือเราก็จะใช้เวลาทั้งหมด = 6x4 = 24 Cycle

              แต่ถ้าเป็น multithread พอถึง cycle ที่สองของ thread แรก ที่จะเป็นช่วง memory latency
              CPU จะสามารถเริ่มทำงาน thread ที่สองได้เลย และพอถึง cycle ที่สามก็จะเริ่มทำงาน thread ทีสามได้อีก
              ทำให้ระยะเวลาทั้งหมดที่ใช้เท่ากับแค่ 9 cycle เท่านั้นเอง

              ดูได้จากตามรูปข้างล่างเลย



              ข้อมูลเพิ่มเติม อ่านจากนี่
              http://www.embedded-computing.com/pd...elis.Jan06.pdf

              Comment


              • #8
                มีแต่คนแน่นๆ ทั้งนั้นเลยครับ ขอดูดความรู้สะหน่อย อิอิ

                Comment


                • #9
                  จดๆฟามรู้ อ่านไปเกาหัวไป อะไรเทรดๆ เสสๆ?

                  Comment


                  • #10
                    ลึกซึ้งเกินไป ไม่เข้าใจเลย 5*5*5

                    Comment


                    • #11
                      ขอดูดทุกอย่างแล้วกัน

                      Comment


                      • #12
                        เป็นอย่างนี้นี่เองขอบคุณคราบ ทุกท่าน

                        Comment


                        • #13
                          ก็อย่างที่รู้ๆ... ปัจจุบัน... เราสามารถใช้งาน ​CPU หนึ่งตัว ได้มากกว่า 1 งาน (Task) อยู่แล้ว (ไม่ว่าจะกี่ Core ก็ Hyper Thread จะทำทีละคำสั่ง หรือหลายๆคำสั่ง) โดยการใชเทคนิค การสลับงาน..

                          ซึ่งใช้งานได้ดีไม่ดีเต็มที่อย่างไร .. ส่วนหนึ่งก็ขึ้นกับเทคนิค ในการสลับงาน (ซึ่งปกติจะอยู่ที่ OS)

                          ในตัว CPU จะมีหน่วยประมวลผลต่างๆ เช่น ALU หรือ FPU เพื่อที่จะสามารถ ประมวลผล คำนวน สิ่งต่างๆ พร้อมๆกัน ได้ .. (CPU x86 ปัจจุบัน .. ทำงานพร้อมๆกันหลายๆ คำสั่ง ใน 1 cycle ได้) แต่ มีเงื่อนไขอยู่ว่า .. มันต้องเป็น คำสั่ง ที่ไม่ต้องรอกัน หรือสัมพันกัน ... มันก็เลยกลายเป็นว่า พอใส่ ALU หรือ FPU ไปเยอะ .. ก็ไม่สามารถ ใช้งานได้หมด .. เพราะ หลายๆคำสั่ง.. ต้องทำงาน ต่อกัน .. เช่น.. เราจะเอา A + B *C เราก็ต้องเอา B*C ก่อน .. แล้วค่อยมาบวกกับ A ... ทำให้แบบนี้ ก็ใช้ ALU ทีละตัว ในส่วนนี้ กลไก ใน CPU เป็นตัวจัดการ CPU รับรู้ได้ทีละ process ทำให้ ALU,FPU ทีเหลือ เอาไปใช้ทำอย่างอื่นไม่ได้..

                          Hyper Threading เป็นการทำ Logical CPU โดยทำงานกับ ALU,FPU เดียวกัน ทำให้ OS มองเห็น มากกว่า 1 CPU พอ OS เห็นมากกว่า 1 เช่นเห็นเป็น 2 .. OS ก็จะกำหนด Process ที่ทำงานพร้อมๆกันได้ เป็น 2 Process ส่งผลให้ .. ใช้ ALU, FPU ได้เต็มที่ขึ้น

                          ผมจะจำว่า . Hyper Threading คือ Virtual CPU

                          ส่วนเรื่อง.. Multi-Processing , Multi-Threading .. ผมถือว่าเป็นเทคนิค ด้าน Software
                          Multi-Processing , Multi-Threading มันเป็นความพยายาม ที่เราต้องการ ทำงานหลายๆอย่าง พร้อมๆ กัน .. อย่างง่ายๆ ...

                          เช่น. ในสมัย DOS ที่ยังไม่ใช่ Multi-Tasking OS เนี้ย.. การเขียนโปรแกรม ก็เป็น Single Process, Single Threading เช่นโปรแกรม นึง .. ต้องการ... รบข้อมูลเข้าทาง Keyboard, ทาง Mouse , แล้วไปแสดงผล บนหน้าจอ ... การเขียน.. ก็จะต้องทำงาน ทีละอย่าง... จนครบลูป... ซึ่งโปรแกรม ต้องคอย จัดสรร เอง ว่าจะใช้เวลาส่วนได้ มากน้อยแค่ไหน ภาพรวมการทำงานทั้งหมด ถึงจะดูเหมาะสม
                          พอ .. OS ทำ Multi-Tasking ทำ Multi-Process โดยโปรแกรมเมอร์.. ก็แตกงาน ออกเป็นหลายๆ Process .. แล้วให้ OS เป็นคนจัดการ .. โปรแกรมเมอร์.. ก็ไม่จำเป็นต้องระวังมาก ว่า งาน ส่วนไหน .. จะเบียดเวลา ของอีกส่วนหรือเปล่า ...

                          คราวนี้ การเขียนโปรแกรม Multi-Processing เนี้ย.. มันแย่ตรงที่ .. มันเป็น Process ที่แยกออกจากกัน .. มี memory space แยกกัน​.. ทำให้ใช้ Resource เยอะ ...
                          รวมทั้ง.. ถ้า เครื่องหนี่งเครื่องมีโปรแกรมที่ทำงานพร้อมๆกันมากกว่าหนึ่งโปรแกรม... โปรแกรม ที่มี Process เยอะ ..ก็จะอาจจะไปใช้ CPU มากกว่า โปรแกรมที่มี Process น้อย.. เพราะ OS มองเห็นว่าเป็น Process เหมือนกัน .. ก็จัดการเวลาให้เท่าๆกัน

                          เลยมีการใช้ Multi-Threading Programming มาช่วย.. โดยการเป็นการทำให้สามารถ ทำงานหลายๆ งาน .. แต่อยู่ใน Process เดียว... ซึ่งจะทำให้ .. ใช้ Memory ร่วมกัน.. สามารถ ใช้ Data บางอย่าง ร่วมกันได้​.. ก็จะกิน Memery น้อยลง.. และ พออยู่ใน Process เดียวกัน .. ถีงแม้จะมีจำนวน Thread ทีเยอะ ... OS ก็จะถือว่าเป็น โปรแกรม Process เดียว ก็จะจัดสรร CPU ให้เท่าๆกับโปรแกรมอื่น ที่มี Process เดียวเหมือนกัน..
                          Last edited by tasanakorn; 15 Jul 2007, 14:28:58.

                          Comment


                          • #14
                            มาสรุปสั้นเพิ่มต่อ ...
                            key หลักๆ ที่จะผมพยาม โดดไปใช้ .. Multi-Threading ... อย่างแรกคือ Memory ... ถ้าต้องเขียนโปรแกรม แล้ว มันแตกออกมา เป็น พัน Process นี้... Memory ระดับ GB นี้จะหายไปใน พริบตา... ... แถม OS ยังทำ Process switch บน User Process จนไม่มีเวลาทำ System Process อีกตั้งหาก..

                            อย่างที่สอง ... การเขียนโปรแกรม Multi-Threading มันทำให้เรา เขียนโปรแกรมงาย.. ในกรณี ที่ต้องทำหลายๆเรื่อง พร้อมกัน ..

                            อย่างที่สาม ..เมื่อต้องการทำงานหลายๆ อย่างพร้อมๆกัน .. แล้ว การ ทำ Multi-Threading มันทำให้เรา ติดต่อกันระหว่าง Thread ได้ง่าย..


                            จะเห็น ว่า มีแค่ข้อแรก.. ที่เกี่ยวกับ Performance ...
                            และผม ก็ใช้ ข้อนี้ บ่อยซะด้วย... โดยเฉพาะ ในเรื่อง การ ปรับแต่ง Server

                            Comment


                            • #15
                              ข้อมูลจากการใช้งานจริง เยี่ยมไปเลยครับ คุณ tasanakorn

                              Comment

                              Working...
                              X