ฉันพยายามดึงพลังการประมวลผลออกจากกริดมากขึ้น
ฉันใช้ cpus / cores ทั้งหมดเป็นไปได้ไหมที่จะใช้ GPU กับ C #
มีใครรู้จักห้องสมุดหรือมีโค้ดตัวอย่างบ้างไหม
ฉันพยายามดึงพลังการประมวลผลออกจากกริดมากขึ้น
ฉันใช้ cpus / cores ทั้งหมดเป็นไปได้ไหมที่จะใช้ GPU กับ C #
มีใครรู้จักห้องสมุดหรือมีโค้ดตัวอย่างบ้างไหม
คำตอบ:
[ แก้ไขตุลาคม 2017 แม้ว่าคำตอบนี้จะค่อนข้างเก่า ]
คำตอบเหล่านี้ส่วนใหญ่ค่อนข้างเก่าดังนั้นฉันคิดว่าฉันจะให้ข้อมูลสรุปที่อัปเดตว่าฉันคิดว่าแต่ละโครงการอยู่ที่ไหน:
GPU.Net (TidePowerd) - ฉันลองใช้งานเมื่อ 6 เดือนที่แล้วและใช้งานได้แม้ว่าจะใช้งานเล็กน้อย แปลงรหัสเคอร์เนล C # เป็น cuda ในเวลาคอมไพล์ น่าเสียดายที่เว็บไซต์ของพวกเขาหยุดทำงานและ github ของพวกเขาไม่ได้รับการอัปเดตเป็นเวลาสองสามปีซึ่งอาจบ่งบอกว่าโครงการนั้นตายแล้ว ....
Cudafy - โอเพ่นซอร์สและใช้งานง่ายมาก แปลงรหัสเคอร์เนล C # เป็น cuda ที่รันไทม์ (พร้อมความสามารถในการทำให้เป็นอนุกรมและแคช) สามารถรันโค้ดเคอร์เนลเดียวกันบน CPU ได้อย่างง่ายดาย (ส่วนใหญ่ใช้สำหรับการดีบั๊ก) รองรับ GPU หลายตัว มีตัวอย่างมากกว่าที่อื่น ๆ ที่นี่ รหัสต้นแบบที่อ้างถึงโดยคำตอบอื่นนั้นมีน้อยมากและในกรณีของฉันอย่างน้อยก็ช่วยให้ฉันเข้าใจวิธีการทำงานของโค้ด Cuda / Nvidia เท่านั้น น่าเสียดายที่ดูเหมือนว่าพวกเขาไม่ได้อัปเดตโซลูชันของพวกเขามาสองสามปีแล้วด้วย (ข้อผูกพันล่าสุดในปี 2015 - รองรับ cuda 7.0)
Hybridizer โซลูชันเชิงพาณิชย์ที่รวบรวม C # ถึง CUDA ให้ชุมชน Edition ฟรีในตลาดสตูดิโอภาพและตัวอย่างบนGitHub
โซลูชันเชิงพาณิชย์ของAleaGPUพร้อมรุ่นชุมชนฟรีสำหรับผู้บริโภค GPUS ดูความคิดเห็นของ Daniel สำหรับรายละเอียด
Brahma - รันนิพจน์ LINQ ผ่าน OpenCL (รองรับ AMD ด้วย) เอกสาร / ตัวอย่างไม่มาก อัปเดตล่าสุดในปี 2554
C $ - การพัฒนาครั้งล่าสุดเมื่อ 10 กว่าปีที่แล้ว ...
Microsoft Accelerator - ดูเหมือนจะไม่ได้รับการพัฒนาอย่างแข็งขันอีกต่อไป
อื่น ๆ บางส่วน ( C ++ AMP , OpenTK - dead / Cloo ) - ส่วนใหญ่เป็นเพียงการผูก - เช่นช่วยให้คุณสามารถเรียก GPU จาก C # ได้ แต่ต้องเขียนโค้ดเคอร์เนลของคุณ (โค้ดที่รันบน GPU) C หรือ OpenCL หมายความว่าคุณต้องใช้ (และเรียนรู้) ภาษาอื่น
อย่างที่ฉันพูดไปฉันจะแนะนำ Cudafy ให้กับคนอื่น ๆ ทั้งหมด - ถ้ามันสามารถทำงานบน OpenCL ได้เช่นเดียวกับ Cuda มันจะสมบูรณ์แบบ
แก้ไข SEP 2013 Cudafy ตอนนี้ให้คุณคอมไพล์สำหรับทั้ง CUDA และ OpenCL ดังนั้นจะเรียกใช้รหัส C # เดียวกันบน GPU ทั้งหมด ฟังดูดีมากแม้ว่าฉันจะยังไม่ได้ทดสอบการคอมไพล์ OpenCL
Microsoft Research Acceleratorเป็นไลบรารี. NET GP GPU
ฉันพบพรหม ... และยังมีผู้ให้บริการ GPGPU ที่อนุญาตให้วิธีการทำงานบน GPU ... ขอบคุณสำหรับคำถาม ... เรียนรู้สิ่งใหม่ ๆ วันนี้ :)
ฉันขอแนะนำ XNA Game Studio เป็นช่องทางสำหรับการสำรวจได้ไหม เห็นได้ชัดว่าเหมาะสำหรับการเขียนเกม แต่ช่วยให้คุณสามารถเข้าถึงกราฟิกการ์ดของคุณได้และสามารถเข้าถึงฟังก์ชั่นการระบุความสามารถและการพัฒนา shader ได้ดีกว่าที่เคยมีอยู่ใน Managed DirectX นอกจากนี้ยังมีวิธีการรวม WinForms และ XNA เข้ากับแอปพลิเคชันไฮบริด:
http://www.ziggyware.com/news.php?readmore=866
คุณจะต้องใช้ความพยายามในการเรียนรู้การเขียนโปรแกรม shader (XNA รองรับ HLSL) แต่นี่อาจเป็นวิธีที่ง่ายกว่าการเรียนรู้โซลูชันเฉพาะสำหรับผู้ขายเช่น CUDA ของ nVidia ข้อดีคือคุณสามารถตั้งโปรแกรมในสภาพแวดล้อมที่มีการจัดการ 100% นี่คือลิงค์ HLSL บางส่วน:
http://www.ziggyware.com/weblinks.php?cat_id=9
ไซต์ GPGPU ยังเป็นจุดหมายปลายทางที่แนะนำสำหรับการเขียนโปรแกรม GPU สำหรับวัตถุประสงค์ทั่วไป:
ขอให้โชคดี!
แล้วhttp://www.tidepowerd.com/ GPU.NET ล่ะ?
นี่เป็นอีกคนหนึ่ง: CUDAfy ดูเหมือน GPU.Net ในสิ่งที่ง่ายอย่างเช่น method-attribute อาจทำให้เมธอดทั้งหมดทำงานบน GPU แต่แตกต่างจาก GPU.Net CUDAfy ฟรีและโอเพ่นซอร์ส
ดูเหมือนว่า GPU.Net จะไม่ต้องการรหัสสำเร็จรูป(ตามเอกสารของพวกเขามัน "ถูกแทรกโดยอัตโนมัติโดยเครื่องมือสร้าง")ในขณะที่ CUDAfy ทำ
นี่คือตัวอย่างของการสร้างแอปพลิเคชันด้วย CUDAfy
นี่เป็นคำถามที่ค่อนข้างเก่าและเนื่องจากมีการถามสิ่งต่างๆจึงเปลี่ยนไปมาก
ตัวเลือกสำหรับการใช้ NET เพื่อเขียนโค้ด GPU ซึ่งไม่มีใครได้กล่าวถึงในคำตอบในอีกAlea GPU ครอบคลุม C #, F # และ VB
สภาพแวดล้อมการพัฒนาซอฟต์แวร์ GPU ระดับมืออาชีพสำหรับ. NET และ Mono ข้ามแพลตฟอร์มอย่างแท้จริง
ในเว็บไซต์อย่างเป็นทางการของ F # Alea เป็นตัวเลือกแรกสำหรับการใช้ F # ในการเขียนโปรแกรม GPGPU
เพื่อทำความรู้จักกับกรอบงานนี้ฉันขอแนะนำให้ดูรายการตัวอย่างที่ครอบคลุม
นอกจากพรหมแล้วลองดูC $ (ออกเสียงว่า C Bucks) จากไซต์ CodePlex ของพวกเขา:
จุดมุ่งหมายของ [C $] คือการสร้างภาษาและระบบที่เป็นหนึ่งเดียวสำหรับการเขียนโปรแกรมแบบขนานที่ราบรื่นบน GPU และ CPU สมัยใหม่
มันขึ้นอยู่กับ C # ประเมินอย่างเฉื่อยชาและกำหนดเป้าหมายรุ่นเร่งความเร็วหลายรุ่น:
ขณะนี้รายชื่อสถาปัตยกรรมที่ต้องการ ได้แก่ GPU, ซีพียูแบบหลายคอร์, Multi-GPU (SLI, CrossFire) และสถาปัตยกรรมไฮบริดแบบ Multi-GPU + Multi-CPU
มีโซลูชันใหม่ของ Microsoft ในเมือง - C ++ AMP (แนะนำที่นี่ )
การใช้งานจาก C # จะเป็นผ่าน P / Invoke ตามที่สาธิตไว้ที่นี่สำหรับแอพเดสก์ท็อปและที่นี่สำหรับแอพ Metro (ไม่เรียกมัน)
แก้ไข:ฉันควรทราบว่า C ++ AMP มีข้อกำหนดแบบเปิดซึ่งหมายความว่าไม่จำเป็นต้องมีไว้สำหรับคอมไพเลอร์ MS หรือสำหรับ Windows เท่านั้น
แก้ไข:เห็นได้ชัดว่าเทคโนโลยีอยู่ใน "โหมดการบำรุงรักษา"ซึ่งหมายความว่ากำลังแก้ไขข้อบกพร่อง แต่ไม่ได้พัฒนาอย่างจริงจัง
DirectX ที่มีการจัดการอาจใช้งานได้
หาก GPU ของคุณเป็นยี่ห้อเดียวกันทั้งหมดคุณอาจได้รับการสนับสนุน GPGPU จากผู้จำหน่ายไม่ว่าจะผ่าน CUDA ของ Nvidia หรือสตรีมของ ATI AFAIK มี DLL ซึ่งคุณสามารถใช้ผ่าน P / Invoke
ซอฟต์แวร์ CenterSpace มีการคำนวณที่ใช้ GPU ในไลบรารีNMath ที่คุณสามารถเพิ่มลงในโครงการ C # เป็นผลิตภัณฑ์เชิงพาณิชย์
หากคุณกำลังจะใช้ algortihms ของคุณเองที่ต้องการเมล็ดที่กำหนดเอง:
ฉันเพิ่งอัปโหลดโครงการโอเพ่นซอร์สของฉันไปยังที่เก็บ githubซึ่งใช้ OpenCL
มันทำอะไร (คุณสามารถตรวจสอบได้จากหน้า wiki ด้วย) คือเลือกอุปกรณ์ที่รองรับ OpenCL หลายเครื่องและสตริงเคอร์เนลจากผู้ใช้และสร้าง C # หรือ C ++ array wrapper จากนั้นคำนวณโดยใช้ทั้งหมดโดยใช้ auto-load-balancer และ a pipeliner (เพื่อซ่อนเวลาแฝง) เพื่อให้ได้ประสิทธิภาพที่ดีจากพีซี
นี่คือตัวอย่างของการใช้งาน (1024 รายการงานที่แบ่งพาร์ติชันไปยังอุปกรณ์ทั้งหมดแต่ละรายการใช้รหัสเดียวกัน แต่ใช้ข้อมูลและ threadId ต่างกัน):
// 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
เมื่อไม่ได้ใช้งานอีกต่อไปพวกเขาจะปล่อยทรัพยากร C ++ ทั้งหมดพร้อมกับผู้ทำลายของพวกเขา
แต่ยังไม่เป็นผู้ใหญ่ดังนั้นอย่าลังเลที่จะเพิ่ม "ปัญหา" ใด ๆ ในแท็บปัญหาของ github คลาสที่เกี่ยวข้องกับคลัสเตอร์หลายชิ้นไม่ทำงานและยังไม่ได้รับการแปลเป็นภาษาอังกฤษ แต่สามารถใช้อุปกรณ์ทั้งหมดในพีซีเครื่องเดียวได้เป็นอย่างน้อย
WPF ยังใช้ GPU และคุณสามารถเพิ่มเฉดสีที่กำหนดเองได้โดยใช้ HLSL