موضوع مقاله: زبان برنامه‌نویسی آرایه‌ای | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # زبان برنامه‌نویسی آرایه‌ای | مقدمه: در علوم کامپیوتر، برنامه‌نویسی آرایه ای به راه حل‌هایی اشاره دارد که برنامه‌ها می‌توانند توسط آن یک سری عملیات را بر یک مجموعه مقادیر اعمال کنند. | ## بخش 1: زبان برنامه‌نویسی آرایه‌ای | (همچنین به عنوان زبانهای چند بعدی و برداری شناخته می‌شوند) مهندسی شده‌اند که به‌طور خاص برای تعمیم عملیات در مقیاس به اعمال شفاف در بردارها، ماتریس‌ها، و آرایه‌های بعدی بالاتر. در این زبانها، عملیاتی که روی کل آرایه‌ها عمل می‌کند را می‌توان یک عمل بردار نامید ، [۱] صرف نظر از اینکه روی پردازنده برداری اجرا می‌شود که دستورالعملهای برداری را اجرا می‌کند. برنامه‌نویسی آرایه به‌طور خلاصه ایده‌های گسترده‌ای را دربارهٔ دستکاری داده بیان می‌کند. سطح جمع‌بندی در موارد خاص می‌تواند چشمگیر باشد: یافتن زبان برنامه‌نویسی آرایه یک خطی که به چندین صفحه کد شی گرا نیاز دارد، غیرمعمول نیست. رتبه تابع یک مفهوم مهم برای زبانهای برنامه‌نویسی آرایه به‌طور کلی، به قیاس با رتبه تانسور در ریاضیات است: توابع که بر روی داده‌ها کار می‌کنند، ممکن است براساس تعداد ابعادی که عمل می‌کنند، طبقه‌بندی شوند. به عنوان مثال ضرب معمولی، یک تابع دارای رتبه‌بندی مقیاسی است زیرا با داده‌های صفر بعدی (اعداد منفرد) کار می‌کند. عملکرد محصول متقاطع نمونه ای از یک تابع مرتبه برداری است زیرا از طریق بردارها عمل می‌کند نه مقیاس پذیرها. | ## بخش 2: زبان برنامه‌نویسی آرایه‌ای | ضرب ماتریس مثالی از یک تابع ۲ درجه ای است، زیرا روی اشیا ۲ ۲ بعدی (ماتریس) عمل می‌کند. امروزه موضوع بسیاری از تحقیقات است بعلاوه، اینتل و پردازنده‌های سازگار پس از ۱۹۹۷ تولید و تولید شدند که حاوی پسوندهای مختلف مجموعه دستورالعمل‌ها بودند، از MMX شروع می‌شوند و از طریق SSSE3 و 3DNow ادامه می‌یابند!، که شامل قابلیت‌های اولیه آرایه SIMD است. پردازش آرایه از پردازش موازی متمایز است به این دلیل که یک پردازنده فیزیکی به‌طور همزمان بر روی گروهی از موارد کار می‌کند در حالی که پردازش موازی با هدف تقسیم یک مسئله بزرگتر به مشکلات کوچکتر (MIMD) انجام می‌شود تا توسط پردازنده‌های متعدد به صورت قطعه ای حل شود. زبانهای اسکالر در زبانهای اسکالر مانند C و Pascal، اعمال فقط در مقادیر منفرد اعمال می‌شوند، بنابراین a + b جمع دو عدد را بیان می‌کند. در چنین زبان‌هایی، افزودن یک آرایه به دیگری به نمایه سازی و حلقه نیاز دارد، کدگذاری آن خسته کننده است.for (i = 0; i <n; i++) for (j = 0; j <n; j++) a[i j] += b[i j];در زبانهای مبتنی بر آرایه، به عنوان مثال در Fortran، حلقه تو در تو در بالا می‌تواند در قالب آرایه در یک خط نوشته شود،a = a + bیا به جای آن، برای تأکید بر ماهیت آرایه اشیا،a(:,:) = a(:,:) + b(:,:) زبان‌های آرایه ای در زبان‌های آرایه، عملکردها به گونه ای تعمیم یافته‌اند که هم در مقیاس کش‌ها و هم در آرایه‌ها اعمال می‌شوند؛ بنابراین، a + b مجموع دو مقیاس دهنده را نشان می‌دهد اگر a و b مقیاس آور باشند، یا مجموع دو آرایه را اگر آرایه ای باشند بیان می‌کند. زبان آرایه برنامه‌نویسی را ساده می‌کند اما احتمالاً با هزینه ای است که به عنوان جریمه انتزاع شناخته می‌شود. از آنجا که اضافات جدا از بقیه برنامه‌نویسی انجام می‌شود، ممکن است کارآمدترین کد را تولید نکند. | ## بخش 3: زبان برنامه‌نویسی آرایه‌ای | در زیر، جمع، ضرب، جمع ماتریس و مقیاس، ضریب عنصر به عنصر، اشتراک و یکی از بسیاری از توابع ماتریس معکوس ماتا را نشان می‌دهیم.. نمونه Nial از محصول داخلی دو آرایه را می‌توان با استفاده از عملگر ضرب ماتریس بومی پیاده‌سازی کرد. اگر a بردار ردیفی به اندازه [1 n] باشد و b بردار ستونی مربوط به اندازه [n 1] باشد. a * b؛ این محصول داخلی بین دو ماتریس نیاز به همان تعداد از عناصر را می‌توان با استفاده از عملگر کمکی اجرا (:) ، که باعث تغییر شکل یک ماتریس داده شده را به بردار، و ترانهاده اپراتور ' : A(:)' * B(:); راسکل(Rasql) زبان پرس و جو rasdaman یک زبان برنامه‌نویسی آرایه ای پایگاه داده است. عبارات قبلی همچنین عبارات معتبر MATLAB هستند اگر عبارت سوم قبل از موارد دیگر اجرا شود (مقایسه عددی ممکن است نادرست باشد به دلیل خطاهای دور زدن). درک آخرین نکته آسان است هنگام بررسی مجدد معادل اسکالر a * x = b ، که برای آن راه حل x = a^-1 * b x = b / a به دو عمل نیاز دارد. مشکل این است که به‌طور کلی ضرب ماتریس می مبادلهای به عنوان گسترش راه حل عددی به صورت ماتریس نیاز: (a * x)/ a ==b / a (x * a)/ a ==b / a (اشتراکی برای ماتریس‌ها صدق نمی‌کند!) x * (a / a)==b / a (تداعی برای ماتریس‌ها نیز وجود دارد) x = b / a زبان MATLAB معرفی اپراتور چپ تقسیم \ برای حفظ بخش اساسی از قیاس با مورد اسکالر، بنابراین ساده استدلال ریاضی و حفظ اختصار: A \ (A * x)==A \ b (A \ A)* x ==A \ b (انجمنی برای ماتریس‌ها نیز وجود دارد، دیگر نیازی به اشتراکی نیست) x = A \ b این نه تنها نمونه ای از برنامه‌نویسی آرایه مختصر از نظر کدگذاری بلکه از منظر کارایی محاسباتی است که در چندین زبان برنامه‌نویسی آرایه از کتابخانه‌های جبر خطی کاملاً کارآمد مانند ATLAS یا LAPACK سود می‌برد. | ## جمع‌بندی | در C ++ چندین کتابخانه جبر خطی از توانایی زبان در اضافه بار اپراتورها سو explo استفاده می‌کنند.