Trang 1 / 6 1234 ... LastLast
Hiển thị kết quả từ 1 đến 10 / 53
  1. #1
    Tham gia
    26-12-2004
    Bài viết
    23
    Like
    0
    Thanked 0 Times in 0 Posts

    Biên dịch bỡi VC6 chạy cả 2 core trên nền XP

    Chào các bạn.

    Tôi lập trình và biên dịch chương trình tính toán của mình trên máy tính xách tay có CPU Core Duo T2500, Windows XP Home Edition SP2, bằng ngôn ngữ lập trình Microsoft Visual C++ 6.0. Tôi chạy chương trình tinhtoan.exe (do tôi viết và được biên dịch bởi VC6) và dùng phần mềm Process Explorer V8.41 để xem thì được biết là chương trình tinhtoan.exe chỉ dùng 50% của CPU (= 1 core) để tính toán, mặt dù CPU còn thừa gần 50% không sử dụng (System Idle Process). Tính toán nhiều, mà phần mềm mình viết chỉ sử dụng có 50% khả năng của máy để chạy thì lãng phí khả năng của máy và mất thời gian quá !

    Vì vậy tôi muốn hỏi, có anh chị nào biết cách làm sao cho chương trình biên dịch bỡi VC6 trên nền XP có thể dùng cả 2 core của CPU Core Duo thì hãy vui lòng chỉ cho tôi biết với.

    Xin cảm ơn.

    Van Thuan.
    Quote Quote

  2. #2
    Tham gia
    07-06-2006
    Bài viết
    3,587
    Like
    86
    Thanked 641 Times in 314 Posts
    Chào anh,
    Tôi không rành về VC6 nhưng chỉ nói chung về 1 số kỹ thuật của chuyện lập trình tận dụng CPU.
    Anh thử check xem trong chương trình của anh, anh chạy single thread hay multi thread. 1 trong những cách để anh kéo CPU sử dụng nhiều hơn là anh dùng multi thread khi đó anh sẽ tận dụng những thời gian trống mà cái thread chính của anh không hoạt động như khi anh load data từ HDD lên memory ( dùng DMA nên ko xài resource của máy). Không phải lúc này CPU use 100% cũng tốt đâu anh

  3. #3
    Tham gia
    10-12-2004
    Bài viết
    2,771
    Like
    0
    Thanked 13 Times in 13 Posts
    Quote Được gửi bởi thuaniam View Post
    Chào các bạn.
    Vì vậy tôi muốn hỏi, có anh chị nào biết cách làm sao cho chương trình biên dịch bỡi VC6 trên nền XP có thể dùng cả 2 core của CPU Core Duo thì hãy vui lòng chỉ cho tôi biết với.

    Xin cảm ơn.

    Van Thuan.
    Muốn chương trình của bạn chạy trên cả 02 core thì bạn phải sử dụng kỹ thuật multithreading. Nếu chỉ lập trình truyền thống như xưa nay thì chương trình của bạn chỉ dùng 01 core thôi.
    Multithreading là một kỹ thuật không hề đơn giản. Có hẳn một môn học gọi là "Tính toán song song" để dạy về các kỹ thuật xử lý vấn đề này (môn này hình như chương trình chử nhân/kỹ sư CNTT không dạy).

    Đại khái thì muốn xử lý song song thì bạn phải làm từ khi thiết kế bài toán. Chia bài toán của bạn ra làm nhiều bài toán con và xử lý nó đồng thời. Xong gộp kết quả lại.
    Sau khi đã có thuật toán xử lý // rồi thì việc lập trình cũng không phải là phức tạp lắm đâu.

  4. #4
    Tham gia
    26-12-2004
    Bài viết
    23
    Like
    0
    Thanked 0 Times in 0 Posts
    Chào các bạn.

    Xin cảm ơn hai bạn lqkhoi va tethien. Có lẽ ý kiến của các bạn đã làm sáng tỏ vấn đề của tôi rồi đấy. Tôi không phải là dân tin học chuyên nghiệp nên lâu nay không để ý đến lập trình xử lý song song mặt dù vấn đề này đã được nghe đến rất nhiều lần. Với nhu cầu thực tế như tính toán số liệu nhiều, phân tích kết cấu lớn kết hợp bài toán điều khiển trong miền thời gian thực, ... trong lĩnh vực real-time control / substructute testing mà tôi đang làm, có lẽ tôi nên tìm hiểu thêm vấn đề tính toán xử lý song song để phục vụ cho việc tính toán và điều khiển của mình.

    Tôi sẽ tìm học về tính toán xứ lý song song, sẽ có nhiều vấn đề thú vị và cần sự tham vấn của các chuyên gia lắm dây! Nếu anh chị nào có lời khuyên gì cho người sắp bắt đầu đọc/học tính toán xử lý song song thì xin vui lòng chỉ giáo.

    Xin cám ơn !

    Van Thuan.

  5. #5
    Tham gia
    10-12-2004
    Bài viết
    2,771
    Like
    0
    Thanked 13 Times in 13 Posts
    Bạn có thể tham khảo :
    -http://en.wikipedia.org/wiki/Parallel_computing
    -http://www.mhpcc.edu/training/workshop/parallel_intro/MAIN.html
    -http://www.wotug.org/parallel/

    Bạn cũng có thể tham khảo cuốn này :

    An Introduction to parallel computing

    Dung lượng 6MB
    Được sửa bởi tềthiên lúc 15:08 ngày 07-09-2007

  6. #6
    Tham gia
    24-07-2007
    Bài viết
    108
    Like
    0
    Thanked 0 Times in 0 Posts
    Mình chỉ muốn nói rõ ràng hơn: multithread và parallel là hoàn toàn khác nhau

  7. #7
    Tham gia
    13-08-2005
    Bài viết
    107
    Like
    0
    Thanked 0 Times in 0 Posts
    chính xác là vấn đề này chẳng có liên quan đến parallel gì cả
    lập trình song song là bạn viết ct phân việc cho từng CPU, bạn có thể điểu khiển từng CPU
    còn CPU nhiều lõi tuy là nhiều lõi nhưng bạn không thể điều khiển (tức là lập trình) riêng từng lõi, chuyện lõi này hay lõi kia làm việc bạn không thể can thiệp được, đó là giải thuật của phần cứng và hdh

    Và đúng như các bạn đã nói, lập trình multithread có thể khiến cho CPU nhiều lõi cùng làm việc. Với 1 thead thì không thể tách ra nhiều phần cho nhiều lõi cùng làm việc, vì mỗi lõi có các trạng thái (tức là giá trị thanh ghi) riêng của nó

  8. #8
    Tham gia
    10-12-2004
    Bài viết
    2,771
    Like
    0
    Thanked 13 Times in 13 Posts
    Quote Được gửi bởi nguyen.the.vinh View Post
    Mình chỉ muốn nói rõ ràng hơn: multithread và parallel là hoàn toàn khác nhau
    Quote Được gửi bởi nguyentuan2 View Post
    chính xác là vấn đề này chẳng có liên quan đến parallel gì cả
    lập trình song song là bạn viết ct phân việc cho từng CPU, bạn có thể điểu khiển từng CPU
    còn CPU nhiều lõi tuy là nhiều lõi nhưng bạn không thể điều khiển (tức là lập trình) riêng từng lõi, chuyện lõi này hay lõi kia làm việc bạn không thể can thiệp được, đó là giải thuật của phần cứng và hdh

    Và đúng như các bạn đã nói, lập trình multithread có thể khiến cho CPU nhiều lõi cùng làm việc. Với 1 thead thì không thể tách ra nhiều phần cho nhiều lõi cùng làm việc, vì mỗi lõi có các trạng thái (tức là giá trị thanh ghi) riêng của nó
    Không hiểu thì đừng phát biểu.
    Parallel là kỹ thuật tổng quát, cho phép chương trình hoạt động trên nhiều CPU, các CPU này có thể trên nhiều hệ thống khác nhau, miễn là có thể trao đổi thông tin cho nhau. Khi chạy trên 2 hệ thống khác nhau thì có thể nói đây là hệ chương trình vì các chương trình có CPU riêng, có bộ nhớ riêng.

    Multithread (ở đây nói đến chương trình, không nói đến CPU. CPU hỗ trợ multithread có thể coi là có 2 nhân (ảo) hay 2 CPU riêng biệt trên cùng hệ thống) là trường hợp riêng của Parallel khi 02 (hay nhiều hơn) CPU chạy trên cùng một hệ thống. Khi đó chúng ta chỉ có 01 chương trình, một bộ nhớ, nhưng có nhiều CPU. Do chạy cung trên 01 hệ thống nên việc trao đổi giữa các tiến trình trở nên đơn giản hơn rất nhiều. Do đó về mặt thiết kế thuật toán cũng sẽ đơn giản hơn.
    Tuy vậy các tư tưởng chung về phân tích, phân chia bài toán ra nhiều phần nhỏ .. vẫn là 1.

  9. #9
    Tham gia
    13-08-2005
    Bài viết
    107
    Like
    0
    Thanked 0 Times in 0 Posts
    multithread hay không là do sự hỗ trợ của HDH chẳng liên quan gì đến CPU
    HDH đa chương đa nhiệm hỗ trợ multithread, HDH đơn nhiệm như MSDOS thì không ngay cả khi cài đặt trên hệ thống CPU có 2,4 nhân

    Multithread đã hoàn thiện trong Windows95, lúc đó thì chưa ai biết đến CPU nhiều nhân

    Muốn parallel thì ngoài chuyện hệ thống có nhiều CPU, thì phải có HDH hỗ trợ cho việc lập trình parallel,
    Bạn có bao giờ nghe nói đến hệ thống máy tính parallel cài đặt Windows95 (hỗ trợ multithread) chưa

    Nói chung thì chả liên quan gì đến parallel

  10. #10
    Tham gia
    10-12-2004
    Bài viết
    2,771
    Like
    0
    Thanked 13 Times in 13 Posts
    Quote Được gửi bởi nguyentuan2 View Post
    multithread hay không là do sự hỗ trợ của HDH chẳng liên quan gì đến CPU
    HDH đa chương đa nhiệm hỗ trợ multithread, HDH đơn nhiệm như MSDOS thì không ngay cả khi cài đặt trên hệ thống CPU có 2,4 nhân
    Ở đây đang nói đến chương trình nói chung, không nói đến hệ điều hành.

    Một chương trình giải 01 bài toán A. Có thể chia thành các bài toán con A1,A2,A3 .... A100.
    + Nếu chương trình luôn thực hiện lần lượt A1 xong mới tới A2 rồi A3 .... A100 thì không phải là chương trình có khả năng xử lý //.
    + Nếu chương trình có khả năng thực hiện A1 cùng lúc với A2, A3 .... A100 thì là chương trình có khả năng xử lý //. Có thể chia làm 2 trường hợp :
    - Trường hợp chương trình xử lý A1, trên 01 hệ thống, A2 trên hệ thống khác ... thì đó là xử lý // thực thụ.
    - Trường hợp chương trình xử lý tất cả trên 1 hệ thống thì đó là multithread. Tất nhiên việc thực hiện được multithread phải có sự hỗ trợ của hệ điều hành. Trường hợp này nếu hệ thống có nhiều nhân hay nhiều CPU thì HDH sẽ chia các thread này ra chạy trên nhiều nhân khác nhau nên sẽ là xử lý //. Còn nếu chỉ có 01 nhân thì HDH chẳng qua chỉ phân chia thời gian CPU cho nhiều thread khác nhau thôi.
    Multithread đã hoàn thiện trong Windows95, lúc đó thì chưa ai biết đến CPU nhiều nhân
    Nhưng đã có hệ thống có nhiều CPU rồi bạn à. CPU nhiều nhân chẳng qua chỉ là nhét nhiều CPU vào chung 01 vỏ thôi.
    Muốn parallel thì ngoài chuyện hệ thống có nhiều CPU, thì phải có HDH hỗ trợ cho việc lập trình parallel,
    Bạn có bao giờ nghe nói đến hệ thống máy tính parallel cài đặt Windows95 (hỗ trợ multithread) chưa
    Bạn có bao giờ nghe nói đến Grid Computing chưa ? Nó thực sự là một hệ thống parallel đó. Có rất nhiều hệ thống Grid Computing chạy trên Java và nó hoàn toàn có thể chạy trên windows 95 hay Windows 98.
    Nói chung thì chả liên quan gì đến parallel
    Tùy bạn nhận định thôi. Với tôi chương trình multithread chỉ là trường hợp riêng của xử lý //.

Trang 1 / 6 1234 ... LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •