Phân tích Kiến trúc Bộ nhớ, Strides và Flags của ndarray
Trong các hệ thống tính toán hiệu năng cao và mạng nơ-ron sâu, việc truy cập bộ nhớ không liên tục (cache miss do sai strides) làm giảm hiệu suất xử lý từ 5 đến 10 lần. Trước khi t…
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: python-basics.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu cấu trúc 2 phần của
numpy.ndarray: Header Metadata và Data Buffer. - Nắm vững khái niệm
strides: số byte cần bước qua trong RAM để di chuyển sang phần tử tiếp theo của từng trục. - Phân biệt định dạng C-contiguous (hàng liên tục) và Fortran-contiguous (cột liên tục).
Mô tả bài toán
Trong các hệ thống tính toán hiệu năng cao và mạng nơ-ron sâu, việc truy cập bộ nhớ không liên tục (cache miss do sai strides) làm giảm hiệu suất xử lý từ 5 đến 10 lần. Trước khi tối ưu thuật toán AI, kỹ sư cần kiểm tra kiến trúc vật lý của mảng trong RAM.
Yêu cầu
Viết hàm analyze_array_memory(arr: np.ndarray) -> dict[str, Any] nhận vào một mảng NumPy bất kỳ và trả về một dict chứa các thông số:
shape: tuple kích thước các chiều của mảng.dtype_str: tên kiểu dữ liệu dưới dạng chuỗi (ví dụ:"int64","float32").itemsize: số byte của một phần tử (arr.itemsize).nbytes: tổng số byte của mảng (arr.nbytes).ndim: số chiều của mảng (arr.ndim).strides: tuple strides của mảng (arr.strides).is_c_contiguous: boolean xác định mảng có liên tục theo hàng không (arr.flags['C_CONTIGUOUS']).is_f_contiguous: boolean xác định mảng có liên tục theo cột không (arr.flags['F_CONTIGUOUS']).byte_offset_row_step: nếu mảng có ≥ 1 chiều, trả về số byte để nhảy từ hàng i sang hàng i+1 (strides[0]). Nếu mảng 0 chiều (scalar), trả về 0.
import numpy as np
from typing import Any
def analyze_array_memory(arr: np.ndarray) -> dict[str, Any]:
passInput
- Hàm
analyze_array_memory(arr): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
analyze_array_memory: Trả về kết quả kiểudict[str, Any]theo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 2000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
arr = np.arange(12, dtype=np.int32).reshape(3, 4)
analyze_array_memory(arr)Output
{
'shape': (3, 4),
'dtype_str': 'int32',
'itemsize': 4,
'nbytes': 48,
'ndim': 2,
'strides': (16, 4),
'is_c_contiguous': True,
'is_f_contiguous': False,
'byte_offset_row_step': 16
}Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
vec = np.array([1.5, 2.5, 3.5], dtype=np.float64)
analyze_array_memory(vec)Output
{
'shape': (3),
'dtype_str': 'float64',
'itemsize': 8,
'nbytes': 24,
'ndim': 1,
'strides': (8),
'is_c_contiguous': True,
'is_f_contiguous': True,
'byte_offset_row_step': 8
}Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
