http://stackoverflow.com/questions/12259044/limitations-of-work-item-load-in-gpu-cuda-opencl
اینجا جداً آدم باید بگه این داستان ادامه دارد...
http://stackoverflow.com/questions/12259044/limitations-of-work-item-load-in-gpu-cuda-opencl
اینجا جداً آدم باید بگه این داستان ادامه دارد...
http://neilkemp.us/src/sse_tutorial/sse_tutorial.html
حس میکنم اشکال اینه که CPU ام خودش موازی میکنه چون مسأله ساده است! قسمتهایی که مربوط به آرایهها و عملیات روی آنهاست بلوکی انجام میده خودش!
http://www.cs.virginia.edu/~mwb7w/cuda_support/
http://will-landau.com/gpu/lectures/cudac-memory/cudac-memory.pdf
دقیقاً همین مثال تمرین ماست. طبیعتاً وقتی تعداد بیشتر میشه مشکل حافظه هم شدیدتر میشود. اینها چطوری توقع دارند ما به زمان بهتری برسیم؟؟
با توجه به این نمودار ما هیچ وقت به نتیجه بهتری نمیرسیم! (منبع سایت انویدیا اسلاید مرتب سازی)
البته ما توی قسمتی که محاسبات است هستیم ولی حجم محاسباتمان انقدر نیست که به کپی کردن حافظه بیارزد.
ولی در اینکه زمان محاسبات cpu را غلط اندازه میگیرد شکی نیست، چون به جای اینکه زمانش برای ماتریس ۱۰۰۰*۱۰۰۰ در حد ۱۶۶ ثانیه که دربیاد در حد میکروثانیه در میاد.
نه البته این با CPU کار نکرده.
چک کنید که تعداد نخها را بیشتر از تعدادی که کارت گرافیکتون پشتیبانی میکنه ندید و وقتی تعداد نخهای مختلف رو امتحان میکنید مطمئن بشید که هیچ جا جواب صفر نمیشه. (وقتی عددها زیادند یک درایه را چک کنید.)
http://en.wikipedia.org/wiki/CUDA
کسی میدونه مهلت تمرین کیه؟
Increase the Stack Reserve size in Project ‐> Properties ‐> Linker ‐> System ‐> Stack Reserve Size = 500000000
این بار که برنامه کودا ام رو اجرا کردم stack overflow داد! اگه شما هم برخوردید این کاری که بالا نوشتم بکنید!
با اون کتاب قبلی به جایی نمیرسید! (نتیجه منطقی بعد از یک هفته علافی)
http://moss.csc.ncsu.edu/~mueller/cluster/nvidia/0.8/NVIDIA_CUDA_Programming_Guide_0.8.2.pdf
من داشتم حل تمرینهای سال قبل را مینوشتم ولی انگار ذخیره نشده بود. سوال این بود که یک ماتریس ۰ و ۱ داریم میخواهیم ببینیم حالتی هست که ستونها را جا به جا کنیم و همهی ۱ ها کنار هم قرار بگیرند. (با integer programming حل کنید.)
حل من این بود که هر درایه ماتریس را یک متغیر میگیریم و مقادیر اولیه را به صورت قیود تساوی میگذاریم.
یک سری متغیر دیگر هم تعریف میکنیم که معادل جا به جا کردن هر دو ستون باشند.
برای اینکه یکها کنار هم باشند هم باید متغیرهایی که تعریف کردهایم به ازای یکی از حالتهای تقسیم هر سطر به دو قسمت یک بخش ۱ داشته باشند. برای اینکه یکی از این شرط ها برقرار باشد میتوانیم به ازای آنهایی که ۱ هستند یکی کم کنیم در این صورت حالت درست معادل ۰ میشود و اگر همه را در هم ضرب کنیم و صفر شود جواب دارد در غیر این صورت جواب ندارد.