Video wird geladen...

Video konnte nicht geladen werden

Zur Startseite

یه سر رفتیم نیو کمپ بازی بارسا رو هم دیدیم. 🥹 جو ورزشگاه واقعاً خوبه!

16,436 Aufrufe • vor 3 Tagen •via X (Twitter)

0 Kommentare

Keine Kommentare verfügbar

Kommentare vom Original-Post werden hier angezeigt

Ähnliche Videos

آتش شاکرمی(خاله نیکا) با بازنشر این ویدئو در استوری اینستاگرامی‌اش، ضمن تایید این که دختر حاضر در تصویر نیکا شاکرمی است،نوشته: یه بسته کش موی ساده براش خریده بودم که این جزو آخریناش بود که استفاده کرد. اون بلوز سیاه شل رو هم با هم رفتیم خریدیم و بنظرش راحت ترین لباس بود...... اون شال رو هم با هم خریدیم پهن بود براش نصفش کردم و دوباره دور دوزیش کردم.... هنوز اون یکی نیمه این شال رو دارم... قرار بود اون که کهنه شد این نیمه رو استفاده کنه..... نصف وردم چون براش این شال اجباری هرچی سبکتر و کوچیکتر میبود بهتر بود....... وقتی داشت میرفت خط چشمش رو کشید، ماسک سیاهش رو گذاشت و سبکترین و راحت ترین لباساشو پوشید.... و من نمیدونستم واسه چی اینقد سبک پوشید....... و اون لباسها رو دیگه هیچوقت به ما تحویل ندادن......تیکای پر از شور زندگی..... شجاع دل بادپا رفت..... با اون کوله کوچیک و قمقمه و حوله کوچیکش اون کفشای سفید سبکش رو هم توی یه حراج خریده بود. اگر احتیاج به وکیل دارید با مشاوران حقوقی دادبان تماس بگیرید تماس مستقیم با وکیل در واتس‌اپ: +905510332575 #دادبان #مهسا_امینی #نیکا_شاکرمی

دادبان

107,967 Aufrufe • vor 3 Jahren

💣بدنه اجتماعی هسته سخت جمهوری اسلامی، بزرگترین خطر دوران پساخامنه‌ای برای ایران این آدمهایی که برای مرگ #خامنه‌ای تو این شرایط دارن عزاداری می کنن رو کسی به زور نیاورده بیرون. با ساندیس و اتوبوس مجانی هم اینجا نیستن. اینها همون پایگاه اجتماعی و فرهنگی و پیاده نظام #هسته_سخت قدرت جمهوری اسلامی هستن. کم و بیش ۱۵ تا ۲۰ درصد مردم. چیزی بین ۱۲ تا ۱۸ میلیون نفر. اینها حاضرن برای عقیدشون بکشن و کشته بشن. کاملا هم آخرالزمانی فکر می کنن! رهبران جمهوری اسلامی رو میشه با بمب و موشک حذف کرد ولی این جماعت رو نمی تونی با بمب و موشک حذف کنی. هر چه بیشتر حذف کنی ازشون مثل یه خرس زخمی خطرناک تر می شن. باید فکری اساسی به حال این مسئله کرد. جوگیری، ذوق زدگی از کشته شدن خامنه‌ای و چند تا سپاهی و نگاه فانتزی به رژیم چینج رو باید گذاشت کنار. سرنگون کردن جمهوری اسلامی پلی استیشن و کال آف دیوتی بازی کردن نیست. اینها رو نتونیم اقناع کنیم جنگ داخلی راه می افته! با فحش دادن تو توییتر و هشتگ #جاويدشاه‌ و #از_دموکراسی_بگو و #زن_زندگی_آزادی نمی تونی اینا رو سر عقل بیاری. با بمباران خارجی هم اینا متحد تر می شن. باید هر چه سریعتر برای این وضعیت خطیر چاره ای اندیشید...

Ali Bornaei

150,361 Aufrufe • vor 5 Monaten

در شرایطی که اتهام پادشاهی خواهی، صراحتا و عملی اثبات شد حکم تیر داره، سعی داشت با پرونده سازی از ماه ها پیش، بتونه به هر شکلی من رو حذف کنه. جرجندی هنوز مشخص نکرده بعد از ۸ ماه کوهی از اطلاعاتی که راجع به ایمیل های مرصاد داره چیه. فقط نشون داد دسترسی به اطلاعاتی مرتبط با مرصاد داره که باهاش برای بقیه پرونده سازی کنه و اخاذی کنه و از دهنش در رفته. فقط قطعات پازل این ۸ ماه مشخص کرده با احتمال بسیار بسیار بالا جرجندی یه مهره امنیتی صادراتیه که کاملاً سوخته و سعی داره خودشو اپوزیسیون رنگ کنه. سر قضایای QRCode و سوتی هایی که سر نیکا شاکرمی و وحید اشتری داد، چهره واقعیش رو دائم نشون داد ولی سریع رفت پشت نقش مبارزه با کلاهبرداران سایبری. او یک پرونده ساز است، لازم باشد به رهبری هم توهین می‌کند که بتواند فردا گرگ در لباس بره باشد تا بتواند پرونده سازی کند و چهره سوخته خودش رو پاک کنه. توییتی که راجع به حذف اثر انگشت از قفل گوشی پاک کرده هیچگاه از تاریخ پاک نمی‌شه.

🏴JannatKhah🔩🪰

56,737 Aufrufe • vor 6 Monaten

#PersianGulf برای اولین بار ازتون خواهش میکنم یه توییت من رو بخونید. ما تو یه بزنگاه خیلی مهم تاریخی سیاسی هستیم. شواهد نشون میده که به احتمال بالا تو کابینه ترامپ سر موضوع تغییر نام #خلیح‌_فارس اختلافه و مثلا روبیو یا فلان وزیر مخالف تغییر نام خلیج‌فارسن ولی ونس و ویتکاف و... موافقن. روبیو الان دو پست مهم وزارت خارجه و مشاور امنیت ملی رو داره و ترامپ بهش علاقه زیادی داره و شاهزاده هم باهاش ارتباط داره و مطمئن باشید تا الان باهاش تماس گرفته یا بزودی تماس میگیره و در این شرایط، خیلی مهمه که ما به جای سکوت یا اولویت دادن به تحلیلهای شخصی و دعوا با همدیگه، یکپارچه پشت پادشاه و اعتراضش بایستیم. ترامپ هنوز هیچ فرمانی رو در این مورد امضا نکرده و تصمیمش رو هم علنی نکرده. تو این شرایط، این چندروز برای ما تایم طلایی محسوب میشه و فرصت داریم با تمام توان و امکاناتمون از جمله پتیشن و ترند هشتگ و تجمعات اعتراضی تو آمریکا و یا جلوی سفارتهای آمریکا تو اروپا سر و صدا کنیم و اعتراضمون رو "بدون آمریکاستیزی" و با نمادهای میهنی و پادشاهی و بنرهای ضدرژیم نشون بدیم. تکرار میکنم مهمه که تو اعتراضاتمون علاوه بر پرچم ایران و عکسهای شاه، نمادهای ضدرژیم هم داشته باشیم تا ثابت بشه که ما مردم ایرانیم نه صادراتیهای رژیم یا چپگراهای احمق و هیچ دشمنی با آمریکا نداریم. موج اعتراضات ما میتونه به مخالفین این تصمیم تو کابینه ترامپ وزن زیادی بده. ترامپ یه شخصیت خودشیفته و نمایشی و عوامگرا داره و عاشق محبوبیته و اگه قانع بشه که این تصمیم باعث میشه یه ملت تو یه جغرافیای خیلی حساس ایران، مثل کارتر سالها ازش متنفر بشن یا به وجهه سیاسی آمریکا آسیب زده میشه یا به نفع رژیم تموم میشه، قطعا عقب‌نشینی میکنه. ولی اگه ببینه با وجود درز کردن این قضیه به رسانه‌ها، هیچ واکنش تندی از میلیونها ایرانی به وجود نیومده، قطعا نتیجه میگیره که این تصمیمش هزینه‌ کمی داره و به فایده‌ش کاملا میصرفه. نام خلیج مکزیک راحت عوض شد چون به ت_خ_م هیچ مکزیکی نبود. ولی اگه طبق استراتژی بعضی دوستان ترامپیست، صبر کنیم تا ترامپ اول فرمان اجرایی رو امضا کنه و بعد بهش اعتراض کنیم اون موقع دیگه اعتراض ما هیچ فایده‌‌ای نداره چون اولا بعد از امضا، ترامپ محاله تصمیمشو عوض کنه و گند بزنه به اعتبار امضای خودش، و دوما اون موقع، لغو این تصمیم میشه یه توهین بزرگ به عربستان و متحدین عربش. شاید فکر کنید چون پای پول زیادی وسطه هیچ کاری از ما برنمیاد و ترامپ ناچاره به درخواست عربستان تن بده ولی این تحلیل درستی نیست. آمریکای ترامپ تو موقعیت بسیار برتر سیاسی و افتصادی و نظامیه و قدرت چانه‌زنی بالایی داره و اعراب از لحاظ امنیتی بهش نیاز زیادی دارن، همچنین ترامپ رابطه خیلی دوستانه‌ و تسلط خوبی رو عربستان داره و خیلی ساده میتونه به بهونه‌های مختلف این درخواست رو بپیچونه یا عقب بندازه و همزمان هیچ خدشه‌ای به سیاستش تو دوشیدن اعراب وارد نشه. این قضیه رو فعلا اصلا کوچک‌انگاری نکنید و نگید که این تغییر نام فقط برای دولت آمریکاس و نمیتونن تو سطح جهان چیزی رو عوض کنن و اهمیتی نداره. اولا آمریکا الان مهمترین کشور دنیاست و به تنهایی از تمام اتحادیه اروپا و غرب و شرق دنیا مهمتره. دوما در صورت وقوع، کشورهای دیگه اروپایی هم همین راه رو میرن تا از آمریکا تو دوشیدن عربها عقب نمونن. این اتفاق اگه بیفته اندازه تمام این ۴۷سال به دستگاه تبلیغاتی رژیم خون پروپاگاندا تزریق میشه و به اصلاحطلبها و چپهای آمریکاستیز عقبمونده فرصت میده تا ایدئولوژی کمونیستی امپریال‌ستیزی خودشون رو توی زرورقی از میهنپرستی بپیچن و به خورد مردم بدن. من خودم تمام توانمو میذارم و خواهش من از شما اینه که با تمام امکانات و توانتون، حساسیت و اعتراضتون رو به این قضیه نشون بدید و با تمام ابزارهایی که دارید، پشت پادشاه میهنپرست پهلوی بایستید و از موضعش حمایت کنید. این توییت طولانی رو با یه نقل قول از شاهنشاه عزیز تموم میکنم: "من از همه شما هموطنان عزیرم میخواهم تا به ایران فکر کنیم..." ‌#پاینده_ایران

Yaar - يار ‌‌قدیمی 🇮🇷🇮🇱

77,627 Aufrufe • vor 1 Jahr

شرم بر Object oriented programming! خیلی درباره‌ی بازدهی در برنامه‌نویسی صحبت می‌شه و همیشه درباره‌ی الگوریتم سریعتر یا ساختمان‌داده‌ی مناسب بحث می‌شه. اما نی‌خوام درباره‌ی یه مساله‌ای که کمتر دیدم صحبت بشه موضوعی رو باز کنم. اون هم استفاده از ویژگی‌های cpuهای مدرن مثل prefetching یا SIMD ـه! قبل از همه چیز باید بدونیم پردازش مربوط به خوندن و نوشتن اطلاعات از روی RAM و اعمال دستورات روی CPU مربوط می‌شه. اما سرعت پیشرفت و بازدهی CPUها خیلی بیشتر از RAM بوده. این عکس فاصله‌ی بازدهی پردازنده‌ها رو با رم نشون می‌ده. یعنی اگر درست کد نزنیم پردازنده زمان زیادی رو منتظر اطلاعات می‌مونه تا بتونه کارش رو ادامه بده. در این بین خیلی از ویژگی‌ها مثل سطوح مختلف Caching در پردازنده‌ها ایجاد شده مثل L1, L2, L3 و احتمالاً موقع خرید CPU بهش برخورد کردید. کاری که این Caching انجام میده خوندن اطلاعات از رم و آماده نگه داشتن اونا وقتیه که CPU در حال محاسبه ست. (به صورت فیزیکی واقعاً نزدیکتر می‌شه) از سمت دیگه چندین هسته‌ی CPU و thread استفاده می‌کنیم تا به صورت موازی پردازش‌ها رو انجام بدیم. اما هرکسی تا حالا کد برای سیستم موازی زده باشه می‌دونه اصلاً راحت نیست و الزاماً استفاده از دو خط موازی به معنی دوبرابر شدن سرعت نیست! بسته به سناریویی که قرار داریم ممکنه ۳۰ تا ۵۰ درصد افزایش سرعت داشته باشیم (بله سرعت دو برابر هم می‌رسیم مگر هیچ sync point ایی لازم نباشه اما خیلی محدوده!) اما در پردازنده‌های مدرن پردازش موازی به هسته یا thread محدود نمی‌شه. بلکه قابلیت SIMD وجود داره که کارش انجام یک عمل ریاضی روی چندین داده به صورت همزمانه. Single Instruction Multiple Data. همین‌طور CPUهای امروزی قابلیت خاصی برای پیش‌بینی شاخه در دستوراتی که اجر میشن دارند. به این صورت که وقت شما از if استفاده می‌کنید. CPU هر دو حالت true و false رو محاسبه می‌کنه و هر وقت شرط مشخص شد جواب شاخه‌ی درست رو بر می‌گردونه! حالا این قضیه در خودش یه سری روش اجرای کد و مشکل امنیتی هم داشته که مورد بحث ما نیست. حالا اگر طوری کد بنویسیم که CPU لازم نباشه مداوم branch بررسی کنه باعث افزایش سرعت پایپلاین‌های پردازشی می‌شیم. (جزییات بیشترش رو در uOps باید صحبت کنیم). حالا اگر تمام موارد بالا رو در نظر بگیریم و می‌تونیم بهینه‌ترین حالت ممکن کد بزنیم. فکر می‌کنید این افزایش سرعت تا چه حده؟ بستگی به سناریوی مساله می‌تونه بین ۱۰ تا ۱۰۰ برابر (حتی بیشتر) سریعتر باشه! اصلاً شوخی نمی‌کنم. اول مقاله نوشتم شرم بر object-oriented programming. این رو برای جلب توجه ننوشتم. در حقیقت این پارادایم برنامه‌نویسی حدود سال‌های ۸۰ میلادی محبوب شد و هنوز ادامه داره اما با پیشرفت تکنولوژی شاهد تغییر پارادایم نبودیم. در ابتدا که فاصله‌ی سرعت CPU و RAM به هم نزدیک بود تفاوت چندانی نمی‌دیدیم و همه چیز با OOP اکی بود. اما به مرور زمان که سخت‌افزار به روز شد نرم‌افزار وابسته به تفکر قدیمی باقی موند. مثلاً در OOP ما یه سری کلاس می‌سازیم و اونا رو encapsulate می‌کنیم و از اونا شی می‌سازیم و روشون پردازش انجام می‌دیم. یه چیزی مثل: struct particle { float x, y; float vx, vy; particle(const float x, const float y, const float vx, const float vy) : x(x), y(y), vx(vx), vy(vy) { } virtual ~particle() = default; virtual void update(const float delta_time) =0; }; یه کلاس خیلی ساده ذرات - particle که مختصات محیط دو بعدی x و y داره و به همین منوال سرعت در اون جهت. یه تابع virtual هم داره برای بقیه که ارث ببرند و ویژگی‌های متفاوت اضافه کنند. تو particle system یا سیستم ذارت که برای جلوه‌های ویژه VFX مثل دود، غبار، آب و غیره استفاده می‌شه ممکنه تا چندین میلیون ذره پردازش بشن (فیلم مومیایی رو یادتونه؟ آفرین همون شن‌ها) حالا من از اون کلاس ارث بردم و این تابع خیلی ساده رو پیاده کردم که فقط در هر فریم سرعت ذره رو حساب می‌کنه: void update(const float delta_time) override { volatile float x = this->x; volatile float y = this->y; x += vx * delta_time; y += vy * delta_time; this->x = x; this->y = y; } این که چرا volatile استفاده کردم به خاطر اینه که این مثال خیلی ساده ست و کامپایلر این تابع رو بهینه می‌کنه در اصل کاری که می‌کنه اجازه‌ی ساختن virtual table رو نمی‌ده و تابع بقیه جاها inline می‌شه. اما تو پروژه‌ی بزرگ با چند لایه ارث‌بری همیشه بهره بردن از بهینه‌سازی کامپایلر ممکن نیست. حالا جلوتر این رو هم بر می‌دارم که دعوایی نباشه. بعد هم کلاس particle system رو داریم که خیلی ساده هر ذره رو آپدیت می‌کنه. فقط توجه داشته باشید هر ذره به صورت یک شی در حافظه new می‌شه. حالا اگر ۱۰۰ میلیون پارتیکل رو یک بار آپدیت کنم حدود ۶۵۳ میلی‌ثانیه طول می‌کشه. بد نیست ها؟ افتضاحه! تو بازی ویدیویی که ۶۰ فریم بر ثانیه اجرا می‌شه ما ۱۶ میلی ثانیه وقت داریم تا چند میلیارد محاصبه رو انجام بدیم. (بدون volatile حدود ۵۳۰ میلی‌ثانیه) برای افزایش باذهی من یه کار خیلی ساده می‌کنم به جای این که تمام این ذرات رو new کنم که باعث می‌شه هر کدوم یه جای RAM به صورت تصادفی پخش بشن اونا رو پشت‌سر هم در یک آرایه قرار می‌دم. یعنی تمام آدرس اونا پشت‌سر هم قرار می‌گیره. فقط همین تغییر باعث می‌شه همین تعداد ۱۱۵ میلی‌ثانیه زمان ببره. حدود ۵ برابر سریعتر! همین تغییر کوچیک! چرا چون زمان پیدا کردن هر آبجکت به صورت پراکنده تبدیل شده به آدرس‌های پشت‌سر هم و CPU سریعتر می‌تونه اطلاعات رو بخونه! به این شکل: struct particles_chunk { std::vector > x; std::vector > y; std::vector > vx; std::vector > vy; } حالا در مرحله‌ی بعدی همون کد ساده رو با دستورات SIMD می‌نویسم. نتیجه‌ می‌شه ۱۱۸ میلی ثانیه: void update_simd(const float delta_time) { const size_t num_particles = particles_.x.size(); const size_t simd_end = num_particles - (num_particles % 8); const __m256 dt_v = _mm256_set1_ps(delta_time); for (size_t i = 0; i (1, std::thread::hardware_concurrency()); const size_t base_chunk_size = num_particles / num_threads; const size_t aligned_chunk_size = ((base_chunk_size + 7) / 8) * 8; std::vector threads; threads.reserve(num_threads); for (size_t t = 0; t (&particles_.x[i + prefetch_distance]), _MM_HINT_T0); _mm_prefetch(reinterpret_cast (&particles_.vx[i + prefetch_distance]), _MM_HINT_T0); _mm_prefetch(reinterpret_cast (&particles_.y[i + prefetch_distance]), _MM_HINT_T0); _mm_prefetch(reinterpret_cast (&particles_.vy[i + prefetch_distance]), _MM_HINT_T0); } _mm256_store_ps(&particles_.x[i], _mm256_fmadd_ps(_mm256_load_ps(&particles_.vx[i]), dt_v, _mm256_load_ps(&particles_.x[i]))); _mm256_store_ps(&particles_.y[i], _mm256_fmadd_ps(_mm256_load_ps(&particles_.vy[i]), dt_v, _mm256_load_ps(&particles_.y[i]))); } تا اینجا من هیچ کار عجیب و غریبی نکردم. حافظه مرتب، پشت‌سر هم و با استفاده از SIMD کد نوشتم. نه ساختمان‌داده مطرحه و نه الگوریتم و بیشتر از ۶ برابر افزایش سرعت رسیدیم! مثال بعدی که branch prediction باشه رو آخر تست یادم اومد و نشد با بقیه مقایسه کنم. اما به هر حال. فقط این مثال ساده رو ببینید: for (size_t i = 0; i < num_particles; ++i) { if (particles_.is_active[i]) { particles_.x[i] += particles_.vx[i] * delta_time; particles_.y[i] += particles_.vy[i] * delta_time; } } کاری که می‌کنیم با if چک کنیم اگر ذره فعاله سرعتش رو حساب کنیم اگر نیست هیچی. این مثال ساده حدود ۱۴۱ میلی ثانیه طول می‌کشه. اگر اون if رو حذف کنم و بیام به جاش در محاسبه غیرفعال بودن رو صفر در نظر بگیرم و جلوی branching رو بگیرم: void update_branchless(const float delta_time) { const size_t num_particles = particles_.x.size(); for (size_t i = 0; i < num_particles; ++i) { particles_.x[i] += particles_.vx[i] * delta_time * particles_.is_active[i]; particles_.y[i] += particles_.vy[i] * delta_time * particles_.is_active[i]; } } با این روش ۱۱۹ میلی ثانیه طول می‌کشه تا کدم اجرا بشه. یعنی با وجود if تقریباُ کد ما ۸۰ درصد اجرا می‌شه. این در شرایطیه که فعال بودن ذرات تصادفیه و cpu نمی‌تونه branch perdiction درستی داشته باشه. برای همین کند می‌شه. حالا شاید بگید که تو گفتی چند میلیون محاسبه زیر ۱۶ میلی‌ثانیه. بله درسته. من اینجا از دو thread استفاده کردم. فقط جنبه‌ی نمایش داشت از warmup و اینا هم اجتناب کردم چون در دنیای واقعی این پردازش‌ها می‌ره روی GPU و Compute shader که معرفی اون خودش یه پست دیگه ست. کدها رو روی CPU قدیمی اجرا کردم: Intel Core i7 6700K @ 4.00GHz Skylake 14nm 16.0GB Dual-Channel DDR4 @ 1069MHz اگر دوست داشتید این محاسبه رو با زبان برنامه‌نویسی مورد علاقه‌تون تست کنید و سعی در بهینه کردنش کنید. در ضمن اگر تمام اینا رو کنار هم بذاریم با یه سری مفاهیم شبیه به همین‌هایی که گفتیم با جزییات بیشتر می‌شه Data oriented programming که در زبان‌های مختلف مثل خانواده‌ی C، Rust، Zig و غیره براشون کتابخونه و آموزش موجوده. خلاصه بازدهی فقط به الگوریتم و ساختمان‌داده محدود نمی‌شه.

Mohamad Iraji

22,055 Aufrufe • vor 1 Jahr