آزمون بانرجی

از testwiki
نسخهٔ تاریخ ۲۴ مارس ۲۰۲۲، ساعت ۲۳:۳۹ توسط imported>Beginneruser (ربات: جایگزینی خودکار متن (-است . +است.))
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

در تئوری کامپایلر ، آزمون بانرجی یک آزمون وابستگی است. آزمون بانرجی فرض می‌کند که همه شاخص‌های حلقه مستقل هستند، اما در واقعیت، این اغلب نادرست است. آزمون بانرجی یک آزمون محافظه کارانه است. یعنی وابستگی را که وجود ندارد قطع نمی کند.

این بدان معنی است که تنها چیزی که آزمون می تواند تضمین کند عدم وجود وابستگی است.

ضد وابستگی شکسته شده است وابستگی واقعی شکسته شده است
درست وجود ندارد



ضد وابستگی ها
وجود ندارد



وابستگی های واقعی
نادرست ممکن است وجود داشته باشد یا نباشد


ضد وابستگی ها
ممکن است وجود داشته باشد یا نباشد



وابستگی های واقعی

فرم کلی

برای یک حلقه از فرم:

    for(i=0; i<n; i++) {
        c[f(i)] = a[i] + b[i]; /* عبارت s1 */
        d[i] = c[g(i)] + e[i];    /* عبارت s2 */
    }

یک وابستگی واقعی بین عبارت s1 و عبارت s2 وجود دارد اگر و فقط اگر :

i,j[0,n1]:ijandf(i)=g(j)

یک ضد وابستگی بین عبارت s1 و عبارت s2 وجود دارد اگر و فقط اگر :

i,j[0,n1]:i>jandf(i)=g(j)

برای یک حلقه از فرم:

   for(i=0; i<n; i++) {
        c[i] = a[g(i)] + b[i]; /* عبارت s1 */
        a[f(i)] = d[i] + e[i];    /* عبارت s2 */
    }

یک وابستگی واقعی بین عبارت s1 و عبارت s2 وجود دارد اگر و فقط اگر :

i,j[0,n1]:i<jandf(i)=g(j)

مثال

نمونه تست بانرجی.

حلقه ای که برای وابستگی آزموده میشود  :

    for(i=0; i<10; i++)  {
        c[i+9] = a[i] + b[i]; /*عبارت s1*/
        d[i] = c[i] + e[i];    /*عبارت s2*/
    }
Let f(i)=i+9

Let g(j)=j+0

بنابراین،

a0=9 , a1=1,b0=0 , b1=1

و

b0a0=9

آزمایش برای ضد وابستگی

Umax=max{a1×ib1×j} بطوریکه 0j<i<n

Umax=max{a1×ib1×j} بطوریکه 0ij<n

که می دهد:

Umax=99=0

Lmin=10=1

پس، محدودیت ها بر b0a0 هستند :

199

واضح است که -9 خارج از کران است ، بنابراین ضد وابستگی شکسته می شود.

تست درستی وابستگی

Lmin=min{a1×ib1×j} بطوریکه 0ij<n

آنگاه داریم :

Lmin=09=9

در حال حاضر، محدودیت ها روی b0a0 هستند :

990

واضح است که -9 داخل کران بدست آمده است ، بنابراین وابستگی واقعی شکسته نمی شود.

نتیجه

از آنجا که ضد وابستگی شکسته شد، می‌توان ادعا کرد که ضد وابستگی بین گزاره‌ها وجود ندارد.

وقتی وابستگی درست (واقعی) نقض نشده است ، نمی دانیم که آیا وابستگی واقعی بین گزاره ها وجود دارد یا خیر.

بنابراین، حلقه قابل موازی سازی است، اما عبارات باید به ترتیب وابستگی واقعی (بالقوه) آنها اجرا شوند.

همچنین ببینید

منابع

  • رندی آلن و کن کندی بهینه سازی کامپایلرها برای معماری های مدرن: رویکردی مبتنی بر وابستگی
  • لاستوتسکی، الکس. محاسبات موازی در شبکه های ناهمگن