To use an 8-bit fixed-point type, we can define a new typedef as follows:

typedef ap_fixed<8,3> fixed_type;

This defines a signed 8-bit fixed-point type with 3 bits after the decimal point. We can also add a RELU nonlinearity after the linear layer by replacing the tanh function call with a simple conditional statement:

fixed_type output_value = weighted_sum + bias[i];
if (output_value < 0) {
    output_value = 0;
}
output_stream.write(output_value);
The complete code with these changes is shown below:

c
Copy code
#include "hls_math.h"
#include "hls_stream.h"
#include "ap_fixed.h"

// Define the data types
typedef ap_fixed<8,3> fixed_type;
typedef hls::stream<fixed_type> stream_type;

// Define the linear layer function with RELU nonlinearity
void linear_layer(stream_type& input_stream, fixed_type weight[], fixed_type bias[], stream_type& output_stream) {
    // Set the number of input and output values
    const int N = 1024;

    // Perform the linear layer computation with RELU nonlinearity
    for(int i = 0; i < N; i++) {
        fixed_type input_value = input_stream.read();
        fixed_type weighted_sum = 0;
        for(int j = 0; j < N; j++) {
            weighted_sum += input_value * weight[i * N + j];
        }
        fixed_type output_value = weighted_sum + bias[i];
        if (output_value < 0) {
            output_value = 0;
        }
        output_stream.write(output_value);
    }
}

// Top-level function for the accelerator
void linear_accelerator(stream_type& input_stream, fixed_type weight[], fixed_type bias[], stream_type& output_stream) {
    #pragma HLS INTERFACE axis port=input_stream
    #pragma HLS INTERFACE axis port=output_stream
    #pragma HLS INTERFACE m_axi port=weight offset=slave bundle=gmem
    #pragma HLS INTERFACE m_axi port=bias offset=slave bundle=gmem

    // Call the linear layer function with RELU nonlinearity
    linear_layer(input_stream, weight, bias, output_stream);
}

Note that we have also updated the function name in the linear_accelerator function to reflect the new implementation with RELU nonlinearity.
หากต้องการใช้ประเภทจุดคงที่ 8 บิต เราสามารถกำหนด typedef ใหม่ได้ดังนี้: typedef ap_fixed<8,3> fixed_type; สิ่งนี้กำหนดประเภทจุดคงที่ 8 บิตที่ลงนามโดยมี 3 บิตหลังจุดทศนิยม นอกจากนี้เรายังสามารถเพิ่มความไม่เป็นเชิงเส้นของ RELU หลังเลเยอร์เชิงเส้นได้โดยการแทนที่การเรียกใช้ฟังก์ชัน tanh ด้วยคำสั่งแบบมีเงื่อนไขอย่างง่าย: fixed_type output_value = Weighted_sum + bias[i]; ถ้า (output_value < 0) { output_value = 0; } output_stream.write(output_value); รหัสที่สมบูรณ์พร้อมการเปลี่ยนแปลงเหล่านี้แสดงอยู่ด้านล่าง: c คัดลอกรหัส #include "hls_math.h" #include "hls_stream.h" #include "ap_fixed.h" // กำหนดประเภทข้อมูล typedef ap_fixed<8,3> fixed_type; typedef hls::stream<fixed_type> stream_type; // กำหนดฟังก์ชันเลเยอร์เชิงเส้นด้วย RELU nonlinearity void linear_layer(stream_type& input_stream,fixed_type Weight[],fixed_type bias[], stream_type& output_stream) { // ตั้งค่าจำนวนค่าอินพุตและเอาต์พุต const int N = 1024; // ทำการคำนวณเลเยอร์เชิงเส้นด้วยความไม่เชิงเส้นของ RELU for(int i = 0; i < N; i++) { fixed_type input_value = input_stream.read(); ประเภทคงที่ Weighted_sum = 0; สำหรับ (int j = 0; j < N; j ++) { Weighted_sum += input_value * น้ำหนัก [i * N + j]; } } ประเภทคงที่ output_value = Weighted_sum + อคติ [i]; ถ้า (output_value < 0) { output_value = 0; } output_stream.write(output_value); } } // ฟังก์ชันระดับบนสุดสำหรับตัวเร่งความเร็ว void linear_accelerator(stream_type& input_stream,fixed_type Weight[],fixed_type bias[], stream_type& output_stream) { #pragma HLS INTERFACE axis port=input_stream #pragma HLS INTERFACE axis port=output_stream #pragma HLS อินเทอร์เฟซ m_axi port=weight offset=slave Bundle=gmem #pragma HLS INTERFACE m_axi port=bias offset=slave Bundle=gmem // เรียกใช้ฟังก์ชันเลเยอร์เชิงเส้นด้วย RELU nonlinearity linear_layer(input_stream, weight, bias, output_stream); } โปรดทราบว่าเราได้อัปเดตชื่อฟังก์ชันในฟังก์ชัน linear_accelerator เพื่อสะท้อนถึงการใช้งานใหม่ที่มีความไม่เชิงเส้นของ RELU
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence