2011-06-28 43 views
9

Tôi muốn tạo một bộ đệm hình tròn có độ dài cố định của một số loại chung trong Haskell. Các mục trong bộ đệm cần phải được đặt cái khác trong bộ nhớ vật lý (không phải danh sách liên kết). Tôi muốn cấu trúc cụ thể này bởi vì nó sẽ cải thiện cơ hội của tất cả các dữ liệu nhận được vào bộ nhớ cache L2 trên CPU với nhau. Tôi đã đọc về cách Haskell cho phép các kiểu dữ liệu mới, tuy nhiên có vẻ như các kiểu được tạo ra bằng cách sử dụng "dữ liệu" hơn một chút so với các cấu trúc c tôn vinh với kiểu kết hợp và các phương thức liên quan. Có thể tạo ra các cấu trúc dữ liệu mức thấp như cấu trúc được mô tả ở trên hoàn toàn trong Haskell hay không.Chiều dài cố định chiều dài đệm trong haskell

+1

Rất khó có lý do cấp thấp trong Haskell. IMHO, tốt hơn là sử dụng C cho các tác vụ mà bạn muốn ép ra các giọt hiệu suất cuối cùng. – fuz

+0

Tôi tự hỏi làm thế nào [Data.Sequence] (http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Sequence.html) sẽ so sánh với cấu trúc dữ liệu như vậy. –

+0

jaspervdj, sclv, Dan Burton, cảm ơn câu trả lời. Tôi không chắc câu trả lời tốt nhất là gì, nhưng tôi sẽ nghiên cứu mọi thứ mà các bạn gợi ý. Cảm ơn một lần nữa. –

Trả lời

10

Bạn muốn cấu trúc giống như mảng, và bạn đặc biệt muốn không bị chặn để mảng bên dưới không chỉ trỏ đến dữ liệu của bạn mà còn là các mục.

Data.Array từ thư viện mảng tiêu chuẩn cung cấp cho bạn một phiên bản đó, nhưng đặc biệt là mảng hiệu suất cao có sẵn từ thư viện vector: http://hackage.haskell.org/package/vector

Thư viện vector, như ByteString, Text, và một vài người khác , sử dụng số lượng hợp lý các nguyên thủy cụ thể ở mức độ thấp ghc dưới mui xe. Để chỉ sử dụng thư viện, bạn không cần phải lo lắng về những điều đó. Nhưng nếu bạn quyết định rằng thư viện không cung cấp cho bạn những gì bạn cần, thì bạn cũng có thể tìm hiểu một số tiền hợp lý theo cách thủ thuật và kỹ thuật bằng cách đọc qua mã nguồn của chính nó.

+4

Một tính năng thú vị khác với Data.Vector là nó tương đối đơn giản để truyền các mảng 'Data.Vector.Storable' vào thư viện C. –

+0

xem gói hackage 'vector-buffer'. – vivian

Các vấn đề liên quan