我最近了解到匿名函数可以携带大量未使用的数据,即使这些数据是在实例化匿名函数之后创建的.以下示例与FUNCTIONS命令一起说明了这一点,
function fun=test %place in an mfile
a=1;
b=2;
c=3;
fun=@(x)x+b+a;
a=7;
b=rand(1000);
c=5;
q=3;
r=4;
end
Run Code Online (Sandbox Code Playgroud)
现在,回到基础工作区,当我将functions()命令应用于'fun'时,我明白了
>> fun=test; s=functions(fun); s.workspace{:}
ans =
b: 2
a: 1
ans =
fun: @(x)x+b+a
a: 1
b: [1000x1000 double]
c: 3
Run Code Online (Sandbox Code Playgroud)
我想了解(如果可能的话,还有官方文档)匿名函数用来决定携带哪些数据的规则.以上似乎表明s.workspace{1}
将始终包含匿名函数实际使用的外部变量及其值.同时,s.workspace{2}
似乎包含了在 fun
定义之前进入范围的变量的更新.我是否正确这些是规则?但是,如果是这样,那么为什么,在上面,确实s.workspace{2}
包含对b的更新,但不包含对a和c的更新?
这些事情看起来很重要,因为很明显,我最终会携带大量无意识的内存,这些内存是在创建匿名函数后分配的.
有很多关于 CUDA 线程和块如何映射到 GPU 硬件的帖子,但我找不到这个问题的明确答案。如果有的话,跨内核分区经线的规则是什么?
我知道包含一定数量内核的多处理器每个都会接收一个或多个线程块进行处理。这些块被分成warp(每个32个线程),然后部署到不同的核心,但是warp映射到核心的规则是什么?每个核心总是一个扭曲,还是其他什么?一个核心可以处理几个经线吗?经线的分数?
我正在尝试使用 CUDA 工具包版本 5.0 和 Visual Studio 2010 Professional 编译器从命令行编译 CUDA 代码。针对以下问题,
nvcc -c AddVectors.cu -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin"
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息
nvcc : fatal error : Visual Studio configuration file '(null)' could not be found for installation at 'C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/bin/../..'
Run Code Online (Sandbox Code Playgroud)
当我在 VS 2010 IDE 中重建时,我也会收到此错误消息,但当我只是简单构建时,不会收到此错误消息。
我绝不是 Visual Studio 专家,但对我来说,对错误消息感到好奇的是,nvcc 似乎退出了我指定的编译器目录,并从那里向上搜索 VC/bin/../.. 为什么它这样做这?为什么除了 VC/bin/ 中的编译器可执行文件之外还需要其他任何东西?“Visual Studio 配置文件”在这一切中的作用是什么?
最后但并非最不重要的一点是,我该如何解决这个问题?
编辑:我的环境和搜索路径是
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\mjacobson\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=WAA04087-RD
ComSpec=C:\Windows\system32\cmd.exe
CUDA_BIN_PATH=C:\Program Files\NVIDIA …
Run Code Online (Sandbox Code Playgroud)