小编Vis*_*ngh的帖子

在C编程中,如果表达式中的任何变量为nan,则计算会更慢

这完全是一个假设的问题.

在下面的代码中,我正在执行计算,它将一个变量z作为指定为"nan"的值.与正常z值相比,主要计算会更慢(如z = 1.0)

float z = 0.0/0.0; // that means z is "nan"
float p = 50.0, q = 100.0, r = 150.0;
// main calculation Type 1
float c = ((x*100)+(y*100))/(x*100)+(y*100)+152*(p+q/r)+z;
Run Code Online (Sandbox Code Playgroud)

以下是显示具有正常z值的主要计算的示例

float z = 1.0; // normal value for z
float p = 50.0, q = 100.0, r = 150.0;
// main calculation Type 2
float c = ((x*100)+(y*100))/(x*100)+(y*100)+152*(p+q/r)+z;
Run Code Online (Sandbox Code Playgroud)

因此,哪一个较慢,类型1还是类型2?或者没有时差?在单次计算中,时间差可能不可见,但是,如果我们收集数百万个这样的方程,时间结果会如何变化?

任何形式的思想,逻辑或信息都将受到赞赏.

注意:目前我并不关心变量'c'的结果值;

c nan

5
推荐指数
1
解决办法
310
查看次数

如何在opencl中创建脱机编译并创建其二进制文件?

在OpenCl的在线编译中,我们必须...

program = clCreateProgramWithSource(context, 1, (const char **)&source_str, (const size_t *)&source_size, &ret);
Run Code Online (Sandbox Code Playgroud)

但是,对于离线创建opencl的程序。

program = clCreateProgramWithBinary(context, 1, &device_id, (const size_t *)&binary_size, (const unsigned char **)&binary_buf, &binary_status, &ret);
Run Code Online (Sandbox Code Playgroud)

其中binary_buf是...

fread(binary_buf, 1, MAX_BINARY_SIZE, fp);
Run Code Online (Sandbox Code Playgroud)

因此,在脱机编译中,我们可以跳过clBuildProgram步骤,从而使此步骤更快。(这种方法正确吗,我们可以一次又一次地重复使用该二进制文件来运行程序?)

所以,我的问题是如何创建opencl二进制文件,以便我可以跳过构建cl程序的步骤?

opencl

3
推荐指数
1
解决办法
1321
查看次数

重载函数中数据类型的优先级如何?

我有3个函数重载.重载函数中数据类型的优先级如何?

#include <iostream>

using namespace std;

void myfunc (int i) {
    cout << "int" << endl;
}

void myfunc (double i) {
    cout << "double" << endl;
}

void myfunc (float i) {
    cout << "float" << endl;
}

int main () {
    myfunc(1);
    float x = 1.0;
    myfunc(x);
    myfunc(1.0);
    myfunc(15.0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

int
float
double
double
Run Code Online (Sandbox Code Playgroud)

程序如何决定调用float还是double?

c++

3
推荐指数
1
解决办法
309
查看次数

函数返回局部变量后内存空间的行为如何?

void local () {
    int x = 100;

    double *loc;
    loc = (double *) malloc(sizeof(double)*100);
    memset(rxnrun, 0x0, sizeof(double)*100);

    // perform some operations


    // free(loc);
    return; // without doing free for loc variable
}
Run Code Online (Sandbox Code Playgroud)

在这里,我可以看到有什么问题,因为内存泄漏是loc变量.但是,变量x怎么样?如果我们在函数返回后保留变量x以及loc变量无人值守(非自由),那么两个变量获取的内存空间会发生什么?

他们(两个变量)还会获得空间吗?

c memory-leaks

2
推荐指数
1
解决办法
721
查看次数

如何优化我的OpenCl内核

我已经分离出一些彼此不同的函数,但需要在不同的工作项中并行运行.因此,当调用内核时,需要决定必须执行哪个函数.

void call_calc0() {
    // code
}

void call_calc1() {
    // code
}

void call_calc2() {
    // code
}

void call_calc3() {
    // code 
}

__kernel void perform (__global double* A, __global double* B) {
    int idx = get_global_id(0);
    if (idx == 0) {
        call_calc0();
    } else if (idx == 1) {
        call_calc1();
    } else if (idx == 2) {
        call_calc2();
    } else if (idx == 3) {
        call_calc3();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有256/512个工作项,则此代码示例将不是正确的方法.我该如何优化呢?

opencl

1
推荐指数
1
解决办法
4062
查看次数

从指针指向内存的二进制文件读取结构

struct st {
        char *p;
        int len;
};
Run Code Online (Sandbox Code Playgroud)

这是我需要写入二进制文件的结构,以及保存在中的字符串

char *p

我应该用字符数组数据编写一个二进制文件。写入二进制文件后。还应该能够从二进制文件中以相同的结构读取它。

我尝试使用 FSEEK_END 获取二进制大小,并根据文件大小执行 fread,但它没有保存字符串。请建议。任何帮助/建议/指示将不胜感激。

提前致谢。

示例代码:

 struct st {
         char *p;
         int len; 
 };

 struct st varr;
 varr.len = 100;
 varr.p = new char[gen];
 strcpy(varr.p, "Hello World");

 FILE *p;
 p=fopen("address","wb");
 fwrite(&varr,sizeof(struct st),1,p);
 fclose(p); 
Run Code Online (Sandbox Code Playgroud)

这将向我写入指向二进制文件的指针。但我想在这里写整个字符串,但重点是,它应该用一个 fwrite 完成。

c c++ pointers structure fread

1
推荐指数
1
解决办法
1806
查看次数

Expr表示TCL中的浮点值

计算浮动值

tclsh
% expr 0.2+0.2
0.4
% expr 0.2+0.1
0.30000000000000004
%
Run Code Online (Sandbox Code Playgroud)

为什么不0.3?

我错过了一些东西.提前致谢.

tcl

0
推荐指数
1
解决办法
4513
查看次数

expr给出意想不到的结果

expr为4个字符(t,n,f,y)提供意外结果.如果你正在做进一步的计算.然后代码就破了.我不明白为什么会这样?

% expr (F)
F

% expr (F)*1
can't use non-numeric string as operand of "*"
Run Code Online (Sandbox Code Playgroud)

和,

% expr (t)
t
% expr (n)
n
% expr (f)
f
% expr (y)
y
Run Code Online (Sandbox Code Playgroud)

这是charcters的文件:t,n,f,y.没有这些字符命名的变量.它应标记未找到的变量或其他一些有效错误.我错过了什么吗?

tcl

0
推荐指数
1
解决办法
98
查看次数

在OpenCl中并行调用内核?

以下代码是否并行调用所有4个内核,所有4个事件都将等待它们完成?

    event1 = event2 = event3 = event4 = 0;
    printf("sending enqueue task..\n");
    clEnqueueTask(command_queue, calculate1, 0, NULL, &event1);
    clEnqueueTask(command_queue, calculate2, 0, NULL, &event2);
    clEnqueueTask(command_queue, calculate3, 0, NULL, &event3);
    clEnqueueTask(command_queue, calculate4, 0, NULL, &event4);
    printf("waiting after enquing task..\n");
    clWaitForEvents(1, &event1);
    clWaitForEvents(1, &event2);
    clWaitForEvents(1, &event3);
    clWaitForEvents(1, &event4);
Run Code Online (Sandbox Code Playgroud)

或者,它是执行调用所有内核并行的任务的正确方法吗?它甚至可能吗?我需要查看哪些设备信息才能确认相同内容?

opencl

0
推荐指数
1
解决办法
559
查看次数

标签 统计

c ×3

opencl ×3

c++ ×2

tcl ×2

fread ×1

memory-leaks ×1

nan ×1

pointers ×1

structure ×1