سلام
یه همچین کدی دارم:
double f;
double x1[20];
double x2[20];
double x3[20];
double x4[20];
double x5[20];
double x6[20];
double x7[20];
double x8[20];
double x9[20];
double x10[20];
double x11[20];
double x12[20];
for(int i1 = 0;i1<20;i1++)
for(int i2 = 0;i2<20;i2++)
for(int i3 = 0;i3<20;i3++)
for(int i4 = 0;i4<20;i4++)
for(int i5 = 0;i5<20;i5++)
for(int i6 = 0;i6<20;i6++)
for(int i7 = 0;i7<20;i7++)
for(int i8 = 0;i8<20;i8++)
for(int i9 = 0;i9<20;i9++)
for(int i10 = 0;i10<20;i10++)
for(int i11 = 0;i11<20;i11++)
for(int i12 = 0;i12<20;i12++)
f = x1[i1] + x2[i2] + x3[i3] + x4[i4] + x5[i5] + x6[i6] + x7[i7] + x8[i8] + x9[i9] + x10[i10] + x11[i11] + x12[i12];
می خواستم سرعت اجراش رو زیاد کنم. در واقع 20 به توان 12 حالت دارم!
سعی کردم از omp استفاده کنم، جواب نگرفتم. یه چیزایی در مورد BLAS خوندم اما هنوز تستش نکردم.
بردمش تو GPU و Cuda. در واقع سعی داشتم که حلقه اول و حلقه دوم رو که با هم 400 بار تکرار می شن رو بدم به 400 تا Cuda Core که حداقل دو تا حلقه حذف بشه. سرعت بدتر شد.
البته تو حالتی که اندازه چهار تا آرایه اول 1 باشه، سرعت تو C++ برای اجرای 20 به توان 8 حالت تقریبا 1300 میلی ثانیه می شه. اما همین حالت برای اجرا در یک Cuda Core خیلی زیاد میشه!
حالا بماند که اگه بخوام ابعاد رو بیشتر کنم و مثلا به جای دو حلقه 400 تایی، سه تا حلقه 8000 تایی رو به Cuda بدم چطوری میشه !؟
ممنون از توجه دوستان