জাভা ম্যাট্রিক্স গণিত গ্রন্থাগারের পারফরম্যান্স? [বন্ধ]


151

আমরা এমন কিছু গণনা করছি যার রানটাইম ম্যাট্রিক্স অপারেশন দ্বারা আবদ্ধ। (আগ্রহী হলে নীচে কিছু বিশদ।) এই অভিজ্ঞতাটি নিম্নলিখিত প্রশ্নটিকে উত্সাহিত করেছে:

ম্যাট্রিক্স গণিতের জন্য জাভা গ্রন্থাগারগুলির কার্যকারিতা (যেমন, গুণ, বিপরীত ইত্যাদি) নিয়ে লোকের কি অভিজ্ঞতা আছে? উদাহরণ স্বরূপ:

আমি অনুসন্ধান করেছি এবং কিছুই পাইনি।


আমাদের গতির তুলনা বিশদ:

আমরা ইন্টেল ফরট্রান (আইফোর্ট (আইএফওআরটি) 10.1 20070913) ব্যবহার করছি। আমরা এটি অ্যাপাচি কমন্স গণিত 1.2 ম্যাট্রিক্স অপ্স ব্যবহার করে জাভাতে (1.6) পুনরায় প্রয়োগ করেছি এবং এটি তার সমস্ত অঙ্কের নির্ভুলতার সাথে সম্মত। (জাভাতে এটি চাওয়ার জন্য আমাদের কাছে কারণ রয়েছে)) (জাভা ডাবলস, ফোর্টরান রিয়েল * 8)। ফরট্রান: 6 মিনিট, জাভা 33 মিনিট, একই মেশিন। jvisualm প্রোফাইলটি রিয়েলম্যাট্রিক্সআইএমপিএল-তে অনেক বেশি সময় ব্যয় করে shows getEntry, isValidCoordinate} (যা অপ্রকাশিত অ্যাপাচি কমন্স গণিত ২.০ এ চলে গেছে বলে মনে হয়, তবে ২.০ দ্রুত হয় না)। ফোর্টরান অ্যাটলাস বিএলএএস রুটিন (ডিপোট্রফ ইত্যাদি) ব্যবহার করছে।

স্পষ্টতই এটি প্রতিটি ভাষায় আমাদের কোডের উপর নির্ভর করতে পারে তবে আমরা বিশ্বাস করি বেশিরভাগ সময় সমান ম্যাট্রিক্স অপারেশনগুলিতে।

গ্রন্থাগারগুলিতে জড়িত না এমন আরও কয়েকটি গণনার ক্ষেত্রে জাভা খুব ধীর হয় নি এবং কখনও কখনও খুব দ্রুত হয়।


কৌতুকপূর্ণ ম্যাট্রিক্স গণিতের অপশনগুলি কমপক্ষে ও (এন ^ 3) ... আরও খারাপের দিকে আসে, আমি মনে করি আপনি সময় ও পরীক্ষা করতে পারতেন ...
ক্যালিথ

2
আপনার বিপরীত কেন দরকার? প্রায় সমস্ত অ্যাপ্লিকেশনগুলির জন্য, আপনার প্রকৃত বিপরীত প্রয়োজন নেই। স্থিতিশীলতার কারণে বিপরীত গণনা করা একটি খারাপ ধারণা is
ইং শিয়াও

1
@ ক্যালিথ: হ্যাঁ, আমরা সময় দিতে পারি। আমি ভাবছিলাম অন্যদের ইতিমধ্যে ছিল কিনা। @ ইয়াং জিয়াও: হ্যাঁ, বিপরীতগুলি এড়ানো উচিত। যাইহোক, এই গণনা এটি ব্যবহার করে সবচেয়ে সহজ মনে হয়। দেখুন এন.ইউইকিপিডিয়া.আর / উইকি /
dfrankow

2
@ ক্যালিথ এটি ভুল, ডি (ডি এন 3) এর চেয়ে আরও বেশি কার্যকর পদ্ধতি বিভাজন এবং বিজয় পদ্ধতির ব্যবহার করে।
স্টার ব্লু

1
দ্রুততম নেটিভ পারফরম্যান্সটি জেকুব্লাসের। আপনার যদি দ্রুত লিনিয়ার বীজগণিত প্রয়োজন, আপনার জিপিইউ দরকার। ক্লোম্যাথ সহ জওসিএল সিপিইউতেও বহনযোগ্য হতে পারে (এবং এমনকি মাল্টি-প্ল্যাটফর্ম ডাব্লু / ও পুনঃসংযোগ), তবে আমি এটি পরীক্ষা করিনি।
আলেকসান্দ্র ডাবিনস্কি

উত্তর:


98

শুধু আমার 2 সেন্ট যোগ করতে। আমি এই লাইব্রেরির কিছু তুলনা করেছি। আমি নিজের সাথে ম্যাট্রিক্সকে 3000 দ্বারা 3000 ম্যাট্রিক্সকে ডাবলস দিয়ে গুন করার চেষ্টা করেছি। ফলাফলগুলো নিম্নে প্রদর্শিত হল.

সি / সি ++, অক্টেভ, পাইথন এবং আর দিয়ে মাল্টিথ্রেড অ্যাটলাস ব্যবহার করে সময় নেওয়া প্রায় 4 সেকেন্ড।

জাভা ব্যবহার করে জামা ব্যবহার করা সময়টি ছিল 50 সেকেন্ড।

জাভা সহ কোল্ট এবং সমান্তরাল কোল্ট ব্যবহার করে সময় নেওয়া হয়েছিল 150 সেকেন্ড!

জাভা সহ জেবিএলএএস ব্যবহার করে, সময়টি আবারও 4 সেকেন্ডের মতো হয়ে যায় কারণ জেবিএলএএস মাল্টিথ্রেডেড আটলাস ব্যবহার করে।

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


3
আমার ধারণা আপনি কোনও মাল্টিকোর মেশিন ব্যবহার করেছিলেন, সুতরাং এই ফলাফলগুলি গ্রন্থাগারটি মাল্টিকোর ব্যবহার করে কিনা তা দ্বারা দৃ strongly়ভাবে প্রভাবিত হয়? কিছু উদ্দেশ্যে যেমন, যখন কেউ এমপিআই বা হ্যাডোপ ইত্যাদি ব্যবহার করে সমান্তরাল করে চলেছে তখন গুরুত্বপূর্ণ সময়টি আসলে এককালের সময়, যেহেতু এমপিআই / হ্যাডোপ বাস্তবায়ন সমান্তরাল জিনিসগুলির যত্ন নেয়। (কমপক্ষে, আমার জন্য jblas জামার চেয়ে প্রায় 2.5 গতিবেগ ছিল, আপনার মতো জামার চেয়ে 10 গুণ বেশি দ্রুত নয়))
হিউ পার্কিনস

17
আমি স্রেফ নেটলিব-জাভা এর v1.0 প্রকাশ করেছি ... পারফরম্যান্সটি পার্ট (এবং কখনও কখনও ছাড়িয়ে যায়) ফোর্টরান কোডও রয়েছে এবং এটি ব্যবহারকারীর কোডে কোনও পরিবর্তন ছাড়াই মেশিন অনুকূলিত নেটিভ ব্যবহার করতে পারে। নিম্ন-স্তরের লিনিয়ার বীজগণিত গ্রন্থাগারগুলি সন্ধান করার সময় দয়া করে এটি বিবেচনা করুন। আমিও বজায় রাখা MTJ , যা netlib জাভা ব্যবহার করে। Scala সালে ব্যবহার ব্রীজ (এছাড়াও দ্বারা চালিত netlib-java)
fommil

4
এনডি 4 জে এবং জাভা ব্যবহার করে - আমার তুলনামূলকভাবে পুরানো ল্যাপটপটি 219 মিলিসির মধ্যে প্রস্তাবিত গুণকে সম্পূর্ণ করে। পাইথন + নম্পিটি 349 মিলিসের মধ্যে এটি সম্পূর্ণ করে
বেনিল

2
এবং শুধু এনডি 4 জে ব্যবহার সম্পর্কে আমার শেষ মন্তব্যটি যুক্ত করার জন্য, আমি নেটিভ-প্ল্যাটফর্মটিকে এর ব্যাকএন্ড হিসাবে ব্যবহার করেছি, যদি আমি
চুদা

আপনি কি কোথাও বেঞ্চমার্কের জন্য আপনার কোড প্রকাশ করেছেন?
বুড়িউজ

108

আমি জাভা ম্যাট্রিক্স বেঞ্চমার্ক ( জেমাটবেঞ্চ ) এর লেখক এবং আমি এই আলোচনায় আমার মতামত দেব।

জাভা লাইব্রেরিগুলির মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে এবং পুরো ক্রিয়াকলাপের মধ্যে কোনও স্পষ্ট বিজয়ী না থাকলেও সাম্প্রতিক পারফরম্যান্সের ফলাফলগুলিতে দেখা যেতে পারে এমন কয়েকটি স্পষ্ট নেতা রয়েছেন (অক্টোবর 2013)।

আপনি "বড়" ম্যাট্রিক্স সাথে কাজ করেন, তাহলে (অপেক্ষাকৃত দ্রুত 3.5x সম্বন্ধে) নেটিভ লাইব্রেরি, তারপর পরিষ্কার বিজয়ী ব্যবহার করতে পারেন MTJ সঙ্গে সিস্টেম অপ্টিমাইজ netlib । যাতে তোমাকে এক পবিত্র জাভা সমাধান প্রয়োজন, তাহলে MTJ , OjAlgo , EJML এবং সমান্তরাল অশ্বশাবক ভাল পছন্দ নয়। ছোট ম্যাট্রিকের ক্ষেত্রে ইজেএমএল স্পষ্ট বিজয়ী।

আমি যে লাইব্রেরিগুলির উল্লেখ করি নি তা উল্লেখযোগ্য পারফরম্যান্স সংক্রান্ত সমস্যাগুলি দেখায় বা মূল বৈশিষ্ট্যগুলি হারিয়েছিল।


6
ভেবেছিলাম আমি উল্লেখ করব যে আপনার মানদণ্ডটি সত্যই কার্যকর! এটিতে আপনার সময় দেওয়ার জন্য ধন্যবাদ।
হোহনুলি

1
জেবিএলএএস সেপ্টেম্বর '13 এর হিসাবে এসভিডি সমর্থন করে প্রদর্শিত হচ্ছে: মিকিওব্রাউন.github.io/jblas/javadoc/org/jblas/…
লিওপড

দুর্দান্ত কাজ, অনেক ধন্যবাদ।
ওয়েবপ্যাট

আপনার মূল্যায়ন করা লাইব্রেরির কোথাও কি এমন কোনও তালিকা রয়েছে যা ফলাফল প্রকাশ করেন নি এবং এর প্রতিটি কারণ?
কেভিন ক্রামউইদে

1
এমটিজে পরিত্যক্ত বলে মনে হচ্ছে: সংগ্রহশালাটি সংরক্ষণাগারভুক্ত হয়েছে এবং শেষ প্রতিশ্রুতি ছিল 2016 সালে
ড্যানিলা পিয়াতভ

51

আমি jblas এর প্রধান লেখক এবং এটি চিহ্নিত করতে চেয়েছিলাম যে আমি ২০০৯ সালের ডিসেম্বরের শেষের দিকে সংস্করণ 1.0 প্রকাশ করেছি I উইন্ডোজ, লিনাক্স, ম্যাক ওএস এক্স, 32 এবং 64 বিটের জন্য (উইন্ডোজ বাদে)। এইভাবে আপনি কেবল আপনার ক্লাসপাথে জার ফাইল যুক্ত করে দেশীয় কর্মক্ষমতা পাবেন। Http://jblas.org এ এটি পরীক্ষা করে দেখুন !


2
আপনার কাজের দ্বারা অনুপ্রাণিত হয়ে, আমি নেটলিব-জাভাতেও একই রকম কাজ করেছি ;-)
ফমমিল

2
হাহা, আমিও, জিজেনের জন্য :-)
হিউ পার্কিনস

জোগআ্যাম্পও একই কাজ করে, জোগ্যাম্প-ফ্যাট.জার দেখুন। ভাল ধারণা :)
gouessej

8

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

তো এইসবের মানে কি? আমরা হব:

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

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


8

আমি কেবল অ্যাপাচি কমন্স ম্যাথকে জ্ল্যাপ্যাকের সাথে তুলনা করেছি।

পরীক্ষা: এলোমেলো 1024x1024 ম্যাট্রিক্সের একক মানের পচন।

মেশিন: ইন্টেল (আর) কোর (টিএম) 2 ডুয়ো সিপিইউ E6750 @ 2.66GHz, লিনাক্স x64

অষ্টাভ কোড: এ = র‌্যান্ড (1024); মাংসপেশীর আক্ষেপ; [ইউ, এস, ভি] = svd (একটি); TOC

ফলাফল কার্যকর করার সময়
-------------------------------------------------- -------
অক্টাভা 36.34 সেকেন্ড

জেডিকে 1.7u2 64 বিট
    jlapack 37.78 সেকেন্ড
    অ্যাপাচি গণিত এসভিডি 42.24 সেকেন্ড


জেডিকে 1.6u30 64 বিট
    jlapack 48.68 সেকেন্ড
    অ্যাপাচি গণিত এসভিডি 50.59 সেকেন্ডে কমন্স করে

নেটিভ রুটিন
ল্যাপাক * সি: 37.64 সেকেন্ড থেকে অনুরোধ করা হয়েছে
ইন্টেল এমকেএল 6.89 সেকেন্ড (!)

আমার উপসংহারটি হল যে জেডিকে ১.7 থেকে কল করা জ্ল্যাপ্যাকটি ল্যাপের নেটিভ বাইনারি পারফরম্যান্সের খুব কাছাকাছি। আমি লিনাক্স ডিস্ট্রো নিয়ে আসা ল্যাপ বাইনারি লাইব্রেরিটি ব্যবহার করেছি এবং ইউ, এস এবং ভিটি ম্যাট্রিকগুলি পেতে ডেজসভিডি রুটিনটি অনুরোধ করেছি। সমস্ত পরীক্ষা প্রতিটি রান ঠিক একই ম্যাট্রিক্স উপর ডাবল নির্ভুলতা ব্যবহার করে করা হয়েছিল (অক্টাভে ব্যতীত)।

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


8

জিগেন https://github.com/hughperkins/jeigen

  • ইগেন সি ++ লাইব্রেরি মোড়না দেয় http://eigen.tuxfamily.org , যা উপলব্ধ দ্রুততম বিনামূল্যে সি ++ গ্রন্থাগারগুলির মধ্যে একটি
  • অপেক্ষাকৃত ক্ষুদ্র বাক্য গঠন, যেমন 'মিমুল', 'সাব'
  • ঘন এবং বিরল ম্যাট্রিক্স উভয়ই পরিচালনা করে

একটি দ্রুত পরীক্ষা, দুটি ঘন ম্যাট্রিকেস গুণ করে, যেমন:

স্ট্যাটিক জিগেন আমদানি করুন atri ম্যাট্রিক্স ইউটি। *;

int K = 100;
int N = 100000;
DenseMatrix A = rand(N, K);
DenseMatrix B = rand(K, N);
Timer timer = new Timer();
DenseMatrix C = B.mmul(A);
timer.printTimeCheckMilliseconds();

ফলাফল:

Jama: 4090 ms
Jblas: 1594 ms
Ojalgo: 2381 ms (using two threads)
Jeigen: 2514 ms
  • জামার তুলনায় সব কিছু দ্রুত :- পি
  • জাব্লাসের সাথে তুলনা করা, জিগেন বেশ তত দ্রুত নয়, তবে এটি বিরল ম্যাট্রিকগুলি পরিচালনা করে।
  • ওজালগোয়ের তুলনায়, জিগেন একই পরিমাণে অতিবাহিত সময় ব্যয় করে তবে কেবল একটি কোর ব্যবহার করে, তাই জিগেন অর্ধেক সিপিইউ ব্যবহার করে। জিগেনের একটি টিয়ার্স সিনট্যাক্স রয়েছে, অর্থাত্ 'মিমুল' বনাম 'মাল্টিপলাইট'

জিগান দুর্দান্ত লাগছে! আমি সম্প্রতি জাভাতে ইগিগেনটি জেএনআই এবং একটি ডিএলএল ব্যবহার করে খুব বড় স্পার্স ম্যাট্রিক্স সমাধানের জন্য প্রয়োগ করেছি। ডিএলএল সহ আমার সংস্করণটি আমার পরীক্ষাগুলির জন্য সমান্তরাল কোল্টের চেয়ে ২০ টিরও বেশি দ্রুত (8000x8000 এরও বেশি ম্যাট্রিক)। আমি যদি জিগেন সম্পর্কে জানতাম!
জেড বোসন

6

কয়েকটি পৃথক হার্ডওয়্যার কনফিগারেশনের জন্য http://code.google.com/p/java-matrix-benchmark/ এ জাভাতে বিভিন্ন ম্যাট্রিক্স প্যাকেজগুলির একটি মাপদণ্ড রয়েছে। তবে এটি আপনার নিজস্ব মানদণ্ড করার কোনও বিকল্প নেই।

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

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


4

আমি এর লেখক la4j (জাভা জন্য লিনিয়ার বীজগণিত) গ্রন্থাগারের এবং এখানে আমার বক্তব্য। আমি 3 বছর ধরে লা 4 জে নিয়ে কাজ করছি (সর্বশেষ প্রকাশটি 0.4.0 [01 জুন 2013]) এবং কেবলমাত্র আমি এখনই ন্যূনতম প্রয়োজনীয় ক্রিয়াকলাপটি coveredেকে রেখেছি পারফর্মেন্স বিশ্লেষণ এবং অপ্টিমাইজেশন করা শুরু করতে পারি। সুতরাং, ল 4 জ আমি যতটা দ্রুত চেয়েছি তত দ্রুত নয় তবে আমি এটি পরিবর্তন করতে আমার অনেক সময় ব্যয় করছি।

আমি বর্তমানে জেমাটবেঞ্চ প্ল্যাটফর্মে la4j এর নতুন সংস্করণ পোর্ট করার মাঝখানে আছি । আমি আশা করি নতুন সংস্করণ আগের পারফরম্যান্সের আরও ভাল পারফরম্যান্স দেখায় যেহেতু আমি ল 4 জে যেমন আরও দ্রুততর অভ্যন্তরীণ ম্যাট্রিক্স ফর্ম্যাট, অনিরাপদ অ্যাক্সেসর এবং ম্যাট্রিক্স গুণনের জন্য দ্রুত ব্লকিং অ্যালগরিদম হিসাবে বেশ কিছু উন্নতি করেছি।


1
না - la4j আসলেই আপত্তিজনক নয়। কোড. google.com/p/java-matrix-benchmark
ক্রিস্টোফার ম্যানিং

এটা অনেক পরিবর্তন হয়েছে। আপনার উত্তর থেকে আমি লাইব্রেরির দুটি সংস্করণ প্রকাশ করেছি। বর্তমান প্রকাশ 0.4.0। এবং এটি কেবল উড়ে যায়।
ভ্লাদিমির কোস্ত্যুকভ

3

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


ভাল যুক্তি! আটলাসের জন্য জেএনআই মোড়ক সহ একটি আলফা-মঞ্চের প্রকল্প: jblas.org । লেখকের ব্লগ পোস্ট: mikiobraun.blogspot.com/2008/10/…
dfrankow

3

আমরা বেশ কয়েকটি বড় মারাত্মক আর্থিক গণনার জন্য সিওএলটি ব্যবহার করেছি এবং এতে খুশি হয়েছি। আমাদের প্রচুর প্রোফাইল কোডে আমাদের নিজের একটি দিয়ে কোনও সিওএলটি বাস্তবায়ন প্রায় কখনও হয়নি।

তাদের নিজস্ব পরীক্ষায় (স্পষ্টতই স্বাধীন নয়) আমি মনে করি তারা ইনটেল হ্যান্ড-অপটিমাইজড এসেম্বারার রুটিনগুলির 2 এর একটি ফ্যাক্টরের মধ্যে দাবি করে। এটিকে ভালভাবে ব্যবহারের কৌশলটি নিশ্চিত করে দিচ্ছে যে আপনি তাদের নকশা দর্শনটি বুঝতে পেরেছেন এবং বহির্মুখী বস্তুর বরাদ্দ এড়াবেন।


3

আপনি কি ইন্টেল ম্যাথ কার্নেল লাইব্রেরিতে একবার দেখেছেন ? এটি এমনকি আটলাসকেও ছাড়িয়ে যায় বলে দাবি করে । জেএনআই মোড়কের মাধ্যমে এমকেএল জাভাতে ব্যবহার করা যেতে পারে ।


2
আমাদের তা আছে ক) এর লাইসেন্স এটলাসের চেয়ে আরও বেশি বিধিনিষেধযুক্ত (তাই আমরা আমাদের সমস্ত কম্পিউটার ব্যবহার করতে পারি না); খ) এটি জাভা নয় (এবং যেমনটি আমি বলেছিলাম জাভাতে থাকার কারণ রয়েছে)।
dfrankow

উদাহরণস্বরূপ, এটি জাভা লাইব্রেরিগুলি সম্পর্কে আমার প্রশ্নের উত্তর নয় (তবে এটিকে নিচে নামানোর মতো খ্যাতি আমার নেই)।
dfrankow

@ ডিফ্র্যাঙ্কো: জাভাতে এটি ব্যবহার করার বিষয়ে আপনার উদ্বেগের সমাধান করার জন্য আমি আমার উত্তর আপডেট করেছি।
জাচ স্ক্রিভেনা

1
+1, এটির গতি যদি আপনি খুঁজছেন তবে এটি যাবার উপায় বলে মনে হচ্ছে
গ্যাব রয়িয়ার

2
শেষ লিঙ্কটি নষ্ট হয়ে গেছে।
gouessej

2

পঞ্চম-নির্দিষ্ট নেটিভ কোড আরও ভাল করতে পারে যে ভার্খানের পোস্টে নির্মাণ করা:


2

আপনি jblas প্রকল্পটি পরীক্ষা করতে চাইতে পারেন । এটি তুলনামূলকভাবে নতুন জাভা গ্রন্থাগার যা উচ্চ-পারফরম্যান্স ম্যাট্রিক্স ক্রিয়াকলাপের জন্য BLAS, LAPACK এবং ATLAS ব্যবহার করে।

বিকাশকারী কিছু মানদণ্ড পোস্ট করেছেন যাতে এমবিজে এবং কোল্টের বিপক্ষে jblas অনুকূলভাবে আসে।


2

3 ডি গ্রাফিক্স অ্যাপ্লিকেশনগুলির জন্য lwjgl.util ভেক্টর বাস্তবায়ন প্রায় 3 এর একটি ফ্যাক্টর দ্বারা উপরে উল্লিখিত jblas দ্বারা সম্পাদিত।

আমি 4x4 ম্যাট্রিক্স সহ ভিজ 4 এর 1 মিলিয়ন ম্যাট্রিক্স গুণিত করেছি।

lwjgl প্রায় 18ms এ শেষ হয়েছে, jblas প্রায় 60ms প্রয়োজন।

(আমি ধরে নিই যে, জেএনআই পদ্ধতির তুলনামূলকভাবে ছোট গুণগুলির দ্রুত ধারাবাহিক প্রয়োগের জন্য খুব উপযুক্ত নয় Since যেহেতু অনুবাদ / ম্যাপিংটি গুণটির প্রকৃত সম্পাদনের চেয়ে বেশি সময় নিতে পারে))


1

আমি খুঁজে পেয়েছি যে আপনি যদি অনেক উচ্চ মাত্রিক ম্যাট্রিক্স তৈরি করে থাকেন তবে আপনি জামাকে প্রায় দ্বিগুণ মাত্রার অ্যারের পরিবর্তে একক মাত্রিক অ্যারে ব্যবহার করতে পরিবর্তন করতে পারলে প্রায় 20% দ্রুত তৈরি করতে পারেন। এটি কারণ জাভা বহুমাত্রিক অ্যারেগুলি দক্ষতার সাথে সমর্থন করে না। অর্থাত। এটি অ্যারের একটি অ্যারে তৈরি করে।

কোল্ট এটি ইতিমধ্যে করেছে, তবে আমি খুঁজে পেয়েছি যে এটি জামার চেয়ে জটিল এবং আরও শক্তিশালী যা এটি ব্যাখ্যা করতে পারে কেন কোল্টের সাথে সহজ ক্রিয়াকলাপগুলি ধীর হয়।

উত্তরটি সত্যিই নির্ভর করে যে আপনি করছেন তার উপর। জামা কল্ট যে কাজগুলি করতে পারে তার একটি ভগ্নাংশকে সমর্থন করে না যা আরও বেশি পার্থক্য তৈরি করে।



0

অনেকগুলি অবাধে উপলভ্য জাভা লিনিয়ার বীজগণিত গ্রন্থাগার রয়েছে। http://www.ujmp.org/java-matrix/benchmark/ দুর্ভাগ্যক্রমে যে বেঞ্চমার্কটি আপনাকে কেবল ম্যাট্রিক্সের গুণনের তথ্য দেয় (পরীক্ষার স্থানান্তরিত করার সাথে বিভিন্ন পাঠাগারগুলি তাদের নিজস্ব নকশা বৈশিষ্ট্যগুলি ব্যবহার করতে দেয় না)।

আপনার কী দেখতে হবে যখন এই লিনিয়ার বীজগণিত গ্রন্থাগারগুলি বিভিন্ন ম্যাট্রিক্স পচনের গণনা করতে বলা হয় তখন কীভাবে সম্পাদন করে। http://ojalgo.org/matrix_compare.html


0

ম্যাট্রিক্স টুকিটস জাভা (এমটিজে) এর আগেই উল্লেখ করা হয়েছিল, তবে সম্ভবত এই থ্রেডে অন্য কেউ হোঁচট খাচ্ছে তার পক্ষে এটি আবার উল্লেখ করার মতো। আগ্রহীদের জন্য, মনে হয় এমটিজে লিনাগ লাইব্রেরিটি অ্যাপাচি কমন্স গণিত ২.০ এ প্রতিস্থাপন করার বিষয়েও কথা বলেছে , যদিও আমি নিশ্চিত নই যে এটি কীভাবে এগিয়ে চলছে।


0

আপনার শপিং তালিকায় আপনার অ্যাপাচি মাহাউট যুক্ত করা উচিত।

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