انٹیل - لوگوOpenCL کسٹم پلیٹ فارمز کے لیے FPGA SDK میں متضاد میموری سسٹمز بنانا
ہدایات

OpenCL کسٹم پلیٹ فارمز کے لیے Intel® FPGA SDK میں متفاوت میموری سسٹمز بنانا

اپنی مرضی کے پلیٹ فارم میں متضاد میموری کا نفاذ زیادہ بیرونی میموری انٹرفیس (EMIF) بینڈوتھ کے ساتھ ساتھ بڑی اور تیز میموری تک رسائی کی اجازت دیتا ہے۔ ایک آپٹمائزڈ کے ساتھ ہیٹروجینس میموری تک رسائی کا مجموعہ
اوپن سی ایل ™(1) کرنل آپ کے اوپن سی ایل سسٹم کی کارکردگی میں نمایاں بہتری کا باعث بن سکتا ہے۔
یہ ایپلیکیشن نوٹ OpenCL(2) کے لیے Intel® FPGA SDK کے ساتھ استعمال کے لیے اپنی مرضی کے پلیٹ فارم میں متضاد میموری سسٹم بنانے کے لیے رہنمائی فراہم کرتا ہے۔ Intel فرض کرتا ہے کہ آپ ایک تجربہ کار FPGA ڈیزائنر ہیں جو اپنی مرضی کے پلیٹ فارم تیار کر رہے ہیں جس میں متفاوت میموری سسٹمز شامل ہیں۔
متضاد میموری سسٹم بنانے سے پہلے، ذیل میں بیان کردہ OpenCL دستاویزات کے لیے Intel FPGA SDK سے واقف ہوں۔
متعلقہ معلومات

  • OpenCL پروگرامنگ گائیڈ کے لیے Intel FPGA SDK
  • Intel FPGA SDK برائے OpenCL بہترین پریکٹسز گائیڈ
  • Intel FPGA SDK برائے OpenCL Arria 10 GX FPGA ڈویلپمنٹ کٹ ریفرنس پلیٹ فارم پورٹنگ گائیڈ

1.1 FPGA بورڈ اور EMIF انٹرفیس کی فعالیت کی تصدیق کرنا

ہر میموری انٹرفیس کی آزادانہ طور پر تصدیق کریں اور پھر عالمی میموری کا استعمال کرتے ہوئے اپنے کسٹم پلیٹ فارم کو انسٹینٹیٹ کریں۔

  1. ہر میموری انٹرفیس کی تصدیق ہارڈویئر ڈیزائنز کا استعمال کرتے ہوئے کریں جو ہر انٹرفیس کی رفتار اور استحکام کو جانچ سکتے ہیں۔
  2. عالمی میموری کا استعمال کرتے ہوئے اپنا حسب ضرورت پلیٹ فارم انسٹیٹیوٹ کریں۔
    1. سابق کے لیےampلی، اگر آپ کے پاس تین DDR انٹرفیس ہیں، تو ان میں سے ایک کو متضاد میموری کے طور پر میپ کیا جانا چاہیے۔ اس صورت میں، آزادانہ طور پر ہر DDR انٹرفیس کے ساتھ OpenCL اسٹیک کی فعالیت کی تصدیق کریں۔
      OpenCL اور OpenCL لوگو Apple Inc. کے ٹریڈ مارک ہیں جو Khronos Group™ کی اجازت سے استعمال ہوتے ہیں۔
    2.  OpenCL کے لیے Intel FPGA SDK ایک شائع شدہ Khronos Specification پر مبنی ہے، اور Khronos Conformance ٹیسٹنگ کے عمل کو پاس کر چکا ہے۔ موجودہ موافقت کی حیثیت پر پایا جا سکتا ہے www.khronos.org/conformance۔

انٹیل کارپوریشن۔ جملہ حقوق محفوظ ہیں. Intel، Intel لوگو، اور Intel کے دیگر نشانات Intel Corporation یا اس کے ذیلی اداروں کے ٹریڈ مارک ہیں۔ Intel اپنی FPGA اور سیمی کنڈکٹر مصنوعات کی کارکردگی کو Intel کی معیاری وارنٹی کے مطابق موجودہ تصریحات کی ضمانت دیتا ہے، لیکن بغیر اطلاع کے کسی بھی وقت کسی بھی مصنوعات اور خدمات میں تبدیلیاں کرنے کا حق محفوظ رکھتا ہے۔ Intel یہاں بیان کردہ کسی بھی معلومات، پروڈکٹ، یا سروس کے اطلاق یا استعمال سے پیدا ہونے والی کوئی ذمہ داری یا ذمہ داری قبول نہیں کرتا ہے سوائے اس کے کہ Intel کی طرف سے تحریری طور پر واضح طور پر اتفاق کیا گیا ہو۔ انٹیل کے صارفین کو مشورہ دیا جاتا ہے کہ وہ کسی بھی شائع شدہ معلومات پر بھروسہ کرنے سے پہلے اور مصنوعات یا خدمات کے آرڈر دینے سے پہلے ڈیوائس کی تفصیلات کا تازہ ترین ورژن حاصل کریں۔ *دیگر ناموں اور برانڈز پر دوسروں کی ملکیت کے طور پر دعویٰ کیا جا سکتا ہے۔
ISO 9001:2015 رجسٹرڈ
متبادل طور پر، اگر آپ کے پاس دو DDR انٹرفیس اور ایک کواڈ ڈیٹا ریٹ (QDR) انٹرفیس ہے، تو آزادانہ طور پر دو DDR انٹرفیس اور QDR انٹرفیس کے OpenCL اسٹیک کی فعالیت کی تصدیق کریں۔
Intel تجویز کرتا ہے کہ آپ اپنے میموری انٹرفیس کو جانچنے کے لیے PCI Express® - (PCIe® -) یا EMIF-exclusive ڈیزائن استعمال کریں۔ اس بات کی تصدیق کرنے کے بعد کہ ہر میموری انٹرفیس فعال ہے اور یہ کہ آپ کا OpenCL ڈیزائن میموری انٹرفیس کے سب سیٹ کے ساتھ کام کرتا ہے، آگے بڑھیں۔
ایک مکمل طور پر فعال متضاد میموری سسٹم بنانے کے لیے۔ 
1.2 board_spec.xml میں ترمیم کرنا File
board_spec.xml میں ترمیم کریں۔ file متضاد میموری سسٹمز کی ان اقسام کی وضاحت کرنے کے لیے جو OpenCL کرنل کے لیے دستیاب ہیں۔
کرنل کمپلیشن کے دوران، اوپن سی ایل آف لائن کمپائلر کے لیے انٹیل ایف پی جی اے ایس ڈی کے بفر لوکیشن آرگیومینٹ کی بنیاد پر میموری کو کرنل آرگیومنٹ تفویض کرتا ہے جس کی آپ وضاحت کرتے ہیں۔
1. board_spec.xml پر براؤز کریں۔ file آپ کے کسٹم پلیٹ فارم کی ہارڈ ویئر ڈائرکٹری میں۔
2. board_spec.xml کھولیں۔ file ٹیکسٹ ایڈیٹر میں اور اس کے مطابق XML میں ترمیم کریں۔
سابق کے لیےampلی، اگر آپ کے ہارڈویئر سسٹم میں دو ڈی ڈی آر میموریز بطور ڈیفالٹ گلوبل میموری اور دو کیو ڈی آر بینک ہیں جنہیں آپ متضاد میموری کے طور پر ماڈل کرتے ہیں، تو board_spec.xml کے میموری سیکشنز میں ترمیم کریں۔ file مندرجہ ذیل سے مشابہت:
















1.3 Qsys میں ایک سے زیادہ میموری تقسیم کرنے والوں کو ترتیب دینا
فی الحال، Qsys ڈیزائن میں اوپن سی ایل میموری بینک ڈیوائیڈر نان پاور آف 2 میموری بینکس کی حمایت نہیں کرتا، جو کہ عام کنفیگریشنز کے لیے کوئی حد نہیں ہے۔ تاہم، ایسے منظرنامے ہیں جہاں میموری انٹرفیس کی 2 نمبر کی طاقت نہ ہونے کی ضرورت ہے۔ غیر پاور آف 2 میموری انٹرفیس کو ایڈجسٹ کرنے کے لیے، ایک سے زیادہ اوپن سی ایل میموری بینک ڈیوائیڈرز استعمال کریں تاکہ غیر پاور آف 2 میموری بینکوں کے ساتھ متضاد میموری سسٹم بنائیں۔ جب آپ کے پاس ایک حقیقی متضاد میموری سسٹم ہو تو آپ کو متعدد OpenCL میموری بینک ڈیوائیڈرز بنانے چاہئیں۔ ایک DDR میموری انٹرفیس اور ایک QDR میموری انٹرفیس والے سسٹم پر غور کریں۔ چونکہ دونوں بینکوں میں مختلف میموری ٹوپولاجیز ہیں، آپ انہیں ایک عالمی میموری کے تحت یکجا نہیں کر سکتے۔
شکل 1. تین بینکوں کے متضاد میموری سسٹم کا بلاک ڈایاگرام
اس متفاوت میموری سسٹم میں دو DDR میموری انٹرفیس اور ایک QDR میموری انٹرفیس ہے۔انٹیل اوپن سی ایل کسٹم پلیٹ فارمز کے لیے FPGA SDK میں متضاد میموری سسٹمز بنا رہا ہے - تصویر 1اگر آپ Intel Quartus® Prime سافٹ ویئر کا ورژن 16.0، 16.0.1، یا 16.0.2 استعمال کر رہے ہیں اور OpenCL کے لیے Altera SDK، OpenCL میموری بینک ڈیوائیڈر ایڈریس کی حدود میں میموری برسٹ کو غلط طریقے سے ہینڈل کرتا ہے۔ اس معلوم مسئلے پر کام کرنے کے لیے، 1 کے برسٹ سائز کے ساتھ ایک پائپ لائن پل شامل کریں اور اس کے Avalon ®Memory-Mapped (Avalon-MM) ماسٹر کو OpenCL Memory Bank Divider کے غلام پورٹ سے جوڑیں۔
نوٹ:
یہ معلوم مسئلہ Intel Quartus Prime سافٹ ویئر اور Intel FPGA SDK برائے OpenCL ورژن 16.1 میں طے کیا گیا ہے۔
پیکر 2. پائپ لائن برج کے ساتھ تھری بینک ہیٹروجنیئس میموری سسٹم کا بلاک ڈایاگرام انٹیل اوپن سی ایل کسٹم پلیٹ فارمز کے لیے FPGA SDK میں متضاد میموری سسٹمز بنا رہا ہے - تصویر 21.4 آپ کے متفاوت میموری کے حل کے لیے بورڈ ٹیسٹ پروگرام اور میزبان کوڈ میں ترمیم کرنا
اپنے کسٹم پلیٹ فارم کی فعالیت اور کارکردگی کو جانچنے کے لیے OpenCL کسٹم پلیٹ فارم ٹول کٹ کے لیے Intel FPGA SDK کے ساتھ آنے والا boardtest.cl کرنل استعمال کریں۔
بورڈٹیسٹ پروگرام ایک اوپن سی ایل کرنل ہے جو آپ کو میزبان سے ڈیوائس بینڈوڈتھ، میموری بینڈوڈتھ، اور آپ کے کسٹم پلیٹ فارم کی عمومی فعالیت کو جانچنے کی اجازت دیتا ہے۔

  1. کو براؤز کریں۔ /board/ custom_platform_toolkit/tests/boardtest ڈائریکٹری۔
  2. boardtest.cl کھولیں۔ file ٹیکسٹ ایڈیٹر میں اور ہر عالمی میموری دلیل کو بفر لوکیشن تفویض کریں۔
    سابق کے لیےampلی:
    __کرنل باطل
    mem_stream (__global__attribute__((buffer_location("DDR"))) uint *src, __global __attribute__((buffer_location("QDR"))) uint *dst, uint arg, uint arg2)
    یہاں، uint *src کو DDR میموری کو تفویض کیا گیا ہے، اور uint *dst کو QDR میموری کو تفویض کیا گیا ہے۔ board_spec.xml file دونوں میموری سسٹمز کی خصوصیات بیان کرتا ہے۔
  3. اپنے OpenCL سسٹم میں اپنے متفاوت میموری حل کا فائدہ اٹھانے کے لیے، اپنی clCreateBuffer کال میں CL_MEM_HETEROGENEOUS_INTELFPGA پرچم شامل کرکے اپنے میزبان کوڈ میں ترمیم کریں۔
    سابق کے لیےampلی:
    ddatain = clCreateBuffer(سیاق و سباق، CL_MEM_READ_WRITE | memflags
    CL_MEM_HETEROGENEEOUS_INTELFPGA، سائز کا (غیر دستخط شدہ) * ویکٹر سائز، NULL، &status)؛
    انٹیل سختی سے تجویز کرتا ہے کہ آپ بفر لکھنے سے پہلے بفر لوکیشن کو کرنل آرگومنٹ کے طور پر سیٹ کریں۔ ایک عالمی میموری استعمال کرتے وقت، آپ بفرز کو کرنل آرگومنٹ میں تفویض کرنے سے پہلے یا بعد میں لکھ سکتے ہیں۔ متضاد میموری سسٹم میں، میزبان بفر کو لکھنے سے پہلے بفر کی جگہ کا تعین کرتا ہے۔ دوسرے الفاظ میں، میزبان clEnqueueWriteBuffer فنکشن کو کال کرنے سے پہلے clSetKernelArgument فنکشن کو کال کرے گا۔
    اپنے میزبان کوڈ میں، درج ذیل ترتیب میں clCreateBuffer، clSetKernelArg، اور clEnqueueWriteBuffer کالز کو طلب کریں:
    ddatain = clCreateBuffer(سیاق و سباق، CL_MEM_READ_WRITE | memflags |
    CL_MEM_HETEROGENEEOUS_INTELFPGA، سائز کا (غیر دستخط شدہ) * ویکٹر سائز، NULL، &status)؛
    … status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem)، (void*)&ddatain؛
    … status = clEnqueueWriteBuffer(queue, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
    ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file ان فنکشن کالز کا ایک ہی ترتیب پیش کرتا ہے۔
  4.  boardtest.cl میں ترمیم کرنے کے بعد file اور میزبان کوڈ، میزبان اور کرنل کوڈ کو مرتب کریں اور ان کی فعالیت کی تصدیق کریں۔
    اپنے کرنل کوڈ کو مرتب کرتے وقت، آپ کو -no-interleaving کو شامل کرکے تمام میموری سسٹمز کے برسٹ انٹرلیونگ کو غیر فعال کرنا ہوگا۔ aoc کمانڈ میں آپشن۔

متعلقہ معلومات
گلوبل میموری کی برسٹ-انٹرلیونگ کو غیر فعال کرنا (-نہیں-انٹرلیونگ )

1.5 آپ کی متضاد میموری کی فعالیت کی تصدیق کرنا سسٹم
اس بات کو یقینی بنانے کے لیے کہ متفاوت میموری سسٹم صحیح طریقے سے کام کرتا ہے، اپنے میزبان کوڈ میں CL_CONTEXT_COMPILER_MODE_INTELFPGA پرچم کو غیر سیٹ کریں۔
یکساں میموری والے OpenCL سسٹمز میں، آپ کو .aocx کی ریڈنگ کو غیر فعال کرنے کے لیے اپنے میزبان کوڈ میں CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 جھنڈا سیٹ کرنے کا اختیار دینا ہوگا۔ file اور FPGA کی دوبارہ پروگرامنگ۔ CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 جھنڈا سیٹ کرنا مفید ہے جب آپ اپنے کسٹم پلیٹ فارم کی فعالیت کو فلور پلان ڈیزائن کیے بغیر اور LogicLock™ ریجنز کی وضاحت کیے بغیر اپنے بورڈ کو انسٹینٹیٹ کریں۔
متفاوت میموری سسٹمز کے ساتھ، رن ٹائم ماحول کو ہر بفر کے بفر مقامات کو پڑھنا چاہیے، جو کہ .aocx میں بیان کیا گیا ہے۔ file، میموری سسٹمز کی فعالیت کی تصدیق کرنے کے لیے۔ تاہم، آپ بورڈ ڈیزائن کی حتمی خصوصیات کو لاگو کیے بغیر اپنے کسٹم پلیٹ فارم کی فعالیت کی تصدیق کرنا چاہیں گے، جیسے کہ فلور پلان کو ڈیزائن کرنا اور LogicLock علاقوں کی وضاحت کرنا۔

  1. تصدیق کریں کہ CL_CONTEXT_COMPILER_MODE_INTELFPGA پرچم آپ کے میزبان کوڈ میں سیٹ نہیں ہے۔
  2. بورڈ پر براؤز کریں/ آپ کے کسٹم پلیٹ فارم کی /source/host/mmd ڈائریکٹری۔
  3. acl_pcie_device.cpp میموری میپڈ ڈیوائس (MMD) کھولیں۔ file ٹیکسٹ ایڈیٹر میں۔
  4.  acl_pcie_device.cpp میں ری پروگرام فنکشن میں ترمیم کریں۔ file واپسی 0 شامل کرکے؛ لائن، جیسا کہ ذیل میں دکھایا گیا ہے:
    int ACL_PCIE_DEVICE::reprogram(void*data, size_t data_size)
    {
    واپسی 0؛
    // ناکامی کا اندازہ لگائیں۔
    int reprogram_failed = 1;
    // فرض کریں کہ fpga.bin میں کوئی rbf یا ہیش نہیں ہے۔
    int rbf_or_hash_not_provided = 1;
    // فرض کریں کہ بیس اور امپورٹ ریویژن ہیشز مماثل نہیں ہیں۔
    int hash_mismatch = 1;

    }
  5. acl_pcie_device.cpp کو دوبارہ مرتب کریں۔ file.
  6. تصدیق کریں کہ CL_CONTEXT_COMPILER_MODE_INTELFPGA پرچم غیر سیٹ ہے۔
    توجہ: واپسی 0 شامل کرنے کے بعد؛ ری پروگرام فنکشن پر جائیں اور ایم ایم ڈی کو دوبارہ کمپائل کریں۔ file، رن ٹائم ماحول .aocx کو پڑھے گا۔ file اور بفر مقامات کو تفویض کریں گے لیکن FPGA کو دوبارہ پروگرام نہیں کریں گے۔ آپ کو FPGA تصویر کو دستی طور پر .aocx کے ساتھ ملانا چاہیے۔ file. اس رویے کو ریورس کرنے کے لیے واپسی 0 کو ہٹا دیں؛ ری پروگرام فنکشن سے اور ایم ایم ڈی کو دوبارہ کمپائل کریں۔ file.

1.6. دستاویز پر نظر ثانی کی تاریخ

تاریخ ورژن تبدیلیاں
17 دسمبر 2017.12.01 • CL_MEM_HETEROGENEOUS_ALTERA کو CL_MEM_HETEROGENEOUS_INTELFPGA پر دوبارہ برانڈ کیا گیا۔
16 دسمبر 2016.12.13 • ری برانڈڈ CL_CONTEXT_COMPILER_MODE_ALTERA سے CL_CONTEXT_COMPILER_MODE_INTELFPGA۔

انٹیل - لوگوOpenCL کے لیے Intel® FPGA SDK میں متضاد میموری سسٹمز بنانا
اپنی مرضی کے پلیٹ فارمز
انٹیل اوپن سی ایل کسٹم پلیٹ فارمز کے لیے ایف پی جی اے ایس ڈی کے میں متضاد میموری سسٹمز بنا رہا ہے - آئیکن 1 تاثرات بھیجیں۔
انٹیل اوپن سی ایل کسٹم پلیٹ فارمز کے لیے ایف پی جی اے ایس ڈی کے میں متضاد میموری سسٹمز بنا رہا ہے - آئیکن آن لائن ورژن
انٹیل اوپن سی ایل کسٹم پلیٹ فارمز کے لیے ایف پی جی اے ایس ڈی کے میں متضاد میموری سسٹمز بنا رہا ہے - آئیکن 1 تاثرات بھیجیں۔
ID: 683654
ورژن: 2016.12.13

دستاویزات / وسائل

انٹیل اوپن سی ایل کسٹم پلیٹ فارمز کے لیے ایف پی جی اے ایس ڈی کے میں متضاد میموری سسٹم بنا رہا ہے [پی ڈی ایف] ہدایات
OpenCL کسٹم پلیٹ فارمز کے لیے FPGA SDK میں متضاد میموری سسٹمز بنانا، Heterogeneous Memory Systems بنانا، OpenCL کسٹم پلیٹ فارمز کے لیے FPGA SDK

حوالہ جات

ایک تبصرہ چھوڑیں۔

آپ کا ای میل پتہ شائع نہیں کیا جائے گا۔ مطلوبہ فیلڈز نشان زد ہیں۔ *