كيفية جعل أداة التنميط بسيطة لبرامج OpenCL؟

لدي مهمة لإنشاء أداة تعريف بسيطة (winOS) لتحليل الأداء/التوقيت/الحدث لبرامج OpenCL. يمكن للشخص تقديم المشورة كيفية البدء؟

0

2 إجابة

أبسط واحد ويعمل بدقة على جميع المنصات:

  cl_event perfEvent;
  cl_ulong start=0, end=0;
  float t_kernel;

  /* Enqueue kernel */
  clEnqueueNDRangeKernel(commandQueue, kernel, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, &perfEvent);
  clWaitForEvents( 1, &perfEvent );

  /* Get the execution time */
  clGetEventProfilingInfo(perfEvent, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &start, NULL);
  clGetEventProfilingInfo(perfEvent, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &end, NULL);
  t_kernel = (end-start)/1000000.0f;
  std::cout << t_kernel << std::endl;
0
وأضاف
هذا مفيد! كنت أتساءل أنه من الممكن تنفيذ هذا بطريقة أو بأخرى خارج من برنامج OpenCL ، لجعل تطبيق بسيط مع واجهة المستخدم الرسومية أضيق الحدود في Visual Studio؟ إذا كانت الإجابة بنعم ، هل يمكن أن توضح كيف يمكن القيام به (من الناحية المفاهيمية) حتى يمكن استخدامه في برامج OpenCL مختلفة.
وأضاف المؤلف pu7nik, مصدر
نعم ، قصدت وضع ملف تجميعي ، وليس لدي أدنى فكرة عن كيفية عمل أداة التعريف (نماذج أخذ العينات والأدوات الخاصة بالتوصيف). حسنا ، أنا أفترض أن رمز من أعلاه هو أداة شكل التنميط. في الوقت الحالي ، سوف أنظر إلى أساليب التنميط وأشكرك على جهودك
وأضاف المؤلف pu7nik, مصدر
هل تعني أنك تريد إنشاء ملف ثنائي/مترجم؟ في هذه الحالة ، أنت تتعامل مع الرموز ، ربما الأمر nm -anC سيحصل عليك في مكان ما ولكن لست متأكداً إذا كان هذا هو ما تريده. مستخلصات نانومتر كل الرموز الدالة ، لذلك ربما يمكنك بدء قياس الوقت بعد استدعاء clEnqueueNDRangeKernel ..
وأضاف المؤلف ardiyu07, مصدر
وربما يحدث هذا أيضًا في مكان ما: gremedy.com/gDEBuggerCL.php
وأضاف المؤلف ardiyu07, مصدر

Take a look at AMD CodeXL. It's free and it might be just what you are looking for. Inside CodeXL, use the Application Timeline Trace mode (Profile -> Application Timeline Trace), which executes a program and generates a visual timeline that displays OpenCL events like kernel dispatch and data transfer operations.

0
وأضاف