SlideShare a Scribd company logo
‫درس‬2-‫های‬ ‫عملیات‬
‫برداری‬
Fundamentals of Parallelism & Code Optimization
(C/C++,Fortran)
‫در‬ ‫کدها‬ ‫سازی‬ ‫بهینه‬ ‫و‬ ‫سازی‬ ‫موازی‬ ‫مبانی‬
‫زبانهای‬C/C++,Fortran
Amin Nezarat (Ph.D.)
Assistant Professor at Payame Noor University
aminnezarat@gmail.com www.astek.ir - www.hpclab.ir
‫عناوین‬
‫دوره‬
1.‫های‬ ‫پردازنده‬ ‫معماری‬ ‫با‬ ‫آشنایی‬
‫اینتل‬
2.Vectorization‫معماری‬ ‫در‬
‫اینتل‬ ‫کامپایلرهای‬
3.‫نویسی‬ ‫برنامه‬ ‫با‬ ‫کار‬ ‫و‬ ‫آشنایی‬
‫در‬OpenMP
4.‫با‬ ‫داده‬ ‫تبادل‬ ‫قواعد‬ ‫و‬ ‫اصول‬
‫حافظه‬(Memory Traffic)
‫درس‬2
‫عملیاتهای‬
‫برداری‬
‫بردار‬ ‫از‬ ‫پشتیبانی‬
‫کوتاه‬
‫برداری‬ ‫دستورالعملهای‬–‫های‬ ‫سازی‬ ‫پیاده‬ ‫از‬ ‫یکی‬
‫سازی‬ ‫موازی‬SIMD
‫ساده‬ ‫مثالی‬
‫برنامه‬ ‫کارایی‬ ‫افزایش‬ ‫باعث‬ ‫تواند‬ ‫می‬ ‫های‬ ‫حلقه‬ ‫سازی‬ ‫برداری‬
‫تعداد‬ ‫روی‬ ‫بر‬ ‫زمان‬ ‫یک‬ ‫در‬ ‫را‬ ‫عملیات‬ ‫یک‬ ‫که‬ ‫نحوی‬ ‫به‬ ،‫شود‬ ‫ها‬
‫دهد‬ ‫می‬ ‫انجام‬ ‫عنصر‬ ‫زیادی‬
Instruction Sets‫معماری‬ ‫در‬
‫اینتل‬
SSE= Streaming SIMD Extensions
AVX= Advanced Vector Extensions
IMCI=Initial Many Core Instructions
‫در‬ ‫سازی‬ ‫برداری‬
‫سیستمهای‬SIMD
‫استفاده‬‫از‬‫مدل‬SIMD‫باعث‬‫افزایش‬‫سرعت‬‫می‬‫شود‬.‫در‬‫معماری‬
‫های‬‫مختلفی‬‫که‬‫از‬‫برداری‬‫سازی‬‫پشتیبانی‬‫می‬‫کنند‬‫همزمانی‬
‫وجود‬‫دارد‬.‫از‬‫جمله‬‫این‬‫معماری‬‫ها‬‫در‬Intel‫می‬‫توان‬‫به‬‫سری‬
‫های‬‫بعد‬‫از‬SSE‫و‬‫در‬‫پردازنده‬‫های‬IBM‫به‬Altivec‫اشاره‬‫کرد‬.
‫مثال‬‫در‬‫یک‬ALU‫می‬‫توان‬4‫مقدار‬Single Precision‫یا‬2‫مقدار‬
Double Precision‫را‬‫به‬‫صورت‬‫برداری‬‫در‬‫همان‬‫زمانی‬‫که‬‫یک‬‫یک‬
‫عملیات‬‫اسکالر‬‫انجام‬‫می‬،‫دهد‬‫محاسبه‬‫کند‬.
‫را‬ ‫کدتان‬
Vectorize‫کنید‬
‫محاسبات‬ ‫کار‬ ‫گردش‬
‫برداری‬
. . .
. . .
. . .
‫کد‬ ‫سازی‬ ‫برداری‬:‫دو‬
‫رویکرد‬
Automatic Vectorization →
‫مربوطه‬ ‫زبان‬ ‫در‬ ‫سازی‬ ‫پیاده‬
← Explicit Vectorization
‫ماکرو‬ ‫با‬ ‫سازی‬ ‫پیاده‬
‫بهتر‬ ‫رویکرد‬ ‫کدام‬
‫است؟‬‫رویکرد‬‫خودکار‬(‫برداری‬‫سازی‬‫توسط‬‫کامپایلر‬)‫به‬
‫دالیل‬‫زیر‬‫بهتر‬‫است‬:
•‫ساده‬‫تر‬‫است‬
•‫قابل‬‫حمل‬‫بوده‬‫و‬‫به‬‫ماکروهای‬‫یک‬‫پردازنده‬
‫خاص‬‫وابسته‬‫نیست‬
•‫کارایی‬‫باالتری‬‫ایجاد‬‫می‬‫کند‬(‫کامپایلر‬‫کد‬‫را‬
‫بهینه‬‫می‬‫کند‬)
‫با‬‫افزودن‬‫روشهای‬‫برداری‬‫سازی‬
‫دستی‬‫توسط‬‫برنامه‬‫نویسان‬‫میزان‬
‫بهبود‬‫بیشتر‬‫خواهد‬‫شد‬‫و‬‫تا‬3.78
‫افزایش‬‫خواهد‬‫یافت‬
‫راهنمای‬Intel Intrinsics
https://software.intel.com/sites/landingpage/IntrinsicsGuide
‫بردارسازی‬
‫خودکار‬
‫خودکار‬ ‫سازی‬ ‫برداری‬ ‫مثال‬ ‫چند‬–‫بوسیله‬
Directive‫زبان‬ ‫های‬
‫خودکار‬ ‫سازی‬ ‫برداری‬ ‫مثال‬ ‫چند‬–‫تغییر‬
‫حلقه‬ ‫ترتیب‬ ‫در‬
‫خودکار‬ ‫سازی‬ ‫برداری‬
‫ها‬ ‫حلقه‬ ‫در‬
amin@astek% icpc autovec.cc -qopt-report
amin@astek% cat autovec.optrpt
...
LOOP BEGIN at autovec.cc(12,3)
remark #15399: vectorization support: unroll factor
set to 2 [autovec.cc(12,3)] remark #15300: LOOP
WAS VECTORIZED
[autovec.cc(12,3)] LOOP END
...
amin@astek% ./a.out 0 0 0
1 2 1
2 4 2
3 6 3
4 8 4
...
#include <cstdio>
int main(){
const int n=1024;
int A[n] attribute ((aligned(64)));
int B[n] attribute ((aligned(64)));
for (int i = 0; i < n; i++)
A[i] = B[i] = i;
// ‫شود‬ ‫می‬ ‫برداری‬ ‫خودکار‬ ‫صورت‬ ‫به‬ ‫حلقه‬ ‫این‬
for (int i = 0; i < n; i++)
A[i] = A[i] + B[i];
for (int i = 0; i < n; i++)
printf("%2d %2d %2dn",i,A[i],B[i]);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
‫برداری‬ ‫در‬ ‫محدودیتهایی‬
‫سازی‬‫خودکار‬
▷ Innermost loops*
▷ Known number of iterations
▷ No vector dependence
▷ Functions must be SIMD-enabled
* #pragma omp simd to override
‫از‬ ‫استفاده‬ ‫برای‬ ‫کد‬ ‫کردن‬ ‫هدفمند‬
‫معماری‬ ‫زیر‬ ‫یک‬
-x[code] to target specific processor architecture
-ax[code] for multi-architecture dispatch
Code Target architecture
MIC-AVX512 Intel Xeon Phi processors (KNL)
CORE-AVX512 Future Intel Xeon processors
CORE-AVX2 Intel Xeon processor E3/E5/E7 v3, v4 family
AVX Intel Xeon processor E3/E5 and E3/E5/E7 v2 family
SSE4.2 Intel Xeon processor 55XX, 56XX, 75XX and E7 family
host architecture on which the code is compiled
‫است‬ ‫ممکن‬ ‫خودکار‬ ‫سازی‬ ‫برداری‬
‫باشد‬ ‫پیچیده‬
for (int i = ii; i < ii + tileSize; i++) { // Auto-vectorized
//‫مسئله‬ ‫و‬ ‫نیوتن‬ ‫جاذبه‬ ‫قانون‬ N-Body
const float dx = particle.x[j] - particle.x[i]; // x[j] is a const
const float dy = particle.y[j] - particle.y[i]; // x[i] -> vector
const float dz = particle.z[j] - particle.z[i];
const float rr = 1.0f/sqrtf(dx*dx + dy*dy + dz*dz + softening);
const float drPowerN32 = rr*rr*rr;
// Calculate the net force Fx[i-ii] += dx *
drPowerN32; Fy[i-ii] += dy * drPowerN32;
Fz[i-ii] += dz * drPowerN32;
}
1
2
3
4
5
6
7
8
9
10
11
12
‫برداری‬ ‫مدیریت‬
‫خودکار‬ ‫سازی‬
‫با‬ ‫بیشتر‬ ‫های‬ ‫حلقه‬ ‫سازی‬ ‫برداری‬
#pragma omp simd
Used to “enforce vectorization of loops”, which includes:
▷ Loops with SIMD-enabled functions
▷ Second innermost loops
▷ Failed vectorization due to compiler decision
▷ Where guidance is required (vector length, reduction, etc.)
See OpenMP reference for syntax; #pragma simd
‫برای‬ ‫مثالی‬#pragma omp
simd
const int N=128, T=4;
float A[N*N], B[N*N], C[T*T];
for (int jj = 0; jj < N; jj+=T) // Tile in j
for (int ii = 0 ; ii < N; ii+=T) // and tile in i
#pragma omp simd // Vectorize outer loop
for (int k = 0; k < N; ++k) // long loop, vectorize it
for (int i = 0 ; i < T; i++) { // Loop between ii and ii+T
// Instead of a loop between jj and jj+T, unrolling that loop:
C[0*T + i] += A[(jj+0)*N + k]*B[(ii+i)*N + k];
C[1*T + i] += A[(jj+1)*N + k]*B[(ii+i)*N + k];
C[2*T + i] += A[(jj+2)*N + k]*B[(ii+i)*N + k];
C[3*T + i] += A[(jj+3)*N + k[*B[(ii+i)*N + k];
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Directive‫برای‬ ‫هایی‬
‫سازی‬ ‫برداری‬
‫ماکروها‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫سازی‬ ‫برداری‬-
‫روش‬Intrinsics‫اینتل‬ ‫معماری‬ ‫در‬
‫ماکروها‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫سازی‬ ‫برداری‬-‫روش‬Intrinsics
‫معماری‬ ‫در‬IBM
‫توابعی‬‫که‬
‫قابلیت‬SIMD
‫دارند‬
‫قابلیت‬ ‫که‬ ‫توابعی‬
SIMD‫دارند‬
Define function in one file (e.g., library), use in another
‫قابلیت‬ ‫با‬ ‫توابع‬SIMD‫می‬
‫باشند‬ ‫پیچیده‬ ‫تواند‬
#pragma omp declare simd
float MyErfElemental(const float inx){
const float x = fabsf(inx); // Absolute value (in each vector lane)
const float p = 0.3275911f; // Constant parameter across vector lanes
const float t = 1.0f/(1.0f+p*x); // Expression in each vector lanes
const float l2e = 1.442695040f; // log2f(expf(1.0f))
const float e = exp2f(-x*x*l2e); // Transcendental in each vector lane
float res = -1.453152027f + 1.061405429f*t; // Computing a polynomial
res = 1.421413741f + t*res;
res =-0.284496736f + t*res;
res = 0.254829592f + t*res;
res *= e;
res = 1.0f - t*res; // Analytic approximation in each vector lane
return copysignf(res, inx); // Copy sign in each vector lane
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
‫برداری‬ ‫سازی‬ ‫پیاده‬ ‫در‬ ‫آنچه‬
‫است‬ ‫درست‬
▷ True vector dependence – vectorization impossible:
for (int i = 1; i < n; i++)
a[i] += a[i-1]; // dependence on the previous element
for (int i = 0; i < n-1; i++)
a[i] += a[i+1]; // no dependence on the previous element
for (int i = 16; i < n; i++)
a[i] += a[i-16]; // no dependence if vector length <=16
▷ Safe to vectorize:
▷ May be safe to vectorize:
‫وابستگی‬ ‫برای‬ ‫فرضیاتی‬
‫بردار‬ ‫به‬
Not enough information to confirm or rule out vector dependence:
void AmbiguousFunction(int n, int *a, int *b) {
for (int i = 0; i < n; i++)
a[i] = b[i];
}
‫گزاره‬S‫به‬T‫اگر‬ ‫دارد‬ ‫وابستگی‬:
•‫اسکالر‬ ‫برنامه‬ ‫یک‬ ‫در‬T‫از‬ ‫قبل‬
S‫شود‬ ‫اجرا‬
•‫دوی‬ ‫هر‬S‫و‬T‫داده‬ ‫یک‬ ‫به‬
‫کنند‬ ‫پیدا‬ ‫دسترسی‬
•‫ها‬ ‫دسترسی‬ ‫از‬ ‫یکی‬ ‫حداقل‬Write
1
2
3
4
‫داده‬ ‫وابستگی‬
‫ها‬
‫کرد‬ ‫فرض‬ ‫زیر‬ ‫صورت‬ ‫به‬ ‫توان‬ ‫می‬ ‫را‬ ‫ممکن‬ ‫های‬ ‫وابستگی‬ ‫انواع‬
‫وابستگی‬
‫شناور‬(‫درست‬ ‫وابستگی‬)
‫وابسته‬ ‫غیر‬
‫خروجی‬ ‫به‬ ‫وابستگی‬
‫حلقه‬ ‫در‬ ‫ها‬ ‫داده‬ ‫وابستگی‬–‫بررسی‬
‫سناریو‬ ‫چند‬(1)
‫حلقه‬ ‫در‬ ‫وابستگی‬ ‫غیر‬
‫کنیم‬ ‫می‬ ‫گسترده‬ ‫را‬ ‫حلقه‬ ،‫وابستگی‬ ‫بررسی‬ ‫برای‬
‫حلقه‬ ‫در‬ ‫ها‬ ‫داده‬ ‫وابستگی‬–‫چند‬ ‫بررسی‬
‫سناریو‬(2)
‫وابستگی‬ ‫دارای‬ ‫حلقه‬
‫مستقل‬
‫وابستگی‬ ‫دارای‬ ‫حلقه‬
‫و‬ ‫ای‬ ‫داده‬ ‫های‬ ‫وابستگی‬
‫سازی‬ ‫برداری‬
•‫برای‬ ‫مناسبی‬ ‫راهنمای‬ ‫تواند‬ ‫می‬ ‫ای‬ ‫داده‬ ‫وابستگی‬
‫باشد‬ ‫سازی‬ ‫برداری‬
•‫به‬ ‫گرافی‬ ‫وابستگی‬ ‫دارای‬ ‫که‬ ‫حلقه‬ ‫درون‬ ‫گزاره‬ ‫یک‬
‫شود‬ ‫برداری‬ ‫تواند‬ ‫می‬ ‫نباشد‬ ‫خود‬
‫و‬ ‫ای‬ ‫داده‬ ‫های‬ ‫وابستگی‬
‫سازی‬ ‫برداری‬
‫خود‬ ‫به‬ ‫گرافی‬ ‫وابستگی‬ ‫وجود‬ ‫زمان‬ ‫در‬(Cycle)‫سازی‬ ‫برداری‬
‫است‬ ‫امکانپذیر‬ ‫زیر‬ ‫روشهای‬ ‫از‬ ‫یکی‬ ‫با‬:
•‫شود‬ ‫خارج‬ ‫سایکل‬ ‫از‬ ‫که‬ ‫نحوی‬ ‫به‬ ‫گزاره‬ ‫کردن‬ ‫توزیع‬
•‫وابستگی‬ ‫حذف‬
•Freeze‫جلقه‬ ‫کردن‬
•‫الگوریتم‬ ‫تغییر‬
‫کردن‬ ‫توزیع‬
‫گزاره‬
‫وابستگی‬ ‫حذف‬
Freeze‫کردن‬
‫حلقه‬
‫گرفتن‬ ‫نادیده‬(‫یا‬Freezing)‫بیرونی‬ ‫حلقه‬
‫تغییر‬
‫الگوریتم‬
‫رخدادها‬ ‫باز‬ ‫شناسایی‬ ‫برای‬ ‫کامپایلر‬(Cycle)‫سری‬ ‫یک‬ ‫از‬
‫را‬ ‫حلقه‬ ‫موازی‬ ‫نسخه‬ ‫و‬ ‫کرده‬ ‫استفاده‬ ‫الگوها‬
‫کنند‬ ‫می‬ ‫قبلی‬ ‫نسخه‬ ‫جایگزین‬
‫است‬ ‫رخدادها‬ ‫باز‬ ‫از‬ ‫مثالهایی‬ ‫زیر‬ ‫موارد‬:
Multiversioned
amin@astek% icpc -c code.cc -qopt-report
amin@astek% cat code.optrpt
...
LOOP BEGIN at code.cc(4,1)
<Multiversioned v1>
remark #25228: LOOP WAS VECTORIZED LOOP END
...
LOOP BEGIN at code.cc(4,1)
<Multiversioned v2>
remark #15304: loop was not vectorized: non-vectorizable loop instance
..
LOOP END
Pointers checked for aliasing runtime to choose code path.
Multiversioned
Prevent multiversioning or allow vectorization with a directive:
#pragma ivdep
for (int i = 0; i < n; i++)
// ...
amin@astek% icpc -c code.cc -qopt-report -qopt-report-phase:vec
amin@astek% cat vdep.optrpt
...
LOOP BEGIN at code.cc(4,1)
remark #25228: LOOP WAS VECTORIZED LOOP END
...
Alternative: keyword restrict – more fine-grained, weaker.
Strip-Mining
Strip-Minig‫برداری‬ ‫برای‬
‫سازی‬
▷‫به‬ ‫را‬ ‫حلقه‬ ‫یک‬ ‫که‬ ‫نویسی‬ ‫برنامه‬ ‫تکنیکهای‬
‫کند‬ ‫می‬ ‫تبدیل‬ ‫تودرتو‬ ‫حلقه‬ ‫دو‬
▷‫برداری‬ ‫برای‬ ‫را‬ ‫بیشتری‬ ‫فرصتهای‬ ‫تکنیک‬ ‫این‬
‫کند‬ ‫می‬ ‫فراهم‬ ‫سازی‬
▷‫اندازه‬Strip‫معادل‬ ‫باید‬Register‫باشد‬ ‫سیستم‬Original: Strip-mined:
for (int i = 0; i < n; i++ ){
// ... do work
}
const int STRIP=1024;
const int nPrime = n - n%STRIP;
for (int ii=0; ii<nPrime; ii+=STRIP(
for (int i=ii; i<ii+STRIP; i++ )
// ... do work
for (int i=nPrime; i<n; i++)
// ... do work
‫مثال‬:Stencil
Code
Stencil Operators
▷ Linear systems of equations
▷ Partial differential equations
Fluid dynamics, heat transfer, image processing (convolution
matrix), cellular automata.
‫لبه‬ ‫تشخیص‬
‫استنسیل‬ ‫الگوریتم‬ ‫پایه‬ ‫سازی‬ ‫پیاده‬
‫لبه‬ ‫تشخیص‬ ‫در‬
float *in, *out; // Input and output images
int width, height; // Dimensions of the input image
// Image convolution with the edge detection stencil kernel:
for (int i = 1; i < height-1; i++)
for (int j = 1; j < width-1; j++)
out[i*width + j] =
-in[(i-1)*width + j-1] - in[(i-1)*width + j] - in[(i-1)*width + j+1]
-in[(i)*width + j-1] + 8*in[(i)*width + j] - in[(i)*width + j+1]
-in[(i+1)*width + j-1] - in[(i+1)*width + j] - in[(i+1)*width + j+1]
‫الگوریتم‬ ‫سازی‬ ‫برداری‬
‫لبه‬ ‫تشخیص‬
amin@astek% icpc -c -qopt-report=5 -xMIC-AVX512 stencil.cc
1 for (int i = 1; i < height-1; i++)
2 #pragma omp simd
3 for (int j = 1; j < width-1; j++) out[i*width + j] =
4 -in[(i-1)*width + j-1] - in[(i-1)*width + j] - in[(i-1)*width + j+1]
5 -in[(i)*width + j-1] + 8*in[(i)*width + j] - in[(i)*width + j+1]
6 -in[(i+1)*width + j-1] -in[(i+1)*width + j] - in[(i+1)*width + j+1];
‫کارایی‬
‫مثال‬:
‫انتگرال‬‫عددی‬
‫نیمه‬ ‫روش‬
‫مستطیلی‬
‫سازی‬ ‫پیاده‬
‫اسکالر‬
double BlackBoxFunction(double x);
...
const double dx = a/(double)n;
double integral = 0.0;
for (int i = 0; i < n; i++){
const double xip12 = dx*((double)i +0.5);
const double dI = BlackBoxFunction(xip12)*dx; integral += dI;
}
‫سازی‬ ‫پیاده‬
‫برداری‬
1 #pragma omp declare simd
2 double BlackBoxFunction(double x);
3 ...
4 const double dx = a/(double)n;
5 double integral = 0.0;
7 #pragma omp simd reduction(+: integral)
8 for (int i = 0; i < n; i++) {
9 const double xip12 = dx*((double)i + 0.5);
10 const double dI = BlackBoxFunction(xip12)*dx;
11 integral += dI;
12 }
‫کارایی‬
‫حلقه‬ ‫تبدیل‬
‫تبدیل‬ ‫روشهای‬ ‫انواع‬
‫حلقه‬
‫باشند‬ ‫می‬ ‫زیر‬ ‫شرح‬ ‫به‬ ‫حلقه‬ ‫تبدیل‬ ‫روشهای‬ ‫انواع‬:
• Compiler Directives
• Loop Distribution or loop fission
• Reordering Statements
• Node Splitting
• Scalar expansion
• Loop Peeling
• Loop Fusion
• Loop Unrolling
• Loop Interchanging
‫دایرکتیوهای‬
‫کامپایلر‬
‫عملیات‬ ‫خودکار‬ ‫صورت‬ ‫به‬ ‫توانند‬ ‫نمی‬ ‫کامپایلرها‬ ‫که‬ ‫زمانی‬
‫از‬ ‫استفاده‬ ‫با‬ ‫توان‬ ‫می‬ ‫کنند‬ ‫گیری‬ ‫تصمیم‬ ‫را‬ ‫سازی‬ ‫برداری‬
‫عمل‬ ‫انجام‬ ‫به‬ ‫مجبور‬ ‫را‬ ‫کامپایلر‬ ،‫دایرکتیوها‬ ‫سری‬ ‫یک‬
‫کرد‬ ‫سازی‬ ‫برداری‬
•‫که‬ ‫زمانی‬ ‫در‬ ‫تواند‬ ‫می‬ ‫حلقه‬ ‫این‬K<-3‫و‬K>=0
‫شود‬ ‫برداری‬ ‫است‬
•‫که‬ ‫داند‬ ‫می‬ ‫نویس‬ ‫برنامه‬k>=0‫است‬
•‫افزودن‬ ‫با‬#pragma ivdep‫می‬ ‫کامپایلر‬ ‫به‬
‫های‬ ‫وابستگی‬ ‫از‬ ‫تواند‬ ‫می‬ ‫که‬ ‫گوییم‬
‫کند‬ ‫صرفنظر‬ ‫ناشناخته‬
‫در‬
‫اینتل‬
‫در‬
IBM
Reordering Statements
Node Splitting
Scalar Expansion
Loop Peeling
•‫حذف‬‫اول‬(‫ین‬)‫یا‬‫آخر‬(‫ین‬)‫تکرار‬‫از‬‫حلقه‬‫و‬‫انتقال‬‫آن‬‫به‬
‫خارج‬‫حلقه‬
•‫زمانی‬‫که‬‫تعداد‬‫تکرار‬‫حلقه‬‫از‬‫قبل‬‫مشخص‬‫شده‬،‫نیست‬‫این‬
‫عمل‬‫می‬‫تواند‬‫باعث‬‫محافظت‬‫کد‬‫از‬‫تستهای‬‫زمان‬‫اجرا‬‫شود‬
‫روشهای‬ ‫سایر‬
‫وابستگی‬ ‫حذف‬
‫داده‬
Reductions
Reduction‫یک‬ ‫از‬ ‫عناصری‬ ‫بر‬ ‫که‬ ‫جمع‬ ‫همانند‬ ‫است‬ ‫عملیات‬ ‫یک‬
‫شود‬ ‫می‬ ‫استفاده‬ ‫تجمیعی‬ ‫نتایج‬ ‫تولید‬ ‫منظور‬ ‫به‬ ‫آرایه‬.
‫مثال‬ ‫دو‬:
‫متغیرهای‬
‫استقرایی‬
‫یک‬ ‫نقش‬ ‫در‬ ‫تواند‬ ‫می‬ ‫که‬ ‫است‬ ‫متغیری‬ ‫استقرایی‬ ‫متغیر‬
‫شود‬ ‫نمایان‬ ‫حلقه‬ ‫تکرار‬ ‫متغیرهای‬ ‫از‬ ‫تابع‬
‫اما‬ ‫کنند‬ ‫می‬ ‫کار‬ ‫یک‬ ‫کد‬ ‫تکه‬ ‫دو‬ ‫این‬...
Data Alignment
‫می‬ ‫حافظه‬ ‫در‬ ‫آدرس‬ ‫و‬ ‫مقدار‬ ‫خصوصیت‬ ‫دو‬ ‫دارای‬ ‫داده‬ ‫هر‬
‫در‬ ‫داده‬ ‫یک‬ ‫آدرس‬ ‫که‬ ‫است‬ ‫مفهوم‬ ‫بدین‬ ‫داده‬ ‫ترازبندی‬ ،‫باشد‬
‫اعداد‬ ‫بر‬ ‫پردازنده‬ ‫آن‬ ‫معماری‬ ‫مدل‬ ‫به‬ ‫توجه‬ ‫با‬ ‫حافظه‬
1،2،4،8،16،32،64‫است‬ ‫پذیر‬ ‫تقسیم‬.‫داده‬ ‫یک‬ ‫آدرس‬ ‫اگر‬ ‫مثال‬
‫حافظه‬ ‫در‬1244098‫ترازبندی‬ ‫بر‬ ‫مبتنی‬ ‫داده‬ ‫یعنی‬ ‫باشد‬4
‫به‬ ‫پردازنده‬ ‫ارجاع‬ ‫بار‬ ‫هر‬ ‫در‬ ‫که‬ ‫معنی‬ ‫بدین‬ ،‫است‬ ‫بایتی‬
‫حافظه‬4‫شود‬ ‫می‬ ‫خوانده‬ ‫یکجا‬ ‫صورت‬ ‫به‬ ‫بایت‬.
Data Alignment
‫معماری‬ ‫در‬SSE‫تا‬ ‫های‬ ‫داده‬ ‫اینتل‬128‫است‬ ‫تعریف‬ ‫قابل‬ ‫بیت‬
‫که‬ ‫معنی‬ ‫بدین‬8‫داده‬16‫بایتی‬Single Precision‫یا‬4‫داده‬32
‫بایتی‬Double Precision
•‫ترازبندی‬ ‫یک‬ ‫زیر‬ ‫مثال‬16‫تعریف‬ ‫این‬ ،‫دهد‬ ‫می‬ ‫نشان‬ ‫را‬ ‫دستی‬ ‫بایتی‬
‫ترتیب‬ ‫با‬ ‫پایه‬ ‫آدرس‬ ‫که‬ ‫است‬ ‫معنی‬ ‫بدین‬16‫رود‬ ‫می‬ ‫جلو‬ ‫تایی‬
•‫آرایه‬ ‫سه‬ ‫هر‬ ‫هم‬ ‫مثال‬ ‫این‬ ‫در‬a,b,c‫ترازبندی‬ ‫با‬
16‫کنند‬ ‫می‬ ‫حرکت‬ ‫حافظه‬ ‫در‬ ‫بایتی‬
Data Alignment‫داده‬ ‫نوع‬ ‫در‬
Struct
•‫های‬ ‫آرایه‬A,B‫مبنای‬ ‫بر‬16‫اند‬ ‫نشده‬ ‫ترازبندی‬ ‫بایتی‬
Data Alignment‫داده‬ ‫نوع‬ ‫در‬
Struct
•‫گفت‬ ‫کامپایلر‬ ‫به‬ ‫توان‬ ‫می‬ ‫کد‬ ‫به‬ ‫ترازبندی‬ ‫صفت‬ ‫افزودن‬ ‫با‬
‫شود‬ ‫انجام‬ ‫مبنایی‬ ‫چه‬ ‫بر‬ ‫ترازبندی‬ ‫که‬
Aliasing
‫حلقه‬ ‫تواند‬ ‫می‬ ‫کامپایلر‬ ‫آیا‬
‫کند؟‬ ‫می‬ ‫برداری‬ ‫را‬ ‫زیر‬
•a‫و‬b‫هستند‬ ‫یکدیگر‬ ‫مستعار‬
•‫وابستگی‬ ‫یک‬Self-True‫افتاده‬ ‫اتفاق‬
‫است‬
•‫و‬ ‫غیرمجاز‬ ‫حلقه‬ ‫این‬ ‫سازی‬ ‫برداری‬
‫است‬ ‫پرهزینه‬
Aliasing
•‫برای‬‫برداری‬،‫سازی‬‫کامپایلر‬‫باید‬‫اطمینان‬‫یابد‬‫که‬‫بر‬‫روی‬
‫پوینتر‬‫ها‬aliasing‫اتفاق‬‫نمی‬‫افتد‬
•‫اگر‬‫کامپایلر‬‫نداند‬‫که‬‫دو‬‫پوینتر‬alias‫می‬‫شوند‬‫و‬‫کد‬‫را‬
‫برداری‬‫کند‬‫هزینه‬‫چک‬‫کردن‬‫بسیار‬‫زیاد‬‫و‬‫معادل‬‫خواهد‬
‫شد‬‫که‬n‫تعداد‬‫پوینترهاست‬
•‫اگر‬‫تعداد‬‫پوینترها‬‫در‬‫کد‬‫زیاد‬‫باشند‬‫کامپایلر‬‫ممکن‬‫است‬
‫تصمیم‬‫بگیرد‬‫که‬‫برداری‬‫سازی‬‫را‬‫انجام‬‫ندهد‬
‫زمان‬ ‫کنترلهای‬ ‫از‬ ‫جلوگیری‬ ‫برای‬ ‫حل‬ ‫راه‬ ‫دو‬
‫دارد‬ ‫وجود‬ ‫اجرا‬
1-‫های‬ ‫آرایه‬Static‫و‬Global
2-‫از‬ ‫استفاده‬__restrict__ attribute
Aliasing
‫های‬ ‫آرایه‬Static‫و‬Global
Aliasing
‫از‬ ‫استفاده‬__restrict__ attribute
‫عنوان‬
‫راهکار‬ ‫اگر‬__restrict__‫بعدی‬ ‫دو‬ ‫های‬ ‫آرایه‬ ‫سازی‬ ‫برداری‬
‫روشهای‬ ‫از‬ ،‫نکرد‬ ‫فعال‬ ‫را‬
‫کنید‬ ‫استفاده‬ ‫زیر‬:
1-‫های‬ ‫آرایه‬ ‫تعریف‬Static or Global
2-‫از‬ ‫استفاده‬ ‫و‬ ‫ارایه‬ ‫کردن‬ ‫خطی‬__restrict__
3-‫از‬ ‫استفاده‬directive‫کامپایلر‬ ‫های‬
Non-Unit Stride
‫از‬ ‫ای‬ ‫آرایه‬ ‫که‬ ‫کنید‬ ‫فرض‬Struct‫داریم‬
‫کنیم‬ ‫می‬ ‫تعریف‬ ‫معمولی‬ ‫آرایه‬ ‫صورت‬ ‫به‬ ‫را‬ ‫آن‬ ‫حال‬
‫از‬ ‫دیگر‬ ‫مثالی‬Non-
Unit Stride
‫های‬ ‫گزاره‬
‫شرطی‬
‫دایرکتیو‬ ‫شرط‬ ‫حاوی‬ ‫های‬ ‫حلقه‬#pragma vector
always‫دارند‬ ‫نیاز‬ ‫را‬
•‫برداری‬ ‫آیا‬ ‫که‬ ‫داند‬ ‫نمی‬ ‫کامپایلر‬ ‫که‬ ‫آنجا‬ ‫از‬
‫خیر‬ ‫یا‬ ‫بود‬ ‫خواهد‬ ‫سودمند‬ ‫سازی‬
•‫کند‬ ‫ممانعت‬ ‫استثنا‬ ‫حالت‬ ‫یک‬ ‫از‬ ‫است‬ ‫ممکن‬ ‫شرط‬
•،‫حال‬ ‫این‬ ‫در‬ ‫حلقه‬ ‫سازی‬ ‫برداری‬ ‫صورت‬ ‫در‬
‫کند‬ ‫می‬ ‫حذف‬ ‫را‬ ‫شرط‬ ‫کامپایلر‬
‫های‬ ‫گزاره‬
‫شرطی‬
‫حلقه‬ ‫از‬ ‫شرط‬ ‫حذف‬
‫سایر‬Directive‫های‬
‫کامپایلر‬
‫خودکار‬ ‫صورت‬ ‫به‬ ‫را‬ ‫ها‬ ‫حلقه‬ ‫از‬ ‫بسیاری‬ ‫کامپایلر‬
‫تواند‬ ‫نمی‬ ‫نیز‬ ‫را‬ ‫تعدادی‬ ‫اما‬ ‫کند‬ ‫می‬ ‫برداری‬
‫از‬ ‫توان‬ ‫می‬ ‫منظور‬ ‫همین‬ ‫به‬ ،‫کند‬ ‫گیری‬ ‫تصمیم‬directive
‫کرد‬ ‫استفاده‬ ‫ها‬
‫سایر‬Directive‫های‬
‫کامپایلر‬
‫چه‬ ‫سازی‬ ‫برداری‬ ‫از‬ ‫بعد‬
‫کنیم‬ ‫کار‬
‫برداری‬‫سازی‬‫عملیاتهای‬‫ریاضی‬‫کم‬‫هزینه‬
،‫است‬‫اما‬‫دسترسی‬‫به‬‫حافظه‬‫خیلی‬‫پر‬
‫هزینه‬‫است‬.
‫ا‬،‫نکنید‬ ‫بهینه‬ ‫را‬ ‫کش‬ ‫از‬ ‫استفاده‬ ‫شما‬ ‫گر‬
‫بود‬ ‫خواهد‬ ‫فایده‬ ‫کم‬ ‫نیز‬ ‫سازی‬ ‫برداری‬.
‫به‬ ‫دسترسی‬ ‫نام‬ ‫به‬ ‫ای‬ ‫مسئله‬ ‫با‬ ‫شما‬
‫بود‬ ‫خواهید‬ ‫طرف‬ ‫حافظه‬.
02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir
‫پشتیبان‬ ‫مطالب‬
‫گیری‬ ‫اندازه‬
‫اجرا‬ ‫زمان‬
‫کن‬ ‫اضافه‬ ‫اجرا‬ ‫زمان‬ ‫افزایش‬ ‫برای‬ ‫خارجی‬ ‫حلقه‬ ‫یک‬
‫را‬ ‫خارجی‬ ‫تابع‬ ‫یک‬
‫اضافه‬ ‫حلقه‬ ‫درون‬
‫از‬ ‫تمرکز‬ ‫که‬ ‫کنید‬
‫خارج‬ ‫حلقه‬‫شود‬
‫چگونه‬
‫کنیم‬ ‫کامپایل‬
icpc yourcode.cc -o youroutput.out -qopt-report=n -xCORE-AVX2
n‫را‬ ‫خروجی‬ ‫گزارش‬ ‫سطح‬ ‫که‬ ‫است‬ ‫عددی‬
‫دهد‬ ‫می‬ ‫نشان‬:
0‫گزارش‬ ‫بدون‬
1‫شده‬ ‫برداری‬ ‫حلقه‬ ‫خط‬ ‫شماره‬ ‫صرفا‬
‫دهد‬ ‫می‬ ‫را‬
2‫تا‬5‫از‬ ‫را‬ ‫بیشتری‬ ‫جزئیات‬
‫دهد‬ ‫می‬ ‫سازی‬ ‫برداری‬ ‫فرایند‬
‫با‬ ‫همنام‬ ‫گزارشی‬ ‫کامپایل‬ ‫از‬ ‫پس‬
‫پسوند‬ ‫و‬ ‫کد‬ ‫فایل‬optrpt‫می‬ ‫ساخته‬
‫شود‬
•‫کدهای‬ ‫کامپایل‬ ‫برای‬c++‫کامپایلر‬ ‫در‬gnu
g++ -O2 -ftree-vectorize -ftree-vectorizer-verbose=n –msse4 -S -c yourcode.cpp
‫کنید‬ ‫کلیک‬ ‫بیشتر‬ ‫راهنمایی‬ ‫برای‬
‫معمار‬
‫ی‬
code Targetarchitecture
MIC-AVX512 Intel Xeon Phi processors (KNL)
CORE-AVX512 Future Intel Xeonprocessors
CORE-AVX2 Intel Xeon processor E3/E5/E7 v3, v4family
AVX Intel Xeon processor E3/E5 and E3/E5/E7 v2family
SSE4.2 Intel Xeon processor 55XX, 56XX,75XX and E7family
host architecture on which the code is compiled
‫ضرب‬ ‫مثال‬
‫ها‬ ‫ماتریس‬
•‫یافت‬ ‫بهبود‬ ‫کد‬ ‫این‬ ‫مرحله‬ ‫دو‬ ‫طی‬
1-‫افزودن‬Directive‫کد‬ ‫به‬
2-Loop Interchange
‫زمان‬ ‫های‬ ‫سوئیچ‬
‫کامپایل‬

More Related Content

Similar to 02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir (20)

PPTX
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
mrm_196
 
PDF
Parallel computing ch3
keivan mahdavi
 
PPTX
Sadra
AliOshani
 
PPTX
sangsefidi_blas.pptx
MinaSangsefidi
 
PDF
Advance programming c++
AliNazarizadeh
 
PDF
(ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
Muhibullah Aman
 
PDF
Jozve c#2 mohamady_zahedy
danesh_fd
 
PDF
Software Fault Avoidance in Implementation
Morteza Zakeri
 
PDF
نقشه راه یادگیری اکوسیستم داده کاوی و یادگیری ماشین در نرم‌افزار آر
Chistio Foundation
 
PPTX
Elementary PRAM Algorithms (step by step trace)
alinadjar
 
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
mrm_196
 
Parallel computing ch3
keivan mahdavi
 
Sadra
AliOshani
 
sangsefidi_blas.pptx
MinaSangsefidi
 
Advance programming c++
AliNazarizadeh
 
(ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
Muhibullah Aman
 
Jozve c#2 mohamady_zahedy
danesh_fd
 
Software Fault Avoidance in Implementation
Morteza Zakeri
 
نقشه راه یادگیری اکوسیستم داده کاوی و یادگیری ماشین در نرم‌افزار آر
Chistio Foundation
 
Elementary PRAM Algorithms (step by step trace)
alinadjar
 

More from aminnezarat (12)

PPTX
Health-medicine-and-Block-chain1402-1-12.pptx
aminnezarat
 
PPTX
ارائه ابزار.pptx
aminnezarat
 
PDF
00 - BigData-Chapter_01-PDC.pdf
aminnezarat
 
PDF
Smart Data Strategy EN (1).pdf
aminnezarat
 
PPT
slides8 SharedMemory.ppt
aminnezarat
 
PPT
BASIC_MPI.ppt
aminnezarat
 
PPT
Chap2 GGKK.ppt
aminnezarat
 
PPTX
01 introduction fundamentals_of_parallelism_and_code_optimization-www.astek.ir
aminnezarat
 
PDF
Machine learning and big-data-in-physics 13970711-Dr. Amin Nezarat
aminnezarat
 
PDF
Big data HPC Convergence-Dr. Amin-Nezarat-([email protected])-2019
aminnezarat
 
PDF
Camera ready-nash equilibrium-ngct2015-format
aminnezarat
 
PDF
Data set cloudrank-d-hpca_tutorial
aminnezarat
 
Health-medicine-and-Block-chain1402-1-12.pptx
aminnezarat
 
ارائه ابزار.pptx
aminnezarat
 
00 - BigData-Chapter_01-PDC.pdf
aminnezarat
 
Smart Data Strategy EN (1).pdf
aminnezarat
 
slides8 SharedMemory.ppt
aminnezarat
 
BASIC_MPI.ppt
aminnezarat
 
Chap2 GGKK.ppt
aminnezarat
 
01 introduction fundamentals_of_parallelism_and_code_optimization-www.astek.ir
aminnezarat
 
Machine learning and big-data-in-physics 13970711-Dr. Amin Nezarat
aminnezarat
 
Big data HPC Convergence-Dr. Amin-Nezarat-([email protected])-2019
aminnezarat
 
Camera ready-nash equilibrium-ngct2015-format
aminnezarat
 
Data set cloudrank-d-hpca_tutorial
aminnezarat
 
Ad

02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir