زن به همسرش گفت: دوست دارم برای روز تولدم چیزی بگیری که شتاب ۰ تا صدش ۴ ثانیه باشه.
خانم چیزی شبیه این مد نظرش بود:

اما شوهرش چیز بسیار متفاوتی برایش خرید…

الان حال شوهر وخیم بوده و در ICU به سر میبرد!
پردازندههای چند هستهای بخش ۳ – Multicore processors part 3
در بخش قبل یک روش نه چندان آسان معرفی شد که با استفاده از آن میتوان از حداکثر توان پردازندههای چند هستهای استفاده کرد. امروز قصد دارم کتابخانهای را معرفی کنم که با استفاده از آن به سادگی میتوان حلقههای for سنگین را با استفاده از چند هستهی پردازنده سریعتر اجرا کرد. کتابخانهی OpenMP یک کتابخانهی C/C++ است که توسط میکروسافت و به منظور تسهیل برنامهنویسی برای پردازندههای چند هستهای تهیه شده است. اگر ویژوال استودیوی ۲۰۰۸ را نصب کنید، نسخهی ۲ این کتابخانه نیز به صورت خودکار نصب میشود. برای استفاده از این کتابخانه باید ابتدا در تنظیمات پروژه، گزینهی OpenMP Support را به Yes تنظیم کنید (شکل زیر).

سپس فایل omp.h را به لیست فایلهای سرآیه اضافه کنید. برای شروع کار بهتر است مثال قبلی را این بار با این کتابخانه امتحان کنیم. با استفاده از دستور omp_set_num_threads میتوان تعداد رویههای مستقل برای استفاده توسط این کتابخانه را تعیین کرد. مقدار پیش فرض به تعداد هستههای پردازنده است. یکی از پرکاربردترین عبارات(هر چی فکر کردم معادل directive یادم نیومد!) این کتابخانه عبارت parallel هست که میتوانید قبل از حلقهی for به صورت زیر از آن استفاده کنید.

به همین سادگی؛ حالا اگر برنامه را اجرا کنید، حلقهی for به طور خودکار در ۴ رویهی مستقل اجرا خواهد شد. با استفاده از این دو خط برنامه شما میتوانید به راحتی تعداد رویههایی که باید در اجرای حلقه کمک کنند را تعیین کنید. مثال جلسات قبل را با استفاده از این کتابخانه اجرا کردم، زمان اجرا برای حالتی که از دو ریسمان استفاده شد ۵.۵ ثانیه و برای ۴ ریسمان ۲.۸۵ ثانیه شد که تقریبا مشابه حالتی است که خودمان ۲ یا ۴ ریسمان را تولید کنیم. حتما استفاده از این کتابخانه راحت تر است! برای یادگیری بیشتر این کتابخانه و امکانات جالب آن به MSDN (راهنمای ویژوال استودیو) مراجعه فرمایید.
In the previous paper, I introduced an approach based on threads to use the maximum power of multicore processors in our programs. Here I introduce a handy library from Microsoft which makes programming for multicore CPUs an amazing work. OpenMP is an efficient library with several directives and functions which helps us to write or migrate codes for multi core CPUs simply by adding some line of codes. If you are using visual studio .net 2005 or 2008, this library is already installed and you can use it. To demonstrate this library we consider the example of the previous paper. To add support of OpenMp in our project, we must open “Project Settings” and change the value “OpenMP Support” to “Yes”. This makes visual studio to load required libraries for OpenMP.

Then we should add header file omp.h at the beggining of our cpp file. Using “omp_set_num_threads” we are able to set the number of threads which should be used by OpenMp library. The default value is equal to the number of CPU cores. One of the most important directive in this library is the “parallel” directive which can be used before heavy “for” loops to tell that the following loop must be shared between several cores of the processor. You can use it as follows:

Thats all! you have not to create separated threads and manage them, all of the works will be done by OpenMP. Using this code with omp_set_num_threads(2) the program takes about 5.5 seconds on Q6600 processor and with omp_set_num_threads(4) about 2.85 seconds. These values are almost the same as in the previous paper which we created threads mannualy. But I think OpenMP is easier!. For more information on OpenMP see MSDN (Visual Studio Help)
انواع فرشتهها
در جایی خواندم که فرشتهها بر سه نوعاند، گروه اول حاجتهای بندگان را به خداوند میرسانند، گروه دوم پاسخ خداوند را به بندگان میدهند و گروه سوم منتظر جوابی از سمت بندگان هستند که با گفتن یک “الهی شکر” پاسخ را به پروردگار میرسانند؛ واین گروه اخیر از همه بیکارترند.
خیلی از داشتههای امروز ما، آرزوهای دیروز بودهاند. پس خدایا تو را شکر برای همهی آرزوهایی که برآورده کردهای…
قورباغهی زشت!
قورباغه سبز، چشمهای درشتش رابا غروربست وبه
قورباغه کوچک کفت: من واقعا خوشــرنگ و درخشانم؛
نه؟
قورباغه کوچک کفت: بله. واقعا خوشرنگی!
قورباغه سبز گفت: و تو خاکسـتری و کدر و بدرنکی؛
نه؟
قورباغه کوچک بلند گفت: بله، کاملا واضح اســـت که
من بدرنگ و کدر و خاکستریام!
قورباغه سبز گفت: من کاملا رشــد کردهام؛ درشت و
خوشهیکل و تپلم اما تو کاملا لاغر و مردنی هستی.
قورباغه کوچک گفت: راست میگویی؛ من واقعا لاغرم
و رشد نکردهام. خیال میکنـم از یک مریضی لاعلاج رنج
میبرم.
قورباغه ســبز گفت: دلم برایت میســوزد، تو زشت و
درنگ و لاغری. بیچاره، واقعا بدبختی!
قورباغه کوچک گفت: من زشــت و بدرنگ و لاغرم اما
واقعا احساس خوشبختی میکنم که مثل تو نیستـم.
قورباغه سبز گفت چرا؟
– قورباغه کوچک گفت: چون یــک ماهیخوار بیرحم
ان بالانشســته که عاشـق خوردن قورباغههای سبو و
چاق و بزرگ استا
——————————————————————————
در مطب دکتر نشسته بودم و مجلهی خانواده را میخواندم چشمم به این طنز بامزه افتاد، با n95 چند بار عکس گرفتم تا یکیشون مناسب برای OCR در بیاد. وقتی رسیدم خونه برای امتحان عکسها رو به نویسهخوان سپردم و نوشتهای که در بالا میبینید نتیجهی خواندن خودکار عکسها توسط نویسهخوان و بدون ویرایش و غلطیابی است. من که خیلی حال کردم!…
زرنگار و زندگی
داشتم دنبال قلمهای قدیمی میگشتم که پشتیبانی از آنها را برای OCR فراهم کنم که به مطالب جالبی در مورد زرنگار، نرم افزار قدیمی و زیبای تایپ فارسی، برخورد کردم. جالبترینشون مربوط به خاطرات دکتر محمد صنعتی، بنیانگذار شرکت نرمافزاری سینا، بود. بخشی از آن را در زیر میخوانید.
زرنگار متولد میشود
اولین بار زرنگار را در سمینار نشررایانهای سازمان برنامه و بودجه نمایش دادیم. در این سمینار نه شرکت، از جمله سینا، حضور داشتند و میخواستند راهحلهای خود را برای نشر فارسی عرضه کنند. من در این همایش سخنرانیای کردم که مدتها باعث تفریح خاطر همکارانم در شرکت شد، میگفتند من وعده برنامهای دادم که هرگز نوشته نشد! من ابتدا یک ربع از وقت سخنران قبل و بعد خودم را گرفتم و زمان سخنرانیام شد یک ساعت، بعد حین سخنرانی تمام اندیشهها و بلندپروازیهایم را به زرنگار نسبت دادم. قابلیتهایی که من آن روز به زرنگار نسبت دادم پنج سال بعد در آن گنجانده شد. اما این سخنرانی باعث اشاعه بیشتر کار ما شد، و از یاد نمیبرم که در نتایج نظرخواهی از شنوندگان آمده بود که بیش از هفتاد درصد سخنرانی مرا علمیترین سخنرانی دانسته بودند. درحالیکه این سخنرانی اصلا علمی نبود! در واقع معرفی زرنگار بود. بعد از این سخنرانی غرفه ما شلوغ شد، اما ما چیزی در دست نداشتیم. به همکارانم گفتم که حداقل باید به یک دهم از حرفهایمان عمل کنیم. به سرعت دست به کار شدیم و بعد از نمایشگاه اولین کلاس زرنگار را راهاندازی کردیم که هفده حروفچین در آن شرکت داشتند، هدف ما درآن زمان بیشتر حروفچینها بودند .
این طور شد که زرنگار کمکم پا گرفت و نسخههای ارتقا یافته آن پی در پی به بازار فرستاده شد (اولین نسخه زرنگار در اردیبهشت سال ۱۳۷۰ عرضه شد). یکی از لذتبخشترین کارهای من در آن دوره این بود که بعدازظهر به روزنامه فروشیها میرفتم و میگشتم تا ببینم کدام مجله یا روزنامه به زرنگار ملحق شده. بعد که تعداد مشتریان بیشتر و بیشتر شد یک شوخی میان ما رایج شد به این مضمون که “بگردید، و ببینیند چه کسی با زرنگار کار نمیکند”. ما روشهای بازاریابی خاصی داشتیم، مثلا آگهی کردیم که شش ماه استفاده رایگان از زرنگار برای همه آزاد است، یا زیر فاکتورهای فروش ذکر میکردیم تا شش ماه پس گرفته میشود. چون در هر کسبی در هر جای دنیا رضایت مشتری خیلی اهمیت دارد، دستور داده بودم از کسانی که نرمافزار را مرجوع میکنند هیچ پرسوجویی نکنند و فورا پولشان را برگردانند. سواستفادههای جزئی هم میشد، اما کل ماجرا به نفع شرکت بود. فلسفهام این بود: باید تکلیفمان را با خودمان روشن کنیم، اگر محصولی نوشتهایم که به کار مردم نمیآید، خوب است برویم دنبال یک کار دیگر! این طور بود که ما در فاصله یازده سال (۱۳۶۴تا۱۳۷۵) بازار نشر رومیزی کشور را قبضه کردیم .
زر رفت، ولی تجربه تولید آن خواهد ماند
پایان زرنگار سال ۱۳۷۵ بود. در واقع زرنگار مغلوب Word شد، چون همیشه رسم رایج رابطه شرکتهای بزرگ و کوچک این طور بوده است. زمانی که یک غول اقتصادی مانند مایکروسافت به بازار حمله میکند مثل بهمن بر سر بازار فرو میریزد. از شرکتهای بزرگ شروع میکند و پس از این که تکتک آنها را شکست میدهد به سراغ شرکتهای کوچک میرود. این اتفاق در همه جای دنیا افتاد، از “Word Prefect” توانمند تا زرنگار ما. کسی که در بازار امریکا پیروز میشود، پیروزی در بازارهای دیگر برایش چندان دشوار نیست. شرکتها زمانی بزرگ میشوند که یا شرکتهای دیگر را به زانو در آورند یا آنها را بخرند و در خود ادغام میکنند. این قضایا صرفا به ایران برنمیگردد، کشورهای دیگر هم درگیر آن هستند .
از یک نظر دیگر هم میشد به قضیه نگاه کرد. من در آن مقطع همیشه از خودم میپرسیدم که آیا دوست دارم پسرم از نرمافزاری استفاده کند که دنیا از آن استفاده میکند، یا از زرنگار؛ و پاسخ من زرنگار نبود. نمیخواستم که کاربران ایران در زرنگار حبس شوند و از دنیا عقب بیفتند .
ولی تصور کنید که ما میخواستیم با Word مقابله کنیم، با چه امکانات و چه بودجهای؟ مایکروسافت Word را عرضه میکند برای تمام زبآنها و تمام نسخههای ویندوز، ما چه کار میخواستیم بکنیم؟ نظر من این بود که ما باید دنبال کار دیگری برویم. یک سری از قابلیتهای زرنگار هیچ وقت در Word نخواهد بود، اما میتوان این قابلیتها را به آن اضافه کرد .
توجه داشته باشید که نمیخواهم با این حرفها در دل جوانان یاس بیندازم، ما اگر آن کار را ادامه ندادیم، تجربهها در محصولات دیگری شکوفا خواهند شد. روش کار ما شاید به اندازه محصولمان مهم بود. در سینا قواعد خاصب داشتیم: اکثر کسانی که جذب سینا میشدند، الزاما سابقه یا تحصیلات رایآنهای نداشتند، اما بدون استثناء بسیار هوشمند بودند. سعی داشتیم کارمندان را کاملا تامین کنیم که سرشان صرفا به کارشان مشغول باشد. بعید میدانم آن مجموعه، با تمام استعدادها و قابلیتهایی که داشت؛ اگر در جای دیگری فعالیت میکرد چنین نتیجهای حاصل میشد. مهمترین کار ما تولید زرنگار نبود، مشکلترین کار، جمع شدن چهلپنجاه نفر در یک ساختمان و فعالیت تحت یک مدیریت بود. تا زمانی که سینا محکم سرجایش بود، کسی از آن جدا نشد. بعد از آن، قضیه مهاجرت به کانادا رخ داد و …، این در حالی است که خیلی گروههای با استعداد تشکیل شدند و پس از مدتی بدون عرضه محصولی از هم پاشیدند. من یقین دارم هر زمانی چنین جمعی با چنین ویژگیهایی تشکیل شود، کارهای مهمی خواهد کرد .
متن کامل را در اینجا ببینید.


