G
gaussmath
Guest
@Downsampler: Verwendest du auch die Version aus #52? Auch über CMD kannst du mehrere Instanzen starten.
[COLOR=#57a64a]// OpenCLVRAMAllocator.cpp : Diese Datei enthält die Funktion "main". Hier beginnt und endet die Ausführung des Programms.[COLOR=#57a64a]//
[COLOR=#9b9b9b]#include [COLOR=#d69d85]"pch.h"[COLOR=#9b9b9b]#include [COLOR=#d69d85]<stdio.h>[COLOR=#9b9b9b]#include [COLOR=#d69d85]<CL/cl.h>[COLOR=#9b9b9b]#include [COLOR=#d69d85]<stdlib.h>[COLOR=#9b9b9b]#include [COLOR=#d69d85]<exception>[COLOR=#569cd6]using [COLOR=#569cd6]namespace [COLOR=#c8c8c8]std[COLOR=#b4b4b4];
[COLOR=#569cd6]int [COLOR=#c8c8c8]main[COLOR=#b4b4b4]([COLOR=#569cd6]int [COLOR=#7f7f7f]argc[COLOR=#b4b4b4], [COLOR=#569cd6]char [COLOR=#b4b4b4]*[COLOR=#7f7f7f]argv[COLOR=#b4b4b4][])[COLOR=#b4b4b4]{ [COLOR=#569cd6]const [COLOR=#4ec9b0]size_t [COLOR=#c8c8c8]packet_size [COLOR=#b4b4b4]= [COLOR=#b5cea8]1000[COLOR=#b4b4b4];
[COLOR=#4ec9b0]size_t [COLOR=#c8c8c8]mem_size [COLOR=#b4b4b4]= [COLOR=#b5cea8]0[COLOR=#b4b4b4]; [COLOR=#4ec9b0]cl_int [COLOR=#c8c8c8]err[COLOR=#b4b4b4]; [COLOR=#57a64a]// error code [COLOR=#4ec9b0]cl_device_id [COLOR=#c8c8c8]device_id[COLOR=#b4b4b4]; [COLOR=#57a64a]// compute device id [COLOR=#4ec9b0]cl_context [COLOR=#c8c8c8]context[COLOR=#b4b4b4]; [COLOR=#57a64a]// compute context [COLOR=#4ec9b0]cl_mem[COLOR=#b4b4b4]* [COLOR=#c8c8c8]devTestMem[COLOR=#b4b4b4]; [COLOR=#4ec9b0]cl_mem [COLOR=#c8c8c8]remainderMem [COLOR=#b4b4b4]= [COLOR=#bd63c5]NULL[COLOR=#b4b4b4]; [COLOR=#4ec9b0]cl_uint [COLOR=#c8c8c8]num_devices[COLOR=#b4b4b4]; [COLOR=#4ec9b0]cl_platform_id [COLOR=#c8c8c8]platformId[COLOR=#b4b4b4]; [COLOR=#4ec9b0]cl_uint [COLOR=#c8c8c8]numPlatforms [COLOR=#b4b4b4]= [COLOR=#b5cea8]0[COLOR=#b4b4b4]; [COLOR=#4ec9b0]cl_uint [COLOR=#c8c8c8]ret_num_devices[COLOR=#b4b4b4]; [COLOR=#4ec9b0]cl_uint [COLOR=#c8c8c8]ret_num_platforms[COLOR=#b4b4b4]; [COLOR=#4ec9b0]cl_int [COLOR=#c8c8c8]fillValue [COLOR=#b4b4b4]= [COLOR=#b5cea8]255[COLOR=#b4b4b4];
[COLOR=#57a64a]// query the number of platforms [COLOR=#c8c8c8]err [COLOR=#b4b4b4]= [COLOR=#c8c8c8]clGetPlatformIDs[COLOR=#b4b4b4]([COLOR=#b5cea8]0[COLOR=#b4b4b4], [COLOR=#bd63c5]NULL[COLOR=#b4b4b4], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]numPlatforms[COLOR=#b4b4b4]);
[COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]!= [COLOR=#bd63c5]CL_SUCCESS[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error: Failed to number of platforms!\n"[COLOR=#b4b4b4]); [COLOR=#569cd6]return [COLOR=#bd63c5]EXIT_FAILURE[COLOR=#b4b4b4]; [COLOR=#b4b4b4]}
[COLOR=#57a64a]// now get all the platform IDs [COLOR=#4ec9b0]cl_platform_id[COLOR=#b4b4b4]* [COLOR=#c8c8c8]platforms [COLOR=#b4b4b4]= [COLOR=#569cd6]new [COLOR=#4ec9b0]cl_platform_id[COLOR=#b4b4b4][[COLOR=#c8c8c8]numPlatforms[COLOR=#b4b4b4]]; [COLOR=#c8c8c8]err [COLOR=#b4b4b4]= [COLOR=#c8c8c8]clGetPlatformIDs[COLOR=#b4b4b4]([COLOR=#c8c8c8]numPlatforms[COLOR=#b4b4b4], [COLOR=#c8c8c8]platforms[COLOR=#b4b4b4], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]ret_num_platforms[COLOR=#b4b4b4]);
[COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]!= [COLOR=#bd63c5]CL_SUCCESS[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error: Failed to get platform IDs!\n"[COLOR=#b4b4b4]); [COLOR=#569cd6]return [COLOR=#bd63c5]EXIT_FAILURE[COLOR=#b4b4b4]; [COLOR=#b4b4b4]}
[COLOR=#57a64a]// set platform property - we just pick the first one [COLOR=#4ec9b0]cl_context_properties [COLOR=#c8c8c8]properties[COLOR=#b4b4b4][] [COLOR=#b4b4b4]= [COLOR=#b4b4b4]{ [COLOR=#bd63c5]CL_CONTEXT_PLATFORM[COLOR=#b4b4b4], [COLOR=#b4b4b4]([COLOR=#4ec9b0]cl_context_properties[COLOR=#b4b4b4])[COLOR=#c8c8c8]platforms[COLOR=#b4b4b4][[COLOR=#b5cea8]0[COLOR=#b4b4b4]], [COLOR=#b5cea8]0 [COLOR=#b4b4b4]};
[COLOR=#c8c8c8]err [COLOR=#b4b4b4]= [COLOR=#c8c8c8]clGetDeviceIDs[COLOR=#b4b4b4]([COLOR=#c8c8c8]platforms[COLOR=#b4b4b4][[COLOR=#b5cea8]0[COLOR=#b4b4b4]], [COLOR=#bd63c5]CL_DEVICE_TYPE_GPU[COLOR=#b4b4b4], [COLOR=#b5cea8]1[COLOR=#b4b4b4], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]device_id[COLOR=#b4b4b4], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]ret_num_devices[COLOR=#b4b4b4]);
[COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]!= [COLOR=#bd63c5]CL_SUCCESS[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error: Failed to create a device group!\n"[COLOR=#b4b4b4]);
[COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_PLATFORM[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error: CL_INVALID_PLATFORM\n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_DEVICE_TYPE[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error: CL_INVALID_DEVICE_TYPE\n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_VALUE[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error: CL_INVALID_VALUE\n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_DEVICE_NOT_FOUND[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error: CL_DEVICE_NOT_FOUND\n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]return [COLOR=#bd63c5]EXIT_FAILURE[COLOR=#b4b4b4]; [COLOR=#b4b4b4]}
[COLOR=#569cd6]try [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]context [COLOR=#b4b4b4]= [COLOR=#c8c8c8]clCreateContextFromType[COLOR=#b4b4b4]([COLOR=#c8c8c8]properties[COLOR=#b4b4b4], [COLOR=#bd63c5]CL_DEVICE_TYPE_GPU[COLOR=#b4b4b4], [COLOR=#bd63c5]NULL[COLOR=#b4b4b4], [COLOR=#bd63c5]NULL[COLOR=#b4b4b4], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]err[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]catch [COLOR=#b4b4b4]([COLOR=#569cd6]const [COLOR=#c8c8c8]std[COLOR=#b4b4b4]::[COLOR=#4ec9b0]exception[COLOR=#b4b4b4]& [COLOR=#c8c8c8]e[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#c8c8c8]e[COLOR=#b4b4b4].[COLOR=#c8c8c8]what[COLOR=#b4b4b4]()); [COLOR=#569cd6]return [COLOR=#bd63c5]EXIT_FAILURE[COLOR=#b4b4b4]; [COLOR=#b4b4b4]}
[COLOR=#569cd6]if [COLOR=#b4b4b4](![COLOR=#c8c8c8]context[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error: Failed to create a compute context!\n"[COLOR=#b4b4b4]); [COLOR=#569cd6]return [COLOR=#bd63c5]EXIT_FAILURE[COLOR=#b4b4b4]; [COLOR=#b4b4b4]}
[COLOR=#57a64a]// get amount of memory to allocate in MB, default to 256 [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#7f7f7f]argc [COLOR=#b4b4b4]< [COLOR=#b5cea8]2 [COLOR=#b4b4b4]|| [COLOR=#c8c8c8]sscanf_s[COLOR=#b4b4b4]([COLOR=#7f7f7f]argv[COLOR=#b4b4b4][[COLOR=#b5cea8]1[COLOR=#b4b4b4]], [COLOR=#d69d85]" %u"[COLOR=#b4b4b4], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]mem_size[COLOR=#b4b4b4]) [COLOR=#b4b4b4]!= [COLOR=#b5cea8]1[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]mem_size [COLOR=#b4b4b4]= [COLOR=#b5cea8]256[COLOR=#b4b4b4]; [COLOR=#b4b4b4]}
[COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"%u bytes will be allocated.\n"[COLOR=#b4b4b4], [COLOR=#c8c8c8]mem_size [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024 [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024[COLOR=#b4b4b4]);
[COLOR=#57a64a]// Dividing without remainder [COLOR=#4ec9b0]size_t [COLOR=#c8c8c8]numOfPackets [COLOR=#b4b4b4]= [COLOR=#c8c8c8]mem_size [COLOR=#b4b4b4]/ [COLOR=#c8c8c8]packet_size[COLOR=#b4b4b4]; [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Number of packets without division remainder based on 1000MB packet size: %u.\n"[COLOR=#b4b4b4], [COLOR=#c8c8c8]numOfPackets[COLOR=#b4b4b4]);
[COLOR=#c8c8c8]devTestMem [COLOR=#b4b4b4]= [COLOR=#569cd6]new [COLOR=#4ec9b0]cl_mem[COLOR=#b4b4b4][[COLOR=#c8c8c8]numOfPackets[COLOR=#b4b4b4]];
[COLOR=#569cd6]for [COLOR=#b4b4b4]([COLOR=#4ec9b0]size_t [COLOR=#c8c8c8]i [COLOR=#b4b4b4]= [COLOR=#b5cea8]0[COLOR=#b4b4b4]; [COLOR=#c8c8c8]i [COLOR=#b4b4b4]< [COLOR=#c8c8c8]numOfPackets[COLOR=#b4b4b4]; [COLOR=#c8c8c8]i[COLOR=#b4b4b4]++) [COLOR=#b4b4b4]{ [COLOR=#57a64a]// allocate GPU memory and convert MB to bytes [COLOR=#c8c8c8]devTestMem[COLOR=#b4b4b4][[COLOR=#c8c8c8]i[COLOR=#b4b4b4]] [COLOR=#b4b4b4]= [COLOR=#c8c8c8]clCreateBuffer[COLOR=#b4b4b4]([COLOR=#c8c8c8]context[COLOR=#b4b4b4], [COLOR=#bd63c5]CL_MEM_READ_WRITE[COLOR=#b4b4b4], [COLOR=#c8c8c8]packet_size [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024 [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024[COLOR=#b4b4b4], [COLOR=#bd63c5]NULL[COLOR=#b4b4b4], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]err[COLOR=#b4b4b4]);
[COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]!= [COLOR=#bd63c5]CL_SUCCESS[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error, could not allocate %u bytes.\n"[COLOR=#b4b4b4], [COLOR=#c8c8c8]packet_size [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024 [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024[COLOR=#b4b4b4]); [COLOR=#569cd6]return [COLOR=#bd63c5]EXIT_FAILURE[COLOR=#b4b4b4]; [COLOR=#b4b4b4]} [COLOR=#b4b4b4]}
[COLOR=#4ec9b0]cl_command_queue [COLOR=#c8c8c8]command_queue [COLOR=#b4b4b4]= [COLOR=#c8c8c8]clCreateCommandQueueWithProperties[COLOR=#b4b4b4]([COLOR=#c8c8c8]context[COLOR=#b4b4b4], [COLOR=#c8c8c8]device_id[COLOR=#b4b4b4], [COLOR=#b5cea8]0[COLOR=#b4b4b4], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]err[COLOR=#b4b4b4]);
[COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]!= [COLOR=#bd63c5]CL_SUCCESS[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error, could not create queue\n"[COLOR=#b4b4b4]); [COLOR=#569cd6]return [COLOR=#bd63c5]EXIT_FAILURE[COLOR=#b4b4b4]; [COLOR=#b4b4b4]}
[COLOR=#569cd6]for [COLOR=#b4b4b4]([COLOR=#4ec9b0]size_t [COLOR=#c8c8c8]i [COLOR=#b4b4b4]= [COLOR=#b5cea8]0[COLOR=#b4b4b4]; [COLOR=#c8c8c8]i [COLOR=#b4b4b4]< [COLOR=#c8c8c8]numOfPackets[COLOR=#b4b4b4]; [COLOR=#c8c8c8]i[COLOR=#b4b4b4]++) [COLOR=#b4b4b4]{ [COLOR=#57a64a]// Fill the buffer with the initial value [COLOR=#c8c8c8]err [COLOR=#b4b4b4]= [COLOR=#c8c8c8]clEnqueueFillBuffer[COLOR=#b4b4b4]([COLOR=#c8c8c8]command_queue[COLOR=#b4b4b4], [COLOR=#c8c8c8]devTestMem[COLOR=#b4b4b4][[COLOR=#c8c8c8]i[COLOR=#b4b4b4]], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]fillValue[COLOR=#b4b4b4], [COLOR=#569cd6]sizeof[COLOR=#b4b4b4]([COLOR=#4ec9b0]cl_int[COLOR=#b4b4b4]), [COLOR=#b5cea8]0[COLOR=#b4b4b4], [COLOR=#c8c8c8]packet_size [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024 [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024[COLOR=#b4b4b4], [COLOR=#b5cea8]0[COLOR=#b4b4b4], [COLOR=#bd63c5]NULL[COLOR=#b4b4b4], [COLOR=#bd63c5]NULL[COLOR=#b4b4b4]);
[COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]!= [COLOR=#bd63c5]CL_SUCCESS[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error, could not fill buffer\n"[COLOR=#b4b4b4]); [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_COMMAND_QUEUE[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_INVALID_COMMAND_QUEUE\n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_CONTEXT[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_INVALID_CONTEXT\n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_MEM_OBJECT[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_INVALID_MEM_OBJECT \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_VALUE[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_INVALID_VALUE\n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_EVENT_WAIT_LIST[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_INVALID_EVENT_WAIT_LIST \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_MISALIGNED_SUB_BUFFER_OFFSET[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_MISALIGNED_SUB_BUFFER_OFFSET \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_MEM_OBJECT_ALLOCATION_FAILURE[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_MEM_OBJECT_ALLOCATION_FAILURE \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_OUT_OF_RESOURCES[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_OUT_OF_RESOURCES \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_OUT_OF_HOST_MEMORY[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_OUT_OF_HOST_MEMORY \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]}
[COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error in allocation loop."[COLOR=#b4b4b4]);
[COLOR=#569cd6]return [COLOR=#bd63c5]EXIT_FAILURE[COLOR=#b4b4b4]; [COLOR=#b4b4b4]}
[COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"%u. packet allocated...\n"[COLOR=#b4b4b4], [COLOR=#c8c8c8]i [COLOR=#b4b4b4]+ [COLOR=#b5cea8]1[COLOR=#b4b4b4]); [COLOR=#b4b4b4]}
[COLOR=#57a64a]// Division remainder [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]numOfPackets [COLOR=#b4b4b4]* [COLOR=#c8c8c8]packet_size [COLOR=#b4b4b4]!= [COLOR=#c8c8c8]mem_size[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#4ec9b0]size_t [COLOR=#c8c8c8]remainder_size [COLOR=#b4b4b4]= [COLOR=#c8c8c8]mem_size [COLOR=#b4b4b4]- [COLOR=#c8c8c8]numOfPackets [COLOR=#b4b4b4]* [COLOR=#c8c8c8]packet_size[COLOR=#b4b4b4];
[COLOR=#c8c8c8]remainderMem [COLOR=#b4b4b4]= [COLOR=#c8c8c8]clCreateBuffer[COLOR=#b4b4b4]([COLOR=#c8c8c8]context[COLOR=#b4b4b4], [COLOR=#bd63c5]CL_MEM_READ_WRITE[COLOR=#b4b4b4], [COLOR=#c8c8c8]remainder_size [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024 [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024[COLOR=#b4b4b4], [COLOR=#bd63c5]NULL[COLOR=#b4b4b4], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]err[COLOR=#b4b4b4]);
[COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]!= [COLOR=#bd63c5]CL_SUCCESS[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error, could not allocate %u bytes.\n"[COLOR=#b4b4b4], [COLOR=#c8c8c8]remainder_size [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024 [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024[COLOR=#b4b4b4]); [COLOR=#569cd6]return [COLOR=#bd63c5]EXIT_FAILURE[COLOR=#b4b4b4]; [COLOR=#b4b4b4]}
[COLOR=#57a64a]// Fill the buffer with the initial value [COLOR=#c8c8c8]err [COLOR=#b4b4b4]= [COLOR=#c8c8c8]clEnqueueFillBuffer[COLOR=#b4b4b4]([COLOR=#c8c8c8]command_queue[COLOR=#b4b4b4], [COLOR=#c8c8c8]remainderMem[COLOR=#b4b4b4], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]fillValue[COLOR=#b4b4b4], [COLOR=#569cd6]sizeof[COLOR=#b4b4b4]([COLOR=#4ec9b0]cl_int[COLOR=#b4b4b4]), [COLOR=#b5cea8]0[COLOR=#b4b4b4], [COLOR=#c8c8c8]remainder_size [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024 [COLOR=#b4b4b4]* [COLOR=#b5cea8]1024[COLOR=#b4b4b4], [COLOR=#b5cea8]0[COLOR=#b4b4b4], [COLOR=#bd63c5]NULL[COLOR=#b4b4b4], [COLOR=#bd63c5]NULL[COLOR=#b4b4b4]);
[COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]!= [COLOR=#bd63c5]CL_SUCCESS[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error, could not fill buffer\n"[COLOR=#b4b4b4]); [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_COMMAND_QUEUE[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_INVALID_COMMAND_QUEUE\n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_CONTEXT[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_INVALID_CONTEXT\n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_MEM_OBJECT[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_INVALID_MEM_OBJECT \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_VALUE[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_INVALID_VALUE\n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_INVALID_EVENT_WAIT_LIST[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_INVALID_EVENT_WAIT_LIST \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_MISALIGNED_SUB_BUFFER_OFFSET[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_MISALIGNED_SUB_BUFFER_OFFSET \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_MEM_OBJECT_ALLOCATION_FAILURE[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_MEM_OBJECT_ALLOCATION_FAILURE \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_OUT_OF_RESOURCES[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_OUT_OF_RESOURCES \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]} [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]err [COLOR=#b4b4b4]== [COLOR=#bd63c5]CL_OUT_OF_HOST_MEMORY[COLOR=#b4b4b4]) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"CL_OUT_OF_HOST_MEMORY \n"[COLOR=#b4b4b4]); [COLOR=#b4b4b4]}
[COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Error in allocation loop."[COLOR=#b4b4b4]);
[COLOR=#569cd6]return [COLOR=#bd63c5]EXIT_FAILURE[COLOR=#b4b4b4]; [COLOR=#b4b4b4]}
[COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"%u MB remainder packet allocated...\n"[COLOR=#b4b4b4], [COLOR=#c8c8c8]remainder_size[COLOR=#b4b4b4]); [COLOR=#b4b4b4]}
[COLOR=#c8c8c8]clFinish[COLOR=#b4b4b4]([COLOR=#c8c8c8]command_queue[COLOR=#b4b4b4]);
[COLOR=#57a64a]// wait for a key press [COLOR=#c8c8c8]printf[COLOR=#b4b4b4]([COLOR=#d69d85]"Press return to exit and free memory...\n"[COLOR=#b4b4b4]); [COLOR=#c8c8c8]getchar[COLOR=#b4b4b4]();
[COLOR=#57a64a]// free memory and exit [COLOR=#c8c8c8]free[COLOR=#b4b4b4]([COLOR=#c8c8c8]platforms[COLOR=#b4b4b4]); [COLOR=#569cd6]for [COLOR=#b4b4b4]([COLOR=#4ec9b0]size_t [COLOR=#c8c8c8]i [COLOR=#b4b4b4]= [COLOR=#b5cea8]0[COLOR=#b4b4b4]; [COLOR=#c8c8c8]i [COLOR=#b4b4b4]< [COLOR=#c8c8c8]numOfPackets[COLOR=#b4b4b4]; [COLOR=#c8c8c8]i[COLOR=#b4b4b4]++) [COLOR=#b4b4b4]{ [COLOR=#c8c8c8]clReleaseMemObject[COLOR=#b4b4b4]([COLOR=#c8c8c8]devTestMem[COLOR=#b4b4b4][[COLOR=#c8c8c8]i[COLOR=#b4b4b4]]); [COLOR=#b4b4b4]} [COLOR=#c8c8c8]free[COLOR=#b4b4b4]([COLOR=#c8c8c8]devTestMem[COLOR=#b4b4b4]); [COLOR=#569cd6]if [COLOR=#b4b4b4]([COLOR=#c8c8c8]remainderMem [COLOR=#b4b4b4]!= [COLOR=#bd63c5]NULL[COLOR=#b4b4b4]) [COLOR=#c8c8c8]clReleaseMemObject[COLOR=#b4b4b4]([COLOR=#c8c8c8]remainderMem[COLOR=#b4b4b4]); [COLOR=#c8c8c8]clReleaseContext[COLOR=#b4b4b4]([COLOR=#c8c8c8]context[COLOR=#b4b4b4]); [COLOR=#569cd6]return [COLOR=#b5cea8]0[COLOR=#b4b4b4];[COLOR=#b4b4b4]}
[COLOR=#57a64a]// Programm ausführen: STRG+F5 oder "Debuggen" > Menü "Ohne Debuggen starten"[COLOR=#57a64a]// Programm debuggen: F5 oder "Debuggen" > Menü "Debuggen starten"
[COLOR=#57a64a]// Tipps für den Einstieg: [COLOR=#57a64a]// 1. Verwenden Sie das Projektmappen-Explorer-Fenster zum Hinzufügen/Verwalten von Dateien.[COLOR=#57a64a]// 2. Verwenden Sie das Team Explorer-Fenster zum Herstellen einer Verbindung mit der Quellcodeverwaltung.[COLOR=#57a64a]// 3. Verwenden Sie das Ausgabefenster, um die Buildausgabe und andere Nachrichten anzuzeigen.[COLOR=#57a64a]// 4. Verwenden Sie das Fenster "Fehlerliste", um Fehler anzuzeigen.[COLOR=#57a64a]// 5. Wechseln Sie zu "Projekt" > "Neues Element hinzufügen", um neue Codedateien zu erstellen, bzw. zu "Projekt" > "Vorhandenes Element hinzufügen", um dem Projekt vorhandene Codedateien hinzuzufügen.[COLOR=#57a64a]// 6. Um dieses Projekt später erneut zu öffnen, wechseln Sie zu "Datei" > "Öffnen" > "Projekt", und wählen Sie die SLN-Datei aus.
Großes Lob an gaussmath! Danke^^
[COLOR=#57a64a]// query the number of platforms[COLOR=#c8c8c8]
err [COLOR=#b4b4b4]= [COLOR=#c8c8c8]clGetPlatformIDs[COLOR=#b4b4b4]([COLOR=#b5cea8]0[COLOR=#b4b4b4], [COLOR=#bd63c5]NULL[COLOR=#b4b4b4], [COLOR=#b4b4b4]&[COLOR=#c8c8c8]numPlatforms[COLOR=#b4b4b4]);[COLOR=#b4b4b4]
Ich kann wohl in der VM den Code nich Compilieren, weil dort keine gültige Platform erkannt wird. Das stopt den Linker in seiner Arbeit.
Solche Probleme machen sich erst zur Laufzeit bemerkbar.
Edit: Ja, die OpenCL.lib braucht man zum Kompilieren.