Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
AMD OpenCL´óѧ¿Î³Ì(3)
 
ÒëÕߣºÂõ¿ËÀÏÀÇ2012£¬»ðÁú¹ûÈí¼þ ·¢²¼ÓÚ£º2014-11-05
  2339  次浏览      38
 

OpenCLÄÚ´æ¶ÔÏó£º

OpenCLÄÚ´æ¶ÔÏó¾ÍÊÇһЩOpenCLÊý¾Ý£¬ÕâЩÊý¾ÝÒ»°ãÔÚÉ豸ÄÚ´æÖУ¬Äܹ»±»¿½ÈëÒ²Äܹ»±»¿½³ö¡£OpenCLÄÚ´æ¶ÔÏó°üÀ¨buffer¶ÔÏóºÍimage¶ÔÏó¡£

buffer¶ÔÏó£ºÁ¬ÐøµÄÄÚ´æ¿é----˳Ðò´æ´¢£¬Äܹ»Í¨¹ýÖ¸Õë¡¢ÐÐÁÐʽµÈÖ±½Ó·ÃÎÊ¡£

image¶ÔÏó£ºÊÇ2ά»ò3άµÄÄÚ´æ¶ÔÏó£¬Ö»ÄÜͨ¹ýread_image() »ò write_image()À´¶ÁÈ¡¡£image¶ÔÏó¿ÉÒÔÊǿɶÁ»ò¿ÉдµÄ£¬µ«²»ÄÜͬʱ¼È¿É¶ÁÓÖ¿Éд¡£

¸Ãº¯Êý»áÔÚÖ¸¶¨µÄcontextÉÏ´´½¨Ò»¸öbuffer¶ÔÏó£¬image¶ÔÏóÏà¶Ô±È½Ï¸´ÔÓ£¬ÁôÔÚºóÃæÔÙ½²¡£

flags²ÎÊýÖ¸¶¨buffer¶ÔÏóµÄ¶ÁдÊôÐÔ£¬host_ptr¿ÉÒÔÊÇNULL£¬Èç¹û²»ÎªNULL£¬Ò»°ãÊÇÒ»¸öÓÐЧµÄhost buffer¶ÔÏó£¬Õâʱ£¬º¯Êý´´½¨OpenCL buffer¶ÔÏóºó£¬»á°Ñ¶ÔÓ¦host bufferµÄÄÚÈÝ¿½±´µ½OpenCL bufferÖС£

ÔÚKernelÖ´ÐÐ֮ǰ£¬hostÖÐԭʼÊäÈëÊý¾Ý±ØÐëÏÔʽµÄ´«µ½deviceÖУ¬KernelÖ´ÐÐÍêºó£¬½á¹ûÒ²Òª´ÓdeviceÄÚ´æÖд«»Øµ½hostÄÚ´æÖС£ÎÒÃÇÖ÷Ҫͨ¹ýº¯ÊýclEnqueue{Read|Write}{Buffer|Image}À´ÊµÏÖÕâÁ½ÖÖ²Ù×÷¡£´Óhostµ½device£¬ÎÒÃÇÓÃclEnqueueWrite£¬´Ódeviceµ½host£¬ÎÒÃÇÓÃclEnqueueRead¡£clEnqueueWriteÃüÁî°üÀ¨³õʼ»¯ÄÚ´æ¶ÔÏóÒÔ¼°°Ñhost Êý¾Ý´«µ½deviceÄÚ´æÕâÁ½ÖÖ²Ù×÷¡£µ±È»£¬ÏñÇ°ÃæÒ»¶Î˵µÄÄÇÑù£¬Ò²¿ÉÒÔ°Ñhost bufferÖ¸ÕëÖ±½ÓÓÃÔÚCreateBufferº¯ÊýÖÐÀ´ÊµÏÖÒþʽµÄÊý¾Ýд²Ù×÷¡£

Õâ¸öº¯Êý³õʼ»¯OpenCLÄÚ´æ¶ÔÏ󣬲¢°ÑÏàÓ¦µÄÊý¾Ýдµ½OpenCLÄÚ´æ¹ØÁªµÄÉ豸ÄÚ´æÖС£ÆäÖУ¬blocking_write²ÎÊýÖ¸¶¨ÊÇÊý¿½±´Íê³Éºóº¯Êý²Å·µ»Ø»¹ÊÇÊý¾Ý¿ªÊ¼¿½±´ºó¾ÍÁ¢¼´·µ»Ø£¨×èÈûģʽÓÚ·Ç×èÈûģʽ£©¡£Events²ÎÊýÖ¸¶¨Õâ¸öº¯ÊýÖ´ÐÐ֮ǰ£¬±ØÐëÒªÍê³ÉµÄEvent£¨±ÈÈçÏÈÒª´´½¨OpenCLÄÚ´æ¶ÔÏóµÄEvent£©¡£

OpenCL³ÌÐò¶ÔÏó£º

³ÌÐò¶ÔÏó¾ÍÊÇͨ¹ý¶ÁÈëKernelº¯ÊýÔ´´úÂë»ò¶þ½øÖÆÎļþ£¬È»ºóÔÚÖ¸¶¨µÄÉ豸ÉϽøÐбàÒë¶ø²úÉúµÄOpenCL¶ÔÏó¡£

Õâ¸öº¯Êýͨ¹ýÔ´´úÂë(strings)£¬´´½¨Ò»¸ö³ÌÐò¶ÔÏ󣬯äÖÐcountsÖ¸¶¨Ô´´úÂë´®µÄÊýÁ¿£¬lengthsÖ¸¶¨Ô´´úÂë´®µÄ³¤¶È£¨ÎªNULL½áÊøµÄ´®Ê±£¬¿ÉÒÔÊ¡ÂÔ£©¡£µ±È»£¬ÎÒÃÇ»¹±ØÐë×Ô¼º±àдһ¸ö´ÓÎļþÖжÁȡԴ´úÂë´®µÄº¯Êý¡£

¶ÔcontextÖеÄÿ¸öÉ豸£¬Õâ¸öº¯Êý±àÒë¡¢Á¬½ÓÔ´´úÂë¶ÔÏ󣬲úÉúdevice¿ÉÒÔÖ´ÐеÄÎļþ£¬¶ÔGPU¶øÑÔ¾ÍÊÇÉ豸¶ÔÓ¦shader»ã±à¡£Èç¹ûdevice_list²ÎÊý±»Ìṩ£¬ÔòÖ»¶ÔÕâЩÉ豸½øÐбàÒëÁ¬½Ó¡£options²ÎÊýÖ÷ÒªÌṩһЩ¸½¼ÓµÄ±àÒëÑ¡Ï±ÈÈçºê¶¨Òå¡¢ÓÅ»¯¿ª¹Ø±êÖ¾µÈµÈ¡£

Èç¹û³ÌÐò±àÒëʧ°Ü£¬ÎÒÃÇÄܹ»¸ù¾Ý·µ»ØµÄ״̬£¬Í¨¹ýµ÷ÓÃclGetProgramBuildInfoÀ´µÃµ½´íÎóÐÅÏ¢¡£

¼ÓÉÏ´´½¨ÄÚ´æ¶ÔÏóÒÔ¼°³ÌÐò¶ÔÏóµÄ´úÂëÈçÏÂ:

1: 
  2: #include "stdafx.h"
  3: #include 
  4: #include 
  5: #include 
  6: #include 
  7: #include 
  8: #include 
  9: 
  10: using namespace std;
  11: #define NWITEMS 262144
  12: 
  13: #pragma comment (lib,"OpenCL.lib")
  14: 
  15: //°ÑÎı¾Îļþ¶ÁÈëÒ»¸östringÖÐ
  16: int convertToString(const char *filename, std::string& s)
  17: {
  18: size_t size;
  19: char* str;
  20: 
  21: std::fstream f(filename, (std::fstream::in | std::fstream::binary));
  22: 
  23: if(f.is_open())
  24: {
  25: size_t fileSize;
  26: f.seekg(0, std::fstream::end);
  27: size = fileSize = (size_t)f.tellg();
  28: f.seekg(0, std::fstream::beg);
  29: 
  30: str = new char[size+1];
  31: if(!str)
  32: {
  33: f.close();
  34: return NULL;
  35: }
  36: 
  37: f.read(str, fileSize);
  38: f.close();
  39: str[size] = '\0';
  40: 
  41: s = str;
  42: delete[] str;
  43: return 0;
  44: }
  45: printf("Error: Failed to open file %s\n", filename);
  46: return 1;
  47: }
  48: 
  49: int main(int argc, char* argv[])
  50: {
  51: //ÔÚhostÄÚ´æÖд´½¨Èý¸ö»º³åÇø
  52: float *buf1 = 0;
  53: float *buf2 = 0;
  54: float *buf = 0;
  55: 
  56: buf1 =(float *)malloc(NWITEMS * sizeof(float));
  57: buf2 =(float *)malloc(NWITEMS * sizeof(float));
  58: buf =(float *)malloc(NWITEMS * sizeof(float));
  59: 
  60: //³õʼ»¯buf1ºÍbuf2µÄÄÚÈÝ
  61: int i;
  62: srand( (unsigned)time( NULL ) );
  63: for(i = 0; i < NWITEMS; i++)
  64: buf1[i] = rand()%65535;
  65: 
  66: srand( (unsigned)time( NULL ) +1000);
  67: for(i = 0; i < NWITEMS; i++)
  68: buf2[i] = rand()%65535;
  69: 
  70: cl_uint status;
  71: cl_platform_id platform;
  72: 
  73: //´´½¨Æ½Ì¨¶ÔÏó
  74: status = clGetPlatformIDs( 1, &platform, NULL );
  75: 
  76: cl_device_id device;
  77: 
  78: //´´½¨GPUÉ豸
  79: clGetDeviceIDs( platform, CL_DEVICE_TYPE_GPU,
  80: 1,
  81: &device,
  82: NULL);
  83: //´´½¨context
  84: cl_context context = clCreateContext( NULL,
  85: 1,
  86: &device,
  87: NULL, NULL, NULL);
  88: //´´½¨ÃüÁî¶ÓÁÐ
  89: cl_command_queue queue = clCreateCommandQueue( context,
  90: device,
  91: CL_QUEUE_PROFILING_ENABLE, NULL );
  92: //´´½¨Èý¸öOpenCLÄÚ´æ¶ÔÏ󣬲¢°Ñbuf1µÄÄÚÈÝͨ¹ýÒþʽ¿½±´µÄ·½Ê½
  93: //¿½±´µ½clbuf1,buf2µÄÄÚÈÝͨ¹ýÏÔʾ¿½±´µÄ·½Ê½¿½±´µ½clbuf2
  94: cl_mem clbuf1 = clCreateBuffer(context,
  95: CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
  96: NWITEMS*sizeof(cl_float),buf1,
  97: NULL );
  98: 
  99: cl_mem clbuf2 = clCreateBuffer(context,
  100: CL_MEM_READ_ONLY ,
  101: NWITEMS*sizeof(cl_float),NULL,
  102: NULL );
  103: 
  104: status = clEnqueueWriteBuffer(queue, clbuf2, 1,
  105: 0, NWITEMS*sizeof(cl_float), buf2, 0, 0, 0);
  106: 
  107: cl_mem buffer = clCreateBuffer( context,
  108: CL_MEM_WRITE_ONLY,
  109: NWITEMS * sizeof(cl_float),
  110: NULL, NULL );
  111: 
  112: const char * filename = "add.cl";
  113: std::string sourceStr;
  114: status = convertToString(filename, sourceStr);
  115: const char * source = sourceStr.c_str();
  116: size_t sourceSize[] = { strlen(source) };
  117: 
  118: //´´½¨³ÌÐò¶ÔÏó
  119: cl_program program = clCreateProgramWithSource(
  120: context,
  121: 1,
  122: &source,
  123: sourceSize,
  124: NULL);
  125: //±àÒë³ÌÐò¶ÔÏó
  126: status = clBuildProgram( program, 1, &device, NULL, NULL, NULL );
  127: if(status != 0)
  128: {
  129: printf("clBuild failed:%d\n", status);
  130: char tbuf[0x10000];
  131: clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, 0x10000, tbuf, NULL);
  132: printf("\n%s\n", tbuf);
  133: return -1;
  134: }
  135: 
  136: 
  137: 
  138: if(buf)
  139: free(buf);
  140: if(buf1)
  141: free(buf1);
  142: if(buf2)
  143: free(buf2);
  144: 
  145: //ɾ³ýOpenCL×ÊÔ´¶ÔÏó
  146: clReleaseMemObject(clbuf1);
  147: clReleaseMemObject(clbuf2);
  148: clReleaseMemObject(buffer);
  149: clReleaseProgram(program);
  150: clReleaseCommandQueue(queue);
  151: clReleaseContext(context);
  152: return 0;
  153: }
  154: 

   
2339 ´Îä¯ÀÀ       38
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þ
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù


Èñ°²¿Æ¼¼ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨
³É¶¼ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£Æû³µ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
±±¾© Èí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£ Èí¼þ¼Ü¹¹Éè¼Æ°¸ÀýÓëʵ¼ù
±±¾© ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ÉîÛÚ ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù