Bend - GPU पर चलने वाली एक उच्च-स्तरीय भाषा (HVM2 का उपयोग)
(github.com/HigherOrderCO)- Bend एक उच्च-स्तरीय प्रोग्रामिंग भाषा है जो बड़े पैमाने की parallel processing को सपोर्ट करती है
- CUDA और Metal जैसे low-level विकल्पों के विपरीत, Bend Python और Haskell जैसी expressive languages जैसा अनुभव और सुविधाएँ देता है
- इसमें तेज object allocation, complete closure support वाले higher-order functions, unrestricted recursion, और यहाँ तक कि continuations भी शामिल हैं
- फिर भी यह GPU जैसे massively parallel hardware पर चलता है, और core की संख्या के अनुसार लगभग linear speedup दिखाता है
- किसी explicit parallel annotation की बिल्कुल ज़रूरत नहीं: thread creation, locks, mutexes, atomic operations की आवश्यकता नहीं होती
- Bend, HVM2 runtime द्वारा संचालित है
त्वरित डेमो
Bend का उपयोग
यह अभी Windows पर काम नहीं करता, विकल्प के रूप में WSL2 का उपयोग करना होगा।
- सबसे पहले, आपको Rust nightly इंस्टॉल करना होगा।
- फिर, HVM2 और Bend इंस्टॉल करने होंगे:
cargo +nightly install hvm cargo +nightly install bend-lang - अंत में, आप एक Bend फ़ाइल लिख सकते हैं और उसे नीचे दिए गए किसी एक कमांड से चला सकते हैं:
bend run # Rust interpreter का उपयोग (sequential) bend run-c # C interpreter का उपयोग (parallel) bend run-cu # CUDA interpreter का उपयोग (massively parallel) - अधिकतम performance के लिए आप
gen-cऔरgen-cuका उपयोग करके Bend को standalone C/CUDA फ़ाइलों में compile भी कर सकते हैं। हालाँकि, code generation अभी शुरुआती चरण में है, और GCC या GHC जैसे cutting-edge compilers जितना परिपक्व नहीं है।
Bend में parallel programming
- Bend में parallel program लिखने के लिए... आपको कुछ भी करने की ज़रूरत नहीं है। बस इसे स्वभावतः sequential न होने वाला लिखना चाहिए।
- उदाहरण के लिए, नीचे दिया गया expression parallel में execute नहीं हो सकता:
क्योंकि(((1 + 2) + 3) + 4)+4,+3पर निर्भर करता है, और+3,(1+2)पर निर्भर करता है। - लेकिन नीचे दिया गया expression parallel में execute हो सकता है:
क्योंकि((1 + 2) + (3 + 4))(1+2)और(3+4)स्वतंत्र हैं। Bend के मूल सिद्धांत के अनुसार, जो कुछ भी parallel में चल सकता है, वह parallel में चलेगा।
उदाहरण कोड
-
एक अधिक पूर्ण उदाहरण के रूप में, नीचे दिए गए कोड पर विचार करें:
# sorting network = tree rotation def sort(d, s, tree): switch d: case 0: return tree case _: (x, y) = tree lft = sort(d-1, 0, x) rgt = sort(d-1, 1, y) return rots(d, s, lft, rgt) # subtree rotation def rots(d, s, tree): switch d: case 0: return tree case _: (x, y) = tree return down(d, s, warp(d-1, s, x, y)) -
यह फ़ाइल immutable tree rotation का उपयोग करके एक bitonic sorter implement करती है। यह ऐसा algorithm नहीं है जिससे GPU पर तेज चलने की उम्मीद की जाए। लेकिन यह divide-and-conquer approach का उपयोग करता है, इसलिए यह स्वभावतः parallel है। Bend इसे multiple threads में चलाता है। कुछ benchmark:
- CPU, Apple M3 Max, 1 thread: 12.15 सेकंड
- CPU, Apple M3 Max, 16 threads: 0.96 सेकंड
- GPU, NVIDIA RTX 4090, 16k threads: 0.21 सेकंड
- 57x speedup बिना कुछ किए हासिल किया गया। thread creation, locks, mutexes का कोई explicit management नहीं। बस Bend से कहा गया कि program को RTX पर चलाए।
विभिन्न parallel systems का समर्थन
-
Bend tensor या matrix जैसे किसी विशेष paradigm तक सीमित नहीं है। shaders से लेकर Erlang जैसे actor model तक, हर parallel system को Bend में emulate किया जा सकता है।
-
उदाहरण के लिए, real time में image render करने के लिए, हर frame के लिए एक immutable tree allocate किया जा सकता है:
# shader दिए जाने पर, एक square image लौटाता है def render(depth, shader): bend d = 0, i = 0: when d < depth: color = (fork(d+1, i*2+0), fork(d+1, i*2+1)) else: width = depth / 2 color = shader(i % width, i / width) return color # position दिए जाने पर, color लौटाता है # इस demo में, यह सिर्फ busy loop चलाता है def demo_shader(x, y): bend i = 0: when i < 5000: color = fork(i + 1) else: color = 0x000001 return color # demo_shader का उपयोग करके 256x256 image render करें def main: return render(16, demo_shader) -
यह वास्तव में काम करता है। जटिल algorithms भी Bend में अच्छी तरह parallelize होते हैं। long-range communication global beta reduction (interaction combinators के अनुसार) से किया जाता है, और HVM2 के atomic linker द्वारा सही और कुशल रूप से synchronize किया जाता है।
अतिरिक्त सामग्री
- तुरंत शुरू करने के लिए, Bend की GUIDE.md देखें।
- features की सूची देखने के लिए, FEATURES.md देखें।
- Bend की तकनीक को समझने के लिए, HVM2 का paper देखें।
- Bend का विकास HigherOrderCO.com में किया गया है - Discord से जुड़ें।
GN⁺ की राय
- parallel programming का सरलीकरण: Bend parallel programming को बहुत सरल बनाता है, जिससे शुरुआती software engineers भी इसे आसानी से अपना सकते हैं। इससे parallel programming में प्रवेश की बाधा काफी कम हो जाती है।
- विविध hardware support: Bend सिर्फ CPU ही नहीं, बल्कि GPU पर भी कुशलता से चल सकता है, इसलिए इसे विभिन्न hardware environments में उपयोग किया जा सकता है।
- expressive language: Python और Haskell की खूबियों को मिलाकर यह expressive code लिखने देता है। इससे code readability और maintainability बेहतर होती है।
- शुरुआती चरण का code generation: फिलहाल Bend का code generation शुरुआती चरण में है, इसलिए mature compilers की तुलना में इसकी performance कम हो सकती है। यह भविष्य में सुधार की माँग करता है।
- विभिन्न parallel systems का समर्थन: Bend किसी एक विशेष paradigm तक सीमित नहीं है, और कई तरह के parallel systems को support करता है, जिससे flexible programming संभव होती है। इससे Bend को विभिन्न application क्षेत्रों में उपयोग किया जा सकता है।
1 टिप्पणियां
Hacker News राय
Hacker News टिप्पणियों के संक्षिप्त सार
Python और PyPy प्रदर्शन तुलना
सकारात्मक फ़ीडबैक
आलोचनात्मक राय
parallel programming को लेकर अपेक्षाएँ
प्रदर्शन तुलना
प्रोजेक्ट के विकास को लेकर उम्मीद
संदेहपूर्ण नज़रिया
सकारात्मक संभावनाएँ
Bend की भाषाई विशेषताएँ