- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 OpenCL 新手。我正在尝试从文件中读取数据并在 OpenCL 中使用该数据进行一些计算。但是,当我添加代码来选择平台时,读取功能不再起作用。之前是可以用的。
更多信息:输入文件格式只是一个 float 列表,每行一个数字。这是我添加的代码片段:
cl_uint numPlatforms;
int err;
err = clGetPlatformIDs(0, NULL, &numPlatforms);
if (err != CL_SUCCESS || numPlatforms <= 0)
{
printf("Error: Failed to find a platform!\n%s\n",err_code(err));
return EXIT_FAILUR;
}
整个文件:
#include <stdio.h>
#include <time.h>
#include <assert.h>
#include <stdlib.h>
#include <math.h>
#include <CL/cl.h>
#include <sys/time.h>
#define STR_SIZE 256
void fatal(char *s)
{
fprintf(stderr, "Error: %s\n", s);
}
void read(float *vec, int numRows, int numCols, int layers, char *file)
{
int i, j, k;
FILE *fp;
char str[STR_SIZE];
float val;
if((fp = fopen(file,"r"))==0) printf("Could not open file to read\n");
for (i = 0; i < numRows; i++)
for (j = 0; j < numCols; j++)
for(k = 0; k < layers; k++)
{
fgets(str, STR_SIZE, fp);
if(feof(fp)) fatal("not enough lines\n");
if(sscanf(str, "%f", &val) != 1) fatal("invalid file format\n");
vec[i*numCols + j + k * numRows * numCols] = val;
}
fclose(fp);
}
void write(float *vec, int numRows, int numCols, int layers, char *file)
{
int i, j, k, index = 0;
FILE *fp;
char str[STR_SIZE];
if((fp = fopen(file,"w"))==0) printf("Could not open file to write\n");
for(i = 0; i < numRows; i++)
for(j = 0; j < numCols; j++)
for (k = 0; k < layers; k++)
{
sprintf(str, "%d\t%g\n", index, vec[i*numCols+j + numRows * numCols * k]);
fputs(str,fp);
index++;
}
fclose(fp);
}
int main(int argc, char** argv)
{
char *pfile, *tfile, *ofile;
pfile = argv[3];
tfile = argv[4];
ofile = argv[5];
int numCols = atoi(argv[1]);
int numRows = atoi(argv[1]);
int layers = atoi(argv[2]);
float *powerIn, *tempOut, *tempIn, *tempCopy;
int size = numCols * numRows * layers;
powerIn = (float*)calloc(size, sizeof(float));
tempIn = (float*)calloc(size,sizeof(float));
tempOut = (float*)calloc(size, sizeof(float));
float* answer = (float*)calloc(size, sizeof(float));
read(powerIn,numRows, numCols, layers, pfile);
read(tempIn, numRows, numCols, layers, tfile);
size_t global;
cl_device_id device_id;
cl_context context;
cl_command_queue commands;
cl_program program;
cl_kernel ko_vadd;
memcpy(tempCopy,tempIn, size * sizeof(float));
cl_mem d_a; // device memory used for the input a vector
cl_mem d_b; // device memory used for the input b vector
cl_mem d_c; // device memory used for the output c vector
//This piece of code causes the problem. Without it, the program works fine.
cl_uint numPlatforms;
int err;
err = clGetPlatformIDs(0, NULL, &numPlatforms);
if (err != CL_SUCCESS || numPlatforms <= 0)
{
printf("Error: Failed to find a platform!\n%s\n",err_code(err));
return EXIT_FAILUR;
}
write(tempIn,numRows, numCols, layers, ofile);
free(tempIn);
free(tempOut);
free(powerIn);
return 0;
}
err_code.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <CL/cl.h>
char *err_code (cl_int err_in)
{
switch (err_in) {
case CL_SUCCESS :
return (char*)" CL_SUCCESS ";
case CL_DEVICE_NOT_FOUND :
return (char*)" CL_DEVICE_NOT_FOUND ";
case CL_DEVICE_NOT_AVAILABLE :
return (char*)" CL_DEVICE_NOT_AVAILABLE ";
case CL_COMPILER_NOT_AVAILABLE :
return (char*)" CL_COMPILER_NOT_AVAILABLE ";
case CL_MEM_OBJECT_ALLOCATION_FAILURE :
return (char*)" CL_MEM_OBJECT_ALLOCATION_FAILURE ";
case CL_OUT_OF_RESOURCES :
return (char*)" CL_OUT_OF_RESOURCES ";
case CL_OUT_OF_HOST_MEMORY :
return (char*)" CL_OUT_OF_HOST_MEMORY ";
case CL_PROFILING_INFO_NOT_AVAILABLE :
return (char*)" CL_PROFILING_INFO_NOT_AVAILABLE ";
case CL_MEM_COPY_OVERLAP :
return (char*)" CL_MEM_COPY_OVERLAP ";
case CL_IMAGE_FORMAT_MISMATCH :
return (char*)" CL_IMAGE_FORMAT_MISMATCH ";
case CL_IMAGE_FORMAT_NOT_SUPPORTED :
return (char*)" CL_IMAGE_FORMAT_NOT_SUPPORTED ";
case CL_BUILD_PROGRAM_FAILURE :
return (char*)" CL_BUILD_PROGRAM_FAILURE ";
case CL_MAP_FAILURE :
return (char*)" CL_MAP_FAILURE ";
case CL_MISALIGNED_SUB_BUFFER_OFFSET :
return (char*)" CL_MISALIGNED_SUB_BUFFER_OFFSET ";
case CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST :
return (char*)" CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST ";
case CL_INVALID_VALUE :
return (char*)" CL_INVALID_VALUE ";
case CL_INVALID_DEVICE_TYPE :
return (char*)" CL_INVALID_DEVICE_TYPE ";
case CL_INVALID_PLATFORM :
return (char*)" CL_INVALID_PLATFORM ";
case CL_INVALID_DEVICE :
return (char*)" CL_INVALID_DEVICE ";
case CL_INVALID_CONTEXT :
return (char*)" CL_INVALID_CONTEXT ";
case CL_INVALID_QUEUE_PROPERTIES :
return (char*)" CL_INVALID_QUEUE_PROPERTIES ";
case CL_INVALID_COMMAND_QUEUE :
return (char*)" CL_INVALID_COMMAND_QUEUE ";
case CL_INVALID_HOST_PTR :
return (char*)" CL_INVALID_HOST_PTR ";
case CL_INVALID_MEM_OBJECT :
return (char*)" CL_INVALID_MEM_OBJECT ";
case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR :
return (char*)" CL_INVALID_IMAGE_FORMAT_DESCRIPTOR ";
case CL_INVALID_IMAGE_SIZE :
return (char*)" CL_INVALID_IMAGE_SIZE ";
case CL_INVALID_SAMPLER :
return (char*)" CL_INVALID_SAMPLER ";
case CL_INVALID_BINARY :
return (char*)" CL_INVALID_BINARY ";
case CL_INVALID_BUILD_OPTIONS :
return (char*)" CL_INVALID_BUILD_OPTIONS ";
case CL_INVALID_PROGRAM :
return (char*)" CL_INVALID_PROGRAM ";
case CL_INVALID_PROGRAM_EXECUTABLE :
return (char*)" CL_INVALID_PROGRAM_EXECUTABLE ";
case CL_INVALID_KERNEL_NAME :
return (char*)" CL_INVALID_KERNEL_NAME ";
case CL_INVALID_KERNEL_DEFINITION :
return (char*)" CL_INVALID_KERNEL_DEFINITION ";
case CL_INVALID_KERNEL :
return (char*)" CL_INVALID_KERNEL ";
case CL_INVALID_ARG_INDEX :
return (char*)" CL_INVALID_ARG_INDEX ";
case CL_INVALID_ARG_VALUE :
return (char*)" CL_INVALID_ARG_VALUE ";
case CL_INVALID_ARG_SIZE :
return (char*)" CL_INVALID_ARG_SIZE ";
case CL_INVALID_KERNEL_ARGS :
return (char*)" CL_INVALID_KERNEL_ARGS ";
case CL_INVALID_WORK_DIMENSION :
return (char*)" CL_INVALID_WORK_DIMENSION ";
case CL_INVALID_WORK_GROUP_SIZE :
return (char*)" CL_INVALID_WORK_GROUP_SIZE ";
case CL_INVALID_WORK_ITEM_SIZE :
return (char*)" CL_INVALID_WORK_ITEM_SIZE ";
case CL_INVALID_GLOBAL_OFFSET :
return (char*)" CL_INVALID_GLOBAL_OFFSET ";
case CL_INVALID_EVENT_WAIT_LIST :
return (char*)" CL_INVALID_EVENT_WAIT_LIST ";
case CL_INVALID_EVENT :
return (char*)" CL_INVALID_EVENT ";
case CL_INVALID_OPERATION :
return (char*)" CL_INVALID_OPERATION ";
case CL_INVALID_GL_OBJECT :
return (char*)" CL_INVALID_GL_OBJECT ";
case CL_INVALID_BUFFER_SIZE :
return (char*)" CL_INVALID_BUFFER_SIZE ";
case CL_INVALID_MIP_LEVEL :
return (char*)" CL_INVALID_MIP_LEVEL ";
case CL_INVALID_GLOBAL_WORK_SIZE :
return (char*)" CL_INVALID_GLOBAL_WORK_SIZE ";
case CL_INVALID_PROPERTY :
return (char*)" CL_INVALID_PROPERTY ";
default:
return (char*)"UNKNOWN ERROR";
}
}
生成文件:
ifndef CC
CC = gcc
endif
CCFLAGS=-O3 -lm -g
LIBS = -lOpenCL -fopenmp
3D: 3D.c err_code.c
$(CC) $^ $(CCFLAGS) $(LIBS) -o $@
clean:
rm -f 3D
最佳答案
我的一些观察表明这些是可能的问题。
memcpy(tempCopy,tempIn, size * sizeof(float));
此处未分配 tempCopy
的内存。您需要为其分配第一个内存。
在read
函数中有几行
if((fp = fopen(file,"r"))==0) printf("Could not open file to read\n");
如果文件打开失败,您仍然可以读取文件。当fopen
失败时需要return
语句。并注意任何操作失败时的break/return。不进行进一步处理。您可以在代码中查看许多条件检查,如果失败,则只显示消息,不采取任何操作(break/return
)并进行进一步处理。首先纠正这个。
此外,在 for 循环中,您还有以下几行
fgets(str, STR_SIZE, fp);
if(feof(fp)) fatal("not enough lines\n");
这里你首先读取文件,然后检查它是否为空。这是错误的方式。您首先检查文件是否为空。如果为空则中断循环,否则读取它。喜欢
if(!feof(fp))
{
fgets(str, STR_SIZE, fp);
}
else
{
fatal("not enough lines\n");
break;
}
此外,read
和 write
都是 unix 系统调用。这会导致冲突。因此,请务必更改用户定义函数的名称。
关于c - 选择CL平台后读取文件时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25458090/
我有一个问题 SELECT DISTINCT SQL_CALC_FOUND_ROWS cl.id AS id, cl.column1 AS column1, cl.column2 AS column2
我有一个 CL 编号,我想要该更改列表后提交的所有更改列表的 CL 编号。是否有执行此操作的 perforce 命令? 最佳答案 p4 changes //... @yourchangelistnum
我正在使用安装了 quicklisp 的 clozure cl(版本 1.8-r15286m)在 Windows 7 64 位系统上工作。 我需要一些用于普通 lisp 的 freetype2 绑定(
我有示例“你好,世界!”来自网络的代码,我想在我大学服务器的 GPU 上运行它。当我输入“gcc main.c”时,它会响应: CL/cl.h: No such file or directory 我
我正在尝试在 Android Studio 中构建一个 openCL 程序,但一直遇到以下问题: Android Studio fatal error: CL/cl.h No such file or
我正在开发一个 kiosk gui,它是用 ruby/gtk 编写的,使用的是 ubuntu。我希望能够从 ruby/gtk gui 中重新启动——具体来说,我想让刷管理卡的人选择重新启动机器
我安装的一些 elisp 函数会生成警告: `flet' is an obsolete macro (as of 24.3); use either `cl-flet' or `cl-letf'. 如
我正在尝试成功执行一个来自名为 Sia Coin 的新加密货币的 make 文件。可以在这里找到Sia Coin GPU Miner 。它相对较新,因此有些东西需要更多的手动安装。我在 Ubuntu
我正在尝试在 C++ 的 Visual Studio 2015 中使用 OpenCL 在 Windows 7 上编译一个简单的“hello world”程序。尝试构建时,出现此错误: Cannot o
我正在使用 OpenCL 运行内核基准测试。我知道我可以使用 OpenCL 供应商提供的各种工具(即 ioc64 或 poclcc)离线编译内核。问题是我得到的性能结果我无法用这些工具的程序集、Ope
在 iAP88/86 文档中,移位和循环的时序信息取决于 CL 中的移位计数 (p2-64)。这似乎暗示它在 CL 中循环计数,进行那么多单位移位。 所以我的问题是,在循环/移位完成后,CL 是否仍然
所以我尝试制作这样的布局: 一种方法是使用底部应用栏 Anatomy ,但底部应用栏的问题是它只能在坐标布局中使用。但我想要一个 ListView 或说它上面的任何其他 View ,所以我使用约束布局
我正在尝试通过 Qt Creator 在我的系统上运行“Valar”基准测试应用程序,但在构建代码时出现错误: https://github.com/Frinhard/valar-bench 我输入命
为了解决这个问题,我阅读了本网站提供的所有解决方案,但它仍然存在。 当我在 windows 10 C:\pyopencl-2016.2.1>setup.py install 中的 cmd 中运行此命令
我是 SYCL/OpenCL/GPGPU 的新手。我正在尝试构建和运行常量加法程序的示例代码, #include #include #include #include namespace sy
在大量搜索此问题的解决方案后,我发现尚未针对 Windows 正确记录此特定错误。所以我决定将这个问题连同解决方案一起发布。抱歉,如果我将其发布在错误的部分。我希望这个解决方案能帮助用户解决 PyOp
我是 CMake 的新手,在这里遇到了一些障碍,想知道这个问题是否有“优雅”的解决方案,或者可能只是一个简单的解决方案。 例如,为了设置编译器标志,我正在执行以下操作: target_compile_
我们正在使用带有gmake的VC++ 2015。该编译器如何确定它是Release版本还是Debug版本? cl.exe / nologo / Zc:wchar_t / wd4675 / wd4407
我正在尝试分析C++中OpenCL内核的性能。 我目前使用std::chrono每次在保存任何内容之前保存开始时间,然后再调用cl::finish(),然后保存结束时间。 虽然大多数结果看起来都是准确
我知道一点Scheme(很久以前读过SICP),写了这个程序: (define (prl k m) (define (print-line n) (cond ((> n 0) (displ
我是一名优秀的程序员,十分优秀!