Tôi gần như đã hoàn thành với một thuật toán xử lý một số số nguyên rất lớn (khoảng thứ tự 2 được nâng lên 100.000.000 điện). Điều này cần một vài giờ mã song song cao trên một máy chủ lõi 16 với bộ nhớ đầy đủ hơn vì thuật toán không phải là bộ nhớ chuyên sâu. Tôi tận dụng các lớp BigInteger trong .NET 4.Sử dụng GPU để tăng tốc độ tính toán BigInteger
Các chi tiết cụ thể của thuật toán là không quan trọng nhưng đối với bối cảnh, đây là danh sách khá đầy đủ các hoạt động thực hiện trên những số nguyên và một số tính năng nổi bật của thuật toán:
- Cộng/trừ.
- Nhân số lớn với số lượng nhỏ.
- Phân chia số lượng lớn theo số rất nhỏ (ví dụ 2).
- Cơ sở 2 Nhật ký.
- Cơ sở 2 Nguồn.
- So sánh hai hoặc nhiều số lớn (Min/Max).
- Không có sự tham gia của bất kỳ số nguyên tố nào.
- Thuật toán được thiết kế đặc biệt không phải là bộ nhớ chuyên sâu vì hiệu quả truy cập bộ nhớ truy cập nhiều hơn so với một số tính toán trực tuyến thông minh. Tuy nhiên, nếu truy cập bộ nhớ được cải thiện, thuật toán có thể được hưởng lợi một cách hợp lý.
Tôi đã được tối ưu hóa mã càng nhiều càng tốt và hồ sơ hiện nay cho thấy chỉ có hai nút thắt cổ chai:
- Tính cơ sở 2 Đăng nhập với số lượng lớn như vậy.
- Kiểm tra các mẫu chữ số nhị phân được xác định trước trong các số này. Điều này là do cách duy nhất để truy cập dữ liệu cơ bản của BigInteger là bằng cách sử dụng ToByteArray đầu tiên thay vì các hoạt động tại chỗ. Ngoài ra, hoạt động trên các khối có kích thước byte không giúp hiệu suất.
Xem xét truy cập bộ nhớ và hoạt động Đăng nhập, tôi bắt đầu nghĩ về GPU và liệu tôi có thể giảm tải một số công việc một cách hiệu quả hay không. Tôi biết rất ít về GPU ngoại trừ việc chúng được tối ưu hóa cho các hoạt động điểm nổi.
Câu hỏi của tôi là sử dụng thư viện như GPU .NET, làm cách nào để xử lý số lượng lớn như vậy trên GPU? Tôi có thể bằng cách nào đó sử dụng các tối ưu hóa dấu phẩy động để tính Nhật ký cho các số lớn như vậy không?
Tìm kiếm điểm khởi đầu để hình thành một chiến lược.
Bạn đã cân nhắc sử dụng CUDAfy.NET chưa? http://cudafy.codeplex.com/ (Tâm trí bạn, đây là NVIDIA cụ thể, vì vậy có thể không hữu ích cho bạn) –