Tôi đang cố gắng để có được nhiều sức mạnh xử lý ra khỏi lưới điện của tôi.
Tôi đang sử dụng tất cả các cpus / lõi, có thể sử dụng GPU với C #.
Bất cứ ai cũng biết bất kỳ thư viện hoặc có bất kỳ mã mẫu?
Tôi đang cố gắng để có được nhiều sức mạnh xử lý ra khỏi lưới điện của tôi.
Tôi đang sử dụng tất cả các cpus / lõi, có thể sử dụng GPU với C #.
Bất cứ ai cũng biết bất kỳ thư viện hoặc có bất kỳ mã mẫu?
Câu trả lời:
[ Chỉnh sửa OCT 2017 vì ngay cả câu trả lời này cũng khá cũ ]
Hầu hết các câu trả lời này khá cũ, vì vậy tôi nghĩ rằng tôi sẽ đưa ra một bản tóm tắt cập nhật về nơi tôi nghĩ mỗi dự án là:
GPU.Net (TidePowerd) - Tôi đã thử cách này 6 tháng hoặc lâu hơn và đã làm cho nó hoạt động mặc dù phải mất một chút công việc. Chuyển đổi mã hạt nhân C # thành cuda tại thời gian biên dịch. Thật không may, trang web của họ đã ngừng hoạt động và github của họ đã không được cập nhật trong một vài năm, điều này có thể cho thấy dự án đã chết ....
Cudafy - Nguồn mở và rất dễ sử dụng. Chuyển đổi mã hạt nhân C # thành cuda khi chạy (có khả năng tuần tự hóa và bộ đệm). Có thể dễ dàng chạy cùng mã hạt nhân trên CPU (chủ yếu để gỡ lỗi). Hỗ trợ nhiều GPU. Nhiều ví dụ có sẵn hơn những người khác ở đây. Mã soạn sẵn được đề cập bởi các câu trả lời khác là tối thiểu và trong trường hợp của tôi ít nhất cũng giúp tôi hiểu về cách thức hoạt động của mã. Cuda / Nvidia chỉ mặc dù. Thật không may, có vẻ như họ đã không cập nhật giải pháp của họ trong một vài năm nữa (cam kết mới nhất vào năm 2015 - hỗ trợ của cuda 7.0).
Lai tạo . Giải pháp thương mại biên dịch C # thành CUDA. Cung cấp một phiên bản cộng đồng miễn phí trên thị trường phòng thu trực quan và các mẫu trên github .
AleaGPU Giải pháp thương mại với phiên bản cộng đồng miễn phí cho GPUS tiêu dùng. Xem ý kiến của Daniel để biết chi tiết.
Brahma - chạy các biểu thức LINQ thông qua OpenCL (vì vậy cũng hỗ trợ AMD). Không có nhiều tài liệu / ví dụ. Cập nhật lần cuối năm 2011.
C $ - sự phát triển cuối cùng đã hơn 10 năm trước ...
Microsoft Accelerator - tương tự không có vẻ như nó đang được tích cực phát triển nữa.
một số thứ khác ( C ++ AMP , OpenTK - dead / Cloo ) - nhiều trong số này chỉ là các ràng buộc - tức là cho phép bạn gọi GPU từ C #, nhưng mã hạt nhân của bạn (mã thực sự chạy trên GPU) cần phải được viết bằng C hoặc OpenCL, nghĩa là bạn phải sử dụng (và học) ngôn ngữ khác.
Như tôi đã nói, tôi sẽ giới thiệu Cudafy hơn tất cả những người khác - nếu nó có thể chạy trên OpenCL cũng như Cuda thì nó sẽ hoàn hảo.
EDIT SEP 2013 Cudafy hiện cho phép bạn biên dịch cho cả CUDA và OpenCL, do đó sẽ chạy cùng mã C # trên tất cả các GPU. Điều này nghe có vẻ tuyệt vời, mặc dù tôi chưa thử nghiệm biên dịch OpenCL.
Microsoft Research Accelerator là một thư viện GPU .NET GP.
Tôi đã tìm thấy Brahma ... Nó cũng có một nhà cung cấp GPGPU cho phép các phương thức chạy trên GPU ... Cảm ơn câu hỏi ... Đã học được điều gì đó mới hôm nay. :)
Tôi có thể giới thiệu XNA Game Studio như một con đường khả thi để khám phá không? Nó rõ ràng là hướng đến việc viết các trò chơi, nhưng cung cấp cho bạn quyền truy cập được quản lý vào card đồ họa của bạn và truy cập tốt hơn nhiều vào các chức năng liệt kê khả năng và phát triển shader so với trước đây, Managed DirectX. Ngoài ra còn có cách kết hợp WinForms và XNA vào các ứng dụng lai:
http://www.ziggyware.com/news.php?readmore=866
Bạn sẽ phải nỗ lực học lập trình shader (XNA hỗ trợ HLSL), nhưng đây có thể là một cách tiếp cận đơn giản hơn so với học một giải pháp dành riêng cho nhà cung cấp, chẳng hạn như CUDA của nVidia. Ưu điểm là bạn có thể lập trình trong môi trường được quản lý 100%. Dưới đây là một số liên kết HLSL:
http://www.ziggyware.com/weblinks.php?cat_id=9
Trang web GPGPU cũng là một điểm đến được đề xuất cho lập trình GPU cho mục đích chung:
May mắn nhất!
Làm thế nào về http://www.tidepowerd.com/ GPU.NET?
Đây là một cái khác: CUDAfy . Nghe có vẻ như GPU.Net, trong đó một thứ đơn giản như thuộc tính phương thức có thể khiến toàn bộ phương thức chạy trên GPU. Nhưng không giống như GPU.Net, CUDAfy là mã nguồn mở và miễn phí.
GPU.Net dường như không yêu cầu mã soạn sẵn, mặc dù (Theo tài liệu của họ, nó "được tự động chèn bởi công cụ xây dựng") , trong khi CUDAfy thì có.
Dưới đây là một ví dụ về việc xây dựng một ứng dụng với CUDAfy.
Chà, đây là một câu hỏi khá cũ, và vì nó đã được hỏi nên mọi thứ đã thay đổi rất nhiều.
Một tùy chọn khác để sử dụng .Net để viết mã GPU, điều mà chưa ai đề cập trong câu trả lời trong Alea GPU . Nó bao gồm C #, F # và VB.
Môi trường phát triển phần mềm GPU chuyên nghiệp cho .NET và Mono. Đa nền tảng thực sự
Trong trang web chính thức của F #, Alea là tùy chọn đầu tiên để sử dụng F # trong lập trình GPGPU.
Để tìm hiểu khuôn khổ này, tôi khuyên bạn nên xem danh sách toàn diện các ví dụ của nó .
Ngoài Brahma, hãy xem C $ (phát âm là "C Bucks"). Từ trang CodePlex của họ :
Mục đích của [C $] là tạo ra một ngôn ngữ và hệ thống thống nhất để lập trình song song liền mạch trên các GPU và CPU hiện đại.
Nó dựa trên C #, được đánh giá một cách lười biếng và nhắm mục tiêu nhiều mô hình máy gia tốc:
Hiện tại danh sách các kiến trúc dự định bao gồm GPU, CPU đa lõi, Multi-GPU (SLI, CrossFire) và Kiến trúc lai đa CPU + Multi-CPU.
Có một giải pháp mới của Microsoft trong thị trấn - C ++ AMP (giới thiệu tại đây ).
Sử dụng từ C # sẽ thông qua P / Invoke, như được demo ở đây cho các ứng dụng trên máy tính để bàn và tại đây cho các ứng dụng Metro (không gọi nó).
Chỉnh sửa: Tôi cần lưu ý rằng C ++ AMP có một đặc tả mở , có nghĩa là nó không nhất thiết chỉ dành cho trình biên dịch MS, hoặc chỉ dành cho Windows.
Chỉnh sửa: Rõ ràng, công nghệ hiện đang ở "chế độ bảo trì", nghĩa là họ đang sửa lỗi, nhưng không tích cực phát triển.
Nếu các GPU của bạn đều là cùng một thương hiệu, bạn có thể nhận được hỗ trợ GPGPU từ nhà cung cấp, thông qua CUDA của Nvidia hoặc Luồng của ATI. AFAIK, họ cung cấp DLL, mà bạn có thể sử dụng thông qua P / Gọi.
Phần mềm CenterSpace có tính toán dựa trên GPU trong các thư viện NMath của họ, bạn có thể thêm vào dự án C #. Đó là một sản phẩm thương mại.
Nếu bạn định áp dụng thuật toán đại số của riêng mình cần hạt nhân tùy chỉnh:
Gần đây tôi đã tải lên một dự án nguồn mở của tôi vào kho github này sử dụng OpenCL.
Những gì nó làm (bạn cũng có thể kiểm tra từ trang wiki của nó), chọn nhiều thiết bị có khả năng OpenCL và chuỗi hạt nhân từ người dùng và tạo các trình bao bọc mảng C # hoặc C ++ sau đó tính toán bằng cách sử dụng tất cả, với sự trợ giúp của bộ cân bằng tải tự động và một pipeliner (để ẩn độ trễ) để có được hiệu quả tốt từ máy tính.
Dưới đây là một ví dụ về cách sử dụng của nó (1024 workitem được phân vùng cho tất cả các thiết bị, mỗi thiết bị chạy cùng một mã nhưng sử dụng dữ liệu và threadId khác nhau):
// select all GPUs and all CPUs in same pc
ClNumberCruncher gpuCpu = new ClNumberCruncher(AcceleratorType.GPU | AcceleratorType.CPU, @"
__kernel void distributeTanh(__global float * data,__global int * data2)
{
int threadId=get_global_id(0);
data[threadId]=tanh(data[threadId]);
data2[threadId]=threadId;
}
");
// a wrapper that can hold C# or C++ arrays
ClArray<float> data = new ClArray<float>(1024);
ClArray<int> data2 = new int[1024];
// load-balances "distributeTanh" on all devices more fairly
// at each repeatation of this line with same compute-id(1 here)
data.nextParam(data2).compute(gpuCpu, 1, "distributeTanh", 1024);
// threadId in kernel receives unique continuous id value for all work
// either it is in cpu or gpu doesn't matter
// compute method also has parameters to enable pipelining to
// elliminate buffer copy latencies or compute latencies
khi tất cả không được sử dụng nữa, chúng giải phóng tất cả các tài nguyên C ++ bằng các hàm hủy của chúng.
Nhưng nó không chín chắn, vì vậy hãy thoải mái thêm bất kỳ "vấn đề" nào trên tab vấn đề github. Các lớp liên quan nhiều cụm máy tính không hoạt động và chưa được dịch sang tiếng Anh nhưng ít nhất nó có thể sử dụng tất cả các thiết bị trong một máy tính.
WPF cũng sử dụng GPU và bạn có thể thêm các shader tùy chỉnh bằng cách sử dụng HLSL.