Bombyx: OpenCilk Compilation for FPGA Hardware Acceleration
Shahawy, de Castelnau, Ienne
Task-level parallelism (TLP) is a widely used approach in software where independent tasks are dynamically created and scheduled at runtime. Recent systems have explored architectural support for TLP on field-programmable gate arrays (FPGAs), often leveraging high-level synthesis (HLS) to create processing elements (PEs). In this paper, we present Bombyx, a compiler toolchain that lowers OpenCilk programs into a Cilk-1-inspired intermediate representation, enabling efficient mapping of CPU-oriented TLP applications to spatial architectures on FPGAs. Unlike OpenCilk's implicit task model, which requires costly context switching in hardware, Cilk-1 adopts explicit continuation-passing - a model that better aligns with the streaming nature of FPGAs. Bombyx supports multiple compilation targets: one is an OpenCilk-compatible runtime for executing Cilk-1-style code using the OpenCilk backend, and another is a synthesizable PE generator designed for HLS tools like Vitis HLS. Additionally, we introduce a decoupled access-execute optimization that enables automatic generation of high-performance PEs, improving memory-compute overlap and overall throughput.
academic
Bombyx: FPGA হার্ডওয়্যার ত্বরণের জন্য OpenCilk সংকলন
এই পেপারটি Bombyx উপস্থাপন করে, একটি সরঞ্জাম শৃঙ্খল যা OpenCilk প্রোগ্রামগুলিকে FPGA হার্ডওয়্যার ত্বরণকারীতে সংকলন করে। Bombyx OpenCilk এর অন্তর্নিহিত কাজ সমান্তরালতা মডেলকে Cilk-1 শৈলীর স্পষ্ট ধারাবাহিকতা-পাস (continuation-passing) মধ্যবর্তী প্রতিনিধিত্বে রূপান্তরিত করে, যা FPGA এর স্ট্রিমিং বৈশিষ্ট্যের জন্য আরও উপযুক্ত। এই সরঞ্জামটি একাধিক সংকলন লক্ষ্য সমর্থন করে: যাচাইকরণের জন্য OpenCilk সামঞ্জস্যপূর্ণ রানটাইম, এবং Vitis HLS এর মতো উচ্চ-স্তরের সংশ্লেষণ সরঞ্জামগুলির জন্য সংশ্লেষণযোগ্য প্রক্রিয়াকরণ ইউনিট জেনারেটর। অতিরিক্তভাবে, Bombyx বিচ্ছিন্ন মেমরি-সম্পাদন (DAE) অপ্টিমাইজেশন প্রবর্তন করে, যা স্বয়ংক্রিয়ভাবে উচ্চ-কর্মক্ষমতা প্রক্রিয়াকরণ ইউনিট তৈরি করে, মেমরি-গণনা ওভারল্যাপ এবং সামগ্রিক থ্রুপুট উন্নত করে।
কাজ-স্তরের সমান্তরালতা (TLP) সফটওয়্যারে ব্যাপকভাবে ব্যবহৃত একটি সমান্তরালতা কৌশল, যা রানটাইমে স্বতন্ত্র কাজগুলি গতিশীলভাবে তৈরি এবং সময়সূচী করতে সক্ষম করে। যদিও হার্ডওয়্যার ফ্রেমওয়ার্ক বিদ্যমান রয়েছে (যেমন ParallelXL এবং HardCilk) যা FPGA তে TLP সমর্থন করে, সফটওয়্যার TLP ফ্রেমওয়ার্ক থেকে স্বয়ংক্রিয়ভাবে প্রক্রিয়াকরণ ইউনিট (PE) কোড নিষ্কাশন এবং সংকলনের জন্য স্বয়ংক্রিয় সরঞ্জামের অভাব রয়েছে। বিদ্যমান ফ্রেমওয়ার্কগুলি সাধারণত ব্যবহারকারীদের PE কোড ম্যানুয়ালি প্রদান করতে প্রয়োজন, যা ক্লান্তিকর এবং ত্রুটি-প্রবণ উভয়ই।
স্বয়ংক্রিয়করণের প্রয়োজন: CPU-কেন্দ্রিক TLP অ্যাপ্লিকেশনগুলি FPGA তে স্থানান্তর করার জন্য প্রচুর ম্যানুয়াল কাজ প্রয়োজন, যার মধ্যে রয়েছে কোড পুনর্গঠন, হার্ডওয়্যার ইন্টারফেস অভিযোজন, কনফিগারেশন ফাইল প্রজন্ম ইত্যাদি
কর্মক্ষমতা অপ্টিমাইজেশন: ম্যানুয়ালি লেখা কোড উন্নত হার্ডওয়্যার অপ্টিমাইজেশন (যেমন বিচ্ছিন্ন মেমরি-সম্পাদন) প্রয়োগ করা কঠিন
উন্নয়ন দক্ষতা: স্বয়ংক্রিয় সরঞ্জাম শৃঙ্খলের অভাব FPGA ত্বরণে TLP এর ব্যাপক প্রয়োগকে বাধা দেয়
OpenCilk এর অন্তর্নিহিত মডেল: cilk_spawn এবং cilk_sync ব্যবহার করে fork-join মডেলের জন্য সিঙ্ক্রোনাইজেশন পয়েন্টে প্রসঙ্গ স্যুইচিং প্রয়োজন। হার্ডওয়্যারে প্রসঙ্গ স্যুইচিং বাস্তবায়নের জন্য সম্পূর্ণ সার্কিট অবস্থা সংরক্ষণ প্রয়োজন, যা বর্তমান HLS সরঞ্জামগুলির জন্য সরাসরি সমর্থিত নয় এবং প্রচুর RTL প্রকৌশল প্রয়োজন
TAPIR মধ্যবর্তী প্রতিনিধিত্ব: OpenCilk দ্বারা ব্যবহৃত TAPIR নিম্ন-স্তরের সংকলক নির্মাণ ব্যবহার করে, যা HLS এর জন্য মূল কোডের কাছাকাছি পাঠযোগ্য C++ কোড তৈরি করা কঠিন করে তোলে
ম্যানুয়াল PE লেখা: বন্ধন সারিবদ্ধকরণ, লেখার বাফার ইন্টারফেস, কনফিগারেশন ফাইল প্রজন্ম ইত্যাদি ক্লান্তিকর বিবরণ পরিচালনা করতে হবে
Cilk-1 এর স্পষ্ট ধারাবাহিকতা-পাস মডেল হার্ডওয়্যার বাস্তবায়নের জন্য আরও উপযুক্ত, কারণ এটি সিঙ্ক্রোনাইজেশন পয়েন্টে ফাংশনগুলিকে সমাপ্তি ফাংশনে বিভক্ত করে (পরমাণুভাবে সম্পাদিত, প্রসঙ্গ স্যুইচিং ছাড়াই)। যদিও এই মডেলটি সফটওয়্যার প্রোগ্রামিংয়ের জন্য যথেষ্ট স্বজ্ঞাত নয় (তাই Cilk বিবর্তনে বাদ দেওয়া হয়েছিল), এটি হার্ডওয়্যার বাস্তবায়নের জন্য প্রাকৃতিক। Bombyx এর লক্ষ্য হল OpenCilk থেকে স্পষ্ট TLP তে স্বয়ংক্রিয় রূপান্তর, এবং অপ্টিমাইজড হার্ডওয়্যার PE তৈরি করা।
১. স্বয়ংক্রিয় সংকলন প্রবাহ: OpenCilk থেকে FPGA হার্ডওয়্যার ত্বরণকারী পর্যন্ত সম্পূর্ণ স্বয়ংক্রিয় সংকলন সরঞ্জাম শৃঙ্খল Bombyx প্রস্তাব করে
२. স্পষ্ট মধ্যবর্তী প্রতিনিধিত্ব: নিয়ন্ত্রণ প্রবাহ গ্রাফ-ভিত্তিক অন্তর্নিহিত এবং স্পষ্ট IR ডিজাইন করে, fork-join মডেল থেকে ধারাবাহিকতা-পাস মডেলে স্বয়ংক্রিয় রূপান্তর বাস্তবায়ন করে
३. বহু-লক্ষ্য কোড প্রজন্ম:
HardCilk ব্যাকএন্ড: স্বয়ংক্রিয়ভাবে সংশ্লেষণযোগ্য C++ HLS কোড এবং কনফিগারেশন ফাইল তৈরি করে
Cilk-1 সিমুলেশন স্তর: রূপান্তর সঠিকতা যাচাই করতে OpenCilk রানটাইম ব্যবহার করে
४. বিচ্ছিন্ন মেমরি-সম্পাদন অপ্টিমাইজেশন: সংকলক নির্দেশিকা (pragma) এর মাধ্যমে DAE অপ্টিমাইজেশন সমর্থন করে, মেমরি অ্যাক্সেস এবং গণনা আলাদা কাজে বিভক্ত করে, হার্ডওয়্যার কর্মক্ষমতা উন্নত করে
५. পরীক্ষামূলক যাচাইকরণ: গ্রাফ ট্রাভার্সাল বেঞ্চমার্কে, DAE অপ্টিমাইজেশন ২৬.৫% রানটাইম হ্রাস অর্জন করে
OpenCilk Clang ফ্রন্টএন্ড ব্যবহার করে বিমূর্ত সিনট্যাক্স গাছ তৈরি করে
AST কে নিয়ন্ত্রণ প্রবাহ গ্রাফ (CFG) প্রতিনিধিত্বের অন্তর্নিহিত IR তে রূপান্তরিত করে
প্রতিটি ফাংশন একটি CFG এর সাথে সম্পর্কিত, যার মধ্যে রয়েছে:
অনন্য প্রবেশ ব্লক (কোনো ইনবাউন্ড এজ নেই)
এক বা একাধিক প্রস্থান ব্লক (কোনো আউটবাউন্ড এজ নেই)
মৌলিক ব্লক ক্রমিক C বিবৃতি দ্বারা গঠিত, নিয়ন্ত্রণ প্রবাহ বিবৃতি দ্বারা সমাপ্ত
TAPIR কেন ব্যবহার করা হয় না: TAPIR নিম্ন-স্তরের নির্মাণ (যেমন φ নোড, alloca ইত্যাদি) ব্যবহার করে, যা মূল কোডের কাছাকাছি পাঠযোগ্য C++ কোড তৈরি করা কঠিন করে তোলে। Bombyx এর IR মূল কোড কাঠামো সংরক্ষণ করে।
এটি Bombyx এর মূল রূপান্তর পদক্ষেপ, OpenCilk এর অন্তর্নিহিত সিঙ্ক্রোনাইজেশন মডেলকে Cilk-1 এর স্পষ্ট ধারাবাহিকতা-পাস মডেলে রূপান্তরিত করে।
মূল ধারণা:
বন্ধন (Closure): কাজের ডেটা কাঠামো প্রতিনিধিত্ব করে, যার মধ্যে রয়েছে:
প্রস্তুত পরামিতি
নির্ভরতার জন্য অপেক্ষা করা স্থানধারক
রিটার্ন পয়েন্টার
spawn_next: নির্ভরতার জন্য অপেক্ষা করা ধারাবাহিকতা কাজ তৈরি করে
send_argument: স্পষ্টভাবে অপেক্ষা করা বন্ধনে পরামিতি লেখে এবং শিডিউলারকে অবহিত করে
রূপান্তর অ্যালগরিদম:
१. পথ বিভাজন: CFG ট্রাভার্স করে, ফাংশন সমাপ্তি ব্লক (return) বা sync অপারেশন সম্মুখীন হলে নতুন পথ শুরু করে
প্রতিটি পথ একটি স্ব-সম্পূর্ণ সমাপ্তি ফাংশন হয়ে ওঠে
চিত্র ৪(c) এ ধূসর অঞ্চল দুটি পথ প্রতিনিধিত্ব করে
२. নির্ভরতা সনাক্তকরণ: sync সীমানার নির্ভরতা সম্পর্ক বিশ্লেষণ করে
sync এর পরে ব্যবহার করা প্রয়োজন এমন ভেরিয়েবল সনাক্ত করে (যেমন চিত্র ১ এ x এবং y)
এই ভেরিয়েবলগুলি বন্ধনে স্পষ্টভাবে সংরক্ষণ করতে হবে
३. কীওয়ার্ড প্রতিস্থাপন:
spawn কল স্থানে বন্ধন ঘোষণা সন্নিবেশ করায়
sync কে spawn_next কল দ্বারা প্রতিস্থাপন করে পরবর্তী ফাংশন
spawn এর রিটার্ন মান বন্ধন ক্ষেত্রে স্পষ্ট লেখায় পরিবর্তন করে
return বিবৃতি সংরক্ষণ করে, পরবর্তীতে send_argument এ রূপান্তরিত হতে পারে
রূপান্তর উদাহরণ (চিত্র ১ থেকে চিত্র ২):
// অন্তর্নিহিত (OpenCilk)
int x = cilk_spawn fib(n-1);
int y = cilk_spawn fib(n-2);
cilk_sync;
return x + y;
// স্পষ্ট (Cilk-1)
cont int x, y;
spawn_next sum(k, ?x, ?y); // ধারাবাহিকতা কাজ তৈরি করে
spawn fib(x, n-1); // x স্থানধারকে লেখে
spawn fib(y, n-2); // y স্থানধারকে লেখে
// ফাংশন সমাপ্ত, sync প্রয়োজন নেই
HardCilk একটি খোলা-উৎস FPGA TLP স্থাপত্য জেনারেটর, যা হার্ডওয়্যার কাজ-চুরি শিডিউলার প্রদান করে। Bombyx স্বয়ংক্রিয়ভাবে HardCilk এর প্রয়োজনীয় সমস্ত উপাদান তৈরি করে:
#PRAGMA BOMBYX DAE
struct node_t nd = *n; // মেমরি অ্যাক্সেস অপারেশন
// পরবর্তী কোড সম্পাদন কাজ হয়ে ওঠে
সংকলক স্বয়ংক্রিয়ভাবে:
१. চিহ্নিত লাইন স্বাধীন ফাংশনে নিষ্কাশন করে (মেমরি অ্যাক্সেস কাজ)
२. spawn কল দ্বারা প্রতিস্থাপন করে
३. sync সন্নিবেশ করায়
४. স্পষ্ট ফর্মে রূপান্তরের পরে, মেমরি অ্যাক্সেস কাজ সম্পাদন কাজের ধারাবাহিকতা spawn করে
१. Intel Thread Building Blocks (TBB): শিল্পে ব্যাপকভাবে ব্যবহৃত কাজ-সমান্তরাল লাইব্রেরি
२. Cilk Plus: Intel এর Cilk সম্প্রসারণ সংস্করণ
३. OpenCilk: সর্বশেষ Cilk ফ্রেমওয়ার্ক, পূর্ববর্তী ফ্রেমওয়ার্কের চেয়ে উচ্চতর কর্মক্ষমতা
१. ParallelXL: FPGA তে TLP এর প্রাথমিক স্থাপত্য ফ্রেমওয়ার্ক
२. HardCilk: Bombyx এর লক্ষ্য প্ল্যাটফর্ম, খোলা-উৎস FPGA TLP সিস্টেম, হার্ডওয়্যার কাজ-চুরি শিডিউলার প্রদান করে
१. Cilk-1: সর্বপ্রথম স্পষ্ট ধারাবাহিকতা-পাস ব্যবহার করা সংস্করণ
२. পরবর্তী সংস্করণ: অন্তর্নিহিত fork-join মডেলের দিকে রূপান্তরিত (সফটওয়্যার প্রোগ্রামিংয়ের জন্য আরও উপযুক্ত)
३. তাত্ত্বিক ভিত্তি: যেকোনো অন্তর্নিহিত প্রোগ্রাম স্পষ্ট ফর্মে রূপান্তরিত হতে পারে প্রমাণিত
१. Bombyx সফলভাবে OpenCilk থেকে FPGA হার্ডওয়্যারে স্বয়ংক্রিয় সংকলন প্রবাহ বাস্তবায়ন করে
२. স্পষ্ট ধারাবাহিকতা-পাস মডেল FPGA এর স্ট্রিমিং বৈশিষ্ট্যের জন্য উপযুক্ত, ব্যয়বহুল প্রসঙ্গ স্যুইচিং এড়ায়
३. DAE অপ্টিমাইজেশন গ্রাফ ট্রাভার্সাল বেঞ্চমার্কে २६.५% কর্মক্ষমতা উন্নতি অর্জন করে
४. সরঞ্জাম অন্যান্য হার্ডওয়্যার TLP ফ্রেমওয়ার্কে প্রসারিত করা যায়
१. DAE অপ্টিমাইজেশন ম্যানুয়াল নির্দেশনা প্রয়োজন: বর্তমানে প্রোগ্রামারদের pragma সন্নিবেশ করতে হয়, সম্পূর্ণ স্বয়ংক্রিয়করণ বাস্তবায়িত নয়
२. মূল্যায়ন সীমিত:
শুধুমাত্র একক বেঞ্চমার্ক পরীক্ষায় (গ্রাফ ট্রাভার্সাল)
অন্যান্য পদ্ধতির সাথে তুলনা অনুপস্থিত (যেমন ম্যানুয়াল কোড, অন্যান্য সংকলক)
আরও বৈচিত্র্যময় অ্যাপ্লিকেশন পরিস্থিতি পরীক্ষা করা হয়নি
३. সম্পদ ওভারহেড: DAE অপ্টিমাইজেশন প্রায় ५०% সম্পদ বৃদ্ধি নিয়ে আসে, যা বড় আকারের সিস্টেম সীমাবদ্ধ করতে পারে
४. অ্যাক্সেস কাজ বাস্তবায়ন: HLS দ্বারা উত্পন্ন অ্যাক্সেস PE দক্ষতা কম, RTL ব্যবহার সুপারিশ কিন্তু বাস্তবায়িত নয়
५. সরঞ্জাম পরিপক্কতা: গবেষণা প্রোটোটাইপ হিসাবে, সম্পূর্ণ ত্রুটি পরিচালনা এবং সীমান্ত কেস সমর্থন অনুপস্থিত
१. স্বয়ংক্রিয় DAE সনাক্তকরণ: সংকলক বিশ্লেষণ বিকাশ করে স্বয়ংক্রিয়ভাবে DAE অপ্টিমাইজেশনের জন্য উপযুক্ত কোড প্যাটার্ন সনাক্ত করে
२. RTL অ্যাক্সেস ইউনিট: দক্ষ RTL বাস্তবায়িত ডেটা-সমান্তরাল অ্যাক্সেস ইউনিট একীভূত করে
३. আরও অপ্টিমাইজেশন: অন্যান্য হার্ডওয়্যার-নির্দিষ্ট অপ্টিমাইজেশন অন্বেষণ করে (যেমন ডেটা পুনঃব্যবহার, স্থানীয়তা অপ্টিমাইজেশন)
४. লক্ষ্য সম্প্রসারণ: আরও হার্ডওয়্যার TLP ফ্রেমওয়ার্ক এবং HLS সরঞ্জাম সমর্থন করে
५. ব্যাপক মূল্যায়ন: আরও বেঞ্চমার্ক পরীক্ষায় মূল্যায়ন করে, বিভিন্ন ধরনের TLP অ্যাপ্লিকেশন অন্তর্ভুক্ত করে
१. গতিশীল কাজ-সমান্তরাল অ্যাপ্লিকেশন: গ্রাফ অ্যালগরিদম, গাছ ট্রাভার্সাল, গতিশীল প্রোগ্রামিং ইত্যাদি
२. মেমরি-নিবিড় গণনা: DAE অপ্টিমাইজেশন বিশেষভাবে মেমরি বটলনেক অ্যাপ্লিকেশনের জন্য উপযুক্ত
३. HardCilk ব্যবহারকারী: ইতিমধ্যে ব্যবহার করছেন বা HardCilk ব্যবহার পরিকল্পনা করছেন এমন বিকাশকারী
४. দ্রুত প্রোটোটাইপ: CPU TLP কোড দ্রুত FPGA তে স্থানান্তর করার প্রয়োজন
१. নিয়মিত সমান্তরাল: ডেটা-সমান্তরাল, পাইপলাইন ইত্যাদি যা গতিশীল সময়সূচী প্রয়োজন করে না
२. সম্পদ সীমাবদ্ধ: ५०% সম্পদ ওভারহেড অগ্রহণযোগ্য হতে পারে
३. চরম কর্মক্ষমতা: ম্যানুয়াল অপ্টিমাইজড RTL এখনও আরও ভাল হতে পারে
४. জটিল মেমরি প্যাটার্ন: জটিল পয়েন্টার, গতিশীল মেমরি সমর্থন অজানা
१. মূল্যায়ন সম্প্রসারণ: আরও বেঞ্চমার্ক যোগ করে (সর্টিং, অনুসন্ধান, বৈজ্ঞানিক গণনা ইত্যাদি)
२. কর্মক্ষমতা তুলনা: ম্যানুয়াল HLS কোড, CPU বাস্তবায়ন, GPU বাস্তবায়নের সাথে তুলনা করে
३. স্বয়ংক্রিয় DAE: সংকলক বিশ্লেষণ বিকাশ করে স্বয়ংক্রিয়ভাবে DAE সুযোগ সনাক্ত করে
४. অপ্টিমাইজেশন বৈচিত্র্য: আরও হার্ডওয়্যার অপ্টিমাইজেশন অন্বেষণ করে (ডেটা পুনঃব্যবহার, স্থানীয় ক্যাশিং ইত্যাদি)
५. আনুষ্ঠানিক যাচাইকরণ: রূপান্তর সঠিকতার জন্য আনুষ্ঠানিক নিশ্চয়তা প্রদান করে
६. খোলা-উৎস প্রকাশ: সম্প্রদায়ের অবদান এবং যাচাইকরণ প্রচার করতে সরঞ্জাম খোলা-উৎস করে
१. २ OpenCilk (PPoPP'२३): সর্বশেষ Cilk ফ্রেমওয়ার্ক, Bombyx এর ইনপুট ভাষা
२. ४ HardCilk (FCCM'२४): Bombyx এর লক্ষ্য প্ল্যাটফর্ম, লেখকদের পূর্ববর্তী কাজ
३. ५ Cilk-१ (SIGPLAN'९५): ক্লাসিক স্পষ্ট ধারাবাহিকতা-পাস TLP সিস্টেম, Bombyx এর তাত্ত্বিক ভিত্তি
४. ६ Joerg ডক্টরাল থিসিস (१९९६): অন্তর্নিহিত থেকে স্পষ্ট রূপান্তরের তাত্ত্বিক সম্ভাব্যতা প্রমাণ করে
সামগ্রিক মূল্যায়ন: Bombyx একটি মূল্যবান গবেষণা কাজ, যা OpenCilk থেকে FPGA হার্ডওয়্যার ত্বরণের স্বয়ংক্রিয় সরঞ্জাম শৃঙ্খলের ফাঁক পূরণ করে। এর মূল উদ্ভাবন Cilk-1 এর স্পষ্ট ধারাবাহিকতা-পাস মডেল ব্যবহার করে হার্ডওয়্যার প্রসঙ্গ স্যুইচিং এড়ানো এবং সম্পূর্ণ সংকলন প্রবাহ প্রদান করা। তবে, প্রাথমিক কাজ হিসাবে, পেপারটি পরীক্ষামূলক মূল্যায়নের প্রস্থ এবং গভীরতায় স্পষ্ট অপূর্ণতা রয়েছে, এবং DAE অপ্টিমাইজেশনের অর্ধ-স্বয়ংক্রিয়করণ সহজ ব্যবহারযোগ্যতা সীমাবদ্ধ করে। এই সরঞ্জামটি HardCilk ব্যবহারকারী এবং TLP গবেষকদের জন্য সরাসরি মূল্য রয়েছে, তবে ব্যাপক প্রয়োগের জন্য আরও পরিপক্ক হওয়া প্রয়োজন। পরবর্তী কাজ স্বয়ংক্রিয় অপ্টিমাইজেশন সনাক্তকরণ, বেঞ্চমার্ক মূল্যায়ন সম্প্রসারণ এবং সম্প্রদায়ের যাচাইকরণ এবং উন্নতি প্রচারের জন্য খোলা-উৎস প্রকাশের উপর ফোকাস করার পরামর্শ দেওয়া হয়।