Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Code saturation 8bit, có cách nào tối ưu hơn được không?

  1. #1
    Ngày gia nhập
    10 2008
    Bài viết
    5

    Mặc định Code saturation 8bit, có cách nào tối ưu hơn được không?

    Hi các bác, em có một giải thuật như dưới đây cần optimize. Mục đích là làm cho đơn giản hơn và nếu có thể thì loại bỏ if-else statement (trong func() thôi, min, max thì ok). Em nghĩ cả tuần nay rồi mà chưa có cách nào, các bác nhiều kinh nghiệm xem có ý tưởng gì giúp em được không ạ. Tks các bác.
    C Code:
    1. #include <stdlib.h>
    2. #include <stdio.h>
    3. int max(int a, int b){
    4.     if(a>b){
    5.         return a;
    6.     }else{
    7.         return b;
    8.     }
    9. }
    10.  
    11. int min(int a, int b){
    12.     if(a>b){
    13.         return b;
    14.     }else{
    15.         return a;
    16.     }
    17. }
    18. int func(int v, int d){
    19.                 int max_limit,min_limit;
    20.                 if(v>=128){
    21.                     max_limit = max(v, 224);
    22.                     v += d;
    23.                     v = min(max_limit, v);//clipping
    24.                 }else{
    25.                     min_limit = min(v, 31);
    26.                     v -= d;
    27.                     v = max(min_limit, v);//clipping
    28.                 }
    29.                 return v;
    30.  
    31. }
    Đã được chỉnh sửa lần cuối bởi quanganh12 : 07-09-2011 lúc 09:42 AM.

  2. #2
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    C Code:
    1. int func(int v, int d) {
    2.   return (v>=128)?  min(max(v, 224), v+d)
    3.                     max(min(v,31), v-d); // clipping
    4. }

  3. #3
    Ngày gia nhập
    10 2008
    Bài viết
    5

    Thanks bác, nhưng mà code của bác về mặt code size và time execution thì vẫn giống của em thôi (cùng một mã asm) vì ? operator chỉ là dạng viết tắt của if-else statement. Em muốn tránh branch penalty, đồng thời có thể tính toán song song, muốn như vậy thì chỉ có cách dùng các phép tính số học để biểu diễn :P

  4. #4
    Ngày gia nhập
    04 2010
    Nơi ở
    Thâm sơn cùng cốc
    Bài viết
    825

    Bạn có thể giải thích hơn về ý tưởng tính toán song song của bạn không?

  5. #5
    Ngày gia nhập
    10 2008
    Bài viết
    5

    Song song ở đây là có thể tính toán nhiều input cũng một lúc, chẳng hạn dùng các lệnh SIMD của ARM. Muốn vậy thì phải biểu diễn ở dạng các phép toán số học, tránh các câu lệnh điều kiện. Riêng có một số hàm built-in như min, max có thể thực hiện được với vector nên không cần phải thay đôi chúng

  6. #6
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Mặc định Code saturation 8bit, có cách nào tối ưu hơn được không?

    Một bài toán optimize khá thú vị đấy !
    1. Loại bỏ hai hàm min & max, đã là hàm thì bị tốn time call, mà còn if-else nữa.
    2. v & d nên đưa về 8 bit (BYTE), dùng các phép xor, or, and để loại bỏ hai hàm min, max

  7. #7
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Có lẽ điều kiện bạn muốn rất gần với code của drivers. Muốn tối ưu thì phải dùng cách code machine/platform specific.

  8. #8
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    muốn không dùng if thì có một cách bành chướng bộ nhớ.

    theo code thì khoảng dữ liệu chia ra làm 4 phần
    0...31...128...224....

    B1. tạo một mảng 65536 phần tử con trỏ, trỏ vào hàm

    B2. tạo 4 hàm như sau
    hàm 1: trừ v cho d, trả về giá trị v khi chưa trừ d.
    hàm 2: trừ v cho d, trả về 31.
    hàm 3: cộng v với d, trả về 224.
    hàm 4: cộng v với d, trả về giá trị v khi chưa cộng với d.

    b3:
    gán toàn bộ 31 con trỏ hàm hàm đầu tiên cho hàm 1
    gán toàn bộ 96 con trỏ hàm tiếp theo cho hàm 2
    gán toàn bộ 96 con trỏ hàm tiếp theo cho hàm 3
    gán các con trỏ hàm còn lại cho hàm 4

    b4:
    gọi hàm[i].

    Xong, không dùng một lệnh if nào.
    (chỉ dùng lệnh if và for để khởi tạo, cái này không tính vào thời gian tính toán).

Các đề tài tương tự

  1. Trả lời: 2
    Bài viết cuối: 19-04-2013, 10:48 PM
  2. Thuật toán C# Thuật toán chuyển ảnh bitmap 24bit về 8bit như thế nào?
    Gửi bởi thuccoi trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 3
    Bài viết cuối: 09-01-2013, 09:14 PM
  3. Giải thuật Thuật toán đếm số bit 1 trong 1 triệu kí tự (1 kí tự 8bit)
    Gửi bởi duykhoa1310 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 15
    Bài viết cuối: 23-12-2011, 06:41 PM
  4. Graphic Cách xử lý ảnh trên pixel theo Motion Blur và Saturation như thế nào?
    Gửi bởi lenhatnguyen trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 05-10-2011, 08:55 PM
  5. Xây dựng hàm tính đảo 4 bít đầu và 4 bít cuối cho nhau của một số 8bit
    Gửi bởi bossnguyen86 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 20
    Bài viết cuối: 04-08-2010, 08:54 AM

Tags của đề tài này

Quyền hạn của bạn

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