آزمون بانرجی

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

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

فرم کلی 
برای یک حلقه از فرم:    for(i=0; i<n; i++) {
        c[f(i)] = a[i] + b[i]; /* عبارت s1 */
        d[i] = c[g(i)] + e[i];    /* عبارت s2 */
    }یک وابستگی واقعی بین عبارت s1 و عبارت s2 وجود دارد اگر و فقط اگر :

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

برای یک حلقه از فرم:   for(i=0; i<n; i++) {
        c[i] = a[g(i)] + b[i]; /* عبارت s1 */
        a[f(i)] = d[i] + e[i];    /* عبارت s2 */
    }یک وابستگی واقعی بین عبارت s1 و عبارت s2 وجود دارد اگر و فقط اگر :

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

حلقه ای که برای وابستگی آزموده میشود   :    for(i=0; i<10; i++)  {
        c[i+9] = a[i] + b[i]; /*عبارت s1*/
        d[i] = c[i] + e[i];    /*عبارت s2*/
    }

بنابراین،

و

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

 بطوریکه  

که می دهد:

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

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

تست درستی وابستگی 
 بطوریکه 

آنگاه داریم :

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

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

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

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

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

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

 تست GCD

منابع 

 رندی آلن و کن کندی بهینه سازی کامپایلرها برای معماری های مدرن: رویکردی مبتنی بر وابستگی

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