说我有一个Cchar喜欢的元组
str = ('f', 'o', 'o', '\0', '\0')
Run Code Online (Sandbox Code Playgroud)
我想将其转换为更传统的字符串。如果str是Vector,我可以Ptr用它来创造和做各种各样的事情。我尝试了各种方法来传递str给、、 和 的方法pointer,但都没有成功,因为这些方法通常适用于数组而不是元组。有什么建议?PtrRefunsafe_string
注意:我真正拥有的是一个 C 结构,它看起来像
typedef struct foo {
char str[FOO_STR_MAX_SZ];
...
} foo_t;
Run Code Online (Sandbox Code Playgroud)
其中 Clang.jl 包装为
struct foo_t
str :: NTuple{FOO_STR_MAX_SZ, UInt8}
...
end
Run Code Online (Sandbox Code Playgroud)
我也玩过NTupleof Cchar(ie, Int8) 而不是UInt8,我也尝试使用SVector而不是NTuple。但是我仍然找不到Ptr从该str领域生成 a 的方法。我错过了什么吗?
在我的内核中,我需要一组累加器。
__kernel myKernel(...)
{
float accum[SIZE] = {};
for(i=0; i<ITER; ++i) {
accum[...] += ...
}
...
}
Run Code Online (Sandbox Code Playgroud)
在 C 中,= {}会为我初始化数组以填充 0,但我不确定 OpenCL 中是否是这种情况?我需要像下面这样的东西,还是浪费周期?
float accum[SIZE];
for(int i=0; i<SIZE; ++i) accum[i] = 0;
Run Code Online (Sandbox Code Playgroud) 是否有可能在Julia中使用列表理解来构建复杂的表达式?
例如,假设我有一些符号和类型,并希望从中构建一个类型.现在,我必须做点什么.
syms = [:a, :b, :c]
typs = [Int, Float32, Char]
new_type = :(type Foo end)
new_type.args[3].args = [:($sym::$typ) for (sym,typ) in zip(syms,typs)]
Run Code Online (Sandbox Code Playgroud)
这适用于new_type包含的表达式
:(type Foo
a::Int64
b::Float32
c::Char
end)
Run Code Online (Sandbox Code Playgroud)
但是构建像这样的复杂表达式都非常容易出错(因为你对Expr数据类型非常了解,以便知道,例如必须存储元组的数据类型的表达式new_type.args[3].args),并且在那里也非常脆弱.对正在构建的表达式的AST的任何更改都意味着必须更改每个子表达式的存储位置.
有没有办法做类似的事情
:(type Foo
$(sym::typ for (sym,typ) in zip(syms,typs))
end)
Run Code Online (Sandbox Code Playgroud)
并最终得到与上面相同的表达?
我正在尝试在资源较少的嵌入式 GPU 上运行一些为桌面显卡编写的 OpenCL 内核。特别是,桌面版本假设始终支持至少 256 的工作组大小,但基于 Mali T628 ARM 的 GPU 仅保证 64+ 的工作组大小。
事实上,一些内核报告CL_KERNEL_WORK_GROUP_SIZE只有 64,我不知道为什么。我检查了CL_KERNEL_LOCAL_MEM_SIZE有问题的内核,它是 <2 KiB,而CL_DEVICE_LOCAL_MEM_SIZE32 KiB,所以我想我可以排除__local存储。
还有哪些其他因素(例如,寄存器/__private内存?)导致 low CL_KERNEL_WORK_GROUP_SIZE,我如何检查使用情况?我对程序化内省(例如clGetKernelWorkGroupInfo()我已经做过一些)以及我可能不知道的任何开发工具都持开放态度。
编辑:
内核是 OpenCV 的 OpenCL v2.4 模块的一部分。特别是,内核icvCalcOrientation在surf.cl. 代码相当复杂,并且设置了多个编译时参数,这就是为什么手动分析内核以查找问题而不提示要查看的内容有点不可行的原因。
如果有办法在 NVidia 或 AMD 硬件(我可以访问)上解决此问题,我愿意接受。
我是一名c ++初学者,我很好奇为什么这不起作用:
#include <iostream>
using namespace std;
int main ()
{
int firstname;
int lastname;
cout << "My name is " << firstname << lastname;
cin >> firstname >> lastname;
cout << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望输出只是用户输入他们的名字和姓氏的地方,结果如下:
示例:我的名字是John Doe.