এনভিডিয়া জিপিইউস (সিইউডিএ) সহ জাভা ব্যবহার করা হচ্ছে


144

আমি জাভাতে করা একটি ব্যবসায়িক প্রকল্পে কাজ করছি এবং ব্যবসায়ের বাজারগুলি গণনা করার জন্য এটির বিশাল সংখ্যার শক্তি প্রয়োজন। সাধারণ গণিত, তবে বিপুল পরিমাণে ডেটা।

আমরা কয়েকটি CUDA GPU গুলি এটি দিয়ে চেষ্টা করার আদেশ দিয়েছি এবং যেহেতু জাভা CUDA দ্বারা সমর্থিত নয়, আমি ভাবছি কোথায় শুরু করব। আমি কি জেএনআই ইন্টারফেস তৈরি করব? আমি জেসিইউডিএ ব্যবহার করব বা অন্য কোন উপায় আছে?

এই ক্ষেত্রে আমার অভিজ্ঞতা নেই এবং আমি চাই যে কেউ যদি আমাকে কোনও কিছুর দিকে পরিচালিত করতে পারে তবে আমি গবেষণা এবং শেখা শুরু করতে পারি।


2
জিপিইউগুলি আপনাকে নির্দিষ্ট ধরণের গণনা-নিবিড় সমস্যার গতি বাড়িয়ে তুলতে সহায়তা করবে। তবে আপনার যদি প্রচুর পরিমাণে ডেটা থাকে তবে আপনার আইও আবদ্ধ হওয়ার সম্ভাবনা বেশি। সম্ভবত জিপিইউগুলির সমাধান নয়।
স্টিভ কুক

1
"GPGPUs ব্যবহার জাভা কর্মক্ষমতা boosting" -> arxiv.org/abs/1508.06791
BlackBear

4
একটি মুক্ত প্রশ্নের মতো, আমি আনন্দিত যে মোডগুলি এটি বন্ধ করে দেয়নি কারণ মার্কো 13 এর উত্তরটি অবিশ্বাস্যভাবে সহায়ক! উইকি আইএমএইচও হওয়া উচিত
জিমলহসে

উত্তর:


442

প্রথমত, আপনার এই সত্য সম্পর্কে সচেতন হওয়া উচিত যে সিউডিএ স্বয়ংক্রিয়ভাবে কম্পিউটারগুলি দ্রুত তৈরি করবে না। এক দিকে, কারণ জিপিইউ প্রোগ্রামিং একটি শিল্প, এবং এটা খুব হতে পারে, খুব এটি পেতে চ্যালেঞ্জ অধিকার । অন্যদিকে, কারণ জিপিইউগুলি কেবলমাত্র নির্দিষ্ট ধরণের গণনার জন্য উপযুক্ত suited

এটি বিভ্রান্তিকর শব্দ হতে পারে কারণ আপনি জিপিইউতে মূলত যে কোনও কিছু গণনা করতে পারেন । মূল বিষয়টি হ'ল আপনি অবশ্যই একটি ভাল স্পিডআপ অর্জন করবেন কিনা। এখানে সর্বাধিক গুরুত্বপূর্ণ শ্রেণিবিন্যাস হ'ল সমস্যাটি সমান্তরাল কাজ কিনা বা ডেটা সমান্তরাল । প্রথমটি মোটামুটিভাবে বলতে সমস্যাগুলি বোঝায় যেখানে বেশ কয়েকটি থ্রেড তাদের নিজের কাজগুলিতে কমবেশি স্বতন্ত্রভাবে কাজ করছে। দ্বিতীয়টি এমন সমস্যাগুলিকে বোঝায় যেখানে অনেক থ্রেড সব একই রকম হয় - তবে ডেটার বিভিন্ন অংশে।

দ্বিতীয়টি হ'ল জিপিইউতে যে ধরণের সমস্যা রয়েছে তা হ'ল: তাদের অনেকগুলি কর রয়েছে এবং সমস্ত কোর একই কাজ করে তবে ইনপুট ডেটার বিভিন্ন অংশে কাজ করে।

আপনি উল্লেখ করেছেন যে আপনার কাছে "সাধারণ গণিত তবে বিপুল পরিমাণে ডেটা" রয়েছে। যদিও এটি পুরোপুরি ডেটা সমান্তরাল সমস্যার মতো মনে হতে পারে এবং এটি জিপিইউয়ের জন্য এটি যথাযথভাবে উপযোগী ছিল, তবে এর আরও একটি দিক বিবেচনা করতে হবে: জিপিইউগুলি তাত্ত্বিক গণনা শক্তি (এফএলপিএস, প্রতি সেকেন্ডে ফ্লোটিং পয়েন্ট অপারেশন) এর দিক থেকে হাস্যকরভাবে দ্রুত are তবে তারা প্রায়শই মেমোরি ব্যান্ডউইদথ দ্বারা থ্রটল হয়ে থাকে।

এটি সমস্যার আরেকটি শ্রেণিবিন্যাসের দিকে নিয়ে যায়। যথা সমস্যাগুলি স্মৃতিশ্রেণীতে আবদ্ধ কিনা বা গণনা সীমাবদ্ধ

প্রথমটি সেই সমস্যাগুলিকে বোঝায় যেখানে প্রতিটি ডেটা উপাদানগুলির জন্য করা নির্দেশাবলীর সংখ্যা কম। উদাহরণস্বরূপ, একটি সমান্তরাল ভেক্টর সংযোজন বিবেচনা করুন: আপনাকে পড়তে হবে দুটি তথ্য উপাদান হবে, তারপরে একটি একক সংযোজন করতে হবে, এবং তারপরে ফলাফল ভেক্টরে যোগফল লিখতে হবে। জিপিইউতে এটি করার সময় আপনি একটি স্পিডআপ দেখতে পাবেন না, কারণ একক সংযোজন মেমরিটি পড়ার / লেখার প্রচেষ্টার ক্ষতিপূরণ দেয় না।

দ্বিতীয় পরিভাষা, "কম্পিউট বাউন্ড" বলতে সমস্যাগুলি বোঝায় যেখানে মেমরি পড়ার / লেখার সংখ্যার তুলনায় নির্দেশাবলীর সংখ্যা বেশি। উদাহরণস্বরূপ, একটি ম্যাট্রিক্সের গুণকে বিবেচনা করুন: নির্দেশিকাগুলির সংখ্যা হ'ল (n) 3) হবে যখন n ম্যাট্রিক্সের আকার হবে। এই ক্ষেত্রে, কেউ আশা করতে পারেন যে জিপিইউ একটি নির্দিষ্ট ম্যাট্রিক্স আকারে সিপিইউকে ছাড়িয়ে যাবে। অন্য কয়েকটি উদাহরণ হতে পারে যখন "কয়েকটি" ডেটা উপাদানগুলিতে অনেকগুলি জটিল ত্রিকোণমিতিক গণনা (সাইন / কোসাইন ইত্যাদি) সঞ্চালিত হয়।

থাম্বের নিয়ম হিসাবে: আপনি ধরে নিতে পারেন যে "মেইন" জিপিইউ মেমরি থেকে একটি ডেটা উপাদান পড়ার / লেখার প্রায় 500 নির্দেশাবলীর প্রচ্ছন্নতা রয়েছে ....

অতএব, জিপিইউগুলির পারফরম্যান্সের জন্য আরেকটি মূল বিষয় হ'ল ডেটা লোকালটি : যদি আপনাকে ডেটা পড়তে বা লিখতে হয় (এবং বেশিরভাগ ক্ষেত্রে আপনাকে ;-) করতে হবে) তবে আপনার অবশ্যই নিশ্চিত করা উচিত যে ডেটাটি যতটা কাছাকাছি রাখা হয়েছে জিপিইউ কোরগুলির পক্ষে সম্ভব। জিপিইউগুলিতে কিছু নির্দিষ্ট মেমরি অঞ্চল থাকে ("লোকাল মেমরি" বা "শেয়ার্ড মেমোরি" হিসাবে পরিচিত) সাধারণত আকারে কয়েক কেবি থাকে তবে কোনও গণনার সাথে জড়িত হতে পারে এমন ডেটার জন্য বিশেষভাবে দক্ষ।

সুতরাং এটি আবার জোর দেওয়া: জিপিইউ প্রোগ্রামিং একটি শিল্প, এটি কেবলমাত্র সিপিইউতে সমান্তরাল প্রোগ্রামিংয়ের সাথে সম্পর্কিত। জাভা টপিক ভালো জিনিস, মত সব সম্পাতবিন্দু পরিকাঠামোর সঙ্গে ThreadPoolExecutors, ForkJoinPoolsইত্যাদি ছাপ আপনি শুধু আপনার কাজ একরকম বিভক্ত এবং বিভিন্ন প্রসেসর মধ্যে এটি বিতরণ করা আছে দিতে পারে। জিপিইউতে আপনি অনেক নিচু স্তরে চ্যালেঞ্জের মুখোমুখি হতে পারেন: দখল, রেজিস্ট্রার চাপ, ভাগ করা মেমরি প্রেসার, মেমরি কোলেসেসিং ... কেবল কয়েকটি নাম রাখার জন্য।

তবে, যখন আপনার সমাধানের জন্য কোনও ডেটা সমান্তরাল, গণনা-সীমাবদ্ধ সমস্যা রয়েছে, জিপিইউ হ'ল উপায়।


একটি সাধারণ মন্তব্য: আপনার বিশেষভাবে CUDA এর জন্য জিজ্ঞাসা করা হয়েছিল। তবে আমি আপনাকে দৃ Open়ভাবে ওপেনসিএল দেখার জন্য সুপারিশ করব। এর বিভিন্ন সুবিধা রয়েছে। প্রথমত, এটি একটি বিক্রেতা-স্বাধীন, মুক্ত শিল্প মান, এবং এএমডি, অ্যাপল, ইন্টেল এবং এনভিআইডিআইএ দ্বারা ওপেনসিএল এর বাস্তবায়ন রয়েছে। অতিরিক্তভাবে, জাভা বিশ্বে ওপেনসিএল-এর জন্য অনেক বিস্তৃত সমর্থন রয়েছে। আপনি যখন CUDA- র জন্য স্থির হয়েছিলেন কেবলমাত্র তখনই যখন আপনি CUDA রানটাইম লাইব্রেরি যেমন FFT এর CUFFT বা BLAS (ম্যাট্রিক্স / ভেক্টর ক্রিয়াকলাপ) এর জন্য CUBLAS ব্যবহার করতে চান। যদিও ওপেনসিএল-তে অনুরূপ লাইব্রেরি সরবরাহের জন্য পন্থা রয়েছে তবে এগুলি সরাসরি জাভা দিক থেকে ব্যবহার করা যাবে না, যদি না আপনি এই লাইব্রেরির জন্য নিজের জেএনআই বাইন্ডিং তৈরি করেন।


: আপনি এটা শুনতে যে অক্টোবর 2012 সালে, OpenJDK হটস্পট গ্রুপ প্রকল্প "সুমাত্রা" শুরু আকর্ষণীয় হতে পারে http://openjdk.java.net/projects/sumatra/ । এই প্রকল্পের লক্ষ্য হ'ল JVM- তে সরাসরি জিপিইউ সহায়তা জেআইটি-র সহায়তায় সরবরাহ করা। বর্তমান অবস্থা এবং প্রথম ফলাফল তাদের মেইলিং লিস্টে http://mail.openjdk.java.net/mailman/listinfo/sumatra-dev এ দেখা যাবে


তবে কিছুক্ষণ আগে আমি সাধারণভাবে "জিপিইউতে জাভা" সম্পর্কিত কিছু সংস্থান সংগ্রহ করেছি। আমি এগুলি আবার এখানে সংক্ষেপে জানাব, কোনও নির্দিষ্ট ক্রমে in

( অস্বীকৃতি : আমি http://jcuda.org/ এবং http://jocl.org/ এর লেখক )

(বাইট) কোড অনুবাদ এবং ওপেনসিএল কোড জেনারেশন:

https://github.com/aparapi/aparapi : একটি ওপেন-সোর্স লাইব্রেরি যা এএমডি দ্বারা সক্রিয় ও রক্ষণাবেক্ষণ করা হয়। একটি বিশেষ "কার্নেল" শ্রেণিতে, কেউ একটি নির্দিষ্ট পদ্ধতিকে ওভাররাইড করতে পারে যা সমান্তরালে কার্যকর করা উচিত। এই পদ্ধতির বাইট কোডটি একটি নিজস্ব বাইকোড রিডার ব্যবহার করে রানটাইমে লোড হয়। কোডটি ওপেনসিএল কোডে অনুবাদ করা হয়, যা পরে ওপেনসিএল সংকলক ব্যবহার করে সংকলিত হয়। ফলাফলটি তখন ওপিসিএল ডিভাইসে কার্যকর করা যেতে পারে যা জিপিইউ বা সিপিইউ হতে পারে। যদি ওপেনসিএল-তে সংকলন সম্ভব না হয় (বা কোনও ওপেনসিএল উপলব্ধ নেই), কোডটি থ্রেড পুল ব্যবহার করে এখনও সমান্তরালে কার্যকর করা হবে।

https://github.com/pcpratts/rootbeer1 : জাভার অংশগুলি CUDA প্রোগ্রামগুলিতে রূপান্তর করার জন্য একটি ওপেন সোর্স লাইব্রেরি। এটি ডেডিকেটেড ইন্টারফেসগুলি সরবরাহ করে যা GPU- তে একটি নির্দিষ্ট শ্রেণি নির্বাহ করা উচিত তা বোঝাতে প্রয়োগ করা যেতে পারে। অপরাপীর বিপরীতে, এটি স্বয়ংক্রিয়ভাবে "প্রাসঙ্গিক" ডেটা (যা অবজেক্ট গ্রাফের সম্পূর্ণ প্রাসঙ্গিক অংশটি) জিপিইউ-এর জন্য উপযোগী এমন উপস্থাপনায় সিরিয়ালাইজ করার চেষ্টা করে।

https://code.google.com/archive/p/java-gpu/ : বর্ণিত জাভা কোডটি (কিছু সীমাবদ্ধতা সহ) সিউডিএ কোডে অনুবাদ করার জন্য একটি লাইব্রেরি, পরে এটি একটি লাইব্রেরিতে সংকলিত হয় যা জিপিইউতে কোডটি কার্যকর করে। গ্রন্থাগারটি পিএইচডি থিসিসের প্রসঙ্গে তৈরি করা হয়েছিল, এতে অনুবাদ প্রক্রিয়া সম্পর্কে গভীর পটভূমি তথ্য রয়েছে।

https://github.com/ochafik/ScalaCL : ওপেনসিএল-এর জন্য স্কালা বাইন্ডিংস। ওপেনসিএল এর সমান্তরালে বিশেষ স্কাল সংগ্রহগুলি প্রক্রিয়া করার অনুমতি দেয়। সংগ্রহের উপাদানগুলিতে ডাকা ফাংশনগুলি সাধারণ স্কেলা ফাংশন (কিছু সীমাবদ্ধতা সহ) হতে পারে যা ওপেনসিএল কার্নেলগুলিতে অনুবাদ করা হয়।

ভাষার বর্ধন

http://www.ateji.com/px/index.html : জাভা জন্য একটি ভাষা বর্ধন যা সমান্তরাল নির্মাণ (যেমন লুপগুলির জন্য সমান্তরাল, ওপেনএমপি শৈলী) যা ওপেনসিএল সহ জিপিইউতে কার্যকর করা হয় allows দুর্ভাগ্যক্রমে, এই খুব প্রতিশ্রুতিবদ্ধ প্রকল্প আর রক্ষণাবেক্ষণ করা হয় না।

http://www.habanero.rice.edu/Publications.html (জেসিইউডিএ): একটি লাইব্রেরি যা বিশেষ জাভা কোডকে (জেসিইউডিএ কোড বলা হয়) জাভা- এবং সিইউডিএ-সি কোডে অনুবাদ করতে পারে, যা পরে সংকলন এবং সম্পাদন করা যেতে পারে জিপিইউ। তবে গ্রন্থাগারটি সর্বজনীনভাবে উপলব্ধ বলে মনে হয় না।

https://www2.informatik.uni-erlangen.de/EN/research/JavaOpenMP/index.html : CUDA ব্যাকএন্ড সহ ওপেনএমপি নির্মাণের জন্য জাভা ভাষার সম্প্রসারণ

জাভা ওপেনসিএল / সিইউডিএ বাইন্ডিং লাইব্রেরি

https://github.com/ochafik/JavaCL : ওপেনসিএল-এর জন্য জাভা বাইন্ডিংস: স্ব-উত্পন্ন নিম্ন-স্তরের বাইন্ডিংয়ের উপর ভিত্তি করে একটি অবজেক্ট-ওরিয়েন্টেড ওপেনসিএল লাইব্রেরি

http://jogamp.org/jocl/www/ : ওপেনসিএল-এর জন্য জাভা বাইন্ডিংস: স্বতঃ-উত্পাদিত নিম্ন-স্তরের বাইন্ডিংয়ের উপর ভিত্তি করে একটি অবজেক্ট-ওরিয়েন্টেড ওপেনসিএল লাইব্রেরি

http://www.lwjgl.org/ : ওপেনসিএল-এর জন্য জাভা বাঁধাই: স্বতঃ-উত্পাদিত নিম্ন-স্তরের বাইন্ডিংগুলি এবং অবজেক্ট-ভিত্তিক সুবিধার্থে ক্লাসগুলি

http://jocl.org/ : ওপেনসিএল-এর জন্য জাভা বাঁধাই: নিম্ন-স্তরের বাইন্ডিংগুলি যে মূল ওপেনসিএল এপিআইয়ের 1: 1 ম্যাপিং

http://jcuda.org/ : CUDA- র জন্য জাভা বাইন্ডিংগুলি: নিম্ন-স্তরের বাইন্ডিংগুলি যা মূল CUDA এপিআইয়ের 1: 1 ম্যাপিং হয়

বিবিধ

http://sourceforge.net/projects/jopencl/ : ওপেনসিএল-এর জন্য জাভা বাইন্ডিংস। ২০১০ সালের পরে আর রক্ষণাবেক্ষণ করা হবে না বলে মনে হচ্ছে

http://www.hoopoe-cloud.com/ : CUDA এর জন্য জাভা বাইন্ডিং। আর রক্ষণাবেক্ষণ করা হবে না বলে মনে হচ্ছে



2 ম্যাট্রিক যোগ করার এবং তৃতীয় ম্যাট্রিক্সের ফলাফল সংরক্ষণের একটি ক্রিয়াকলাপ বিবেচনা করুন। ওপেনসিএল ব্যতীত সিপিইউতে মুতলি থ্রেড করাতে বাধা সবসময় এমন পদক্ষেপ হবে যেখানে সংযোজন ঘটে। এই অপারেশনটি অবশ্যই ডেটা সমান্তরাল। তবে আসুন আমরা এটি গণনা বা মেমরির আগেই আবদ্ধ হবে তা জানি না say এটি প্রয়োগ করতে অনেক সময় এবং সংস্থান লাগে এবং তারপরে দেখুন যে এই অপারেশনটি করতে সিপিইউ আরও ভাল। তাহলে ওপেনসিএল কোডটি প্রয়োগ না করে একজন কীভাবে আগে থেকেই এটি সনাক্ত করতে পারে।
কুল_কোডার

2
@ কুল_কোডার অবশ্যই জিপিইউ বাস্তবায়নের মাধ্যমে কোনও নির্দিষ্ট কাজ (বা কত) কার্যকর হবে কিনা তা আগেই বলা শক্ত। প্রথম অন্ত্রে অনুভূতির জন্য, সম্ভবত বিভিন্ন ব্যবহারের ক্ষেত্রে কিছু অভিজ্ঞতা প্রয়োজন (যা আমি স্বীকার করি যে সত্যিকার অর্থেও এটি নেই)। প্রথম পদক্ষেপটি nvidia.com/object/cuda_showcase_html.html এ দেখা এবং "অনুরূপ" তালিকাভুক্ত কোনও সমস্যা আছে কিনা তা দেখুন। (এটি চুদা, তবে এটি ওপেনসিএলের কাছে ধারণাগতভাবে এতটা কাছে যে ফলাফল বেশিরভাগ ক্ষেত্রে স্থানান্তরিত হতে পারে)। বেশিরভাগ ক্ষেত্রে,
স্পিডআপটিও

অপাপির জন্য +1 - জাভাতে ওপেনক্লো দিয়ে শুরু করার এটি একটি সহজ উপায় এবং আপনি সাধারণ ক্ষেত্রে সিপিই বনাম জিপিইউ পারফরম্যান্সের তুলনা করতে পারবেন। এছাড়াও, এটি এএমডি দ্বারা রক্ষণাবেক্ষণ করা হয় তবে এনভিডিয়া কার্ডগুলির সাথে সূক্ষ্মভাবে কাজ করে।
স্টিভ কুক

12
এটি স্ট্যাকওভারফ্লোতে আমি দেখেছি এমন সেরা প্রতিক্রিয়াগুলির মধ্যে একটি। সময় এবং প্রচেষ্টার জন্য ধন্যবাদ!
ViggyNash

1
@ অ্যালেক্সপুনেন এটি সম্ভবত মন্তব্যের আওতার বাইরে। যতদূর আমি জানি, ওপেনসিভি -র ডকস.ওপেনসিভি.আর.২.২.৪ / আধুনিক / জিপিইউ / ডক / সিন্ট্রোডাকশন এইচটিএমএল হিসাবে কিছু সিডুএ সমর্থন রয়েছেDeveloper.nvidia.com/npp অনেক ইমেজ প্রসেসিং রুটিন, যা সুবিধাজনক হতে পারে। এবং github.com/GPUOpen-ProfessionalCompute-Tools/HIP CUDA এর জন্য "বিকল্প" হতে পারে। এটি একটি নতুন প্রশ্ন হিসাবে জিজ্ঞাসা করা সম্ভব হতে পারে, তবে "মতামত ভিত্তিক" / "তৃতীয় পক্ষের লাইব্রেরির জন্য জিজ্ঞাসা" করার জন্য
ডাউনভোটগুলি


2

আমি যে গবেষণাটি করেছি তা থেকে, আপনি যদি এনভিডিয়া জিপিইউগুলিকে টার্গেট করছেন এবং ওপেনসিএল-এর উপরে সিইউডিএ ব্যবহার করার সিদ্ধান্ত নিয়েছেন , তবে জাভাতে CUDA এপিআই ব্যবহার করার জন্য আমি তিনটি উপায় খুঁজে পেয়েছি।

  1. জেসিডা (বা বিকল্প) - http://www.jcuda.org/ । এটি যে সমস্যার জন্য আমি কাজ করছি তার সেরা সমাধানের মতো বলে মনে হচ্ছে। CUBLAS এর মতো অনেক লাইব্রেরি জেসিডিতে পাওয়া যায়। কার্নেলগুলি এখনও সি-তে লেখা রয়েছে।
  2. জেএনআই - জেএনআই ইন্টারফেসগুলি লেখার জন্য আমার পছন্দসই নয়, তবে এটি খুব শক্তিশালী এবং আপনাকে চুদা যা করতে পারে তা করার অনুমতি দেয়।
  3. জাভাসিপিপি - এটি মূলত আপনাকে সরাসরি সি কোড না লিখে জাভাতে একটি জেএনআই ইন্টারফেস তৈরি করতে দেয়। এখানে একটি উদাহরণ রয়েছে: জাভাতে CUDA কোডে কাজ করার সহজতম উপায়টি কী? সিউডিএ থ্রাস্ট দিয়ে কীভাবে এটি ব্যবহার করবেন আমার কাছে এটি মনে হচ্ছে আপনি কেবল একটি জেএনআই ইন্টারফেস লিখতে পারেন।

এই উত্তরগুলির সবগুলিই জাভাতে কেবল সি / সি ++ কোড ব্যবহারের উপায়। আপনার নিজের জিজ্ঞাসা করা উচিত কেন আপনার জাভা ব্যবহার করা দরকার এবং যদি আপনি এর পরিবর্তে সি / সি ++ এ না করতে পারেন।

আপনি যদি জাভা পছন্দ করেন এবং কীভাবে এটি ব্যবহার করতে চান এবং সমস্ত পয়েন্টার পরিচালনার সাথে কাজ করতে না চান এবং সি / সি ++ এর সাথে কী আসে যায় তা সম্ভবত জ্যাকুদা এর উত্তর the অন্যদিকে, সিউডিএ থ্রাস্ট লাইব্রেরি এবং এটির মতো অন্যান্য গ্রন্থাগারগুলি সি / সি ++ তে পয়েন্টার পরিচালনা করতে অনেক বেশি ব্যবহৃত হতে পারে এবং সম্ভবত আপনার এটি দেখতে হবে।

আপনি যদি সি / সি ++ পছন্দ করেন এবং পয়েন্টার পরিচালনায় আপত্তি করেন না, তবে জাভা ব্যবহার করতে বাধ্য করার মতো আরও কিছু প্রতিবন্ধকতা রয়েছে, তবে জেএনআই হতে পারে সর্বোত্তম পন্থা। যদিও, যদি আপনার জেএনআই পদ্ধতিগুলি কেবল কার্নেল কমান্ডগুলির জন্য মোড়ক হয়ে থাকে তবে আপনি কেবল জেসিডা ব্যবহার করতে পারেন।

জেসিডা এর কয়েকটি বিকল্প রয়েছে যেমন চুদা 4 জ এবং রুট বিয়ার, তবে সেগুলি বজায় রাখা মনে হয় না। যেখানে এই JCuda লেখার সময় CUDA 10.1 সমর্থন করে। যা সর্বাধিক যুগোপযোগী চুদা এসডিকে।

অতিরিক্তভাবে কয়েকটি জাভা গ্রন্থাগার রয়েছে যা সিউডিএ ব্যবহার করে, যেমন ডিপলাইনিং 4 জে এবং হ্যাডোপ, যেগুলি আপনি সরাসরি কার্নেল কোডটি লেখার প্রয়োজন ছাড়াই আপনি যা খুঁজছেন তা করতে সক্ষম হতে পারে। যদিও আমি তাদের খুব বেশি তাকাতে পারি নি।


1

মার্কো 13 ইতিমধ্যে একটি দুর্দান্ত উত্তর সরবরাহ করেছে

আপনি যদি সিইউডিএ / ওপেনসিএল কার্নেলগুলি প্রয়োগ না করে জিপিইউ ব্যবহারের কোনও উপায় অনুসন্ধান করতে চান তবে আমি ফাইনমথ-লিব-চুদা-এক্সটেনশনগুলির (ফাইনমথ-লিবিব-জিপিইউ-এক্সটেনশনগুলি) http: // ফাইনমথের একটি উল্লেখ যুক্ত করতে চাই .net / ফাইনমথ-লিব-চুদা-এক্সটেনশনস / (অস্বীকৃতি: আমি এই প্রকল্পের রক্ষণাবেক্ষণকারী)।

প্রকল্পটি "ভেক্টর ক্লাস" বাস্তবায়ন করে, সুনির্দিষ্ট হওয়ার জন্য, একটি ইন্টারফেস বলা হয় RandomVariable, যা পাটিগণিতের ক্রিয়াকলাপ এবং ভেক্টরগুলিতে হ্রাস সরবরাহ করে। সিপিইউ এবং জিপিইউর জন্য বাস্তবায়ন রয়েছে। অ্যালগরিদমিক পার্থক্য বা সরল মূল্যায়ন ব্যবহার করে বাস্তবায়ন রয়েছে।

জিপিইউতে পারফরম্যান্সের উন্নতিগুলি বর্তমানে সামান্য (তবে আকার 100.000 এর ভেক্টরগুলির জন্য আপনি একটি ফ্যাক্টর> 10 পারফরম্যান্স উন্নতি পেতে পারেন)। এটি ছোট কার্নেল আকারের কারণে। এটি ভবিষ্যতের সংস্করণে উন্নতি করবে।

জিপিইউ বাস্তবায়ন জেসিডা এবং জোকিএল ব্যবহার করে এবং এনভিডিয়া এবং এটিআই জিপিইউগুলির জন্য উপলব্ধ।

গ্রন্থাগারটি অ্যাপাচি ২.০ এবং মাভেন সেন্ট্রালের মাধ্যমে উপলব্ধ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.