به نام خدا
سلام
من این کار رو برای زبان c توضیح میدم:
در حالت کلی شما در زبان c (یا هر زبان دیگه) میتونی دو تا ماتریس رو در هم ضرب کنی
فقط باید اون دو تا ماتریس:
- شرایط ضرب شدن رو داشته باشن
- درایه هاشون مشخص باشه
حالا شرط ضرب دو ماتریس چیه؟
اگه یکی ابعادش mxn بود بعدی باید nxk باشه
جواب نهایی هم میشه یک ماتریس mxk
یعنی: ماتریس اول اگه m سطر و n ستون داشته باشه
ماتریس دوم باید n سطر و k ستون داشته باشه
تا بشه در هم ضرب بشن
در اینصورت ماتریس نهایی m سطر و k ستون خواهد داشت!
چند تا لینک میذارم برات:
1: اللهم صل علی محمد و آل محمد و عجل فرجهم و ...
2: دانش بهتره یا ثروت؟ بدون شعور هیچکدوم!
3: دلا معاش چنان کن که گر بلغزد پای *** فرشتهات به دو دست دعا نگه دارد (حافظ)
در ادامه باید این رو هم اضافه کنم:
شما میخوای با میکرو این کار رو انجام بدی!
برای میکرو میشه به زبان های مختلف برنامه نوشت:
C
++C
assembly
VB
, ...
کامپایلر شما چیه؟
یعنی با چه نرم افزاری میخوای برنامه رو برای ریختن در میکرو
به کدهای هگز تبدیل کنی؟
هر نم افزار و هر زبان برنامه نویسی باشه
مشکلی نیست
اما باید بدونی که میکرو ها محدودیت هایی دارن!
بذار با یک مثال باز کنم برات:
مثلا یک میکرو حجم حافظه ی SRAMش برابر با 2 کیلوبایت باشه
اعداد ماتریس شما رو هم از نوع char در نظر میگیریم! یعنی 8 بیت!
زمانی که در هم ضرب میشن باید در یک متغیر 16 بیتی ریخته بشن!
برای هر ضرب 3 تا ماتریس داری:
- ماتریس mxn
- ماتریس nxk
- ماتریس mxk
دو تای اول ورودی و سومی خروجی در نظر میگیریم
پس ماتریس اولی و دومی حجمشون میشه mxn + nxk بایت
و ماتریس دوم چون از نوع int هستش میشه 2xmxk بایت
حالا برای راحتی فرض میکنیم ماتریسها مربعی باشن
یعنی مثلا mxm باشن.
طبق فرضیات فوق مجموع حافظه برای این ماتریس ها میشه:
mxm + mxm + 2xmxm یعنی 4mxm
حالا اگه m رو بذاریم مثلا 22 میشه چقدر؟ (قبلا محاسبه کردم)
1936 بایت!
یعنی حافظه پر شد!
حالا یه سری متغیرهای کمکی دیگه هماین وسط نیاز داریم که ازشون حرفی نزدیم!
خب میبینم که در اینجا محدودیت حافظه داریم!
اما محدودیت سرعت هم داریم!
اگه نیاز به محاسبات سریع باشه
بازهم بحث سرعت مطرح میشه!
در بهترین حالت mxmxm تا ضرب و mxm-m تا جمع داریم!
فرض کن برای هر ضرب 20 کلاک و هر جمع 6 کلاک نیاز باشه
(یه عالمه چیز دیگه این وسط هست که در نظر نگرفتیم)
با اون عدد 22 که در بالا حساب کردیم، میشه:
215732 تا کلاک!
فرکانس میکرو هم 8 مگ در نظر بگیریم هر کلاک میشه 125 نانو ثانیه
که حدودا میشه 0.027 ثانیه!
روندش میکنیم 0.03 ثانیه! برای محاسبه ماتریس
و ...
:read:
1: اللهم صل علی محمد و آل محمد و عجل فرجهم و ...
2: دانش بهتره یا ثروت؟ بدون شعور هیچکدوم!
3: دلا معاش چنان کن که گر بلغزد پای *** فرشتهات به دو دست دعا نگه دارد (حافظ)
سلام
حالا اگه مشکل SRAM رو هم حل کنیم بازم بقول محمد صادق سرعتش زیاد نیست. چند مدت پیش بهم یه پروژه پیشنهاد شد که بدتر از این بود. طرف می خواست 2 مگابایت داده رو پروسس کنه با یه AVR ساده واسه این کارا باید سراغ قوی تر ها برید نه AVR که واسه کنترل چند تا چیز ساده طراحی شده. واسه همین DSPها و 32بیتی ها ساخته شدن دیگه.
ممنون از rozeh جان
نه ببخشید، روح الامین
نکته ی قشنگی اشاره کردی!
یک بحثی هم در یک تاپیک دیگه گفته بودی: (چند مورد)
"تا 5 سال دیگه پردازشگرهای 8 بیتی جمع میشن"
"قیمت پردازشگرهای 32 بیتی ارزون شده"
"هر کس باید بره سراغ پردازشگرهایی مانند ARM"
"پردازشگرهای 64 بیتی ارزون قیمت برای کارهای ما در راهه"
شاید بشه گفت یکی از دلایل استفاده از این پردازشگرهای 8 بیتی AVR
بحث سادگی + قیمت فوق العاده ارزون (نه دیگه الان!) بود!
همچنین که مثه الان بحث پردازش سیگنال مطرح نبود!
طرف 15 سالشه اومده پیش من پروژه تشخیص صدا میخواد کار کنه!
ما تا 5 سال پیش نمیدونستیم میکرو چیه!
اصن یه وضی!
با همه ی این اوصاف، بازهم همین AVRهای 8 بیتی هم غولی بودن برای خودشون.
پروژه هایی مثل:
- wave player
- mp3 player
- screen touch calculator
- voice recognition
, ...
با AVR انجام شده
اونم مثلا با اتمگا 32 !
پروژه هایی با اتمگا8 دیدم که اصلا فکرشم نمیشه کرد!
(البته با زبان اسمبلی بود)
اما خب! نباید در گذشته بمونیم!
32 بیتی ها
برنامه نویسی سیستم عاملی
سیستم عامل
و ...
همه چیزهایی هستن که باید خوب یاد بگیریم!
:read:
1: اللهم صل علی محمد و آل محمد و عجل فرجهم و ...
2: دانش بهتره یا ثروت؟ بدون شعور هیچکدوم!
3: دلا معاش چنان کن که گر بلغزد پای *** فرشتهات به دو دست دعا نگه دارد (حافظ)
دیدگاه