Trang 6 / 6 FirstFirst ... 3456
Hiển thị kết quả từ 51 đến 53 / 53
  1. #51
    Tham gia
    26-12-2004
    Bài viết
    23
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi huyphuc1981_nb View Post
    ...

    Cách tổ chức ra từng tập rời là cách khá tốt để chạy trên nhiều CPU, trên nhiều máy... Nhưng để chạy nhanh tốt nhất vẫn phải quan tâm đến giao tiếp giữa các tập. Tôi lấy ví dụ MS Word cũng vậy, MS đẻ ra rất nhiều công nghệ như DDE, COM.... để băm nhỏ một chương trình ra nhiều chương trình.
    Mình cố thử sửa lại cái lỗi Quote mấy lần mà đều không được, mong các bạn bỏ qua cái lỗi này nhé. (Van Thuan)


    "Cách tổ chức ra từng tập rời là cách khá tốt để chạy trên nhiều CPU, trên nhiều máy... Nhưng để chạy nhanh tốt nhất vẫn phải quan tâm đến giao tiếp giữa các tập. Tôi lấy ví dụ MS Word cũng vậy, MS đẻ ra rất nhiều công nghệ như DDE, COM.... để băm nhỏ một chương trình ra nhiều chương trình." (huyphuc1981_nb)



    Quote Được gửi bởi lqkhoi View Post

    1 số lưu ý nhỏ là vì bài toán của anh thuần chất về toán các UI chỉ là những mớ bong bóng phụ tùng. Nếu được anh bỏ quách em MFC xài thẳng win32 api nó sẽ nhanh được xíu. Cái core tính toán của anh anh viết thành 1 standard exe và đừng dùng thêm bất cứ cái lib nào cả ví dụ như MFC. Rùi sau đó tùy theo chương trình của anh cần nhập thông số vào thì anh chỉ cần viết 1 cái frontend application lần này anh có thể tô màu vẽ vời nó làm gì thì làm cho user friendly. Mục đích cuối cùng là anh dùng frontend cung cấp số liệu rùi để cái standalone app kia nó chạy. Như vậy sẽ chạy nhanh hơn xíu.
    "1 số lưu ý nhỏ là vì bài toán của anh thuần chất về toán các UI chỉ là những mớ bong bóng phụ tùng. Nếu được anh bỏ quách em MFC xài thẳng win32 api nó sẽ nhanh được xíu. Cái core tính toán của anh anh viết thành 1 standard exe và đừng dùng thêm bất cứ cái lib nào cả ví dụ như MFC. Rùi sau đó tùy theo chương trình của anh cần nhập thông số vào thì anh chỉ cần viết 1 cái frontend application lần này anh có thể tô màu vẽ vời nó làm gì thì làm cho user friendly. Mục đích cuối cùng là anh dùng frontend cung cấp số liệu rùi để cái standalone app kia nó chạy. Như vậy sẽ chạy nhanh hơn xíu." (lqkhoi)

    Chào các bạn huyphuc1981_nb va lqkhoi,

    Qua những thảo luận, mình nhận thức thêm một số cách rất tốt về phương diện lập trình cấp cao để khai thác tối đa khả năng tính toán của CPU (1 core và nhiều core nói chung). Những cách các bạn nói như viết standard exe, chia ra nhiều dll, 2 hay vài con exe, thì mình chưa làm. Tuy nhiên, với những giải thích ở trên (đặc biệt là những lập luận và "trình diễn" của huyphuc1981_nb) thì mình tin là băm chặt chương trình ra nhiều phần nhỏ và tổ chức dữ liệu tốt giúp CPU dễ bề phân phát công việc một cách linh hoạt cho các phần tử xử lý, năng lực xử lý của CPU mới được khai thác tối đa. Với các bạn lập trình chuyên nghiệp, am hiểu vấn đề này thì có lẽ các bạn cho là bình thường nhưng với mình thì điều này hơi cao cấp đấy, mình cần tìm hiểu thêm và sẽ lưu ý đến vấn đề này trong việc lập trình tính toán ứng dụng của mình. Thanks



    Quote Được gửi bởi lqkhoi View Post

    Thêm 1 cái nho nhỏ nữa là nếu anh mạnh về toán anh có thể reconstruct cái bài toán của anh thành 1 số cái có thể dùng nhưng MMX, SSE,SSE2 instruction của Intel. Ví dụ như 1 số FFT, hay IFT đều có sẵn trong tập lệnh của Intel CPU. Cái này rất thường dùng trong optimize speed cho các video codec. Nhưng cái trả giá là anh phải học xíu về ASM for CPU X86 và học cách link nó vô chương trình của anh. Những em làm được mấy cái này lương đều 6 số cả. Chúc anh thành công
    "Thêm 1 cái nho nhỏ nữa là nếu anh mạnh về toán anh có thể reconstruct cái bài toán của anh thành 1 số cái có thể dùng nhưng MMX, SSE,SSE2 instruction của Intel. Ví dụ như 1 số FFT, hay IFT đều có sẵn trong tập lệnh của Intel CPU. Cái này rất thường dùng trong optimize speed cho các video codec. Nhưng cái trả giá là anh phải học xíu về ASM for CPU X86 và học cách link nó vô chương trình của anh. Những em làm được mấy cái này lương đều 6 số cả. Chúc anh thành công " (lqkhoi)

    Hi lqkhoi !
    Toán thì mình không mạnh lắm nhưng làm được, còn mấy cái reconstruct đó thì mình chưa biết tí gì, x86 ASM thì có biết đấy nhưng hổng có đụng đến bao giờ, và muốn hiểu được những thứ đó mình cần phải tìm hiểu cấu trúc CPU. Khi nào rảnh mình sẽ tìm hiểu thử vụ này có khả thi với mình không chứ bây giờ mình cần dành thời gian cho một số việc khác. Thank một lần nữa

    Quote Được gửi bởi lqkhoi View Post
    Hi anh Thuan,

    Như vậy hiện tại anh đã chạy được với performance là bao nhiêu rồi ? Đã đủ yêu cầu của anh chưa hay tốc độ vẫn chưa thỏa mãn anh ?
    "Như vậy hiện tại anh đã chạy được với performance là bao nhiêu rồi ? Đã đủ yêu cầu của anh chưa hay tốc độ vẫn chưa thỏa mãn anh ? " (lqkhoi)

    Hi lqkhoi !
    Hiện tại mình dùng dùng thuật toán tách bài toán lớn ra làm hai bài toán con (giống như đã mô tả hệ 2 bài (1) và (2) trước đây), hai bài có khối lượng tính toán tương đương với nhau, cùng chạy song hành do hai threads đảm nhiệm. Mình không biết mỗi thread có được một core riêng biệt ăn trọn hay không hay là chúng được ăn bởi sự phối hợp tác chiến theo một kiểu nào đó của cả hai core, nhưng kết quả chỉ biết rằng hiệu suất sử dụng toàn CPU (2 core) đã được 100%, trừ những lúc đọc ghi dữ liệu trên HDD. Còn việc tổ chức lại chương trình (và viết thành 2 exe hay dùng dll) thì mình chưa làm.

    Và tạm thời cái thread đã đáp ứng được yêu cầu hiện tại. Cũng may là bài toán của mình có thể chia làm 2 bài toán con, tương đuơng về mặt tính toán nên rất thuận tiện trong việc đồng bộ hai threads. Việc đồng bộ được thực hiện đơn giản thông qua kiểm tra ở thời điểm cuối của mỗi bước tính. Code như sau:

    ////////////////////////////////////////////////////
    UINT WorkerThread1(LPVOID pParam)
    {
    // khai báo ...
    // thực hiện step
    for(long i=0;i<n;i++){
    //đọc một số data từ con trỏ có địa chỉ pParam để tính tương tác f12 ...
    //tính toán ...
    //tính xong một bước phải kiểm tra xem thread kia tính xong chưa, như sau:
    p=(long*)pParam;
    *(p+0) = i+1; //lưu lại số step đã tính xong của thread 1, để cho thread 2 có thể kiểm tra đồng bộ
    if(*(p+1) < *(p+0))
    do{/*nothing*/
    }while(*(p+1) < *(p+0));
    }
    }
    ////////////////////////////////////////////////////
    UINT WorkerThread2(LPVOID pParam)
    {
    // khai báo ...
    // thực hiện step
    for(long i=0;i<n;i++){
    //đọc một số data từ con trỏ có địa chỉ pParam để tính tương tác f12 ...
    //tính toán ...
    //tính xong một bước phải kiểm tra xem thread kia tính xong chưa, như sau:
    p=(long*)pParam;
    *(p+1) = i+1; //lưu lại số step đã tính xong của thread 2, để cho thread 1 có thể kiểm tra đồng bộ
    if(*(p+0) < *(p+1))
    do{/*nothing*/
    }while(*(p+0) < *(p+1));
    }
    }
    ////////////////////////////////////////////////////


    Ở đây ta thấy sự lãng phí thời gian của CPU do phải thực hiện do while, nhưng mình cho là rất nhỏ vì khối lượng và thời gian tính toán của 2 thread là gần như nhau, hệ điều hành dễ chia đều việc cho 2 core. Điều này có thể phí phạm nhiều nếu có 1 chương trình cần xử lý nhiều nào đó mà chen vào một core và làm cho thread (chạy chủ yếu ở trên core đó) bị chậm hơn thread kia. Trường hợp này thì chịu lãng phí năng lực tính toán thôi. Mình làm như thế nếu các bạn có cho là "nhà quê" thì nói cho mình biết nhé

    Quote Được gửi bởi lqkhoi View Post
    Hi anh Thuan,
    Nếu tôi không lầm bây giờ anh còn 1 vấn đề là anh có 1 bài toán nhỏ hơn chạy trên 1 cái máy khác và cái bài toán này phải cung cấp đáp số cho hệ thống hiện tại của anh thông qua ethernet hay gì đó ?
    "Nếu tôi không lầm bây giờ anh còn 1 vấn đề là anh có 1 bài toán nhỏ hơn chạy trên 1 cái máy khác và cái bài toán này phải cung cấp đáp số cho hệ thống hiện tại của anh thông qua ethernet hay gì đó ? " (lqkhoi)

    Đúng vậy, như mình đã đề cập, trong real-time substructure testing thì phải chia bài toán kết cấu ra làm vài bài toán con và mỗi bài toán giải trên một máy tính khác nhau (và có 1 bài toán con là thí nghiệm thật chứ không phải mô phỏng, tức là có đo đại lượng vật lý thực) và tất cả đều phải đồng bộ (trong phạm vi giới hạn 1 bứơc tính - step). Ở trên là mình dùng thread (cho tính toán phân tích trên 1 máy tính, không có thí nghiệm), còn nếu viết bằng 2 con exe (chạy trên hai máy khác nhau) thì bài toán cũng y như thế, nhưng khác hoàn toàn về kỹ thuật lập trình (tổ chức data, nối kết giữa các máy tính qua LAN/Internet). Vấn đề này cần thời gian mà hiện nay mình đang bận làm việc khác nên mình sẽ thực hiện sau, nên mình nghĩ cũng không nên bàn thêm gì ở đây.


    -----------------------------------------------------------------------------

    Chào tất cả các bạn !

    Ban đầu mình đặt ra cái thread "Biên dịch bỡi VC6 chạy cả 2 core trên nền XP" này là muốn hỏi các bạn một điều đơn giản là làm sao cho cái chương trình của mình nó tận dụng hết 100% CPU mỗi khi nó chạy chứ nó cứ chạy có 50% CPU là tức quá. Thú thật, lúc đó mình lơ mơ nghĩ là chắc chỉ cần on-off cái gì đó trong trình biên dịch cho phù hợp truớc khi dịch ra exe là có thể dùng hết 100%. Được các bạn (lqkhoi,tềthiên,alain,...) đưa ra một số giải pháp thì mình mới biết đến thread, parallel (mặt dù mới xem xét parallel ở khía cạnh bài toán), và huyphuc1981_nb còn đưa ra một số kỹ thuật cao cấp (chia làm nhều exe, làm dll). Đặc biệt, trong phần tranh luận của các bạn, mình đã vỡ ra nhiều điều về CPU và hiểu thêm về việc chương trình chạy trong CPU. Về điều này, mình muốn nói lời cảm ơn rất nhiều đến huyphuc1981_nb và cũng hy vọng bạn không giận mình vì mình đã đề nghị admin xem xét nhắc nhở bạn. Mình nghĩ chắc khoảng vài tuần nữa là cái dấu màu đỏ đáng ghét đó sẽ biến mất và trả lại cái tên bình thường huyphuc1981_nb xứng đáng với sự nhiệt tình thảo luận sôi nổi và sự hiểu biết chuyên sâu của bạn.

    Một lần nữa xin cảm ơn tất cả các bạn.

    Chúc các bạn luôn vui khoẻ, làm việc tốt !

    Văn Thuận

  2. #52
    Tham gia
    25-08-2007
    Location
    http://www.webhostingpad.com/514.html
    Bài viết
    92
    Like
    0
    Thanked 0 Times in 0 Posts
    Đang viết bài thì mất điện.
    Tức...
    Thôi tóm lại CPU nó cũng như dây chuyền sản xuất.
    Đa luồng có 2 nghĩa: Phân luồng cho phần mềm (cái này giả lập, chia đều phục vụ mỗi người một chút ==> ai cũng hài lòng không ai cảm thấy mình bị ngẽn)
    Đa luồng: giống như dây chuyền sản xuất luồng nào xong công đoạn nào thì được đẩy lên phía trước để cho ông sau vào. Bạn hình dung giống như tai 1 thời điểm có 15 xe hơi trên dây chuyền vậy. Thực tế với CPU những ngày đầu tiên thì được cái nào xuất xưởng cái đó ==. Nhiều công đoạn xử lý bị lãng phí (ở đây là xung nhịp CPU). Như vậy đa luồng cho phép 1 xung có thể làm được nhiều việc cùng lúc (dù chỉ là 1 dây chuyền).
    2 core, 4 core hay nhiều hơn ( hình như con máy khủng nhất số core lên đến hàng trăm) mình đọc lâu rồi không nhớ. ==> làm thế nào để điều phối tốt một 100 dây chuyền cùng hoạt động, tất nhiên tuỳ thuộc vào thực trạng dây chuyền ( phần cứng) cũng như nhà quản lý sản xuất (phần mềm).
    Như vậy không thể khẳng định chỉ 1 phần cứng hay phần mềm có thể giải quyết được vấn đề mà phải đồng bộ. 4 core mà HĐH hay "ứng dụng" không hỗ trợ thì vẫn chạy như 1 Core thôi. Nhưng cũng nên biết một điều là nhiều hệ thống thì việc chia việc cho core lại do phần cứng đảm nhiệm (ví dụ nhiều dây chuyền nhưng lại tự động điều phối công việc) sau đó phần cứng này cho phép chạy giả lập và tương thích với các HĐH 1 core.
    Tin học nó nôm na như vậy: bắt chước đời thường thôi.
    Có lẽ để hiểu cặn kẽ nhất thì phải kể đến các thầy lão làng như thầy Uy bên BKHN. Người nhiều kinh nghiệm bắt đầu làm việc với Băng đục lỗ 01 từ những năm 70. Đôi lời "vào ra" có gì không đúng mong các bạn bỏ qua. Chúc thảo luận vui vẻ.

  3. #53
    Tham gia
    25-08-2007
    Location
    http://www.webhostingpad.com/514.html
    Bài viết
    92
    Like
    0
    Thanked 0 Times in 0 Posts
    Đọc thêm hồi nữa thì kết luận:
    1. Người Việt tách ông nào ra cũng giỏi. Lâu lâu mới đọc được mấy bài hay như thế này. Cảm ơn các bác, cả bác gì bị band cũng thế. Chắc đến lúc mở lại cũng hết hứng thú thảo luận rồi đúng ko?
    2. Người "Việt" ếch làm việc theo "Nhóm" được. Chứ 2 phe chịu nghe nhau biết chấp nhận nhược điểm của nhau một chút biết đâu có những cái bắt tay "hay ho", hay đẻ ra một vài project nào đó.
    Em thích kiểu đãi cát tim vàng, gạn lọc ra nhiều cái hay đấy chứ, em chẳng làm mod chứ làm mod thì em chỉ nhắc nhở thôi.
    Nốt bài này em nghỉ. Lâu lâu quay lại chơi.

Trang 6 / 6 FirstFirst ... 3456

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
  •