সমান্তরালে এফএফটি কম্পিউটিংয়ের জন্য অ্যালগরিদম


12

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

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

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

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

আমি কুলি-টুকি রেডিক্স 2 ডিআইটি-র একটি সহজ বাস্তবায়ন কর্মসূচী করেছি যা ছোট উদাহরণগুলির সাথে কাজ করে তবে এটি বিলিয়ন বাইটের জন্য বিজোড় / এমনকি সূচক ডিএফটি গণনার জন্য ব্যবহার করা কার্যকর হবে না। আমি ম্যাপ্রেডিউস এফএফটি অ্যালগরিদম (এসএসএ গুণে তার কাগজের অংশ হিসাবে টিএসজ-ওও স্যাসে লেখা, আমি 2 টি হাইপারলিঙ্কের বেশি লিঙ্ক করতে পারি না) এবং "চার ধাপের এফএফটি" সহ অনেকগুলি কাগজপত্র পড়তে কয়েক সপ্তাহ ব্যয় করেছি ( এখানে এবং এখানে)), যা একে অপরের সাথে সাদৃশ্যপূর্ণ এবং আমি কী সম্পাদন করার চেষ্টা করছি। যাইহোক, আমি অঙ্কে আশাহীনভাবে খারাপ, এবং and 1,2, 3, 4, 5, 6, 7, 8} (সমস্ত কল্পিত উপাদান 0 রয়েছে) এর মতো সাধারণ কিছু সেট হাতে হাতে এই পদ্ধতিগুলির প্রয়োগ করে আমার বন্যভাবে ভুল ফলাফল। কেউ কী আমাকে দক্ষ প্যারালাল এফএফটি অ্যালগরিদমকে সরল ইংরেজিতে (যেটিকে আমি সংযুক্ত করেছি বা অন্য কোনওটি) ব্যাখ্যা করতে পারি যাতে আমি চেষ্টা করে প্রোগ্রাম করতে পারি?

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


1
ঠিক কি আপনি সাধন করার চেষ্টা করছেন? আপনি কি টেরাবাইট সিগন্যাল ফাইলের একক এফএফটি, বা প্রতিটি ফাইলের একাধিক ছোট এফএফটি করতে চান?
জিম ক্লে

উত্তর:


13

আমি মনে করি যে আপনার মূল সমস্যাটি কীভাবে অ্যালগোরিদমের সমান্তরাল নয় (যা আসলে করা যেতে পারে) তবে এটি সংখ্যার যথার্থতা। আকারের এফএফটি সংখ্যার দিক থেকে বেশ জটিল। এফএফটি সহগগুলি - জে 2 π কে ফর্মের এবং N খুব বড় হলে সহগের গণনা গোলমাল করে। ধরা যাক আপনার কাছেN=240 রয়েছেএবং আপনি 64 বিট ডাবল স্পষ্টতা পাটিগণিত ব্যবহার করেন। প্রথম 1000 সহগের একটি আসল অংশ রয়েছে যা হুবহু (ক্য (যদিও এটি সেভাবে হওয়া উচিত নয়) তাই আপনার উচ্চতর নির্ভুল গণিতের প্রয়োজন হবে যা ব্যবহারের জন্য অত্যন্ত অদক্ষ এবং জটিল।ej2πkNN=240

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

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


বেশ একটি বৈধ পয়েন্ট .. আমি এই সম্পর্কে আরও চিন্তা করতে হবে। আপনার বক্তব্য যেমন হতে পারে আমি শেষ পর্যন্ত "চলমান বিশ্লেষণ" অবলম্বন করব।
ফিলিপ

আমি জানি আমি সত্যিই দেরি করেছি, তবে আপনি যে কোনও সুযোগেই কীভাবে এটি করা যেতে পারে তার কোনও উত্স আছে, যেহেতু আপনি উল্লেখ করেছিলেন যে এটি করা যেতে পারে?
ক্লাদিও ব্রাসার

4

এফএফটি পুনরায় লেখার চেষ্টা করার পরিবর্তে আপনি একটি বিদ্যমান এফএফটি বাস্তবায়ন ( উদাহরণস্বরূপ এফএফটিডাব্লু ) ব্যবহার করে চেষ্টা করতে পারেন এবং ওভারল্যাপ-অ্যাড বা ওভারল্যাপ- এর মাধ্যমে আপনার সিগন্যালের দৈর্ঘ্য (এটি কত বড় হোক না কেন) এর সাথে পুনরাবৃত্তভাবে প্রয়োগ করুন- পদ্ধতি সংরক্ষণ করুন । এই দ্বারা সম্ভব একটি সংবর্তন যেমন FFT প্রকাশ

এই সংক্ষিপ্ত দৈর্ঘ্যের এফএফটিগুলির একে অপরের সাথে যোগাযোগের প্রয়োজন নেই এবং পুরো স্কিমটি মানচিত্র হ্রাস পদক্ষেপগুলির সাথে মেলে।

সাধারণভাবে, আপনি যা করতে চাইছেন তা হল আপনার সিগন্যাল এক্সটিকে ছোট ছোট ভাগে বিভক্ত করা যা ওভারল্যাপিং হতে পারে (উদাহরণস্বরূপ এক্স [0:10], এক্স [5:15], এক্স [10:20] ... ।)। এই ছোট বিভাগগুলিতে এফএফটি সম্পাদন করুন এবং চূড়ান্তটি উত্পাদন করতে শেষ পর্যন্ত তাদের পুনরায় সংযুক্ত করুন। এটি মানচিত্র-হ্রাস অপারেটরগুলির সাথে খুব ভাল ফিট করে।

"মানচিত্র" চলাকালীন আপনি প্রতিটি বিভাগের কিছু ক্রমিক আইডি ("0,1,2,3,4,5, ....) এবং" মান "হওয়ায়" কী "এর সাথে (কী, মান) জোড়া তৈরি করতে পারেন আপনার সিগন্যালের ফাইলে বিভাগের প্রথম মানের INDEX (বা ফাইলের অবস্থান)। সুতরাং, উদাহরণস্বরূপ, যদি আপনার ফাইলটি INT32s পূর্ণ হয় তবে দ্বিতীয় বিভাগের (উপরে) সূচকটি 5 * আকারের (INT32) এ রয়েছে। (বা যদি এটি অন্য কোনও ফর্ম্যাটে থাকে তবে আপনার এটির জন্য একটি পাওনা থাকতে পারে)

এখন, প্রতিটি কর্মী একটি (কী, মান) একটি ফাইল পেয়েছে, ডান পয়েন্টটি অনুসন্ধান করে, এর থেকে এম নমুনা পড়ে (যেখানে এম উপরে 10 রয়েছে), এফএফটি সম্পাদন করে এবং কোনও নামের সাথে একটি ফাইলে এটি সংরক্ষণ করে, উদাহরণস্বরূপ " RES_ [INKEY] .dat "এবং একটি (কী, মান) জুটি দেয়। এই ক্ষেত্রে, "কী" হবে ইনডেক্স (ইনকামিং (কী, মান) টিউপলের "মান") এবং "মান" ফাইলটির নাম হবে যাতে এফএফটি ফলাফল রয়েছে। (আমরা এটিতে ফিরে আসব)

"হ্রাস" এর মধ্যে আপনি এখন "মানচিত্র" পদক্ষেপটি থেকে একটি (কী, মান) গ্রহণ করে ওভারল্যাপ-অ্যাড বা ওভারল্যাপ-সেভ বাস্তবায়ন করতে পারেন, সেই ফাইলটি খোলার মাধ্যমে, এফএফটি ফলাফল লোড করে, ওএ বা ওএস করে এবং তারপরে সেভ করে আপনার আউটপুট ফাইলে ডান INDEX। (Pseudocode হয় দেখুন এই (অথবা এই ), "মানচিত্র" ধাপে হ্যান্ডলগুলি "YT = ..." সমান্তরাল এবং "কমাতে" ধাপে হ্যান্ডলগুলি "Y (ঝ, K) = ..." অংশ।)

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


1
আমি বড় আকারের এফএফটি পুনরুদ্ধার করতে ছোট অংশগুলিকে একত্রিত করার জন্য ওভারল্যাপ-অ্যাড এবং ওভারল্যাপ-সেভের বৈধতা সম্পর্কে নিশ্চিত নই - যতদূর আমি জানি যে এফএফটি-র দ্বিতীয় পাস করার প্রয়োজন আছে (আকারের একটি ডিএফটি) = AB কে আকারের ডিএফটি করে বিভক্ত করা যেতে পারে, ট্যুইডল ফ্যাক্টর অ্যাপ্লিকেশন, তারপরে বি আকারের বি ডিএফটি)। আমরা যদি কম রেজোলিউশন আউটপুট চাই তবে এটি কাজ করতে পারে ...
পিচনেটস

হ্যালো পিকনেটস, এর জন্য ধন্যবাদ, আমার মনে যা ছিল তা হ'ল এটি ( ইঞ্জিনিয়ারিং প্রোডাক্টিভিটিওলসস / স্টাফ / টি 10001 / পিটি 11।এইচটিএম ) যা আমি উত্তরে অন্তর্ভুক্ত করব।
এ_এ

2

2N

2N/2N/22N/2

আরও স্পষ্ট করে বলতে গেলে, পুরো পুনরাবৃত্তির সাথে এমআর ব্যবহার করার দরকার নেই, এটি সত্যই যথেষ্ট অক্ষম হবে। আপনার সমস্যাটি কয়েক মিলিয়ন মেগাবাইট আকারের অভ্যন্তরীণ এবং বাইরের এফএফটিতে বিভক্ত হতে পারে এবং এই মেগাবাইট এফএফটিগুলি FFTW বা এর মতো ব্যবহার করে নিখুঁতভাবে গণনা করা যেতে পারে। এমআর কেবল ডাটা এলোমেলো এবং পুনরায় সংস্থার তদারকি করার জন্য দায়বদ্ধ হবে, আসল এফএফটি গণনা নয় ...

আমার প্রথম ধারণাটি নিম্নলিখিত হবে, তবে আমি সন্দেহ করি যে এটি একক এমআর তে স্মার্ট ডেটা উপস্থাপনের মাধ্যমে করা যেতে পারে।

sR=2N/2

প্রথম এমআর: অভ্যন্তরীণ এফএফটি

মানচিত্র: সময়ে ডেসিমেশন সম্পাদন করুন, অভ্যন্তরীণ এফএফটির জন্য ব্লকগুলিতে গ্রুপ নমুনা করুন

(k,v)k0..2N1vs[k]

(k%R,(k/R,v))

হ্রাস করুন: অভ্যন্তরীণ এফএফটি গণনা করুন

(k,vs)kvs(i,v)

inRin[i]=v

RinoutR

i0..R1(k,(i,out[i]))

দ্বিতীয় এমআর: বহিরাগত এফএফটি

মানচিত্র: বাহ্যিক ফিটের জন্য গোষ্ঠী নমুনা এবং ট্যুইডল ফ্যাক্টর প্রয়োগ করুন apply

(k,(i,v))k(i,v)

(i,(k,v×exp2πjik2N))

হ্রাস করুন: বহিরাগত এফএফটি সম্পাদন করুন

(k,vs)kvs(i,v)

inRin[i]=v

RinoutR

i0..R1(i×R+k,out[i]))

কনসেপ্ট পাইথন কোডের প্রমাণ এখানে।

আপনি দেখতে পাচ্ছেন, ম্যাপাররা কেবলমাত্র ডেটার ক্রম পরিবর্তন করে চলেছে, সুতরাং নিম্নলিখিত অনুমানের অধীনে:

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

এই সবগুলি একটি একক এমআর, ম্যাপারে অভ্যন্তরীণ এফএফটি, রিডিউসারে বাইরের এফএফটি করা যায়। এখানে ধারণার প্রমাণ


আপনার বাস্তবায়নটি আশাব্যঞ্জক বলে মনে হচ্ছে এবং আমি এখনই এটির মধ্য দিয়ে যাচ্ছি, তবে অভ্যন্তরীণ এফএফটি হ্রাসকারীর মধ্যে আপনি লিখুন "আকার 2 ^ আর এর বাইরে ভেক্টর পেতে একটি আকার 2 ^ আর এফএফটি চালু করুন"। আর যদি 2 ডিগ্রি (এন / 2) হয় তবে এই এফএফটি আকার 2 ^ (2 ^ এন / 2) হবে না এবং এভাবে ভুল হবে না? আপনি কি আকারের এফএফটি বলতে চেয়েছিলেন?
ফিলিপ

R2Rexp2πjik2N

0

যদি আপনার সংকেতটি বহুমাত্রিক হয়, তবে এফএফটি সমান্তরালভাবে মোটামুটি সহজেই সম্পাদন করা যায়; একটি এমপিআই প্রক্রিয়াতে একটি মাত্রা সামঞ্জস্য রাখুন, এফএফটি সঞ্চালন করুন এবং পরবর্তী মাত্রায় কাজ করতে ট্রান্সপোস (আলটোল) করুন। এফএফটিডাব্লু এটি করে।

যদি ডেটা 1 ডি হয় তবে সমস্যাটি আরও অনেক কঠিন। উদাহরণস্বরূপ, এফএফটিডাব্লু এমপিআই ব্যবহার করে 1D এফএফটি লিখেনি। যদি কেউ একটি র‌্যাডিক্স -২ ডেসিমেশন-ইন-ফ্রিকোয়েন্সি অ্যালগরিদম ব্যবহার করে, তবে প্রথম কয়েকটি পর্যায় নিষ্প্রভ ডিএফটি হিসাবে সম্পাদন করা যেতে পারে, যাতে কোনওর কোনও নির্ভুলতা ক্ষতি ছাড়াই 2 বা 4 নোড ব্যবহার করতে দেওয়া হয় (কারণ এটি becauseক্যের মূলগুলি প্রথম পর্যায়ে হয় -1 বা i, যা কাজ করে তা চমৎকার)।

ঘটনাক্রমে, আপনি একবার ডেটা রূপান্তরিত করার পরে কী করার পরিকল্পনা করছেন? আউটপুট (যেমন একটি কনভোলশন, লো-পাস ফিল্টার ইত্যাদি) এর কী ঘটে তা যদি কেউ জানে তবে এটি কিছু করতে পারে।

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