سؤال

أحاول قياس عدد دورات الساعة اللازمة لتنفيذ جزء من التعليمات البرمجية على TMS32064x+ DSP الذي يأتي مع OMAP ZOOM 3430 MDK.ألقيت نظرة على "دليل المبرمج" الخاص بشريحة DSP ووجدت أن DSP يدعم وظيفة الساعة ().

ما أفعله بسيط جدًا، أفعله فقط

start = clock();
for (i=0;i<100;i++){
    /* do something here */
}
stop = clock();
total = stop - start;

ثم قم بوضع قيم "start" و"stop" و"total" على الذاكرة المشتركة المخصصة مسبقًا مع معالج ARM.ثم أقوم ببساطة بطباعته على الشاشة على جانب ARM.

المشكلة هي أنه في عمليات التنفيذ الأولى، أحصل دائمًا على نفس القيمة "الإجمالية"، ثم في عمليات التشغيل التالية أحصل دائمًا على 0!تتوافق قيمتا "البدء" و"الإيقاف" مع القيمة "الإجمالية".

أغرب شيء هو أنهم يبدو أنهم يتبعون نمطًا بسيطًا!أضع الإخراج أدناه:

# ./sampleapp
Total = 63744
Start clock() value = 0x000000f9
Stop  clock() value = 0x0000f9f9
# ./sampleapp 
Total = 4177526784
Start clock() value = 0x00f9f9f9
Stop  clock() value = 0xf9f9f9f9
# ./sampleapp
Total clock cyles = 0
Start clock() value = 0xf9f9f9f9
Stop  clock() value = 0xf9f9f9f9

من الواضح أن Clock() لا تعمل بشكل جيد، لكنني لست متأكدًا مما إذا كان هذا بسبب شيء خاطئ أفعله أو لأن هذا النوع من الأشياء غير مدعوم بالأجهزة التي أملكها.أي أفكار لماذا هذا يمكن أن يحدث؟

هل كانت مفيدة؟

المحلول

ومن قراءة الأسئلة حتى الآن، وانا اقول الملصق الأصلي لديه أكثر بكثير معرفة هذه المسألة من المساهمين حتى الآن، وأن الشك أن الساعة () مكسورة (أو غير معتمدة، وإرجاع غير معروف نتيجة) على DSP يبدو من المرجح للغاية.

نصائح أخرى

من الغريب، لماذا تحتاج إلى المخصصة سابقا ذكريات مشتركه.لماذا لا تجرب باستخدام متغير المكدس العادي؟هل هناك أي شيء أفتقده؟

وربما تحتاج إلى تهيئة مدار الساعة لأول مرة.

وكيف حالك طباعته؟ ربما هذه القضية هي في الواقع مع عرض النتيجة؟

وعلى معظم المنصات clock_t هو عملية طويلة طويلة. إذا كنت تستخدم printf مع٪ د قد تحصل على نتائج متغيرة وهو ما ترونه.

وإذا افترضنا بداية ومتغير نهاية هم من النوع 'clock_t، والذاكرة المشتركة يفترض نفسه على تفسير الطرف الآخر من الأرقام مرت، ثم مشكلتك ليست مع الدعوة إلى عقارب الساعة، وhandleing بك من الفرق بين بداية نهاية الأزمنة الأخيرة.

وأعتقد أن المشكلة هي في الذاكرة المشتركة بين البلدين. يمكنك الرجاء الرد على كود لاظهار كيف كنت تستخدم الذاكرة المشتركة بين اثنين من المعالجات منفصلة؟

ربما يمكنك استخدام بعض التجميعات المضمنة للوصول إلى سجلات عدادات وحدة المعالجة المركزية مباشرة.

يحتوي TMS320C64x+ على سجل طابع زمني 64 بت في TSCL، TSCH. العداد غير مفعل عند إعادة الضبط، يجب عليك أولاً الكتابة إلى السجل لبدء العداد (ربما تكون هذه هي المشكلة في clock؟).القراءة من السجل ليست تافهة تمامًا حيث يجب قراءة كل نصف بتعليمات منفصلة (ويمكنك الحصول على المقاطعات...).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top