صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 47

نام تاپیک: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

  1. #1

    Question انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    سلام
    من یک آرایه بزرگ دارم که باید حجمشون 380*380*96*94 باشه. این کار رو در ویژوال استودیو C++‎ انجام می دم. اما ایراد میگیره و میگه باید حجمش انقدر نباشه. من مجبورم آرایه رو 94*48*190*190 تعریف کنم.
    من به اندازه کافی هم ram دارم.
    استادم میگه که ویژوال استودیو تنظیماتی داره که باید عوض بشه تا بتونه این آرایه ها رو هم قبول کنه.
    کسی هست که بدونه چه تنظیماتی هست؟
    من از ویژوال استودیو 2010 C++‎ استفاده می کنم.
    تروخدا کمکم کنید

  2. #2

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    فکر کنم این باشه
    project properties\c,C++‎\linker\system\enable large address

    می تونی عوض این کارا از heap استفاده کنی

  3. #3

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    نقل قول نوشته شده توسط __UFNHGGI_H__ مشاهده تاپیک
    فکر کنم این باشه
    project properties\c,C++‎\linker\system\enable large address

    می تونی عوض این کارا از heap استفاده کنی
    سلام دوست عزیز چطور میشه از heap استفاده کرد؟
    کاری رو که گفتید انجام دادم نشد

  4. #4

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    این طوری دیگه

    int* array = (int*)malloc(sizeof(int)*4194304);

  5. #5

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    نقل قول نوشته شده توسط __UFNHGGI_H__ مشاهده تاپیک
    این طوری دیگه

    int* array = (int*)malloc(sizeof(int)*4194304);
    این کار رو هم کردم ولی نمی شه. اصلا اجرا نمی کنه. راه دیگه ای به نظرتون نمیرسه؟

  6. #6
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    اینو امتحان کن


    int *pValue = new int; // pValue is assigned 4 bytes from the heap
    int *pArray = new int[10]; // pArray is assigned 40 bytes from the heap



    مثلا
    int *myarray=new int[65600];



    اگر عدد مورد نظرت خیلی بزگ هست نمیشه از این استفاده کرد.باید بیای تقسیم بندی کنی یا بری سراغ اسمبلی غیر اینها به نظر من راه حلی وجود نداره.
    آخرین ویرایش به وسیله darknes666 : دوشنبه 06 خرداد 1392 در 16:33 عصر

  7. #7
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    iran
    پست
    311

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    شما این تنظیمات رو به پروژه مورد نظرتون اضافه کنید

    <configuration>
    <runtime>
    <gcAllowVeryLargeObjects enabled="true" />
    </runtime>
    </configuration>



  8. #8
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    کلا روش همونی هست که من گفتم.نه تنها من بلکه خود مایکروسافت میگه از heap استفاده کنین.ربطی به کامپایلر و یا تنظیمات نداره.بحث یک چیز سخت افزاری هست.

    میتونین اینجا رو هم نگاه کنی.


    http://social.msdn.microsoft.com/For...f-013b15a61b64

  9. #9
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    iran
    پست
    311

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    البته برای توضیح بیشتر باید بگم CLR در سیستم های 32 بیتی شی ایی با اندازه بیشتر از 2GB رو ساپورت نمی کنه . اما درسیستم های 46 بیتی این امکان وجود داره. گرچه به صورت پیش فرض همون 2 گیگ رو پشتیبانی می کنه. بنابراین شما با اعمال تغییرات فوق برای سیستم های 64 بیتی می تونید شی ای با اندازه بیشتر از 2GB ایجاد نمایید.

  10. #10
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    بهترین راه حل اسمبلی هست.دوست عزیز چرا از اسمبلی استفاده نمیکنی؟

    تو اسمبلی شما تمام و کمال رم رو در اختیار داری و میتونی قست بزرگی از اون رو دستکاری کنی و اطلاعات و داده ها رو تو اونا ذخیره کنی.ولی باید بیشتر کد نویسی کنی و زحمت به خرج بدی.تو ابر رایانه ها هم از اسمبلی استفاده می کنن.چرا که کامپیوتر درکی از اعداد بزرگ مثل ده میلیارد نداره.من فکر کنم چاره ای جز این نداشته باشین.
    آخرین ویرایش به وسیله darknes666 : دوشنبه 06 خرداد 1392 در 16:07 عصر

  11. #11
    کاربر دائمی آواتار saied_hacker
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    404 Not Found
    پست
    703

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    نقل قول نوشته شده توسط manij_mhm مشاهده تاپیک
    البته برای توضیح بیشتر باید بگم CLR در سیستم های 32 بیتی شی ایی با اندازه بیشتر از 2GB رو ساپورت نمی کنه . اما درسیستم های 46 بیتی این امکان وجود داره. گرچه به صورت پیش فرض همون 2 گیگ رو پشتیبانی می کنه. بنابراین شما با اعمال تغییرات فوق برای سیستم های 64 بیتی می تونید شی ای با اندازه بیشتر از 2GB ایجاد نمایید.
    اینجا بخش Native هست و این دوستمونم میخاد از Native C++‎ استفاده کنه چه ربطی به CLR داره.... !؟

    نقل قول نوشته شده توسط darknes666 مشاهده تاپیک
    بهترین راه حل اسمبلی هست.دوست عزیز چرا از اسمبلی استفاده نمیکنی؟

    تو اسمبلی شما تمام و کمال رم رو در اختیار داری و میتونی قست بزرگی از اون رو دستکاری کنی و اطلاعات و داده ها رو تو اونا ذخیره کنی.ولی باید بیشتر کد نویسی کنی و زحمت به خرج بدی.تو ابر رایانه ها هم از اسمبلی استفاده می کنن.چرا که کامپیوتر درکی از اعداد بزرگ مثل ده میلیارد نداره.من فکر کنم چاره ای جز این نداشته باشین.
    چرا اسمبلی این که راحت جواب داد

    main()
    {
    int* p = (int*)malloc(sizeof(int) * 1303065600);
    //int* s = p;

    p[1303065600] = 100;
    p[0] = 200;
    printf("%d%s", p[0], "\n");
    printf("%d%s", p[1303065600], "\n");
    printf("%d%s", p[1303065599], "\n");
    }

  12. #12

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    اسمبل و CLR چ ربطی داره
    با ی new یا malloc ساده کار تمومه من نمی دونم چرا ایشون حی می گن نمیشه
    این کار رو هم کردم ولی نمی شه. اصلا اجرا نمی کنه. راه دیگه ای به نظرتون نمیرسه؟
    اجرا منظورت چیه
    کامپایل
    موقع دیباگ خطا میده
    خطا چیه و ..
    کامل بگو

  13. #13
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    اخه کدوم ادمی میاد سرعت رو اینجوری با سی بیاره پایین؟برای محاسبات نیاز به سرعت هست که به نظر من اسمبلی بهترین گزینه هست و این کاری که شما می کنین عملا یعنی کم کردن سرعت کامپیوتر.

    من ایرادی از این دستور نگرفتم.ولی با این عدد میخواین چی کار کنین؟
    86000000000000000000000000000

    اینجا هم جواب میده؟
    بله ولی سرعت خیلی پایین میاد.

    ولی تو اسمبلی شما اصلا افت سرعت ندارین.

  14. #14
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    خب این کد هم کار میکنه.


    #include<iostream.h>
    #include<conio.h>
    main()
    {
    int x;
    asm{
    mov ax,1
    mov [4000000000],ax
    mov bx,[4000000000]
    mov x,bx
    }
    cout<<x<<endl;
    getch();
    }

  15. #15
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    یک راه دیگه هم پیدا کردم.


    char * memoryBlock;
    memoryBlock = new char[size];




    memoryBlock درواقع همون اسم هست.بقیه هم که مشخصه.

  16. #16
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    نقل قول نوشته شده توسط darknes666 مشاهده تاپیک
    خب این کد هم کار میکنه.


    #include<iostream.h>
    #include<conio.h>
    main()
    {
    int x;
    asm{
    mov ax,1
    mov [4000000000],ax
    mov bx,[4000000000]
    mov x,bx
    }
    cout<<x<<endl;
    getch();
    }
    حتی اسمبلی هم بلد نیستید.
    1.ax رو ریختی توی integer
    ۲.کجا allocate کردین؟


    علت اینکه میگه نمیتونه allocate کنه اینه که عددتون خیلی بزرگه
    از این استفاده کنید:
    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
    دقت کنید:
    SIZE_T dwSize
    راجع به MEM_PHYSICAL و MEM_LARGE_PAGES هم بخونید

  17. #17
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    iran
    پست
    311

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    نمی دونم چرا موقع جواب دادن به سوالات حتما باید اطلاعاتتون رو به رخ هم بکشید؟!!!
    گمونم برای هر مساله ای فقط یه جواب موجود نباشه! هرکسی سبک کد نویسی خودشو داره!
    اون تنظیماتی هم گفتم قبلا مشکل خودم بوده البته واسه زبان C#‎ با تنظیمات بالا مشکل من حل شد! اینجا گذاشتم دوستون هم مشکلش حل شه!
    توضیحات هم مربوط به msdn.microsoft بود.

  18. #18
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

        push qword 100000000
    call malloc
    add rsp, 8

    این هم ۱۱۰۰۰ خط

    کلا میدونی Access Violation و Virtual Memory و TLB و page و page table و heap و اینا چیه؟
    دلیل نمیشه چون یک بار اجرا شده دوباره اجرا بشه.

  19. #19
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    1.نیازی به stack نیست.مثلا inline assembly ه
    2.data ای استفاده نکردم که تعریف کنم.
    3.nasm
    4.کد من ۶۴ بیت ه.۱۰۰٪ توی emu8086 خطا میده.

    اون کدی که تغییر دادم هم کامپایل میشه ولی چون قسمت error check جز بحث نبود حذفش کردم.

  20. #20
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1388
    پست
    45

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    دوست عزیز ،__UFNHGGI_H__ و saied_hacker جواب سوالتونو همون اول تاپیک دادن .
    شما فقط میگی نمیشه ، ولی نمیگی چرا که بقیه راحت کمکت کنن.

    بهترین راه حل اسمبلی هست.دوست عزیز چرا از اسمبلی استفاده نمیکنی؟

    تو اسمبلی شما تمام و کمال رم رو در اختیار داری و میتونی قست بزرگی از اون رو دستکاری کنی و اطلاعات و داده ها رو تو اونا ذخیره کنی.ولی باید بیشتر کد نویسی کنی و زحمت به خرج بدی.تو ابر رایانه ها هم از اسمبلی استفاده می کن.
    چرا ؟ هیچ ارتباطی به اسمبلی نداره ! مگه شما توی Kernel Mode داری کد مینویسی که تمام و کمال رم رو در اختیار داری ؟ شما تو User Mode با Virtual Memory کار داری . کلا شما از سیستم عامل میخوای که حافظه ی مورد نظر رو برات Allocate کنه و توسط API سیستم عامل این درخواست رو ازش میکنی .
    این دیگه چه ربطی به اسمبلی داره ؟
    اگه Allocate با اشکال روبرو میشه یا داخل Virtual Memory Space فضایی نیست یا داخل Physical Memory یا مشکل دیگه ای هست چه ربطی داره به اسمبلی ؟

    چرا که کامپیوتر درکی از اعداد بزرگ مثل ده میلیارد نداره
    چی میگی ؟ با 32 بیت نمیشه این عدد رو پوشش داد ولی این ربطی به کامپیوتر نداره . شما با 64 بیت یا 128 بیت میتونی این عدد رو پوشش بدی.

    اخه کدوم ادمی میاد سرعت رو اینجوری با سی بیاره پایین؟برای محاسبات نیاز به سرعت هست که به نظر من اسمبلی بهترین گزینه هست و این کاری که شما می کنین عملا یعنی کم کردن سرعت کامپیوتر.

    من ایرادی از این دستور نگرفتم.ولی با این عدد میخواین چی کار کنین؟
    86000000000000000000000000000

    اینجا هم جواب میده؟
    بله ولی سرعت خیلی پایین میاد.

    اولی تو اسمبلی شما اصلا افت سرعت ندارین
    آقا یکم فکر کن چی میگی .
    شما با این عدد (86000000000000000000000000000) چی کار میکنی ؟ نکنه میتونی تو رم همیچین Block ی اختصاص بدید ؟

    کد اسمبلیت هم اشتباهه ! همینطوری اومدی یه آدرس از Virtual Memory رو آدرس دادی بعد مقدارشم تغییر دادی ! نه Allocation ی نه چیزی !

    برادر انقدر الکی رو اشتباهی که میکنی پافشاری نکن ! چرا اینقد کل کل میکنی ؟

  21. #21
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1388
    پست
    45

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    با کدی که من نوشتم میشه از خونه های رم استفاده کرد.راستی هدفم هم Allocation کردن نبود چون نه تنها من کل بچه های تاپیک هم نمیتونن Allocation رو فقط و به طور خالص با اسمبلی بنویسن.حالا هی بیاین بگین Allocation نکردی.مگه فقط باید Allocation کرد ؟میشه با 10000راه یک برنامه رو نوشت.
    درضمن من نگفتم به اسمبلی ربط داره یکم فک کن ببین چی داری میخونی.گفتم چرا از اسمبلی استفاده نمیکنی؟(حالا هیییییی بیا بگو چه ربطی به اسمبلی داره)
    کسی که سوال پرسیده (در واقع هدف تاپیک ) در مورد Memory Allocation هست . پس اگه هدفت از Allocation کردن نبود پس کلا پست هات Off-Topic بود .
    اگه بحث خاصی داری که میخوای در بارش بحث کنی یه تاپیک درست کن تا تاپیک های دیگه منحرف نشه.
    از کجا انقدر مطمءنی که کسی نمیتونه یه Allocator پیاده سازی کنه ؟
    بله "باید" کلا هر برنامه ای از Memory Allocation استفاده میکنه ! چه این Allocation از Stack باشه چه از Heap چه از ... شما بدونه Allocation بنویس تا اسمت تو کتاب گینس نوشته بشه .
    شما داری مشکل رو میزنی رو حساب زبان C و میگی از Assembly استفاده کن در صورتی که مشکل از جای دیگه ای هست .

    در ضمن قرار نیست تو حالت kernel باشه مگه بیماریم.منظور من از کامل اینه که میشه برنامه رو نوشت.وگر نه برای کرنال یه عالمه باید مطالعه کرد تا سیستم از protect mode در بیاد.اینو خودم تو زمان هک بازی ها متوجه شدم که نمیشه مقداری که مثلا تو 0x7899ea هست رو پیدا کرد
    هرچی فک میکنم نمیدونم چه ربطی داره !
    بیخیال آقا ;)

  22. #22
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    احتمالا هیچ وقت نیاز ندارم deep blue رو درک کنم چون هیچوقت ازش استفاده نمیکنم.
    ولی چون نیاز دارم gc ه .net رو درک کنم مشابهش رو نوشتم که مطمئن بشم میفهمم چطور کار میکنه.
    من نیاز ندارم این چیزها رو به شما توضیح بدم.لطفا off-topic پست ندید.

    @sibooy:
    VirtualAlloc/VirtualFree جواب داد؟
    در سیستم های (posix(linux/unix باید از mmap64/munmap64 استفاه کنید.

  23. #23
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    اگر میدونستی برنامه ی اسمبلیت مشکل نداشت.و فایل exe رو میزاشتی اینجا.

  24. #24
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    1.من فقط میتونم elf بزارم اینجا(آواتارم رو ببین)
    2.کد من ۶۴ بیته.منم وقتی ۱۵ سالم بود ۱۶ بیت مینوشتم.

  25. #25
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    اگر میشه با 64 بیت نوشت 100% هم میشه با 16بیت نوشت ولی طولانی تر میشه.چون نمیشه از ماکروهای از پیش نوشته استفاده کرد.

  26. #26
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    نقل قول نوشته شده توسط darknes666 مشاهده تاپیک
    اگر میشه با 64 بیت نوشت 100% هم میشه با 16بیت نوشت ولی طولانی تر میشه.چون نمیشه از ماکروهای از پیش نوشته استفاده کرد.
    380*380*96*94 *4 bytes per item

    5212262400B
    چطوری میخواهی با سیستم ۱۶ بیتی با این مقدار حافظه کار کنی؟ Memory Mapped File؟
    در ضمن اون کد ۳ خطی که اول گزاشتم رو با GCC کامپایل کردم شد ۱۷۰ خط که ۸۰ خطش مفید بود.
    وقتی راه حل بهتر هست لازم نیست کار رو سخت انجام بدید حتی اگر سرعتش بیشتر باشه(که نیست)

  27. #27
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    نه با سیستم 16 بیتی با اسمبلی که رجیستر هاش 16 بیتی هست میگم.

  28. #28
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    نقل قول نوشته شده توسط darknes666 مشاهده تاپیک
    نه با سیستم 16 بیتی با اسمبلی که رجیستر هاش 16 بیتی هست میگم.
    باز هم نمیتونید آدرس بدید.
    challenge ه تعداد بیت نیست.میخواهیم بیش از ۴ گیگ حافظه allocate کنیم ترجیحا با C++‎.
    واقعا که نمیخواهی برای رسیدن به 1234567890 شصت هزار بار RAX رو با cx جمع کنی؟

  29. #29
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎‎ 2010

    خب میشه ماکرو های خود نویس نوشت کار رو اسون تر میکنه.میشه بیشتر از 4گیگ هم allocate کرد ولی برای رزرو بیشتر از 4gig میرن تو kernel mode

  30. #30

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    نقل قول نوشته شده توسط __UFNHGGI_H__ مشاهده تاپیک
    اسمبل و CLR چ ربطی داره
    با ی new یا malloc ساده کار تمومه من نمی دونم چرا ایشون حی می گن نمیشه

    اجرا منظورت چیه
    کامپایل
    موقع دیباگ خطا میده
    خطا چیه و ..
    کامل بگو
    سلام به همه دوستان
    خدا رو شکر از محبت همه تون سپاسگزارم.
    با heap اجرا نمی کنه. یعنی وقتی دکمه اجرا رو می زنم خطا نمیگیره در سکوت کامل اجرا هم نمی کنه. بذارید ببینم هرچی پیغام داشته باشه براتون می نویسم.
    درضمن مسئله اینه که من باید برنامه رو روی cuda هم اجرا کنم نمی تونم یه اجرا رو ببرم توی اسمبلی یه اجرا رو بذارم توی C++‎‎ باشه که.
    اینم بگم که ویندوزم 64 بیتی هست و هشت گیگ هم رم دارم.

  31. #31

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    میشه انقدر بحث بیخودی نکنین دوستان. بذارید من اصل قضیه رو بگم.
    من دارم روی یه الگوریتم ستاره شناسی کار می کنم. یه فضای خاصی رو باید پردازش کنه. یه بازه خاصی هست با مختصات x و y و z خب؟
    من باید اینو بصورت موازی برنامه نویسی کنم که خدا رو شکر کردم. اما به خاطر همین خطای زیر
    fatal error LNK1248: image size (994EB000) exceeds maximum allowable size (80000000)
    مجبور شدم فضای محاسباتم رو از هر بُعد به نصف کاهش بدم.
    گرفتین؟ من حدود 95 تا آرایه 96*380*380 دارم که باید محاسبه کنم اما همون خطای بالا مانع میشه. ابعاد آرایه رو کردم 46*190*190
    آرایه هام هم همه از نوع دابل هستن.
    لطفا بدون اینکه خون خودتونو کثیف کنید و عین خروس جنگی بهم بپرید لطفا بگید چی کار کنم؟
    اون تنظیمات اول جواب نداد. heap جواب نمی ده. از اسمبلی هم نمیتونم استفاده کنم. شاید تنظیمات دیگه ای داره بگید.
    اون قطعه کد رو هم اجرا می کنم ببینم چی میشه.
    ممنون فقط لطفا دعوا نکنید.

  32. #32
    کاربر دائمی آواتار saied_hacker
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    404 Not Found
    پست
    703

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    نقل قول نوشته شده توسط sibooy مشاهده تاپیک
    من حدود 95 تا آرایه 96*380*380 دارم که باید محاسبه کنم اما همون خطای بالا مانع میشه. ابعاد آرایه رو کردم 46*190*190
    آرایه هام هم همه از نوع دابل هستن.
    کدت رو بزار ببینیم چطور تعریف کردی ...

  33. #33
    کاربر دائمی آواتار مصطفی ساتکی
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    www.7khatcode.com
    پست
    1,193

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    نقل قول نوشته شده توسط sibooy مشاهده تاپیک
    سلام
    من یک آرایه بزرگ دارم که باید حجمشون 380*380*96*94 باشه. این کار رو در ویژوال استودیو C++‎‎‎‎ انجام می دم. اما ایراد میگیره و میگه باید حجمش انقدر نباشه. من مجبورم آرایه رو 94*48*190*190 تعریف کنم.
    من به اندازه کافی هم ram دارم.
    استادم میگه که ویژوال استودیو تنظیماتی داره که باید عوض بشه تا بتونه این آرایه ها رو هم قبول کنه.
    کسی هست که بدونه چه تنظیماتی هست؟
    من از ویژوال استودیو 2010 C++‎‎‎‎ استفاده می کنم.
    تروخدا کمکم کنید
    وقتی شما malloc می کنید سیستم عامل فضایی را که در اختیار شما قرار میده به صورت پیوسته هستش و اگر memory fragment باعث بشه اون فضا به صورت پیوسته وجود نداشته باشه malloc مقدار صفر بر می گردونه بهترین راه حل این هستش که به صورت بلوک های کوچک تر malloc کنید مثلاً 100mg برای هر بلوک و سپس خودتون مدیریت کنید تو سیستم های HPC هم اغلب از این تکنیک استفاده میشه.

  34. #34

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    ببینید این کاملا درست اجرا می شه

    #define DATAXSIZE 190
    #define DATAYSIZE 190
    #define DATAZSIZE 96
    #define DATASIZE 66

    const int nx = DATAXSIZE;
    const int ny = DATAYSIZE;
    const int nz = DATAZSIZE;
    const int nl = DATASIZE;


    if ((vv = (MATRIX *)malloc((nl*nx*ny*nz)*sizeof(float))) == 0) {fprintf(stderr,"malloc1 Fail \n"); return 1;}




    اما این اجرا نمی شه

    #define DATAXSIZE 380
    #define DATAYSIZE 380
    #define DATAZSIZE 48
    #define DATASIZE 66

    const int nx = DATAXSIZE;
    const int ny = DATAYSIZE;
    const int nz = DATAZSIZE;
    const int nl = DATASIZE;


    if ((vv = (MATRIX *)malloc((nl*nx*ny*nz)*sizeof(float))) == 0) {fprintf(stderr,"malloc1 Fail \n"); return 1;}




    همونطور که گفتم پیغام خطا هم نمیده
    این همه پیغاماییه که موقع اجرای آرایه های 380 میده
    'cu3.exe': Loaded 'C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\C\src\cu3 - Copy\Release\cu3.exe', Symbols loaded.
    'cu3.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file
    'cu3.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file
    'cu3.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file
    'cu3.exe': Loaded 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\bin\cudart32_42_9.dll', Binary was not built with debug information.
    'cu3.exe': Loaded 'C:\Windows\SysWOW64\msvcr100.dll', Cannot find or open the PDB file
    The program '[1632] cu3.exe: Native' has exited with code 1 (0x1).

    و دیگر هیچ
    من باید برای استفاده از cuda از heap استفاده می کردم
    ممنون می شم راهنمایی اگه دارین بدون دعوا مرافعه بفرمایید
    آخرین ویرایش به وسیله sibooy : چهارشنبه 08 خرداد 1392 در 19:27 عصر

  35. #35
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    image size؟
    چرا آرایه رو static تعریف کردین؟
    باید موقعی که نیاز دارید این مقدار رو malloc/new کنید.
    در ضمن روشتون ۱۰۰٪ غلطه.
    برای این جور کارها از ماتریسهای sparse و finger-tree و B* Tree و radix-sort و radix-index و consistent-hashing و این جور الگوریتم ها استفاده میشه که با توجه به اینکه از array استفاده کردید میشه شرط بست که از هیچ کدوم از اینها استفاده نکردید.که باعث کاهش شدید کارایی برنامتون میشه.با این مقدار رم میشه کارهای خیلی بزرگتری انجام داد.
    اگر هم حجم محاسباتتون خیلی بالاست و فکر میکنید array از این روشها به صرفه تر هست(معمولا از هیچ جهتی نیست) پیشنهاد میکنم برای این نوع پردازش ها حتما یک سری به OpenCL و CUDA بزنید

  36. #36

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    با اینم نشد
    ببینید محاسبات مبروط به ستاره شناسی هست. درخت و اسپارس و . . . نه. من آرایه می خوام
    بدون const هم نمی شه

    int nx = 380;
    int ny = 380;
    int nz = 96;
    int nl = 66;

  37. #37
    کاربر دائمی آواتار مصطفی ساتکی
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    www.7khatcode.com
    پست
    1,193

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    مثل اینکه ما هرچی می گیم شما حرف خودتونو می زنید و اصلاً هم به موارد گفته شده توجه نمی کنید شما اگر میخاید با cuda پروسس کنید می دونید نرخ انتقال از host به device چقدر زیاد میشه .

  38. #38

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    کد رو بزار
    اون خطا واس اینه ک حالت استاتیک حافظه گرفتی و حجمش زیاد هست
    96*380*380 تا دابل میشه 110 مگ . خیلی خیلی زیاده
    بیشتر از 16 مگ نگیری بهتره چون تا هردفعه ک برنامه رو اجرا می کنی ممکنه اون قدر فضای خالی پیدا نشه .
    می تونی از چند تا ارایه استفاده کنی عوض اینکه یهو کلی فضا بگیری
    اینطوری

    #define HEAPSIZE 256000
    #define ALLOCKCOUNT 8192

    double* arr[ALLOCKCOUNT];
    for(int i = 0; i < ALLOCKCOUNT; i++)
    arr[i] = new double[HEAPSIZE];

    double GetItem(int index)
    {
    return arr[index/HEAPSIZE][index % HEAPSIZE];
    }


    double a = GetItem(1231231);

  39. #39
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    ممکنه بیشتر کد بزارید؟
    کپی HostToDevice و ساختار ماتریکس و کرنل و اینها رو هم اگر یک مقدار توضیح بدید بد نیست.چون فکر میکنم Device تون حافظه کافی نداره.(راه حل داره)

    Note:برای CUDA پیشنهاد میکنم حتما از NSight استفاده کنید.واقعا امکانات خوبی داره(یکیش تشخیص همین مورد حافظه کم)(من ازش راضیم)
    آخرین ویرایش به وسیله FastCode : چهارشنبه 08 خرداد 1392 در 19:46 عصر

  40. #40

    نقل قول: انجام تنظیمات برای پذیرش آرایه های بزرگ مقیاس در VS C++‎ 2010

    مثل اینکه ما هرچی می گیم شما حرف خودتونو می زنید و اصلاً هم به موارد گفته شده توجه نمی کنید شما اگر میخاید با cuda پروسس کنید می دونید نرخ انتقال از host به device چقدر زیاد میشه .
    با cuda نوشتم. انقدر حجم محاسبات سنگین هست که با وجود زمان نیاز به انتقال از حافظ ها، برنامه من speedup ی حدود هفتاد برابر داره.
    و اگر بتونم اندازه اصلی محاسبات رو به کار ببرم خیلی خیلی speedup قوی خواهم داشت.
    مثلا همین محاسبات روی فضای دوبعدی چون حجم محاسبات کم می شه زمان انتقال از حافظه ها حسابی خودشو نشون می ده. ولی توی سه بعدی اساسی می ارزه

    من هشت گیگ رم دارم بابا می خوام تا جایی که ممکنه فضای محاسبات رو گسترش بدم. اصلا امکان داره؟

صفحه 1 از 2 12 آخرآخر

تاپیک های مشابه

  1. مبتدی: اجرا کردن و انجام تنظیمات برای برنامه تحت ویندوز
    نوشته شده توسط mehrdad85 در بخش C#‎‎
    پاسخ: 8
    آخرین پست: چهارشنبه 03 خرداد 1391, 09:10 صبح
  2. سوال: تعریف آرایه های بزرگ
    نوشته شده توسط mahdi bg در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 5
    آخرین پست: شنبه 18 خرداد 1387, 00:29 صبح
  3. انجام پروژه برای شرکت های خارجی
    نوشته شده توسط akbaro در بخش C#‎‎
    پاسخ: 2
    آخرین پست: سه شنبه 10 اردیبهشت 1387, 06:40 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •