{"id":19643,"date":"2022-02-24T20:32:25","date_gmt":"2022-02-24T23:32:25","guid":{"rendered":"http:\/\/maurinsoft.com.br\/?p=19643"},"modified":"2023-08-06T08:50:42","modified_gmt":"2023-08-06T11:50:42","slug":"cuda-trabalhando-com-memoria-da-placa-de-video","status":"publish","type":"post","link":"https:\/\/maurinsoft.com.br\/wp\/en\/cuda-trabalhando-com-memoria-da-placa-de-video\/","title":{"rendered":"CUDA &#8211; Trabalhando com Mem\u00f3ria da placa de v\u00eddeo"},"content":{"rendered":"<p>Neste artigo irei apresentar como trabalhar com a mem\u00f3ria da placa de v\u00eddeo, na lib CUDA da NVIDIA.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"git\">GIT<\/h2>\n\n\n\n<p>O exemplo deste projeto pode ser visto no git.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/marcelomaurin\/CUDA2\">https:\/\/github.com\/marcelomaurin\/CUDA2<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"codigo-do-projeto\">C\u00f3digo do projeto<\/h2>\n\n\n\n<p>Veremos a seguir o projeto do c\u00f3digo, onde em seguida irei comentar o mesmo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n#include &lt;stdio.h>\n#include \"cuda_runtime.h\"\n\n#define TAM_MAP 30\n\n\/\/Kernel\n__global__\nvoid projecao_x(int *p_param){\n\tprintf(\"video: %d\\n\",*p_param);\n\t*p_param += 5; \/*muda valor*\/\n}\n\n\nint main(){\n\tint valor;\n        valor = 10; \/* declara\u00e7\u00e3o da variavel alocada no pc*\/\n\tcudaDeviceReset();\n\n\tint *d_param; \/*Declaracao da variavel alocado na placa de video*\/\n\n\n\t\/*aloca\u00e7\u00e3o de variaveis da placa de v\u00eddeos*\/\n\tcudaMalloc((void**)&amp;d_param,sizeof(int));         \/*aloca na cuda o tamanho de 1 inteiro*\/\n\n\n\tcudaMemcpy( d_param, &amp;valor,\n                              sizeof(int),\n\t                      cudaMemcpyHostToDevice);\n\n\tprintf(\"Chamando hello!\\n\");\n\tprojecao_x &lt;&lt; &lt;1, 1>> >(d_param); \/*Cria\u00e7\u00e3o funcao do processador*\/\n\tcudaDeviceSynchronize();\n\tcudaMemcpy( &amp;valor, d_param,\n                             sizeof(int),\n                             cudaMemcpyDeviceToHost);\n\tprintf(\"pc:%d\\n\",valor);\n\tcudaFree(d_param);\n\treturn 0;\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"o-que-faz-o-programa\">O que faz o programa<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"http:\/\/maurinsoft.com.br\/wp-content\/uploads\/2022\/02\/image-11.png\" alt=\"\" class=\"wp-image-19646\"\/><\/figure>\n\n\n\n<p>O Programa acima cria uma variavel na placa de v\u00eddeo chamada d_param, que \u00e9 atribu\u00eddo valor 10 no Desktop.<\/p>\n\n\n\n<p>Depois ao ser chamado a thread, e j\u00e1 na placa de v\u00eddeo, seu valor \u00e9 modificado.<\/p>\n\n\n\n<p>Por fim \u00e9 transferida para a mem\u00f3ria do desktop, e em seguida apresentada no desktop.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"funcoes-importantes\">Fun\u00e7\u00f5es importantes<\/h2>\n\n\n\n<p>cudaMalloc &#8211; \u00c9 respons\u00e1vel pela cria\u00e7\u00e3o da variavel na placa de v\u00eddeo.<\/p>\n\n\n\n<p>cudaMemcpy &#8211; \u00c9 respons\u00e1vel por copiar os dados de um espa\u00e7o para outro. Nos dois sentidos DESKTOP -> VIDEO,  e VIDEO -> Desktop.<\/p>\n\n\n\n<p>Bom pessoal, espero que tenham gostado deste artigo.<\/p>\n\n\n\n<p>Os pr\u00f3ximos espero serem mais emocionantes. <\/p>\n\n\n\n<p class=\"has-text-align-right\">Vida longa e prospera a todos.<\/p>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Neste artigo irei apresentar como trabalhar com a mem\u00f3ria da placa de v\u00eddeo, na lib CUDA da NVIDIA. GIT O exemplo deste projeto pode ser visto no git. https:\/\/github.com\/marcelomaurin\/CUDA2 C\u00f3digo do projeto Veremos a seguir o projeto do c\u00f3digo, onde em seguida irei comentar o mesmo: O que faz o programa O Programa acima cria [&hellip;]<\/p>","protected":false},"author":1,"featured_media":19561,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61,62,39],"tags":[113,145],"class_list":["post-19643","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-c","category-cuda","category-ia","tag-c","tag-cuda"],"_links":{"self":[{"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/posts\/19643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/comments?post=19643"}],"version-history":[{"count":1,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/posts\/19643\/revisions"}],"predecessor-version":[{"id":23642,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/posts\/19643\/revisions\/23642"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/media?parent=19643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/categories?post=19643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/tags?post=19643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}